diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2019-06-04 12:28:21 +0300 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2019-06-05 15:29:27 +0300 |
commit | eeda9369b6e63e38a82292f0b42eefc8247e4348 (patch) | |
tree | ca865cbeac97c0087543c39524e40627bb3d0401 /source/blender/draw/modes/paint_texture_mode.c | |
parent | 957c8f1305149ce85472a4082405217475af4b62 (diff) |
TexturePaint: Missing Texture Depth Test
Depth testing was off as it used the precomputed ModelView matrix. As
draw engines currently use a different approach the depth was sometimes
a bit off making the color disappear.
This change will use a different vertex shader that will write the
correct depth. I expected the same change to be needed in the bone
selection overlay but was not able to reproduce it.
Reviewed By: fclem
Maniphest Tasks: T64615
Differential Revision: https://developer.blender.org/D5006
Diffstat (limited to 'source/blender/draw/modes/paint_texture_mode.c')
-rw-r--r-- | source/blender/draw/modes/paint_texture_mode.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/source/blender/draw/modes/paint_texture_mode.c b/source/blender/draw/modes/paint_texture_mode.c index 66e2cf7122d..a31efccda88 100644 --- a/source/blender/draw/modes/paint_texture_mode.c +++ b/source/blender/draw/modes/paint_texture_mode.c @@ -47,6 +47,7 @@ extern char datatoc_paint_texture_frag_glsl[]; extern char datatoc_paint_wire_vert_glsl[]; extern char datatoc_paint_wire_frag_glsl[]; extern char datatoc_paint_face_vert_glsl[]; +extern char datatoc_paint_face_selection_vert_glsl[]; extern char datatoc_gpu_shader_uniform_color_frag_glsl[]; @@ -144,8 +145,14 @@ static void PAINT_TEXTURE_engine_init(void *vedata) if (!sh_data->fallback) { const GPUShaderConfigData *sh_cfg_data = &GPU_shader_cfg_data[draw_ctx->sh_cfg]; - sh_data->fallback = GPU_shader_get_builtin_shader_with_config(GPU_SHADER_3D_UNIFORM_COLOR, - draw_ctx->sh_cfg); + sh_data->fallback = GPU_shader_create_from_arrays({ + .vert = (const char *[]){sh_cfg_data->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_data->def, NULL}, + }); sh_data->image = GPU_shader_create_from_arrays({ .vert = (const char *[]){sh_cfg_data->lib, @@ -180,7 +187,7 @@ static void PAINT_TEXTURE_engine_init(void *vedata) sh_data->face_select_overlay = GPU_shader_create_from_arrays({ .vert = (const char *[]){sh_cfg_data->lib, datatoc_common_view_lib_glsl, - datatoc_paint_face_vert_glsl, + datatoc_paint_face_selection_vert_glsl, NULL}, .frag = (const char *[]){datatoc_common_view_lib_glsl, datatoc_gpu_shader_uniform_color_frag_glsl, @@ -433,8 +440,6 @@ static void PAINT_TEXTURE_engine_free(void) { for (int sh_data_index = 0; sh_data_index < ARRAY_SIZE(e_data.sh_data); sh_data_index++) { PAINT_TEXTURE_Shaders *sh_data = &e_data.sh_data[sh_data_index]; - /* Don't free builtins. */ - sh_data->fallback = NULL; GPUShader **sh_data_as_array = (GPUShader **)sh_data; for (int i = 0; i < (sizeof(PAINT_TEXTURE_Shaders) / sizeof(GPUShader *)); i++) { DRW_SHADER_FREE_SAFE(sh_data_as_array[i]); |