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);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to