From d86d7c935ef3d44890fa71256c9045688fb3044a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dietrich?= Date: Wed, 4 May 2022 14:30:52 +0200 Subject: [PATCH] Fix T97827: material preview not displaying textures Caused by rB281bcc1c1dd6 which did not properly made use of `vec4` for UVs which are now loaded as attributes. --- .../gpu/shaders/material/gpu_shader_material_bump.glsl | 7 +++++++ .../material/gpu_shader_material_texture_coordinates.glsl | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_bump.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_bump.glsl index e0931128485..d7c50e213e5 100644 --- a/source/blender/gpu/shaders/material/gpu_shader_material_bump.glsl +++ b/source/blender/gpu/shaders/material/gpu_shader_material_bump.glsl @@ -5,6 +5,13 @@ void differentiate_texco(vec3 v, out vec3 df) df = v + dF_impl(v); } +/* Overload for UVs which are loaded as generic attributes. */ +void differentiate_texco(vec4 v, out vec3 df) +{ + /* Implementation defined. */ + df = v.xyz + dF_impl(v.xyz); +} + void node_bump( float strength, float dist, float height, vec3 N, vec2 dHd, float invert, out vec3 result) { diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_texture_coordinates.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_texture_coordinates.glsl index a3666164cf7..204f134dfa6 100644 --- a/source/blender/gpu/shaders/material/gpu_shader_material_texture_coordinates.glsl +++ b/source/blender/gpu/shaders/material/gpu_shader_material_texture_coordinates.glsl @@ -1,7 +1,7 @@ void node_tex_coord(mat4 obmatinv, vec3 attr_orco, - vec3 attr_uv, + vec4 attr_uv, out vec3 generated, out vec3 normal, out vec3 uv, @@ -12,7 +12,7 @@ void node_tex_coord(mat4 obmatinv, { generated = attr_orco; normal = normal_world_to_object(g_data.N); - uv = attr_uv; + uv = attr_uv.xyz; object = transform_point((obmatinv[3][3] == 0.0) ? ModelMatrixInverse : obmatinv, g_data.P); camera = coordinate_camera(g_data.P); window = coordinate_screen(g_data.P);