diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2022-03-26 17:58:57 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2022-03-30 16:50:05 +0300 |
commit | 05a77bb0d8f5aad9113d7a9aa1e1a7efb9342d6a (patch) | |
tree | 1960b35ec4b82a2c96084cd35a78e919be5d1a14 /source/blender/draw/engines/overlay/overlay_shader.c | |
parent | 4cd409ca98574908be4b2e376d99ae0f26d7624d (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.c | 119 |
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; } |