Blender V4.3
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
9#include "DRW_render.hh"
10
11#include "BLI_dynstr.h"
12#include "BLI_string_utils.hh"
13
14#include "GPU_batch.hh"
15#include "GPU_index_buffer.hh"
16#include "GPU_vertex_buffer.hh"
17
18#include "draw_shader.hh"
19
21
22static struct {
30} e_data = {{nullptr}};
31
32/* -------------------------------------------------------------------- */
37{
38 return GPU_shader_create_from_info_name("draw_hair_refine_compute");
39}
40
42{
43 if (e_data.hair_refine_sh[refinement] == nullptr) {
45 e_data.hair_refine_sh[refinement] = sh;
46 }
47
48 return e_data.hair_refine_sh[refinement];
49}
50
52{
53 /* TODO: Implement curves evaluation types (Bezier and Catmull Rom). */
54 if (e_data.hair_refine_sh[type] == nullptr) {
56 e_data.hair_refine_sh[type] = sh;
57 }
58
59 return e_data.hair_refine_sh[type];
60}
61
63{
64 if (e_data.debug_print_display_sh == nullptr) {
65 e_data.debug_print_display_sh = GPU_shader_create_from_info_name("draw_debug_print_display");
66 }
67 return e_data.debug_print_display_sh;
68}
69
71{
72 if (e_data.debug_draw_display_sh == nullptr) {
73 e_data.debug_draw_display_sh = GPU_shader_create_from_info_name("draw_debug_draw_display");
74 }
75 return e_data.debug_draw_display_sh;
76}
77
79{
80 if (e_data.draw_visibility_compute_sh == nullptr) {
81 e_data.draw_visibility_compute_sh = GPU_shader_create_from_info_name(
82 "draw_visibility_compute");
83 }
84 return e_data.draw_visibility_compute_sh;
85}
86
88{
89 if (e_data.draw_view_finalize_sh == nullptr) {
90 e_data.draw_view_finalize_sh = GPU_shader_create_from_info_name("draw_view_finalize");
91 }
92 return e_data.draw_view_finalize_sh;
93}
94
96{
97 if (e_data.draw_resource_finalize_sh == nullptr) {
98 e_data.draw_resource_finalize_sh = GPU_shader_create_from_info_name("draw_resource_finalize");
99 }
100 return e_data.draw_resource_finalize_sh;
101}
102
104{
105 if (e_data.draw_command_generate_sh == nullptr) {
106 e_data.draw_command_generate_sh = GPU_shader_create_from_info_name("draw_command_generate");
107 }
108 return e_data.draw_command_generate_sh;
109}
110
114{
115 for (int i = 0; i < PART_REFINE_MAX_SHADER; i++) {
116 DRW_SHADER_FREE_SAFE(e_data.hair_refine_sh[i]);
117 }
118 DRW_SHADER_FREE_SAFE(e_data.debug_print_display_sh);
119 DRW_SHADER_FREE_SAFE(e_data.debug_draw_display_sh);
120 DRW_SHADER_FREE_SAFE(e_data.draw_visibility_compute_sh);
121 DRW_SHADER_FREE_SAFE(e_data.draw_view_finalize_sh);
122 DRW_SHADER_FREE_SAFE(e_data.draw_resource_finalize_sh);
123 DRW_SHADER_FREE_SAFE(e_data.draw_command_generate_sh);
124}
A dynamically sized string ADT.
#define DRW_SHADER_FREE_SAFE(shader)
GPUShader * GPU_shader_create_from_info_name(const char *info_name)
struct GPUShader GPUShader
ParticleRefineShader
@ PART_REFINE_MAX_SHADER
@ PART_REFINE_CATMULL_ROM
GPUShader * DRW_shader_draw_visibility_compute_get()
GPUShader * debug_draw_display_sh
GPUShader * DRW_shader_draw_resource_finalize_get()
GPUShader * draw_visibility_compute_sh
static struct @298 e_data
char datatoc_common_hair_lib_glsl[]
void DRW_shaders_free()
GPUShader * DRW_shader_draw_view_finalize_get()
GPUShader * draw_command_generate_sh
GPUShader * draw_view_finalize_sh
GPUShader * draw_resource_finalize_sh
GPUShader * DRW_shader_debug_draw_display_get()
GPUShader * DRW_shader_debug_print_display_get()
GPUShader * debug_print_display_sh
GPUShader * DRW_shader_draw_command_generate_get()
static GPUShader * hair_refine_shader_compute_create(ParticleRefineShader)
GPUShader * DRW_shader_curves_refine_get(blender::draw::CurvesEvalShader type)
GPUShader * DRW_shader_hair_refine_get(ParticleRefineShader refinement)
GPUShader * hair_refine_sh[PART_REFINE_MAX_SHADER]