Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGermano <germano.costa@ig.com.br>2018-03-08 01:40:08 +0300
committerGermano <germano.costa@ig.com.br>2018-03-08 01:40:08 +0300
commitfef1b0155309ea50674ef6726061e42547b6a608 (patch)
tree68691589f65729c822f10157f6e797b0ee02d9bf /source/blender/draw/intern
parent8851460174a5603a0e51e856b00dfa212b0162b2 (diff)
Fix wglShareLists being called with rendering contexts in use
`wglShareLists` was failing with error code 170 ("The requested resource is in use").
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r--source/blender/draw/intern/draw_manager_shader.c16
1 files changed, 11 insertions, 5 deletions
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);