Blender V4.3
gpencil_shader_c.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2019 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8#include "DRW_render.hh"
9
10#include "gpencil_engine.h"
11
13extern "C" char datatoc_gpencil_frag_glsl[];
14extern "C" char datatoc_gpencil_vert_glsl[];
22
26
27static 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 = {{nullptr}};
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]);
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);
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:50
#define SNPRINTF(dst, format,...)
Definition BLI_string.h:597
#define DRW_SHADER_FREE_SAFE(shader)
GPUShader * GPU_shader_create_from_info_name(const char *info_name)
struct GPUShader GPUShader
EvaluationStage stage
Definition deg_eval.cc:83
GPUShader * fx_glow_sh
void GPENCIL_shader_free()
GPUShader * GPENCIL_shader_fx_glow_get()
GPUShader * antialiasing_sh[3]
GPUShader * GPENCIL_shader_antialiasing(int stage)
GPUShader * GPENCIL_shader_fx_composite_get()
GPUShader * mask_invert_sh
GPUShader * GPENCIL_shader_fx_rim_get()
char datatoc_gpencil_antialiasing_vert_glsl[]
GPUShader * fx_transform_sh
GPUShader * layer_blend_sh
GPUShader * GPENCIL_shader_fx_pixelize_get()
char datatoc_gpencil_layer_blend_frag_glsl[]
char datatoc_gpencil_vfx_frag_glsl[]
GPUShader * GPENCIL_shader_depth_merge_get()
GPUShader * GPENCIL_shader_fx_blur_get()
static struct @204 g_shaders
char datatoc_common_view_lib_glsl[]
char datatoc_gpencil_mask_invert_frag_glsl[]
char datatoc_common_fullscreen_vert_glsl[]
GPUShader * GPENCIL_shader_mask_invert_get()
GPUShader * GPENCIL_shader_geometry_get()
GPUShader * GPENCIL_shader_layer_blend_get()
GPUShader * GPENCIL_shader_fx_transform_get()
char datatoc_gpencil_depth_merge_frag_glsl[]
GPUShader * GPENCIL_shader_fx_shadow_get()
char datatoc_gpencil_vert_glsl[]
GPUShader * fx_pixel_sh
char datatoc_common_colormanagement_lib_glsl[]
GPUShader * fx_blur_sh
GPUShader * GPENCIL_shader_fx_colorize_get()
char datatoc_gpencil_antialiasing_frag_glsl[]
GPUShader * composite_sh
char datatoc_gpencil_depth_merge_vert_glsl[]
GPUShader * fx_rim_sh
char datatoc_gpencil_frag_glsl[]
GPUShader * depth_merge_sh
char datatoc_gpencil_common_lib_glsl[]
GPUShader * fx_colorize_sh
GPUShader * fx_shadow_sh
GPUShader * fx_composite_sh
GPUShader * gpencil_sh