mirror of
https://github.com/Rezmason/matrix.git
synced 2026-04-21 15:29:30 -07:00
Organizing shader functions' input and output types. I don't know if this is a good idea in the long run, but it seems useful in the short term.
This commit is contained in:
@@ -4,6 +4,8 @@ let TWO_PI:f32 = 6.28318530718;
|
|||||||
let SQRT_2:f32 = 1.4142135623730951;
|
let SQRT_2:f32 = 1.4142135623730951;
|
||||||
let SQRT_5:f32 = 2.23606797749979;
|
let SQRT_5:f32 = 2.23606797749979;
|
||||||
|
|
||||||
|
// Bound resources
|
||||||
|
|
||||||
[[block]] struct Config {
|
[[block]] struct Config {
|
||||||
// common
|
// common
|
||||||
animationSpeed : f32;
|
animationSpeed : f32;
|
||||||
@@ -66,6 +68,23 @@ let SQRT_5:f32 = 2.23606797749979;
|
|||||||
};
|
};
|
||||||
[[group(0), binding(5)]] var<uniform> scene:Scene;
|
[[group(0), binding(5)]] var<uniform> scene:Scene;
|
||||||
|
|
||||||
|
// Shader params
|
||||||
|
|
||||||
|
struct VertInput {
|
||||||
|
[[builtin(vertex_index)]] index:u32;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct VertOutput {
|
||||||
|
[[builtin(position)]] Position:vec4<f32>;
|
||||||
|
[[location(0)]] UV:vec2<f32>;
|
||||||
|
[[location(1)]] Channel:vec3<f32>;
|
||||||
|
[[location(2)]] Glyph:vec4<f32>;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct FragOutput {
|
||||||
|
[[location(0)]] color:vec4<f32>;
|
||||||
|
};
|
||||||
|
|
||||||
// Helper functions for generating randomness, borrowed from elsewhere
|
// Helper functions for generating randomness, borrowed from elsewhere
|
||||||
|
|
||||||
fn randomFloat( uv:vec2<f32> ) -> f32 {
|
fn randomFloat( uv:vec2<f32> ) -> f32 {
|
||||||
@@ -87,17 +106,12 @@ fn wobble(x:f32) -> f32 {
|
|||||||
|
|
||||||
// Vertex shader
|
// Vertex shader
|
||||||
|
|
||||||
struct VertexOutput {
|
[[stage(vertex)]] fn vertMain(input: VertInput) -> VertOutput {
|
||||||
[[builtin(position)]] Position:vec4<f32>;
|
|
||||||
[[location(0)]] UV:vec2<f32>;
|
|
||||||
};
|
|
||||||
|
|
||||||
[[stage(vertex)]] fn vertMain([[builtin(vertex_index)]] VertexIndex:u32) -> VertexOutput {
|
|
||||||
|
|
||||||
var timePlaceholder = time.seconds;
|
var timePlaceholder = time.seconds;
|
||||||
|
|
||||||
|
|
||||||
var i = i32(VertexIndex);
|
var i = i32(input.index);
|
||||||
var quadIndex = i / NUM_VERTICES_PER_QUAD;
|
var quadIndex = i / NUM_VERTICES_PER_QUAD;
|
||||||
|
|
||||||
var cornerPosition = vec2<f32>(
|
var cornerPosition = vec2<f32>(
|
||||||
@@ -130,18 +144,20 @@ struct VertexOutput {
|
|||||||
pos.x = pos.x / config.glyphHeightToWidth;
|
pos.x = pos.x / config.glyphHeightToWidth;
|
||||||
pos = scene.camera * scene.transform * pos;
|
pos = scene.camera * scene.transform * pos;
|
||||||
|
|
||||||
return VertexOutput(
|
return VertOutput(
|
||||||
pos,
|
pos,
|
||||||
cornerPosition
|
cornerPosition,
|
||||||
|
vec3<f32>(0.0), // channel
|
||||||
|
vec4<f32>(0.0) // glyph
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fragment shader
|
// Fragment shader
|
||||||
|
|
||||||
[[stage(fragment)]] fn fragMain([[location(0)]] UV:vec2<f32>) -> [[location(0)]] vec4<f32> {
|
[[stage(fragment)]] fn fragMain(input: VertOutput) -> FragOutput {
|
||||||
var color:vec4<f32> = textureSample(msdfTexture, msdfSampler, UV / f32(msdf.glyphTextureColumns));
|
var color:vec4<f32> = textureSample(msdfTexture, msdfSampler, input.UV / f32(msdf.glyphTextureColumns));
|
||||||
|
|
||||||
color = vec4<f32>(UV, 0.5, 1.0);
|
return FragOutput(
|
||||||
|
color
|
||||||
return color;
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user