diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_lightcache.c | 11 | ||||
-rw-r--r-- | source/blender/draw/intern/DRW_render.h | 1 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager.c | 7 |
3 files changed, 19 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_lightcache.c b/source/blender/draw/engines/eevee/eevee_lightcache.c index ee962898a79..5ac2257e01a 100644 --- a/source/blender/draw/engines/eevee/eevee_lightcache.c +++ b/source/blender/draw/engines/eevee/eevee_lightcache.c @@ -636,6 +636,7 @@ static void eevee_lightbake_delete_resources(EEVEE_LightBake *lbake) /* Cache as in draw cache not light cache. */ static void eevee_lightbake_cache_create(EEVEE_Data *vedata, EEVEE_LightBake *lbake) { + EEVEE_TextureList *txl = vedata->txl; EEVEE_StorageList *stl = vedata->stl; EEVEE_FramebufferList *fbl = vedata->fbl; EEVEE_ViewLayerData *sldata = EEVEE_view_layer_data_ensure(); @@ -660,6 +661,14 @@ static void eevee_lightbake_cache_create(EEVEE_Data *vedata, EEVEE_LightBake *lb sldata->clip_ubo = DRW_uniformbuffer_create(sizeof(sldata->clip_data), &sldata->clip_data); } + /* HACK: set txl->color but unset it before Draw Manager frees it. */ + txl->color = lbake->rt_color; + int viewport_size[2] = { + GPU_texture_width(txl->color), + GPU_texture_height(txl->color) + }; + DRW_render_viewport_size_set(viewport_size); + EEVEE_effects_init(sldata, vedata, NULL); EEVEE_materials_init(sldata, stl, fbl); EEVEE_lights_init(sldata); @@ -685,6 +694,8 @@ static void eevee_lightbake_cache_create(EEVEE_Data *vedata, EEVEE_LightBake *lb EEVEE_lights_cache_finish(sldata); EEVEE_lightprobes_cache_finish(sldata, vedata); + txl->color = NULL; + DRW_render_instance_buffer_finish(); DRW_hair_update(); } diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index eedac5e43c2..2e0de3b903b 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -482,6 +482,7 @@ void DRW_render_object_iter( void *vedata, struct RenderEngine *engine, struct Depsgraph *depsgraph, void (*callback)(void *vedata, struct Object *ob, struct RenderEngine *engine, struct Depsgraph *depsgraph)); void DRW_render_instance_buffer_finish(void); +void DRW_render_viewport_size_set(int size[2]); void DRW_custom_pipeline( DrawEngineType *draw_engine_type, diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c index b5729d2ef55..221702b0912 100644 --- a/source/blender/draw/intern/draw_manager.c +++ b/source/blender/draw/intern/draw_manager.c @@ -423,6 +423,13 @@ void DRW_engine_viewport_data_size_get( } } +/* WARNING: only use for custom pipeline. 99% of the time, you don't want to use this. */ +void DRW_render_viewport_size_set(int size[2]) +{ + DST.size[0] = size[0]; + DST.size[1] = size[1]; +} + const float *DRW_viewport_size_get(void) { return DST.size; |