diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-01-17 12:35:06 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-01-17 12:39:42 +0300 |
commit | 10ce5af2ddf2b06865dcf317fce264be615509e8 (patch) | |
tree | 8dabbb3afaa4bf2908b131325282dee4c481f24a /source/blender/draw/engines/eevee/eevee_volumes.c | |
parent | 2094bbd033f330dad062cc641a4fa440b6e391a0 (diff) |
Revert "Fix use-after free in DRW_shader_create_with_lib"
Caused an error entering edit-mode.
d60f26f37a & 2659500835
Diffstat (limited to 'source/blender/draw/engines/eevee/eevee_volumes.c')
-rw-r--r-- | source/blender/draw/engines/eevee/eevee_volumes.c | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/source/blender/draw/engines/eevee/eevee_volumes.c b/source/blender/draw/engines/eevee/eevee_volumes.c index db5ee19172e..dae4503dc32 100644 --- a/source/blender/draw/engines/eevee/eevee_volumes.c +++ b/source/blender/draw/engines/eevee/eevee_volumes.c @@ -77,44 +77,46 @@ extern char datatoc_gpu_shader_fullscreen_vert_glsl[]; static void eevee_create_shader_volumes(void) { - DRW_shader_create_lib(e_data.volumetric_common_lib, - datatoc_bsdf_common_lib_glsl, - datatoc_volumetric_lib_glsl); - - DRW_shader_create_lib(e_data.volumetric_common_lamps_lib, - datatoc_bsdf_common_lib_glsl, - datatoc_bsdf_direct_lib_glsl, - datatoc_octahedron_lib_glsl, - datatoc_irradiance_lib_glsl, - datatoc_lamps_lib_glsl, - datatoc_volumetric_lib_glsl); + DynStr *ds_frag = BLI_dynstr_new(); + BLI_dynstr_append(ds_frag, datatoc_bsdf_common_lib_glsl); + BLI_dynstr_append(ds_frag, datatoc_volumetric_lib_glsl); + e_data.volumetric_common_lib = BLI_dynstr_get_cstring(ds_frag); + BLI_dynstr_free(ds_frag); + + ds_frag = BLI_dynstr_new(); + BLI_dynstr_append(ds_frag, datatoc_bsdf_common_lib_glsl); + BLI_dynstr_append(ds_frag, datatoc_bsdf_direct_lib_glsl); + BLI_dynstr_append(ds_frag, datatoc_octahedron_lib_glsl); + BLI_dynstr_append(ds_frag, datatoc_irradiance_lib_glsl); + BLI_dynstr_append(ds_frag, datatoc_lamps_lib_glsl); + BLI_dynstr_append(ds_frag, datatoc_volumetric_lib_glsl); + e_data.volumetric_common_lamps_lib = BLI_dynstr_get_cstring(ds_frag); + BLI_dynstr_free(ds_frag); e_data.volumetric_clear_sh = DRW_shader_create_with_lib( datatoc_volumetric_vert_glsl, datatoc_volumetric_geom_glsl, datatoc_volumetric_frag_glsl, + e_data.volumetric_common_lib, "#define VOLUMETRICS\n" - "#define CLEAR\n", - e_data.volumetric_common_lib); + "#define CLEAR\n"); e_data.volumetric_scatter_sh = DRW_shader_create_with_lib( datatoc_volumetric_vert_glsl, datatoc_volumetric_geom_glsl, datatoc_volumetric_scatter_frag_glsl, + e_data.volumetric_common_lamps_lib, SHADER_DEFINES "#define VOLUMETRICS\n" - "#define VOLUME_SHADOW\n", - e_data.volumetric_common_lamps_lib); + "#define VOLUME_SHADOW\n"); e_data.volumetric_integration_sh = DRW_shader_create_with_lib( datatoc_volumetric_vert_glsl, datatoc_volumetric_geom_glsl, datatoc_volumetric_integration_frag_glsl, - NULL, - e_data.volumetric_common_lib); + e_data.volumetric_common_lib, NULL); e_data.volumetric_resolve_sh = DRW_shader_create_with_lib( datatoc_gpu_shader_fullscreen_vert_glsl, NULL, datatoc_volumetric_resolve_frag_glsl, - NULL, - e_data.volumetric_common_lib); + e_data.volumetric_common_lib, NULL); } int EEVEE_volumes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) |