Blender  V3.3
draw_shader.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2020 Blender Foundation. */
3 
8 #include "DRW_render.h"
9 
10 #include "BLI_dynstr.h"
11 #include "BLI_string_utils.h"
12 
13 #include "GPU_batch.h"
14 #include "GPU_index_buffer.h"
15 #include "GPU_vertex_buffer.h"
16 
17 #include "draw_shader.h"
18 
19 extern "C" char datatoc_common_hair_lib_glsl[];
20 
24 
25 static struct {
27 } e_data = {{nullptr}};
28 
29 /* -------------------------------------------------------------------- */
34 {
35  return GPU_shader_create_from_info_name("draw_hair_refine_compute");
36 }
37 
39  ParticleRefineShader UNUSED(refinement))
40 {
41  GPUShader *sh = nullptr;
42 
43  std::string shader_src = std::string(datatoc_common_hair_lib_glsl) +
45 
46  const char *var_names[1] = {"finalColor"};
47  sh = DRW_shader_create_with_transform_feedback(shader_src.c_str(),
48  nullptr,
49  "#define HAIR_PHASE_SUBDIV\n"
50  "#define USE_TF\n",
52  var_names,
53  1);
54 
55  return sh;
56 }
57 
59  ParticleRefineShader UNUSED(refinement))
60 {
61  return GPU_shader_create_from_info_name("draw_hair_refine_transform_feedback_workaround");
62 }
63 
66 {
67  if (e_data.hair_refine_sh[refinement] == nullptr) {
68  GPUShader *sh = nullptr;
69  switch (sh_type) {
72  break;
75  break;
78  break;
79  default:
80  BLI_assert_msg(0, "Incorrect shader type");
81  }
82  e_data.hair_refine_sh[refinement] = sh;
83  }
84 
85  return e_data.hair_refine_sh[refinement];
86 }
87 
89 {
90  /* TODO: Implement curves evaluation types (Bezier and Catmull Rom). */
91  if (e_data.hair_refine_sh[type] == nullptr) {
92  GPUShader *sh = nullptr;
93  switch (sh_type) {
96  break;
99  break;
102  break;
103  default:
104  BLI_assert_msg(0, "Incorrect shader type");
105  }
106  e_data.hair_refine_sh[type] = sh;
107  }
108 
109  return e_data.hair_refine_sh[type];
110 }
111 
115 {
116  for (int i = 0; i < PART_REFINE_MAX_SHADER; i++) {
117  DRW_SHADER_FREE_SAFE(e_data.hair_refine_sh[i]);
118  }
119 }
#define BLI_assert_msg(a, msg)
Definition: BLI_assert.h:53
A dynamically sized string ADT.
#define UNUSED(x)
#define DRW_SHADER_FREE_SAFE(shader)
Definition: DRW_render.h:254
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
struct GPUShader GPUShader
Definition: GPU_shader.h:20
GPUShader * GPU_shader_create_from_info_name(const char *info_name)
Definition: gpu_shader.cc:265
@ GPU_SHADER_TFB_POINTS
Definition: GPU_shader.h:24
CurvesEvalShader
ParticleRefineShader
@ PART_REFINE_MAX_SHADER
@ PART_REFINE_CATMULL_ROM
GPUShader * DRW_shader_create_with_transform_feedback(const char *vert, const char *geom, const char *defines, const eGPUShaderTFBType prim_type, const char **varying_names, const int varying_count)
char datatoc_gpu_shader_3D_smooth_color_frag_glsl[]
Definition: draw_shader.cc:23
static GPUShader * hair_refine_shader_compute_create(ParticleRefineShader UNUSED(refinement))
Definition: draw_shader.cc:33
char datatoc_common_hair_refine_comp_glsl[]
Definition: draw_shader.cc:22
static GPUShader * hair_refine_shader_transform_feedback_create(ParticleRefineShader UNUSED(refinement))
Definition: draw_shader.cc:38
char datatoc_common_hair_lib_glsl[]
Definition: draw_shader.cc:19
void DRW_shaders_free()
Definition: draw_shader.cc:114
GPUShader * DRW_shader_curves_refine_get(CurvesEvalShader type, eParticleRefineShaderType sh_type)
Definition: draw_shader.cc:88
static struct @317 e_data
struct GPUShader * hair_refine_sh[PART_REFINE_MAX_SHADER]
Definition: draw_shader.cc:26
GPUShader * DRW_shader_hair_refine_get(ParticleRefineShader refinement, eParticleRefineShaderType sh_type)
Definition: draw_shader.cc:64
static GPUShader * hair_refine_shader_transform_feedback_workaround_create(ParticleRefineShader UNUSED(refinement))
Definition: draw_shader.cc:58
char datatoc_common_hair_refine_vert_glsl[]
Definition: draw_shader.cc:21
eParticleRefineShaderType
Definition: draw_shader.h:19
@ PART_REFINE_SHADER_TRANSFORM_FEEDBACK_WORKAROUND
Definition: draw_shader.h:21
@ PART_REFINE_SHADER_COMPUTE
Definition: draw_shader.h:22
@ PART_REFINE_SHADER_TRANSFORM_FEEDBACK
Definition: draw_shader.h:20
ccl_gpu_kernel_postfix ccl_global float int int int int sh