[Bf-blender-cvs] [fef1b015530] blender2.8: Fix wglShareLists being called with rendering contexts in use

Germano noreply at git.blender.org
Wed Mar 7 23:42:25 CET 2018


Commit: fef1b0155309ea50674ef6726061e42547b6a608
Author: Germano
Date:   Wed Mar 7 19:40:08 2018 -0300
Branches: blender2.8
https://developer.blender.org/rBfef1b0155309ea50674ef6726061e42547b6a608

Fix wglShareLists being called with rendering contexts in use

`wglShareLists` was failing with error code 170 ("The requested resource is in use").

===================================================================

M	source/blender/draw/intern/draw_manager_shader.c

===================================================================

diff --git a/source/blender/draw/intern/draw_manager_shader.c b/source/blender/draw/intern/draw_manager_shader.c
index 5ab373ee484..c898021ebd7 100644
--- a/source/blender/draw/intern/draw_manager_shader.c
+++ b/source/blender/draw/intern/draw_manager_shader.c
@@ -71,6 +71,8 @@ typedef struct DRWShaderCompiler {
 	DRWDeferredShader *mat_compiling;
 	ThreadMutex compilation_lock;
 
+	void *ogl_context;
+
 	int shaders_done; /* To compute progress. */
 } DRWShaderCompiler;
 
@@ -97,9 +99,7 @@ static void drw_deferred_shader_compilation_exec(void *custom_data, short *stop,
 {
 	DRWShaderCompiler *comp = (DRWShaderCompiler *)custom_data;
 
-	/* Create one context per task. */
-	void *ogl_context = WM_opengl_context_create();
-	WM_opengl_context_activate(ogl_context);
+	WM_opengl_context_activate(comp->ogl_context);
 
 	while (true) {
 		BLI_spin_lock(&comp->list_lock);
@@ -142,8 +142,7 @@ static void drw_deferred_shader_compilation_exec(void *custom_data, short *stop,
 		drw_deferred_shader_free(comp->mat_compiling);
 	}
 
-	WM_opengl_context_release(ogl_context);
-	WM_opengl_context_dispose(ogl_context);
+	WM_opengl_context_release(comp->ogl_context);
 }
 
 static void drw_deferred_shader_compilation_free(void *custom_data)
@@ -155,6 +154,8 @@ static void drw_deferred_shader_compilation_free(void *custom_data)
 	BLI_spin_end(&comp->list_lock);
 	BLI_mutex_end(&comp->compilation_lock);
 
+	WM_opengl_context_dispose(comp->ogl_context);
+
 	MEM_freeN(comp);
 }
 
@@ -198,6 +199,11 @@ static void drw_deferred_shader_add(
 
 	BLI_addtail(&comp->queue, dsh);
 
+	/* Create one context per task. */
+	BLI_assert(BLI_thread_is_main());
+	comp->ogl_context = WM_opengl_context_create();
+	WM_opengl_context_activate(DST.ogl_context);
+
 	WM_jobs_customdata_set(wm_job, comp, drw_deferred_shader_compilation_free);
 	WM_jobs_timer(wm_job, 0.1, NC_MATERIAL | ND_SHADING_DRAW, 0);
 	WM_jobs_callbacks(wm_job, drw_deferred_shader_compilation_exec, NULL, NULL, NULL);



More information about the Bf-blender-cvs mailing list