2017-05-10 7 views
0

私はVS2015、directx11を使用していますピクセルシェーダー入力バッファーについて

私のVertex Shaderコードです。

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とtextcoord情報のためのfloat2を持っている構造体のフォームをretoolするとき、それは細かいagianを働きます。私はこのレンダリングパイプラインの仕組みを理解していないと思います。なぜこれがどういう意味ですか、パイプラインの仕組みを教えてください。ありがとうございました。

+0

の終わりにそれを置くことができます。 –

答えて

0

DirectXシェーダは、シェーダステージ間で入力と出力を一致させる必要があります。そうしないと、レジスタが整列しなくなります。デバッグレイヤーを使用して実行すると、警告が表示されます。

あなたのピクセルシェーダはsv_positionを必要としない場合、あなたはそれが暗黙のうちにピクセルシェーダ処理の一部だとして `` SV_POSITION``は頂点シェーダから必要な出力であるVertexOut

+0

ああ、それは整列です。この整列は私を疲れさせる。ありがとうございました –

関連する問題