Directx CreateInputLayout()返回E_INVALIDARG

Directx CreateInputLayout()返回E_INVALIDARG,directx,directx-11,Directx,Directx 11,CreateInputLayout正在返回E_INVALIDARG。我试过了,但没用。我添加了D3D11\u INPUT\u PER\u INSTANCE\u DATA标志,因为我正在处理实例,但删除该标志后效果良好。您确定着色器编译和vs\u缓冲区不是零吗?该分号会给您一个编译错误::INSTANCEPOS;) 布局设置不会显示应失败的无效值,因此不在此处的是着色器。此外,您的texcoord偏移量应该是12而不是16考虑到位置格式,渲染可能是虚假的,但在技术上是有效的。在调用D3D11Cre

CreateInputLayout
正在返回
E_INVALIDARG
。我试过了,但没用。我添加了
D3D11\u INPUT\u PER\u INSTANCE\u DATA
标志,因为我正在处理实例,但删除该标志后效果良好。

您确定着色器编译和vs\u缓冲区不是零吗?该分号会给您一个编译错误:
:INSTANCEPOS;)


布局设置不会显示应失败的无效值,因此不在此处的是着色器。此外,您的texcoord偏移量应该是12而不是16考虑到位置格式,渲染可能是虚假的,但在技术上是有效的。

在调用
D3D11CreateDevice
时添加到flags参数,然后在调用失败后查看调试输出。您应该获得有关该问题的更多详细信息。INSTANCEPOS;)。。这是一个打字错误…所以dats不是问题…我把偏移量改为12是我的错误@MooseBoys-感谢这个标志……但是现在,布局被创建了,我只能看到1个对象,而没有呈现任何实例,甚至它的Draw()在循环中被调用。这是另一个需要不同上下文的问题,比如如何绑定缓冲区,所以打开一个新问题,通过添加相互引用来链接它们。
Shader Code 

struct Light
{
    float3 dir;
    float4 ambient;
    float4 diffuse;
};

cbuffer cbPerFrame
{
    Light light;
};

cbuffer cbPerObject
{
    float4x4 WVP;
    float4x4 World;
};

Texture2D ObjTexture;
SamplerState ObjSamplerState;

struct VS_OUTPUT
{
    float4 Pos : SV_POSITION;
    float2 TexCoord : TEXCOORD;
    float3 normal : NORMAL;
    float4 InstancePos : INSTANCEPOS;
};

VS_OUTPUT VS(float4 inPos : POSITION, float2 inTexCoord : TEXCOORD, float3 normal : NORMAL , float4 InstancePos : INSTANCEPOS;)
{
    VS_OUTPUT output;

    output.Pos.x+=InstancePos.x;
    output.Pos.y+=InstancePos.y;
    output.Pos.z+=InstancePos.z;

    output.Pos = mul(inPos, WVP);
    output.TexCoord = inTexCoord;

    output.normal = mul(normal, World);
    output.normal = normalize(output.normal);

    return output;
}

float4 PS(VS_OUTPUT input) : SV_TARGET
{
    input.normal = normalize(input.normal);

    float4 diffuse = ObjTexture.Sample( ObjSamplerState, input.TexCoord );

    float3 finalColor;
    finalColor = diffuse * light.ambient;
    finalColor += saturate(dot(light.dir, input.normal) * light.diffuse * diffuse);

    clip(diffuse.a - .10);

    return float4(finalColor, diffuse.a);
}

//// creation

D3D11_INPUT_ELEMENT_DESC layout[] =
{
    { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },  
    { "TEXCOORD0", 0, DXGI_FORMAT_R32G32_FLOAT,    0, 16, D3D11_INPUT_PER_VERTEX_DATA, 0 },  
    { "NORMAL",  0, DXGI_FORMAT_R32G32B32_FLOAT,  0, 20, D3D11_INPUT_PER_VERTEX_DATA, 0},
    { "INSTANCEPOS", 0, DXGI_FORMAT_R32G32B32_FLOAT, 1, 0, D3D11_INPUT_PER_INSTANCE_DATA, 1} 
};


hr = D3DX11CompileFromFile(L"Effects.fx", 0, 0, "VS", "vs_4_0", 0, 0, 0, &VS_Buffer, 0, 0);
hr = D3DX11CompileFromFile(L"Effects.fx", 0, 0, "PS", "ps_4_0", 0, 0, 0, &PS_Buffer, 0, 0);


//Create the Shader Objects
hr = d3d11Device->CreateVertexShader(VS_Buffer->GetBufferPointer(), VS_Buffer->GetBufferSize(), NULL, &VS);
hr = d3d11Device->CreatePixelShader(PS_Buffer->GetBufferPointer(), PS_Buffer->GetBufferSize(), NULL, &PS);

//===============Create the Input Layout==================================
hr = d3d11Device->CreateInputLayout( layout, numElements, VS_Buffer->GetBufferPointer(), VS_Buffer->GetBufferSize(), &vertLayout );