diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-06-03 01:53:47 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-06-03 01:54:01 +0300 |
commit | 2851e91db41c45806ca3ed87c8363c44b2d60521 (patch) | |
tree | fb4dfa6b5415a89a04f9a943f429ac840b84e568 /source/blender/draw/engines/eevee/eevee_data.c | |
parent | 433bb91a378fb1053b345f37eac958ff682fbdb7 (diff) |
Eevee: Cleanup. Group data functions into one file.
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_data.c')
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_data.c | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_data.c b/source/blender/draw/engines/eevee/eevee_data.c new file mode 100644 index 00000000000..66cb82ae277 --- /dev/null +++ b/source/blender/draw/engines/eevee/eevee_data.c @@ -0,0 +1,105 @@ +/* + * Copyright 2016, Blender Foundation. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): Blender Institute + * + */ + +/* All specific data handler for Objects, Lights, SceneLayers, ... + */ + +/** \file eevee_data.c + * \ingroup draw_engine + */ + +#include "DRW_render.h" + +#include "eevee_private.h" + +static void eevee_scene_layer_data_free(void *storage) +{ + EEVEE_SceneLayerData *sldata = (EEVEE_SceneLayerData *)storage; + + /* Lights */ + MEM_SAFE_FREE(sldata->lamps); + DRW_UBO_FREE_SAFE(sldata->light_ubo); + DRW_UBO_FREE_SAFE(sldata->shadow_ubo); + DRW_UBO_FREE_SAFE(sldata->shadow_render_ubo); + DRW_FRAMEBUFFER_FREE_SAFE(sldata->shadow_cube_target_fb); + DRW_FRAMEBUFFER_FREE_SAFE(sldata->shadow_cube_fb); + DRW_FRAMEBUFFER_FREE_SAFE(sldata->shadow_map_fb); + DRW_FRAMEBUFFER_FREE_SAFE(sldata->shadow_cascade_fb); + DRW_TEXTURE_FREE_SAFE(sldata->shadow_depth_cube_target); + DRW_TEXTURE_FREE_SAFE(sldata->shadow_color_cube_target); + DRW_TEXTURE_FREE_SAFE(sldata->shadow_depth_cube_pool); + DRW_TEXTURE_FREE_SAFE(sldata->shadow_depth_map_pool); + DRW_TEXTURE_FREE_SAFE(sldata->shadow_depth_cascade_pool); + BLI_freelistN(&sldata->shadow_casters); + + /* Probes */ + MEM_SAFE_FREE(sldata->probes); + DRW_UBO_FREE_SAFE(sldata->probe_ubo); + DRW_FRAMEBUFFER_FREE_SAFE(sldata->probe_fb); + DRW_FRAMEBUFFER_FREE_SAFE(sldata->probe_filter_fb); + DRW_FRAMEBUFFER_FREE_SAFE(sldata->probe_sh_fb); + DRW_TEXTURE_FREE_SAFE(sldata->probe_rt); + DRW_TEXTURE_FREE_SAFE(sldata->probe_depth_rt); + DRW_TEXTURE_FREE_SAFE(sldata->probe_pool); + DRW_TEXTURE_FREE_SAFE(sldata->probe_sh); +} + +static void eevee_lamp_data_free(void *storage) +{ + EEVEE_LampEngineData *led = (EEVEE_LampEngineData *)storage; + + MEM_SAFE_FREE(led->storage); + BLI_freelistN(&led->shadow_caster_list); +} + +EEVEE_SceneLayerData *EEVEE_scene_layer_data_get(void) +{ + EEVEE_SceneLayerData **sldata = (EEVEE_SceneLayerData **)DRW_scene_layer_engine_data_get(&draw_engine_eevee_type, &eevee_scene_layer_data_free); + + if (*sldata == NULL) { + *sldata = MEM_callocN(sizeof(**sldata), "EEVEE_SceneLayerData"); + } + + return *sldata; +} + +EEVEE_ObjectEngineData *EEVEE_object_data_get(Object *ob) +{ + EEVEE_ObjectEngineData **oedata = (EEVEE_ObjectEngineData **)DRW_object_engine_data_get(ob, &draw_engine_eevee_type, NULL); + + if (*oedata == NULL) { + *oedata = MEM_callocN(sizeof(**oedata), "EEVEE_ObjectEngineData"); + } + + return *oedata; +} + +EEVEE_LampEngineData *EEVEE_lamp_data_get(Object *ob) +{ + EEVEE_LampEngineData **ledata = (EEVEE_LampEngineData **)DRW_object_engine_data_get(ob, &draw_engine_eevee_type, &eevee_lamp_data_free); + + if (*ledata == NULL) { + *ledata = MEM_callocN(sizeof(**ledata), "EEVEE_LampEngineData"); + (*ledata)->need_update = true; + } + + return *ledata; +} |