作業コードに何かを追加しようとしていますが、CreateInputLayout()を呼び出すと [Invalid Arg] エラーが返されます。
テクスチャを追加する前は機能しますが、追加すると失敗します。
エラーなしでコンパイルされたシェーダー ファイル。
レイアウトの仕方が悪いと思います。これは正しいです?
C++ 頂点構造:
struct VertexData{
XMFLOAT3 Pos;
XMFLOAT4 Color;
XMFLOAT2 TexCoord;
};
C++ レイアウト:
D3D11_INPUT_ELEMENT_DESC inputLayout[]={
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 28, D3D11_INPUT_PER_VERTEX_DATA, 0 },
}; uint lSize=sizeof(inputLayout)/sizeof(inputLayout[0]);
シェーダー コード:
// Stuff from DX Tutorial 7
Texture2D txDiffuse : register( t0 );
SamplerState samLinear : register( s0 );
cbuffer ViewData : register(b0){
matrix World;
matrix View;
matrix Projection;
}
struct VS_INPUT{
float4 pos : SV_POSITION;
float4 color : COLOR0;
float2 tex : TEXCOORD0;
};
struct PS_INPUT{
float4 pos : SV_POSITION;
float4 color : COLOR0;
float2 tex : TEXCOORD0;
};
PS_INPUT VS(VS_INPUT input){
PS_INPUT output=(PS_INPUT)0;
output.pos=mul(input.pos, World);
output.pos=mul(output.pos, View);
output.pos=mul(output.pos, Projection);
output.color = input.color;
output.tex = input.tex;
return output;
}
float4 PS(PS_INPUT input) : SV_Target {
return input.color;
}
編集:
シェーダー コードをいろいろいじった後、最初の位置 のセマンティクスを
float4 pos : POSITION;に変更すると、次のようになることがわかりました。
2番目の位置へ: float4 pos : SV_POSITION;
...入力レイアウトが正常に作成されました。
SV_ [システム値] プレフィックスなしで両方を試しましたが、それも失敗しました。なぜ同じにできないのかわかりません。
セマンティクスは少し魔法のようです。これで自分の Q に答える必要があるのか 、それとももっと賢い人がより良い答えをするのを待つべきなのかわかりません.