diff options
author | Benjamin Otte <otte@redhat.com> | 2023-05-15 02:24:50 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2023-05-17 02:25:32 +0200 |
commit | b0627a67b0ab94d77320025cf260733632a18975 (patch) | |
tree | 159080324e74f923eb9d8a33e1cc4abe32d15bcf | |
parent | fef7529b6c2c9a0f48a8ce2e62d84c22763c4380 (diff) | |
download | gtk+-b0627a67b0ab94d77320025cf260733632a18975.tar.gz |
vulkan: Split generic code off
No need to duplicate code in shaders when it can be shared.
-rw-r--r-- | gsk/vulkan/resources/color.vert | 18 | ||||
-rw-r--r-- | gsk/vulkan/resources/common.vert.glsl | 34 | ||||
-rw-r--r-- | gsk/vulkan/resources/meson.build | 1 |
3 files changed, 39 insertions, 14 deletions
diff --git a/gsk/vulkan/resources/color.vert b/gsk/vulkan/resources/color.vert index cc2a853b5c..bda02426e9 100644 --- a/gsk/vulkan/resources/color.vert +++ b/gsk/vulkan/resources/color.vert @@ -1,6 +1,6 @@ #version 420 core -#include "clip.vert.glsl" +#include "common.vert.glsl" #include "rect.vert.glsl" layout(location = 0) in vec4 inRect; @@ -10,19 +10,9 @@ layout(location = 0) out vec2 outPos; layout(location = 1) out flat Rect outRect; layout(location = 2) out flat vec4 outColor; -vec2 offsets[6] = { vec2(0.0, 0.0), - vec2(1.0, 0.0), - vec2(0.0, 1.0), - vec2(0.0, 1.0), - vec2(1.0, 0.0), - vec2(1.0, 1.0) }; - void main() { - Rect rect = rect_round_larger (clip_rect (rect_from_gsk (inRect))); - - vec2 pos = mix (rect.bounds.xy, rect.bounds.zw, offsets[gl_VertexIndex]); - gl_Position = push.mvp * vec4 (pos, 0.0, 1.0); - outPos = pos; - outRect = rect_from_gsk (inRect); + Rect r = rect_from_gsk (inRect); + outPos = set_position_from_rect (r); + outRect = r; outColor = inColor; } diff --git a/gsk/vulkan/resources/common.vert.glsl b/gsk/vulkan/resources/common.vert.glsl new file mode 100644 index 0000000000..0798b9413f --- /dev/null +++ b/gsk/vulkan/resources/common.vert.glsl @@ -0,0 +1,34 @@ +#ifndef _COMMON_VERT_ +#define _COMMON_VERT_ + +#include "clip.vert.glsl" +#include "constants.glsl" +#include "rect.glsl" + +vec2 offsets[6] = { vec2(0.0, 0.0), + vec2(1.0, 0.0), + vec2(0.0, 1.0), + vec2(0.0, 1.0), + vec2(1.0, 0.0), + vec2(1.0, 1.0) }; + +vec2 +set_position_from_rect (Rect rect) +{ + Rect r = rect_round_larger (clip_rect (rect)); + + vec2 pos = mix (r.bounds.xy, r.bounds.zw, offsets[gl_VertexIndex]); + gl_Position = push.mvp * vec4 (pos, 0.0, 1.0); + + return pos; +} + +vec2 +scale_coord (vec2 in_pos, + Rect in_rect, + Rect out_rect) +{ + return out_rect.bounds.xy + (in_pos - in_rect.bounds.xy) / rect_size (in_rect) * rect_size (out_rect); +} + +#endif diff --git a/gsk/vulkan/resources/meson.build b/gsk/vulkan/resources/meson.build index 2bcbd03ba3..46a065ad09 100644 --- a/gsk/vulkan/resources/meson.build +++ b/gsk/vulkan/resources/meson.build @@ -1,6 +1,7 @@ gsk_private_vulkan_include_shaders = [ 'clip.frag.glsl', 'clip.vert.glsl', + 'common.vert.glsl', 'constants.glsl', 'rect.glsl', 'rect.frag.glsl', |