2017-05-10 10 views
0

VS2015, directx11을 사용하고 있습니다.픽셀 쉐이더 입력 버퍼 정보

내 버텍스 쉐이더 코드입니다.

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; 
} 

는이 픽셀 쉐이더 입력 버퍼 내 픽셀 쉐이더 코드

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; 
} 

, 나는이 코드에 위치 버퍼가 필요하지 않습니다. 그래서 나는이 코드에서 float4 PosH를 삭제했다. 그러면 픽셀 쉐이더가 작동하지 않습니다. 검은 색 맥주 상자가 보입니다. 위치 정보에 대해 float4가 있고 텍스트 䂈 스 정보에 대해 float2가있는 구조체 양식을 리 트롤하면 잘 작동합니다. 이 렌더링 파이프 라인이 어떻게 작동하는지 이해할 수 없다고 생각합니다. 왜 이것이, 어떻게 파이프 라인이 작동하는지 설명해 주시겠습니까? 고맙습니다.

+0

의 말에 넣을 수있는''는 암시 적으로 픽셀 쉐이더 처리의 일부로서 SV_POSITION''는 버텍스 쉐이더에서 필요한 출력됩니다. –

답변

0

DirectX 셰이더는 셰이더 단계 사이에서 일치하는 입력 및 출력을 가져야합니다. 그렇지 않으면 레지스터가 정렬되지 못합니다. 디버그 레이어로 실행하면 경고 메시지가 나타납니다.

당신의 픽셀 쉐이더가 sv_position를 필요로하지 않는 경우, 당신은 VertexOut

+0

아, 맞습니다. 이 정렬은 나를 피곤하게 만든다. 고맙습니다 –