Skip to main content
gamedev.net
🔒 Locked

DX11 - Vertex To Pixel Shaders - Return Types

Started by Veiled Glitch May 24, 2013 at 5:44 PM 2 replies 3k views
Original Post
Veiled Glitch
Veiled Glitch

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 happy.png ), 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 wink.png .

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? ohmy.png

PS. I know that you have to define SV_POSITION as a schematic, as it's kinda fundamental! tongue.png

THANKS!

Veiled Glitch
Veiled Glitch

So the semantic is automatically created for each variable, which is sen't to the pixel shader?

Because I could type in some crazy names and it would still work.

insan3
insan3

float5(shaderspixel color: COLOR) :SV TARGET

{

return COLOR;

}

if (COLOR == !=COLOR)

{

return 0;

}

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.