Graphics/UberShader: Add config callback

This commit is contained in:
Jérôme Leclercq
2021-09-05 15:46:59 +02:00
parent b6c3988bbe
commit 732bb89a86
6 changed files with 100 additions and 5 deletions

View File

@@ -2,7 +2,13 @@ option HasDiffuseTexture: bool = false;
option HasAlphaTexture: bool = false;
option AlphaTest: bool = false;
const HasUV = HasDiffuseTexture || HasAlphaTexture;
// Vertex declaration related options
option PosLocation: i32 = -1;
option ColorLocation: i32 = -1;
option UvLocation: i32 = -1;
const HasVertexColor = (ColorLocation >= 0);
const HasUV = (UvLocation >= 0) && (HasDiffuseTexture || HasAlphaTexture);
[layout(std140)]
struct BasicSettings
@@ -44,7 +50,8 @@ external
// Fragment stage
struct FragIn
{
[location(0), cond(HasUV)] uv: vec2<f32>
[location(0), cond(HasUV)] uv: vec2<f32>,
[location(1), cond(HasVertexColor)] color: vec4<f32>
}
struct FragOut
@@ -56,6 +63,11 @@ struct FragOut
fn main(input: FragIn) -> FragOut
{
let diffuseColor = settings.DiffuseColor;
const if (HasVertexColor)
//TODO: diffuseColor *= input.color;
diffuseColor = diffuseColor * input.color;
const if (HasDiffuseTexture)
// TODO: diffuseColor *= MaterialDiffuseMap.Sample(input.uv)
diffuseColor = diffuseColor * MaterialDiffuseMap.Sample(input.uv);
@@ -78,13 +90,15 @@ fn main(input: FragIn) -> FragOut
// Vertex stage
struct VertIn
{
[location(0)] pos: vec3<f32>,
[location(1), cond(HasUV)] uv: vec2<f32>
[location(PosLocation)] pos: vec3<f32>,
[location(ColorLocation), cond(HasVertexColor)] color: vec4<f32>,
[location(UvLocation), cond(HasUV)] uv: vec2<f32>
}
struct VertOut
{
[location(0), cond(HasUV)] uv: vec2<f32>,
[location(1), cond(HasVertexColor)] color: vec4<f32>,
[builtin(position)] position: vec4<f32>
}
@@ -94,6 +108,9 @@ fn main(input: VertIn) -> VertOut
let output: VertOut;
output.position = viewerData.viewProjMatrix * instanceData.worldMatrix * vec4<f32>(input.pos, 1.0);
const if (HasVertexColor)
output.color = input.color;
const if (HasUV)
output.uv = input.uv;