36 lines
895 B
C
36 lines
895 B
C
// 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));
|
||
|
|
}
|