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:
authorThomas Beck <software@plasmasolutions.de>2016-09-17 01:21:34 +0300
committerThomas Beck <software@plasmasolutions.de>2016-09-17 01:21:34 +0300
commitcade262c472374dc397311dabd900c8763598c70 (patch)
tree6a99133d5030318e1a097349f91055c0d3956b0b /source/blender/editors/render/render_opengl.c
parentc9c933ac812e0f8b780f1876f36a440af195327b (diff)
OpenGL render: Bugfix (unreported) after rB6f92604e539b2114763150fb1ace60d28e59a889
Crashes occured immediately when clicking on "OpenGL render image" because there was only a task pool created previously when it was an animation. Solved it by introducing a variable is_animation to the openglrender and omitting the task_pool call when it's no animation. @sergey: Please check my changes, moved the pool_ok and the lock into the is_animation clause.
Diffstat (limited to 'source/blender/editors/render/render_opengl.c')
-rw-r--r--source/blender/editors/render/render_opengl.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c
index ee2772ce31a..a154791f8f7 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -133,6 +133,7 @@ typedef struct OGLRender {
TaskPool *task_pool;
bool pool_ok;
+ bool is_animation;
SpinLock reports_lock;
#ifdef DEBUG_TIME
@@ -636,6 +637,7 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op)
oglrender->cfrao = scene->r.cfra;
oglrender->write_still = is_write_still && !is_animation;
+ oglrender->is_animation = is_animation;
oglrender->views_len = BKE_scene_multiview_num_views_get(&scene->r);
@@ -701,12 +703,12 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op)
oglrender->task_pool = BLI_task_pool_create(task_scheduler,
oglrender);
}
+ oglrender->pool_ok = true;
+ BLI_spin_init(&oglrender->reports_lock);
}
else {
oglrender->task_pool = NULL;
}
- oglrender->pool_ok = true;
- BLI_spin_init(&oglrender->reports_lock);
#ifdef DEBUG_TIME
oglrender->time_start = PIL_check_seconds_timer();
@@ -721,9 +723,11 @@ static void screen_opengl_render_end(bContext *C, OGLRender *oglrender)
Scene *scene = oglrender->scene;
int i;
- BLI_task_pool_work_and_wait(oglrender->task_pool);
- BLI_task_pool_free(oglrender->task_pool);
- BLI_spin_end(&oglrender->reports_lock);
+ if (oglrender->is_animation) {
+ BLI_task_pool_work_and_wait(oglrender->task_pool);
+ BLI_task_pool_free(oglrender->task_pool);
+ BLI_spin_end(&oglrender->reports_lock);
+ }
#ifdef DEBUG_TIME
printf("Total render time: %f\n", PIL_check_seconds_timer() - oglrender->time_start);