Blender V5.0
draw_shader.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2020 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include "draw_shader.hh"
10
11#include "GPU_batch.hh"
12#include "GPU_capabilities.hh"
13
16
17#include "DRW_render.hh"
18
19#define SHADER_CUSTOM_DATA_INTERP_MAX_DIMENSIONS 4
20
22{
23 switch (shader_type) {
25 return "subdiv_lines";
26
28 return "subdiv_lines_loose";
29
31 return "subdiv_tris_single_material";
32
34 return "subdiv_tris_multiple_materials";
35
37 return "subdiv_edge_fac";
38
40 return "subdiv_sculpt_data";
41
43 return "subdiv_patch_evaluation_verts";
44
46 return "subdiv_patch_evaluation_fvar";
47
49 return "subdiv_patch_evaluation_fdots";
50
52 return "subdiv_patch_evaluation_fdots_normals";
53
55 return "subdiv_patch_evaluation_verts_orcos";
56
58 return "subdiv_edituv_stretch_angle";
59
61 return "subdiv_edituv_stretch_area";
62
64 return "subdiv_normals_accumulate";
65
67 return "subdiv_paint_overlay_flag";
68
70 return "subdiv_loop_normals";
71
73 break;
74
75 default:
76 break;
77 }
79 return "";
80}
81
83
85 static gpu::StaticShaderCache<ShaderCache> &get_static_cache()
86 {
87 static gpu::StaticShaderCache<ShaderCache> static_cache;
88 return static_cache;
89 }
90
91 public:
92 static ShaderCache &get()
93 {
94 return get_static_cache().get();
95 }
96 static void release()
97 {
98 get_static_cache().release();
99 }
100
101 gpu::StaticShader curves_topology = {"draw_curves_topology"};
102 gpu::StaticShader curves_evaluate_position = {"draw_curves_interpolate_position"};
103 gpu::StaticShader curves_evaluate_float4 = {"draw_curves_interpolate_float4_attribute"};
104 gpu::StaticShader curves_evaluate_float3 = {"draw_curves_interpolate_float3_attribute"};
105 gpu::StaticShader curves_evaluate_float2 = {"draw_curves_interpolate_float2_attribute"};
106 gpu::StaticShader curves_evaluate_float = {"draw_curves_interpolate_float_attribute"};
107 gpu::StaticShader curves_evaluate_length_intercept = {"draw_curves_evaluate_length_intercept"};
108 gpu::StaticShader debug_draw_display = {"draw_debug_draw_display"};
109 gpu::StaticShader draw_visibility_compute = {"draw_visibility_compute"};
110 gpu::StaticShader draw_view_finalize = {"draw_view_finalize"};
111 gpu::StaticShader draw_resource_finalize = {"draw_resource_finalize"};
112 gpu::StaticShader draw_command_generate = {"draw_command_generate"};
113
117 "subdiv_custom_data_interp_3d_f32_normalize"};
118
120 {
123 continue;
124 }
126 }
127
130 std::string info_name = "subdiv_custom_data_interp";
131 const char *dimension_names[] = {"_1d", "_2d", "_3d", "_4d"};
132 info_name += dimension_names[dimension];
133
134 switch (comp_type) {
135 case GPU_COMP_U16:
136 info_name += "_u16";
137 break;
138 case GPU_COMP_I32:
139 info_name += "_i32";
140 break;
141 case GPU_COMP_F32:
142 info_name += "_f32";
143 break;
144 default:
146 }
147
148 subdiv_custom_data_sh[dimension][comp_type] = {info_name};
149 }
150 }
151 }
152};
153
154} // namespace blender::draw::Shader
155
156using namespace blender::draw::Shader;
157
162
182
187
192
197
202
207
213
215{
216 BLI_assert(dimensions >= 1 && dimensions <= SHADER_CUSTOM_DATA_INTERP_MAX_DIMENSIONS);
217 if (comp_type == GPU_COMP_U16) {
218 BLI_assert(dimensions == 4);
219 }
221
222 return ShaderCache::get().subdiv_custom_data_sh[dimensions - 1][comp_type].get();
223}
224
229
#define BLI_assert_unreachable()
Definition BLI_assert.h:93
#define BLI_assert(a)
Definition BLI_assert.h:46
unsigned int uint
#define ELEM(...)
void GPU_shader_unbind()
GPUVertCompType
@ GPU_COMP_U16
@ GPU_COMP_MAX
@ GPU_COMP_F32
@ GPU_COMP_I32
constexpr const char * c_str() const
gpu::StaticShader draw_resource_finalize
gpu::StaticShader draw_visibility_compute
gpu::StaticShader draw_command_generate
gpu::StaticShader curves_evaluate_length_intercept
gpu::StaticShader subdiv_sh[SUBDIVISION_MAX_SHADERS]
gpu::StaticShader curves_evaluate_float
gpu::StaticShader curves_evaluate_float2
gpu::StaticShader subdiv_interp_corner_normals_sh
gpu::StaticShader curves_evaluate_float3
gpu::StaticShader curves_evaluate_position
gpu::StaticShader curves_evaluate_float4
gpu::StaticShader subdiv_custom_data_sh[SHADER_CUSTOM_DATA_INTERP_MAX_DIMENSIONS][GPU_COMP_MAX]
blender::gpu::Shader * get()
blender::gpu::Shader * DRW_shader_draw_view_finalize_get()
static blender::StringRefNull get_subdiv_shader_info_name(SubdivShaderType shader_type)
blender::gpu::Shader * DRW_shader_subdiv_get(SubdivShaderType shader_type)
blender::gpu::Shader * DRW_shader_subdiv_interp_corner_normals_get()
blender::gpu::Shader * DRW_shader_curves_refine_get(blender::draw::CurvesEvalShader type)
void DRW_shaders_free()
blender::gpu::Shader * DRW_shader_subdiv_custom_data_get(GPUVertCompType comp_type, int dimensions)
blender::gpu::Shader * DRW_shader_debug_draw_display_get()
blender::gpu::Shader * DRW_shader_curves_topology_get()
blender::gpu::Shader * DRW_shader_draw_visibility_compute_get()
blender::gpu::Shader * DRW_shader_draw_command_generate_get()
#define SHADER_CUSTOM_DATA_INTERP_MAX_DIMENSIONS
blender::gpu::Shader * DRW_shader_draw_resource_finalize_get()
constexpr int SUBDIVISION_MAX_SHADERS
SubdivShaderType
@ PATCH_EVALUATION_FACE_DOTS_WITH_NORMALS
i
Definition text_draw.cc:230