[Bf-blender-cvs] [57b4efc250a] master: Overlay: port paint shaders to use 'GPUShaderCreateInfo'

Germano Cavalcante noreply at git.blender.org
Sat Apr 30 19:51:39 CEST 2022


Commit: 57b4efc250a76ef7172cf5700e84138c4f22e62c
Author: Germano Cavalcante
Date:   Sat Apr 30 14:50:46 2022 -0300
Branches: master
https://developer.blender.org/rB57b4efc250a76ef7172cf5700e84138c4f22e62c

Overlay: port paint shaders to use 'GPUShaderCreateInfo'

Simple port.

Also a description of how each shader is used has been added.

NOTE: The shader created using `OVERLAY_shader_paint_vertcol` cannot be tested.
Apparently it is created but not used.

Reviewed By: fclem

Differential Revision: https://developer.blender.org/D14812

===================================================================

M	source/blender/draw/engines/overlay/overlay_shader.c
A	source/blender/draw/engines/overlay/shaders/infos/paint_info.hh
M	source/blender/draw/engines/overlay/shaders/paint_face_vert.glsl
M	source/blender/draw/engines/overlay/shaders/paint_point_vert.glsl
M	source/blender/draw/engines/overlay/shaders/paint_texture_frag.glsl
M	source/blender/draw/engines/overlay/shaders/paint_texture_vert.glsl
M	source/blender/draw/engines/overlay/shaders/paint_vertcol_frag.glsl
M	source/blender/draw/engines/overlay/shaders/paint_vertcol_vert.glsl
M	source/blender/draw/engines/overlay/shaders/paint_weight_frag.glsl
M	source/blender/draw/engines/overlay/shaders/paint_weight_vert.glsl
M	source/blender/draw/engines/overlay/shaders/paint_wire_vert.glsl
M	source/blender/gpu/CMakeLists.txt

===================================================================

diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c
index 6d6035be176..bd00d4d47f0 100644
--- a/source/blender/draw/engines/overlay/overlay_shader.c
+++ b/source/blender/draw/engines/overlay/overlay_shader.c
@@ -89,15 +89,6 @@ extern char datatoc_outline_detect_frag_glsl[];
 extern char datatoc_outline_prepass_frag_glsl[];
 extern char datatoc_outline_prepass_geom_glsl[];
 extern char datatoc_outline_prepass_vert_glsl[];
-extern char datatoc_paint_face_vert_glsl[];
-extern char datatoc_paint_point_vert_glsl[];
-extern char datatoc_paint_texture_frag_glsl[];
-extern char datatoc_paint_texture_vert_glsl[];
-extern char datatoc_paint_vertcol_frag_glsl[];
-extern char datatoc_paint_vertcol_vert_glsl[];
-extern char datatoc_paint_weight_frag_glsl[];
-extern char datatoc_paint_weight_vert_glsl[];
-extern char datatoc_paint_wire_vert_glsl[];
 extern char datatoc_particle_vert_glsl[];
 extern char datatoc_particle_frag_glsl[];
 extern char datatoc_sculpt_mask_vert_glsl[];
@@ -958,17 +949,11 @@ GPUShader *OVERLAY_shader_outline_detect(void)
 GPUShader *OVERLAY_shader_paint_face(void)
 {
   const DRWContextState *draw_ctx = DRW_context_state_get();
-  const GPUShaderConfigData *sh_cfg = &GPU_shader_cfg_data[draw_ctx->sh_cfg];
-  OVERLAY_Shaders *sh_data = &e_data.sh_data[draw_ctx->sh_cfg];
+  eGPUShaderConfig sh_cfg = draw_ctx->sh_cfg;
+  OVERLAY_Shaders *sh_data = &e_data.sh_data[sh_cfg];
   if (!sh_data->paint_face) {
-    sh_data->paint_face = GPU_shader_create_from_arrays({
-        .vert = (const char *[]){sh_cfg->lib,
-                                 datatoc_common_view_lib_glsl,
-                                 datatoc_paint_face_vert_glsl,
-                                 NULL},
-        .frag = (const char *[]){datatoc_gpu_shader_uniform_color_frag_glsl, NULL},
-        .defs = (const char *[]){sh_cfg->def, NULL},
-    });
+    sh_data->paint_face = GPU_shader_create_from_info_name(
+        sh_cfg == GPU_SHADER_CFG_CLIPPED ? "overlay_paint_face_clipped" : "overlay_paint_face");
   }
   return sh_data->paint_face;
 }
