[layout(std140)] struct BasicSettings { AlphaThreshold: f32, DiffuseColor: vec4 } [layout(std140)] struct InstanceData { worldMatrix: mat4, invWorldMatrix: mat4 } [layout(std140)] struct ViewerData { projectionMatrix: mat4, invProjectionMatrix: mat4, viewMatrix: mat4, invViewMatrix: mat4, viewProjMatrix: mat4, invViewProjMatrix: mat4, renderTargetSize: vec2, invRenderTargetSize: vec2, eyePosition: vec3 } external { [binding(5)] viewerData: uniform, [binding(4)] instanceData: uniform, [binding(3)] settings: uniform } struct InputData { [location(0)] inPos: vec3, [location(1)] inNormals: vec3, [location(2)] inTexCoord: vec2 } struct OutputData { [location(0)] vertNormal: vec3, [location(1)] vertUV: vec2, [location(2)] vertPos: vec3, [builtin(position)] position: vec4 } [entry(vert)] fn main(input: InputData) -> OutputData { let worldPos = instanceData.worldMatrix * vec4(input.inPos, 1.0); let output: OutputData; output.vertUV = input.inTexCoord; output.vertNormal = input.inNormals; output.vertPos = worldPos.xyz; output.position = viewerData.projectionMatrix * viewerData.viewMatrix * instanceData.worldMatrix * vec4(input.inPos, 1.0); return output; }