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:
authorClément Foucault <foucault.clem@gmail.com>2019-03-27 22:47:15 +0300
committerClément Foucault <foucault.clem@gmail.com>2019-03-27 22:47:15 +0300
commitf9a69a481e4719906f9c17bdfc1085bd07bc69ce (patch)
tree102182d4f1c3a673d50bde346bf63e7a5bc8f380 /source/blender/draw
parentafaa832a85fb5e85d21e31e8923e1c67b2bdc49e (diff)
Fix T62566 Eevee: Cubemap doesn't bake from current frame of animation
This was technically a feature request but it was quite simple to implement so I did it quickly. Also it is much more consistent now.
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/engines/eevee/eevee_lightcache.c12
-rw-r--r--source/blender/draw/engines/eevee/eevee_lightcache.h5
2 files changed, 10 insertions, 7 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_lightcache.c b/source/blender/draw/engines/eevee/eevee_lightcache.c
index cf2d27e4cc9..d5c322356d8 100644
--- a/source/blender/draw/engines/eevee/eevee_lightcache.c
+++ b/source/blender/draw/engines/eevee/eevee_lightcache.c
@@ -137,6 +137,7 @@ typedef struct EEVEE_LightBake {
bool own_resources;
bool own_light_cache; /* If the lightcache was created for baking, it's first owned by the baker. */
int delay; /* ms. delay the start of the baking to not slowdown interactions (TODO remove) */
+ int frame; /* Scene frame to bake. */
void *gl_context, *gpu_context; /* If running in parallel (in a separate thread), use this context. */
@@ -499,7 +500,7 @@ static void eevee_lightbake_create_resources(EEVEE_LightBake *lbake)
wmJob *EEVEE_lightbake_job_create(
struct wmWindowManager *wm, struct wmWindow *win, struct Main *bmain,
- struct ViewLayer *view_layer, struct Scene *scene, int delay)
+ struct ViewLayer *view_layer, struct Scene *scene, int delay, int frame)
{
EEVEE_LightBake *lbake = NULL;
@@ -532,6 +533,7 @@ wmJob *EEVEE_lightbake_job_create(
lbake->gl_context = old_lbake->gl_context;
lbake->own_resources = true;
lbake->delay = delay;
+ lbake->frame = frame;
if (lbake->gl_context == NULL) {
lbake->gl_context = WM_opengl_context_create();
@@ -544,7 +546,7 @@ wmJob *EEVEE_lightbake_job_create(
BLI_mutex_unlock(old_lbake->mutex);
}
else {
- lbake = EEVEE_lightbake_job_data_alloc(bmain, view_layer, scene, true);
+ lbake = EEVEE_lightbake_job_data_alloc(bmain, view_layer, scene, true, frame);
lbake->delay = delay;
}
@@ -559,7 +561,7 @@ wmJob *EEVEE_lightbake_job_create(
/* MUST run on the main thread. */
void *EEVEE_lightbake_job_data_alloc(
- struct Main *bmain, struct ViewLayer *view_layer, struct Scene *scene, bool run_as_job)
+ struct Main *bmain, struct ViewLayer *view_layer, struct Scene *scene, bool run_as_job, int frame)
{
BLI_assert(BLI_thread_is_main());
@@ -572,6 +574,7 @@ void *EEVEE_lightbake_job_data_alloc(
lbake->own_resources = true;
lbake->own_light_cache = false;
lbake->mutex = BLI_mutex_alloc();
+ lbake->frame = frame;
if (run_as_job) {
lbake->gl_context = WM_opengl_context_create();
@@ -1077,10 +1080,9 @@ void EEVEE_lightbake_job(void *custom_data, short *stop, short *do_update, float
{
EEVEE_LightBake *lbake = (EEVEE_LightBake *)custom_data;
Depsgraph *depsgraph = lbake->depsgraph;
- int frame = 0; /* TODO make it user param. */
DEG_graph_relations_update(depsgraph, lbake->bmain, lbake->scene, lbake->view_layer_input);
- DEG_evaluate_on_framechange(lbake->bmain, depsgraph, frame);
+ DEG_evaluate_on_framechange(lbake->bmain, depsgraph, lbake->frame);
lbake->view_layer = DEG_get_evaluated_view_layer(depsgraph);
lbake->stop = stop;
diff --git a/source/blender/draw/engines/eevee/eevee_lightcache.h b/source/blender/draw/engines/eevee/eevee_lightcache.h
index 7d2f163055f..03199632031 100644
--- a/source/blender/draw/engines/eevee/eevee_lightcache.h
+++ b/source/blender/draw/engines/eevee/eevee_lightcache.h
@@ -36,8 +36,9 @@ struct ViewLayer;
/* Light Bake */
struct wmJob *EEVEE_lightbake_job_create(
struct wmWindowManager *wm, struct wmWindow *win, struct Main *bmain,
- struct ViewLayer *view_layer, struct Scene *scene, int delay);
-void *EEVEE_lightbake_job_data_alloc(struct Main *bmain, struct ViewLayer *viewlayer, struct Scene *scene, bool run_as_job);
+ struct ViewLayer *view_layer, struct Scene *scene, int delay, int frame);
+void *EEVEE_lightbake_job_data_alloc(
+ struct Main *bmain, struct ViewLayer *viewlayer, struct Scene *scene, bool run_as_job, int frame);
void EEVEE_lightbake_job_data_free(void *custom_data);
void EEVEE_lightbake_update(void *custom_data);
void EEVEE_lightbake_job(void *custom_data, short *stop, short *do_update, float *progress);