aboutsummaryrefslogtreecommitdiff
path: root/vendor/gioui.org/shader/gio/common.h
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gioui.org/shader/gio/common.h')
-rw-r--r--vendor/gioui.org/shader/gio/common.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/vendor/gioui.org/shader/gio/common.h b/vendor/gioui.org/shader/gio/common.h
new file mode 100644
index 0000000..9b6dc59
--- /dev/null
+++ b/vendor/gioui.org/shader/gio/common.h
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: Unlicense OR MIT
+
+struct m3x2 {
+ vec3 r0;
+ vec3 r1;
+};
+
+// fboTransform is the transformation that cancels the implied transformation
+// between the clip space and the framebuffer. Only two rows are returned. The
+// last is implied to be [0, 0, 1].
+const m3x2 fboTransform = m3x2(
+#if defined(LANG_HLSL) || defined(LANG_MSL) || defined(LANG_MSLIOS)
+ vec3(1.0, 0.0, 0.0),
+ vec3(0.0, -1.0, 0.0)
+#else
+ vec3(1.0, 0.0, 0.0),
+ vec3(0.0, 1.0, 0.0)
+#endif
+);
+
+// windowTransform is the transformation that cancels the implied transformation
+// between framebuffer space and window system coordinates.
+const m3x2 windowTransform = m3x2(
+#if defined(LANG_VULKAN)
+ vec3(1.0, 0.0, 0.0),
+ vec3(0.0, 1.0, 0.0)
+#else
+ vec3(1.0, 0.0, 0.0),
+ vec3(0.0, -1.0, 0.0)
+#endif
+);
+
+vec3 transform3x2(m3x2 t, vec3 v) {
+ return vec3(dot(t.r0, v), dot(t.r1, v), dot(vec3(0.0, 0.0, 1.0), v));
+}