Blender  V3.3
gpencil_shader.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2019 Blender Foundation. */
3 
7 #include "DRW_render.h"
8 
9 #include "gpencil_engine.h"
10 
12 extern char datatoc_gpencil_frag_glsl[];
13 extern char datatoc_gpencil_vert_glsl[];
20 extern char datatoc_gpencil_vfx_frag_glsl[];
21 
24 extern char datatoc_common_smaa_lib_glsl[];
25 extern char datatoc_common_view_lib_glsl[];
26 
27 static struct {
28  /* SMAA antialiasing */
30  /* GPencil Object rendering */
32  /* Final Compositing over rendered background. */
34  /* All layer blend types in one shader! */
36  /* Merge the final object depth to the depth buffer. */
38  /* Invert the content of the mask buffer. */
40  /* Effects. */
49 } g_shaders = {{NULL}};
50 
52 {
53  DRW_SHADER_FREE_SAFE(g_shaders.antialiasing_sh[0]);
54  DRW_SHADER_FREE_SAFE(g_shaders.antialiasing_sh[1]);
55  DRW_SHADER_FREE_SAFE(g_shaders.antialiasing_sh[2]);
56  DRW_SHADER_FREE_SAFE(g_shaders.gpencil_sh);
57  DRW_SHADER_FREE_SAFE(g_shaders.composite_sh);
58  DRW_SHADER_FREE_SAFE(g_shaders.layer_blend_sh);
59  DRW_SHADER_FREE_SAFE(g_shaders.depth_merge_sh);
60  DRW_SHADER_FREE_SAFE(g_shaders.mask_invert_sh);
61  DRW_SHADER_FREE_SAFE(g_shaders.fx_composite_sh);
62  DRW_SHADER_FREE_SAFE(g_shaders.fx_colorize_sh);
63  DRW_SHADER_FREE_SAFE(g_shaders.fx_blur_sh);
64  DRW_SHADER_FREE_SAFE(g_shaders.fx_glow_sh);
65  DRW_SHADER_FREE_SAFE(g_shaders.fx_pixel_sh);
67  DRW_SHADER_FREE_SAFE(g_shaders.fx_shadow_sh);
68  DRW_SHADER_FREE_SAFE(g_shaders.fx_transform_sh);
69 }
70 
72 {
73  BLI_assert(stage < 3);
74 
75  if (!g_shaders.antialiasing_sh[stage]) {
76  char stage_info_name[32];
77  SNPRINTF(stage_info_name, "gpencil_antialiasing_stage_%d", stage);
78  g_shaders.antialiasing_sh[stage] = GPU_shader_create_from_info_name(stage_info_name);
79  }
80  return g_shaders.antialiasing_sh[stage];
81 }
82 
84 {
85  if (!g_shaders.gpencil_sh) {
86  g_shaders.gpencil_sh = GPU_shader_create_from_info_name("gpencil_geometry");
87  }
88  return g_shaders.gpencil_sh;
89 }
90 
92 {
93  if (!g_shaders.layer_blend_sh) {
94  g_shaders.layer_blend_sh = GPU_shader_create_from_info_name("gpencil_layer_blend");
95  }
96  return g_shaders.layer_blend_sh;
97 }
98 
100 {
101  if (!g_shaders.mask_invert_sh) {
102  g_shaders.mask_invert_sh = GPU_shader_create_from_info_name("gpencil_mask_invert");
103  }
104  return g_shaders.mask_invert_sh;
105 }
106 
108 {
109  if (!g_shaders.depth_merge_sh) {
110  g_shaders.depth_merge_sh = GPU_shader_create_from_info_name("gpencil_depth_merge");
111  }
112  return g_shaders.depth_merge_sh;
113 }
114 
115 /* ------- FX Shaders --------- */
116 
118 {
119  if (!g_shaders.fx_blur_sh) {
120  g_shaders.fx_blur_sh = GPU_shader_create_from_info_name("gpencil_fx_blur");
121  }
122  return g_shaders.fx_blur_sh;
123 }
124 
126 {
127  if (!g_shaders.fx_colorize_sh) {
128  g_shaders.fx_colorize_sh = GPU_shader_create_from_info_name("gpencil_fx_colorize");
129  }
130  return g_shaders.fx_colorize_sh;
131 }
132 
134 {
135  if (!g_shaders.fx_composite_sh) {
136  g_shaders.fx_composite_sh = GPU_shader_create_from_info_name("gpencil_fx_composite");
137  }
138  return g_shaders.fx_composite_sh;
139 }
140 
142 {
143  if (!g_shaders.fx_glow_sh) {
144  g_shaders.fx_glow_sh = GPU_shader_create_from_info_name("gpencil_fx_glow");
145  }
146  return g_shaders.fx_glow_sh;
147 }
148 
150 {
151  if (!g_shaders.fx_pixel_sh) {
152  g_shaders.fx_pixel_sh = GPU_shader_create_from_info_name("gpencil_fx_pixelize");
153  }
154  return g_shaders.fx_pixel_sh;
155 }
156 
158 {
159  if (!g_shaders.fx_rim_sh) {
160  g_shaders.fx_rim_sh = GPU_shader_create_from_info_name("gpencil_fx_rim");
161  }
162  return g_shaders.fx_rim_sh;
163 }
164 
166 {
167  if (!g_shaders.fx_shadow_sh) {
168  g_shaders.fx_shadow_sh = GPU_shader_create_from_info_name("gpencil_fx_shadow");
169  }
170  return g_shaders.fx_shadow_sh;
171 }
172 
174 {
175  if (!g_shaders.fx_transform_sh) {
176  g_shaders.fx_transform_sh = GPU_shader_create_from_info_name("gpencil_fx_transform");
177  }
178  return g_shaders.fx_transform_sh;
179 }
#define BLI_assert(a)
Definition: BLI_assert.h:46
#define SNPRINTF(dst, format,...)
Definition: BLI_string.h:485
#define DRW_SHADER_FREE_SAFE(shader)
Definition: DRW_render.h:254
struct GPUShader GPUShader
Definition: GPU_shader.h:20
GPUShader * GPU_shader_create_from_info_name(const char *info_name)
Definition: gpu_shader.cc:265
EvaluationStage stage
Definition: deg_eval.cc:89
GPUShader * GPENCIL_shader_antialiasing(int stage)
GPUShader * fx_glow_sh
GPUShader * antialiasing_sh[3]
GPUShader * GPENCIL_shader_fx_colorize_get(void)
static struct @221 g_shaders
GPUShader * GPENCIL_shader_mask_invert_get(void)
GPUShader * mask_invert_sh
char datatoc_gpencil_antialiasing_vert_glsl[]
GPUShader * fx_transform_sh
GPUShader * layer_blend_sh
char datatoc_common_smaa_lib_glsl[]
GPUShader * GPENCIL_shader_depth_merge_get(void)
char datatoc_gpencil_layer_blend_frag_glsl[]
char datatoc_gpencil_vfx_frag_glsl[]
GPUShader * GPENCIL_shader_fx_transform_get(void)
GPUShader * GPENCIL_shader_geometry_get(void)
char datatoc_common_view_lib_glsl[]
char datatoc_gpencil_mask_invert_frag_glsl[]
char datatoc_common_fullscreen_vert_glsl[]
char datatoc_gpencil_depth_merge_frag_glsl[]
GPUShader * GPENCIL_shader_fx_rim_get(void)
char datatoc_gpencil_vert_glsl[]
GPUShader * fx_pixel_sh
void GPENCIL_shader_free(void)
GPUShader * GPENCIL_shader_fx_glow_get(void)
char datatoc_common_colormanagement_lib_glsl[]
GPUShader * fx_blur_sh
GPUShader * GPENCIL_shader_fx_pixelize_get(void)
char datatoc_gpencil_antialiasing_frag_glsl[]
GPUShader * GPENCIL_shader_fx_composite_get(void)
GPUShader * composite_sh
char datatoc_gpencil_depth_merge_vert_glsl[]
GPUShader * fx_rim_sh
GPUShader * GPENCIL_shader_layer_blend_get(void)
char datatoc_gpencil_frag_glsl[]
GPUShader * depth_merge_sh
char datatoc_gpencil_common_lib_glsl[]
GPUShader * fx_colorize_sh
GPUShader * GPENCIL_shader_fx_shadow_get(void)
GPUShader * fx_shadow_sh
GPUShader * fx_composite_sh
GPUShader * gpencil_sh
GPUShader * GPENCIL_shader_fx_blur_get(void)