diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2020-09-09 20:28:36 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2020-09-09 20:32:10 +0300 |
commit | 92fc32e48d4ec720a81ca7f1f3c842909caea449 (patch) | |
tree | b204eed65b45e5688ecfb3493f6961f99e9410da /source/blender/gpu/shaders | |
parent | c6e4d922badf7bd4264df5e1ecf3e025e9006c2b (diff) |
UI: Fix Icon drawing on MacOS
It seems that using a vertex shader using both `gl_InstanceID` and
`gl_VertexID` is causing some issues on MacOS + Intel Iris.
Regression introduced by rB052538edc1fba109d3427471047611888ed13bea
Diffstat (limited to 'source/blender/gpu/shaders')
-rw-r--r-- | source/blender/gpu/shaders/gpu_shader_2D_image_multi_rect_vert.glsl | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_image_multi_rect_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_image_multi_rect_vert.glsl index 640ceb97e5b..bdc0d37a7ae 100644 --- a/source/blender/gpu/shaders/gpu_shader_2D_image_multi_rect_vert.glsl +++ b/source/blender/gpu/shaders/gpu_shader_2D_image_multi_rect_vert.glsl @@ -11,29 +11,33 @@ uniform vec4 calls_data[MAX_CALLS * 3]; out vec2 texCoord_interp; flat out vec4 finalColor; +in vec2 pos; + void main() { - vec4 pos = calls_data[gl_InstanceID * 3]; + vec4 rect = calls_data[gl_InstanceID * 3]; vec4 tex = calls_data[gl_InstanceID * 3 + 1]; finalColor = calls_data[gl_InstanceID * 3 + 2]; - if (gl_VertexID == 0) { - pos.xy = pos.xz; + /* Use pos to select the right swizzle (instead of gl_VertexID) + * in order to workaround an OSX driver bug. */ + if (pos == vec2(0.0, 0.0)) { + rect.xy = rect.xz; tex.xy = tex.xz; } - else if (gl_VertexID == 1) { - pos.xy = pos.xw; + else if (pos == vec2(0.0, 1.0)) { + rect.xy = rect.xw; tex.xy = tex.xw; } - else if (gl_VertexID == 2) { - pos.xy = pos.yw; + else if (pos == vec2(1.0, 1.0)) { + rect.xy = rect.yw; tex.xy = tex.yw; } else { - pos.xy = pos.yz; + rect.xy = rect.yz; tex.xy = tex.yz; } - gl_Position = vec4(pos.xy, 0.0f, 1.0f); + gl_Position = vec4(rect.xy, 0.0f, 1.0f); texCoord_interp = tex.xy; } |