接下来我们看下这个wgsl部分
vertex部分
uniforms就需要注意两个值一个binding 一个group
这个在Vulkan里叫set binding 我理解为他是个二维数组。
然后定义了一个结构体用于输出 有builtin变量 location变量
builtin的是position 就是MVP
剩下的1个是uv
这个fragpos是随便的一个变量
struct Uniforms {
modelViewProjectionMatrix : mat4x4<f32>,
}
@binding(0) @group(0) var<uniform> uniforms : Uniforms;
struct VertexOutput {
@builtin(position) Position : vec4<f32>,
@location(0) fragUV : vec2<f32>,
@location(1) fragPosition: vec4<f32>,
}
@vertex
fn main(
@location(0) position : vec4<f32>,
@location(1) uv : vec2<f32>
) -> VertexOutput {
var output : VertexOutput;
output.Position = uniforms.modelViewProjectionMatrix * position;
output.fragUV = uv;
output.fragPosition = 0.5 * (position + vec4<f32>(1.0, 1.0, 1.0, 1.0));
return output;
}
这个片源部分,直接读到从顶点输出的俩变量,哦不 只读了fragpos,直接输出了
@fragment
fn main(
@location(0) fragUV: vec2<f32>,
@location(1) fragPosition: vec4<f32>
) -> @location(0) vec4<f32> {
return fragPosition;
}