@@ -976,18 +961,11 @@ GPUShader *OVERLAY_shader_paint_face(void)
 GPUShader *OVERLAY_shader_paint_point(void)
 {
   const DRWContextState *draw_ctx = DRW_context_state_get();
-  const GPUShaderConfigData *sh_cfg = &GPU_shader_cfg_data[draw_ctx->sh_cfg];
-  OVERLAY_Shaders *sh_data = &e_data.sh_data[draw_ctx->sh_cfg];
+  eGPUShaderConfig sh_cfg = draw_ctx->sh_cfg;
+  OVERLAY_Shaders *sh_data = &e_data.sh_data[sh_cfg];
   if (!sh_data->paint_point) {
-    sh_data->paint_point = GPU_shader_create_from_arrays({
-        .vert = (const char *[]){sh_cfg->lib,
-                                 datatoc_common_globals_lib_glsl,
-                                 datatoc_common_view_lib_glsl,
-                                 datatoc_paint_point_vert_glsl,
-                                 NULL},
-        .frag = (const char *[]){datatoc_gpu_shader_point_varying_color_frag_glsl, NULL},
-        .defs = (const char *[]){sh_cfg->def, NULL},
-    });
+    sh_data->paint_point = GPU_shader_create_from_info_name(
+        sh_cfg == GPU_SHADER_CFG_CLIPPED ? "overlay_paint_point_clipped" : "overlay_paint_point");
   }
   return sh_data->paint_point;
 }
@@ -995,19 +973,11 @@ GPUShader *OVERLAY_shader_paint_point(void)
 GPUShader *OVERLAY_shader_paint_texture(void)
 {
   const DRWContextState *draw_ctx = DRW_context_state_get();
-  const GPUShaderConfigData *sh_cfg = &GPU_shader_cfg_data[draw_ctx->sh_cfg];
-  OVERLAY_Shaders *sh_data = &e_data.sh_data[draw_ctx->sh_cfg];
+  eGPUShaderConfig sh_cfg = draw_ctx->sh_cfg;
+  OVERLAY_Shaders *sh_data = &e_data.sh_data[sh_cfg];
   if (!sh_data->paint_texture) {
-    sh_data->paint_texture = GPU_shader_create_from_arrays({
-        .vert = (const char *[]){sh_cfg->lib,
-                                 datatoc_common_view_lib_glsl,
-                                 datatoc_paint_texture_vert_glsl,
-                                 NULL},
-        .frag = (const char *[]){datatoc_common_colormanagement_lib_glsl,
-                                 datatoc_paint_texture_frag_glsl,
-                                 NULL},
-        .defs = (const char *[]){sh_cfg->def, NULL},
-    });
+    sh_data->paint_texture = GPU_shader_create_from_info_name(
+        sh_cfg ? "overlay_paint_texture_clipped" : "overlay_paint_texture");
   }
   return sh_data->paint_texture;
 }
@@ -1015,42 +985,27 @@ GPUShader *OVERLAY_shader_paint_texture(void)
 GPUShader *OVERLAY_shader_paint_vertcol(void)
 {
   const DRWContextState *draw_ctx = DRW_context_state_get();
-  const GPUShaderConfigData *sh_cfg = &GPU_shader_cfg_data[draw_ctx->sh_cfg];
-  OVERLAY_Shaders *sh_data = &e_data.sh_data[draw_ctx->sh_cfg];
+  eGPUShaderConfig sh_cfg = draw_ctx->sh_cfg;
+  OVERLAY_Shaders *sh_data = &e_data.sh_data[sh_cfg];
   if (!sh_data->paint_vertcol) {
-    sh_data->paint_vertcol = GPU_shader_create_from_arrays({
-        .vert = (const char *[]){sh_cfg->lib,
-                                 datatoc_common_globals_lib_glsl,
-                                 datatoc_common_view_lib_glsl,
-                                 datatoc_paint_vertcol_vert_glsl,
-                                 NULL},
-        .frag = (const char *[]){datatoc_common_globals_lib_glsl,
-                                 datatoc_paint_vertcol_frag_glsl,
-                                 NULL},
-        .defs = (const char *[]){sh_cfg->def, NULL},
-    });
+    sh_data->paint_vertcol = GPU_shader_create_from_info_name(
+        sh_cfg ? "overlay_paint_vertcol_clipped" : "overlay_paint_vertcol");
   }
   return sh_data->paint_vertcol;
 }
 
 GPUShader *OVERLAY_shader_paint_weight(const bool shading)
 {
+  const char *info_name[2][2] = {
+      {"overlay_paint_weight", "overlay_paint_weight_fake_shading"},
+      {"overlay_paint_weight_clipped", "overlay_paint_weight_fake_shading_clipped"},
+  };
   int index = shading ? 1 : 0;
   const DRWContextState *draw_ctx = DRW_context_state_get();
-  const GPUShaderConfigData *sh_cfg = &GPU_shader_cfg_data[draw_ctx->sh_cfg];
-  OVERLAY_Shaders *sh_data = &e_data.sh_data[draw_ctx->sh_cfg];
+  eGPUShaderConfig sh_cfg = draw_ctx->sh_cfg;
+  OVERLAY_Shaders *sh_data = &e_data.sh_data[sh_cfg];
   if (!sh_data->paint_weight[index]) {
-    sh_data->paint_weight[index] = GPU_shader_create_from_arrays({
-        .vert = (const char *[]){sh_cfg->lib,
-                                 datatoc_common_globals_lib_glsl,
-                                 datatoc_common_view_lib_glsl,
-                                 datatoc_paint_weight_vert_glsl,
-                                 NULL},
-        .frag = (const char *[]){datatoc_common_globals_lib_glsl,
-                                 datatoc_paint_weight_frag_glsl,
-                                 NULL},
-        .defs = (const char *[]){sh_cfg->def, shading ? "#define FAKE_SHADING\n" : "", NULL},
-    });
+    sh_data->paint_weight[index] = GPU_shader_create_from_info_name(info_name[sh_cfg][index]);
   }
   return sh_data->paint_weight[index];
 }
