option HAS_DIFFUSE_TEXTURE: bool; option HAS_ALPHA_TEXTURE: bool; option ALPHA_TEST: bool; [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 { [set(0), binding(0)] viewerData: uniform, [set(1), binding(0)] instanceData: uniform, [set(2), binding(0)] settings: uniform, [set(2), binding(2)] MaterialAlphaMap: sampler2D, [set(2), binding(1)] MaterialDiffuseMap: sampler2D } struct InputData { [location(0)] vertNormal: vec3, [location(1)] vertUV: vec2, [location(2)] vertPos: vec3 } struct OutputData { [location(0)] diffuseMap: vec4, [location(1)] normalMap: vec4, [location(2)] positionMap: vec4 } [entry(frag)] fn main(input: InputData) -> OutputData { let textureColor = select_opt(HAS_DIFFUSE_TEXTURE, MaterialDiffuseMap.Sample(input.vertUV) * settings.DiffuseColor, settings.DiffuseColor); let alpha = select_opt(HAS_ALPHA_TEXTURE, MaterialAlphaMap.Sample(input.vertUV).x * textureColor.w, 1.0); /*if ((select_opt(ALPHA_TEST, var0.w < settings.AlphaThreshold, false)) == (true)) { discard; }*/ let output: OutputData; output.diffuseMap = textureColor; output.normalMap = vec4((vec3(1.0, 1.0, 1.0) + input.vertNormal) * 0.5, 1.0); output.positionMap = vec4(input.vertPos, 1.0); return output; }