Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/workbench/workbench_shader.c
| Context not available. | |||||
| struct GPUShader *shadow_depth_pass_sh[2]; | struct GPUShader *shadow_depth_pass_sh[2]; | ||||
| struct GPUShader *shadow_depth_fail_sh[2][2]; | struct GPUShader *shadow_depth_fail_sh[2][2]; | ||||
| struct GPUShader *cavity_sh[2][2]; | struct GPUShader *cavity_sh[2][2][2]; | ||||
| struct GPUShader *dof_prepare_sh; | struct GPUShader *dof_prepare_sh; | ||||
| struct GPUShader *dof_downsample_sh; | struct GPUShader *dof_downsample_sh; | ||||
| Context not available. | |||||
| } | } | ||||
| } | } | ||||
| static char *workbench_build_defines( | static char *workbench_build_defines(WORKBENCH_PrivateData *wpd, | ||||
| WORKBENCH_PrivateData *wpd, bool textured, bool tiled, bool cavity, bool curvature) | bool textured, | ||||
| bool tiled, | |||||
| bool cavity, | |||||
| bool curvature, | |||||
| bool matcap_cavity) | |||||
| { | { | ||||
| char *str = NULL; | char *str = NULL; | ||||
| Context not available. | |||||
| if (curvature) { | if (curvature) { | ||||
| BLI_dynstr_append(ds, "#define USE_CURVATURE\n"); | BLI_dynstr_append(ds, "#define USE_CURVATURE\n"); | ||||
| } | } | ||||
| if (matcap_cavity) { | |||||
| BLI_dynstr_append(ds, "#define USE_MATCAP_CAVITY\n"); | |||||
| } | |||||
| str = BLI_dynstr_get_cstring(ds); | str = BLI_dynstr_get_cstring(ds); | ||||
| BLI_dynstr_free(ds); | BLI_dynstr_free(ds); | ||||
| Context not available. | |||||
| &e_data.opaque_prepass_sh_cache[wpd->sh_cfg][hair][color]; | &e_data.opaque_prepass_sh_cache[wpd->sh_cfg][hair][color]; | ||||
| if (*shader == NULL) { | if (*shader == NULL) { | ||||
| char *defines = workbench_build_defines(wpd, textured, tiled, false, false); | char *defines = workbench_build_defines(wpd, textured, tiled, false, false, false); | ||||
| char *frag_file = transp ? datatoc_workbench_transparent_accum_frag_glsl : | char *frag_file = transp ? datatoc_workbench_transparent_accum_frag_glsl : | ||||
| datatoc_workbench_prepass_frag_glsl; | datatoc_workbench_prepass_frag_glsl; | ||||
| Context not available. | |||||
| BLI_assert(light < MAX_LIGHTING); | BLI_assert(light < MAX_LIGHTING); | ||||
| if (*shader == NULL) { | if (*shader == NULL) { | ||||
| char *defines = workbench_build_defines(wpd, false, false, false, false); | char *defines = workbench_build_defines(wpd, false, false, false, false, false); | ||||
| char *frag = DRW_shader_library_create_shader_string(e_data.lib, | char *frag = DRW_shader_library_create_shader_string(e_data.lib, | ||||
| datatoc_workbench_composite_frag_glsl); | datatoc_workbench_composite_frag_glsl); | ||||
| Context not available. | |||||
| GPUShader *workbench_shader_transparent_resolve_get(WORKBENCH_PrivateData *wpd) | GPUShader *workbench_shader_transparent_resolve_get(WORKBENCH_PrivateData *wpd) | ||||
| { | { | ||||
| if (e_data.oit_resolve_sh == NULL) { | if (e_data.oit_resolve_sh == NULL) { | ||||
| char *defines = workbench_build_defines(wpd, false, false, false, false); | char *defines = workbench_build_defines(wpd, false, false, false, false, false); | ||||
| e_data.oit_resolve_sh = DRW_shader_create_fullscreen( | e_data.oit_resolve_sh = DRW_shader_create_fullscreen( | ||||
| datatoc_workbench_transparent_resolve_frag_glsl, defines); | datatoc_workbench_transparent_resolve_frag_glsl, defines); | ||||
| Context not available. | |||||
| return workbench_shader_shadow_pass_get_ex(false, manifold, cap); | return workbench_shader_shadow_pass_get_ex(false, manifold, cap); | ||||
| } | } | ||||
| GPUShader *workbench_shader_cavity_get(bool cavity, bool curvature) | GPUShader *workbench_shader_cavity_get(bool cavity, bool curvature, bool matcap_cavity) | ||||
| { | { | ||||
| BLI_assert(cavity || curvature); | BLI_assert(cavity || curvature); | ||||
| struct GPUShader **shader = &e_data.cavity_sh[cavity][curvature]; | struct GPUShader **shader = &e_data.cavity_sh[cavity][curvature][matcap_cavity]; | ||||
| if (*shader == NULL) { | if (*shader == NULL) { | ||||
| char *defines = workbench_build_defines(NULL, false, false, cavity, curvature); | char *defines = workbench_build_defines(NULL, false, false, cavity, curvature, matcap_cavity); | ||||
| char *frag = DRW_shader_library_create_shader_string( | char *frag = DRW_shader_library_create_shader_string( | ||||
| e_data.lib, datatoc_workbench_effect_cavity_frag_glsl); | e_data.lib, datatoc_workbench_effect_cavity_frag_glsl); | ||||
| Context not available. | |||||
| DRW_SHADER_FREE_SAFE(sh_array[j]); | DRW_SHADER_FREE_SAFE(sh_array[j]); | ||||
| } | } | ||||
| for (int j = 0; j < sizeof(e_data.cavity_sh) / sizeof(void *); j++) { | for (int j = 0; j < sizeof(e_data.cavity_sh) / sizeof(void *); j++) { | ||||
| struct GPUShader **sh_array = &e_data.cavity_sh[0][0]; | struct GPUShader **sh_array = &e_data.cavity_sh[0][0][0]; | ||||
| DRW_SHADER_FREE_SAFE(sh_array[j]); | DRW_SHADER_FREE_SAFE(sh_array[j]); | ||||
| } | } | ||||
| for (int j = 0; j < sizeof(e_data.smaa_sh) / sizeof(void *); j++) { | for (int j = 0; j < sizeof(e_data.smaa_sh) / sizeof(void *); j++) { | ||||
| Context not available. | |||||