@@ -1058,18 +1013,11 @@ GPUShader *OVERLAY_shader_paint_weight(const bool shading)
 GPUShader *OVERLAY_shader_paint_wire(void)
 {
   const DRWContextState *draw_ctx = DRW_context_state_get();
-  const GPUShaderConfigData *sh_cfg = &GPU_shader_cfg_data[draw_ctx->sh_cfg];
-  OVERLAY_Shaders *sh_data = &e_data.sh_data[draw_ctx->sh_cfg];
+  eGPUShaderConfig sh_cfg = draw_ctx->sh_cfg;
+  OVERLAY_Shaders *sh_data = &e_data.sh_data[sh_cfg];
   if (!sh_data->paint_wire) {
-    sh_data->paint_wire = GPU_shader_create_from_arrays({
-        .vert = (const char *[]){sh_cfg->lib,
-                                 datatoc_common_globals_lib_glsl,
-                                 datatoc_common_view_lib_glsl,
-                                 datatoc_paint_wire_vert_glsl,
-                                 NULL},
-        .frag = (const char *[]){datatoc_gpu_shader_flat_color_frag_glsl, NULL},
-        .defs = (const char *[]){sh_cfg->def, NULL},
-    });
+    sh_data->paint_wire = GPU_shader_create_from_info_name(sh_cfg ? "overlay_paint_wire_clipped" :
+                                                                    "overlay_paint_wire");
   }
   return sh_data->paint_wire;
 }
diff --git a/source/blender/draw/engines/overlay/shaders/infos/paint_info.hh b/source/blender/draw/engines/overlay/shaders/infos/paint_info.hh
new file mode 100644
index 00000000000..bbec79d515f
--- /dev/null
+++ b/source/blender/draw/engines/overlay/shaders/infos/paint_info.hh
@@ -0,0 +1,180 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include "gpu_shader_create_info.hh"
+
+/* -------------------------------------------------------------------- */
+/** \name OVERLAY_shader_paint_face.
+ *
+ * Used for face selection mode in Weight, Vertex and Texture Paint.
+ * \{ */
+
+GPU_SHADER_CREATE_INFO(overlay_paint_face)
+    .do_static_compilation(true)
+    .define("srgbTarget", "false") /* NOTE: Color already in Linear space. */
+    .vertex_in(0, Type::VEC3, "pos")
+    .vertex_in(1, Type::VEC4, "nor") /* Select flag on the 4th component. */
+    .push_constant(Type::VEC4, "color")
+    .fragment_out(0, Type::VEC4, "fragColor")
+    .vertex_source("paint_face_vert.glsl")
+    .fragment_source("gpu_shader_uniform_color_frag.glsl")
+    .additional_info("draw_modelmat");
+
+GPU_SHADER_CREATE_INFO(overlay_paint_face_clipped)
+    .additional_info("overlay_paint_face")
+    .additional_info("drw_clipped")
+    .do_static_compilation(true);
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name OVERLAY_shader_paint_point.
+ *
+ * Used for vertex selection mode in Weight and Vertex Paint.
+ * \{ */
+
+GPU_SHADER_INTERFACE_INFO(overlay_overlay_paint_point_iface, "").smooth(Type::VEC4, "finalColor");
+
+GPU_SHADER_CREATE_INFO(overlay_paint_point)
+    .do_static_compilation(true)
+    .vertex_in(0, Type::VEC3, "pos")
+    .vertex_in(1, Type::VEC4, "nor") /* Select flag on the 4th component. */
+    .vertex_out(overlay_overlay_paint_point_iface)
+    .fragment_out(0, Type::VEC4, "fragColor")
+    .vertex_source("paint_point_vert.glsl")
+    .fragment_source("gpu_shader_point_varyin

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list