2024-11-25 14:51:31 +01:00
|
|
|
struct Uniforms {
|
|
|
|
float2 U0;
|
|
|
|
};
|
|
|
|
|
2020-09-09 18:11:15 +02:00
|
|
|
struct Attributes {
|
2022-05-28 15:47:06 +02:00
|
|
|
float2 M0;
|
|
|
|
float2 M1;
|
|
|
|
float4 M2;
|
2020-09-09 18:11:15 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct Varyings {
|
|
|
|
float4 Position [[position]];
|
|
|
|
float2 M0;
|
|
|
|
float4 M1;
|
|
|
|
};
|
|
|
|
|
|
|
|
vertex Varyings Vertex(
|
|
|
|
uint vid [[vertex_id]],
|
|
|
|
const device Attributes* attributes [[buffer(0)]],
|
2024-11-25 14:51:31 +01:00
|
|
|
constant Uniforms& uniforms [[buffer(1)]]) {
|
2020-09-09 18:11:15 +02:00
|
|
|
Varyings varyings = {};
|
|
|
|
float4x4 l0 = float4x4(0);
|
2024-11-25 14:51:31 +01:00
|
|
|
l0 = float4x4((2.0) / ((uniforms.U0).x), 0.0, 0.0, 0.0, 0.0, (2.0) / ((uniforms.U0).y), 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, -1.0, -1.0, 0.0, 1.0);
|
2020-09-09 18:11:15 +02:00
|
|
|
varyings.Position = (l0) * (float4(attributes[vid].M0, 0.0, 1.0));
|
|
|
|
varyings.M0 = attributes[vid].M1;
|
|
|
|
varyings.M1 = attributes[vid].M2;
|
|
|
|
return varyings;
|
|
|
|
}
|
|
|
|
|
|
|
|
fragment float4 Fragment(
|
|
|
|
Varyings varyings [[stage_in]],
|
2024-11-25 14:51:31 +01:00
|
|
|
constant Uniforms& uniforms [[buffer(0)]]) {
|
2022-08-16 18:01:23 +02:00
|
|
|
return float4((varyings.Position).x, (varyings.M0).y, (varyings.M1).z, 1.0);
|
2020-09-09 18:11:15 +02:00
|
|
|
}
|