Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2022-03-26 17:58:57 +0300
committerClément Foucault <foucault.clem@gmail.com>2022-03-30 16:50:05 +0300
commit05a77bb0d8f5aad9113d7a9aa1e1a7efb9342d6a (patch)
tree1960b35ec4b82a2c96084cd35a78e919be5d1a14 /source/blender/draw/engines/overlay/overlay_shader.c
parent4cd409ca98574908be4b2e376d99ae0f26d7624d (diff)
Overlay: Port Edit Mode shaders to ShaderCreateInfo
This should have no regression.
Diffstat (limited to 'source/blender/draw/engines/overlay/overlay_shader.c')
-rw-r--r--source/blender/draw/engines/overlay/overlay_shader.c119
1 files changed, 17 insertions, 102 deletions
diff --git a/source/blender/draw/engines/overlay/overlay_shader.c b/source/blender/draw/engines/overlay/overlay_shader.c
index 639b20feae4..2c3c9620165 100644
--- a/source/blender/draw/engines/overlay/overlay_shader.c
+++ b/source/blender/draw/engines/overlay/overlay_shader.c
@@ -299,21 +299,10 @@ GPUShader *OVERLAY_shader_depth_only(void)
GPUShader *OVERLAY_shader_edit_mesh_vert(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];
if (!sh_data->edit_mesh_vert) {
- sh_data->edit_mesh_vert = GPU_shader_create_from_arrays({
- .vert = (const char *[]){sh_cfg->lib,
- datatoc_common_globals_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_edit_mesh_common_lib_glsl,
- datatoc_edit_mesh_vert_glsl,
- NULL},
- .frag = (const char *[]){datatoc_common_globals_lib_glsl,
- datatoc_gpu_shader_point_varying_color_frag_glsl,
- NULL},
- .defs = (const char *[]){sh_cfg->def, "#define VERT\n", NULL},
- });
+ sh_data->edit_mesh_vert = GPU_shader_create_from_info_name(
+ draw_ctx->sh_cfg ? "overlay_edit_mesh_vert_clipped" : "overlay_edit_mesh_vert");
}
return sh_data->edit_mesh_vert;
}
@@ -321,47 +310,14 @@ GPUShader *OVERLAY_shader_edit_mesh_vert(void)
GPUShader *OVERLAY_shader_edit_mesh_edge(bool use_flat_interp)
{
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];
GPUShader **sh = use_flat_interp ? &sh_data->edit_mesh_edge_flat : &sh_data->edit_mesh_edge;
if (*sh == NULL) {
- /* Use geometry shader to draw edge wire-frame. This ensure us
- * the same result across platforms and more flexibility.
- * But we pay the cost of running a geometry shader.
- * In the future we might consider using only the vertex shader
- * and loading data manually with buffer textures. */
- const bool use_geom_shader = true;
- const bool use_smooth_wires = (U.gpu_flag & USER_GPU_FLAG_NO_EDIT_MODE_SMOOTH_WIRE) == 0;
- const char *geom_sh_code[] = {use_geom_shader ? sh_cfg->lib : NULL,
- datatoc_common_globals_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_edit_mesh_geom_glsl,
- NULL};
- const char *vert_sh_code[] = {sh_cfg->lib,
- datatoc_common_globals_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_edit_mesh_common_lib_glsl,
- datatoc_edit_mesh_vert_glsl,
- NULL};
- const char *frag_sh_code[] = {sh_cfg->lib,
- datatoc_common_globals_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_edit_mesh_common_lib_glsl,
- datatoc_edit_mesh_frag_glsl,
- NULL};
- const char *defs[] = {sh_cfg->def,
- use_geom_shader ? "#define USE_GEOM_SHADER\n" : "",
- use_smooth_wires ? "#define USE_SMOOTH_WIRE\n" : "",
- use_flat_interp ? "#define FLAT\n" : "",
- "#define EDGE\n",
- NULL};
-
- *sh = GPU_shader_create_from_arrays({
- .vert = vert_sh_code,
- .frag = frag_sh_code,
- .geom = geom_sh_code,
- .defs = defs,
- });
+ *sh = GPU_shader_create_from_info_name(
+ draw_ctx->sh_cfg ?
+ (use_flat_interp ? "overlay_edit_mesh_edge_flat_clipped" :
+ "overlay_edit_mesh_edge_clipped") :
+ (use_flat_interp ? "overlay_edit_mesh_edge_flat" : "overlay_edit_mesh_edge"));
}
return *sh;
}
@@ -722,19 +678,10 @@ GPUShader *OVERLAY_shader_edit_lattice_wire(void)
GPUShader *OVERLAY_shader_edit_mesh_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];
if (!sh_data->edit_mesh_face) {
- sh_data->edit_mesh_face = GPU_shader_create_from_arrays({
- .vert = (const char *[]){sh_cfg->lib,
- datatoc_common_globals_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_edit_mesh_common_lib_glsl,
- datatoc_edit_mesh_vert_glsl,
- NULL},
- .frag = (const char *[]){datatoc_gpu_shader_3D_smooth_color_frag_glsl, NULL},
- .defs = (const char *[]){sh_cfg->def, "#define FACE\n", NULL},
- });
+ sh_data->edit_mesh_face = GPU_shader_create_from_info_name(
+ draw_ctx->sh_cfg ? "overlay_edit_mesh_face_clipped" : "overlay_edit_mesh_face");
}
return sh_data->edit_mesh_face;
}
@@ -742,19 +689,10 @@ GPUShader *OVERLAY_shader_edit_mesh_face(void)
GPUShader *OVERLAY_shader_edit_mesh_facedot(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];
if (!sh_data->edit_mesh_facedot) {
- sh_data->edit_mesh_facedot = GPU_shader_create_from_arrays({
- .vert = (const char *[]){sh_cfg->lib,
- datatoc_common_globals_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_edit_mesh_common_lib_glsl,
- datatoc_edit_mesh_vert_glsl,
- NULL},
- .frag = (const char *[]){datatoc_gpu_shader_point_varying_color_frag_glsl, NULL},
- .defs = (const char *[]){sh_cfg->def, "#define FACEDOT\n", NULL},
- });
+ sh_data->edit_mesh_facedot = GPU_shader_create_from_info_name(
+ draw_ctx->sh_cfg ? "overlay_edit_mesh_facedot_clipped" : "overlay_edit_mesh_facedot");
}
return sh_data->edit_mesh_facedot;
}
@@ -762,18 +700,10 @@ GPUShader *OVERLAY_shader_edit_mesh_facedot(void)
GPUShader *OVERLAY_shader_edit_mesh_normal(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];
if (!sh_data->edit_mesh_normals) {
- sh_data->edit_mesh_normals = GPU_shader_create_from_arrays({
- .vert = (const char *[]){sh_cfg->lib,
- datatoc_common_globals_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_edit_mesh_normal_vert_glsl,
- NULL},
- .frag = (const char *[]){datatoc_gpu_shader_flat_color_frag_glsl, NULL},
- .defs = (const char *[]){sh_cfg->def, "#define INSTANCED_ATTR\n", NULL},
- });
+ sh_data->edit_mesh_normals = GPU_shader_create_from_info_name(
+ draw_ctx->sh_cfg ? "overlay_edit_mesh_normal_clipped" : "overlay_edit_mesh_normal");
}
return sh_data->edit_mesh_normals;
}
@@ -781,17 +711,10 @@ GPUShader *OVERLAY_shader_edit_mesh_normal(void)
GPUShader *OVERLAY_shader_edit_mesh_analysis(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];
if (!sh_data->edit_mesh_analysis) {
- sh_data->edit_mesh_analysis = GPU_shader_create_from_arrays({
- .vert = (const char *[]){sh_cfg->lib,
- datatoc_common_view_lib_glsl,
- datatoc_edit_mesh_analysis_vert_glsl,
- NULL},
- .frag = (const char *[]){datatoc_edit_mesh_analysis_frag_glsl, NULL},
- .defs = (const char *[]){sh_cfg->def, NULL},
- });
+ sh_data->edit_mesh_analysis = GPU_shader_create_from_info_name(
+ draw_ctx->sh_cfg ? "overlay_edit_mesh_analysis_clipped" : "overlay_edit_mesh_analysis");
}
return sh_data->edit_mesh_analysis;
}
@@ -799,18 +722,10 @@ GPUShader *OVERLAY_shader_edit_mesh_analysis(void)
GPUShader *OVERLAY_shader_edit_mesh_skin_root(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];
if (!sh_data->edit_mesh_skin_root) {
- sh_data->edit_mesh_skin_root = GPU_shader_create_from_arrays({
- .vert = (const char *[]){sh_cfg->lib,
- datatoc_common_globals_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_edit_mesh_skin_root_vert_glsl,
- NULL},
- .frag = (const char *[]){datatoc_gpu_shader_flat_color_frag_glsl, NULL},
- .defs = (const char *[]){sh_cfg->def, "#define INSTANCED_ATTR\n", NULL},
- });
+ sh_data->edit_mesh_skin_root = GPU_shader_create_from_info_name(
+ draw_ctx->sh_cfg ? "overlay_edit_mesh_skin_root_clipped" : "overlay_edit_mesh_skin_root");
}
return sh_data->edit_mesh_skin_root;
}