2017-05-10 2 views
0

Ich verwende VS2015, directx11über Pixel Shader Eingangspuffer

Hier ist meine Vertex Shader-Code.

cbuffer cbperobject { 
    float4x4 gWorldViewProj; 
}; 

struct VertexIn { 
    float3 Pos : POSITION; 
    float2 tex : TEXCOORD0; 
}; 

struct VertexOut { 
    float4 PosH : SV_POSITION; 
    float2 tex : TEXCOORD0; 

}; 

VertexOut main(VertexIn vin) 
{ 
    VertexOut vOut; 

    vOut.PosH = mul(float4(vin.Pos, 1.0f), gWorldViewProj); 
    vOut.tex = vin.tex; 
    return vOut; 
} 

und das ist mein Pixel-Shader-Code ist

Texture2D shaderTexture; 
SamplerState SampleType; 
struct VertexIn { 
    float4 PosH : SV_POSITION; 
    float2 tex : TEXCOORD0; 
}; 


float4 main(VertexIn Pin) : SV_TARGET 
{ 
    float4 textureColor; 
    textureColor = shaderTexture.Sample(SampleType, Pin.tex); 
    return textureColor; 
} 

Für Pixel-Shadern Eingangspuffer, ich weiß nicht Positionspuffer in diesem Code benötigen. Also habe ich float4 PosH in diesem Code gelöscht. dann Pixel Shader funktioniert nicht Ich sehe schwarze Bierkiste. Wenn ich die Strukturform, die float4 für position info und float2 für textcoord info enthält, zurück gebe, funktioniert es gut. Ich denke, ich verstehe nicht, wie diese Rendering-Pipeline funktioniert. Können Sie mir erklären, warum das so ist und wie die Pipeline funktioniert? Danke.

+0

Die '' SV_POSITION'' ist eine erforderliche Ausgabe von dem Vertex Shader, wie es implizit Teil der Pixel-Shader-Verarbeitung ist. –

Antwort

0

DirectX-Shader müssen einen übereinstimmenden Ein- und Ausgang zwischen den Shader-Stufen haben oder die Register werden nicht übereinstimmen. Wenn Sie mit der Debug-Ebene arbeiten, hätten Sie eine Warnung erhalten.

Wenn Ihre Pixel-Shader nicht sv_position benötigen, können Sie es am Ende setzen VertexOut

+0

oh es ist die Ausrichtung. Diese Ausrichtung macht mich müde. Danke –

Verwandte Themen