Hello once again!
I have a question that hasn't really been bothering me, but it interests me!
So consider the following simple shader:
cbuffer ConstantObjectBuffer : register(c1)
{
matrix worldMatrix;
matrix viewMatrix;
matrix projectionMatrix;
matrix rotationMatrix;
}
cbuffer ConstantFrameBuffer : register(c0)
{
float4 lDir;
float4 lColor;
}
struct VOut
{
float4 position : SV_POSITION;
float4 color : COLOR;
};
VOut VShader(float4 position : POSITION, float4 normal : NORMAL)
{
VOut output;
output.position = mul(position, worldMatrix);
output.position = mul(output.position, viewMatrix);
output.position = mul(output.position, projectionMatrix);
float4 n = normalize(mul(rotationMatrix, normal));
float diffusebrightness = saturate(dot(n, lDir));
output.color = lColor * diffusebrightness;
return output;
}
float4 PShader(VOut input) : SV_TARGET
{
return input.color;
}
Now in the vertex shaders parameters, it has the vertex position and normal, simple right? But these needs to be defined in the input layout, which I fully understand. But the structure that the vertex shader returns to the pixel shader, called VOut, also have these type definitions. Now what I mean with 'type definitions' (NOT A REAL THING ), is the following:
In the vertex function VOut VShader(float4 position : POSITION, float4 normal : NORMAL), you see that we have a 4 component float called position, and after that we define the input layout schematic: "POSITION". Now the "POSITION" is what I call a type definition .
So back to the vertex returning VOut. In the structure VOut I also define different variables, like .color, and give it a schematic : COLOR, now if I did this in the vertex shader it would crash! But not in this return structure.... So what is the point in defining the non-existing schematic in the vertex return structure?
PS. I know that you have to define SV_POSITION as a schematic, as it's kinda fundamental!
THANKS!