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:
Diffstat (limited to 'source/blender/gpu/intern/gpu_shader.c')
-rw-r--r--source/blender/gpu/intern/gpu_shader.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/source/blender/gpu/intern/gpu_shader.c b/source/blender/gpu/intern/gpu_shader.c
index d58d34b868b..6371259d32c 100644
--- a/source/blender/gpu/intern/gpu_shader.c
+++ b/source/blender/gpu/intern/gpu_shader.c
@@ -66,6 +66,8 @@ extern char datatoc_gpu_shader_probe_sh_compute_frag_glsl[];
extern char datatoc_gpu_shader_probe_sh_compute_vert_glsl[];
extern char datatoc_gpu_shader_display_sh_frag_glsl[];
extern char datatoc_gpu_shader_display_sh_vert_glsl[];
+extern char datatoc_gpu_shader_downsample_maxz_frag_glsl[];
+extern char datatoc_gpu_shader_downsample_maxz_vert_glsl[];
static struct GPUShadersGlobal {
struct {
@@ -75,6 +77,8 @@ static struct GPUShadersGlobal {
GPUShader *smoke_fire;
GPUShader *compute_sh[MAX_SH_SAMPLES];
GPUShader *display_sh;
+ GPUShader *maxz_downsample;
+ GPUShader *minz_downsample;
/* cache for shader fx. Those can exist in combinations so store them here */
GPUShader *fx_shaders[MAX_FX_SHADERS * 2];
} shaders;
@@ -694,6 +698,18 @@ GPUShader *GPU_shader_get_builtin_shader(GPUBuiltinShader shader)
NULL, NULL, NULL, 0, 0, 0);
retval = GG.shaders.display_sh;
break;
+ case GPU_SHADER_MAXZ_DOWNSAMPLE:
+ if (!GG.shaders.maxz_downsample)
+ GG.shaders.maxz_downsample = GPU_shader_create(
+ datatoc_gpu_shader_downsample_maxz_vert_glsl, datatoc_gpu_shader_downsample_maxz_frag_glsl,
+ NULL, NULL, NULL, 0, 0, 0);
+ case GPU_SHADER_MINZ_DOWNSAMPLE:
+ if (!GG.shaders.minz_downsample)
+ GG.shaders.minz_downsample = GPU_shader_create(
+ datatoc_gpu_shader_downsample_maxz_vert_glsl, datatoc_gpu_shader_downsample_maxz_frag_glsl,
+ NULL, NULL, "#define MIN;\n", 0, 0, 0);
+ retval = GG.shaders.minz_downsample;
+ break;
}
}
@@ -822,6 +838,16 @@ void GPU_shader_free_builtin_shaders(void)
GG.shaders.display_sh = NULL;
}
+ if (GG.shaders.maxz_downsample) {
+ GPU_shader_free(GG.shaders.maxz_downsample);
+ GG.shaders.maxz_downsample = NULL;
+ }
+
+ if (GG.shaders.minz_downsample) {
+ GPU_shader_free(GG.shaders.minz_downsample);
+ GG.shaders.minz_downsample = NULL;
+ }
+
for (i = 0; i < 2 * MAX_FX_SHADERS; ++i) {
if (GG.shaders.fx_shaders[i]) {
GPU_shader_free(GG.shaders.fx_shaders[i]);