HLSL Vertex Shader und Instancing



  • Folgendes Problem:
    Der Nachfolgende Vertex Shader lässt sich ohne Probleme kompilieren (vs_5_0). Allerdings kommt es beim Aufruf von ID3D11Device::CreateVertexShader zum Fehler.

    Fehler schrieb:

    D3D11 ERROR: ID3D11Device::CreateVertexShader: Encoded Vertex Shader size doesn't match specified size. [ STATE_CREATION ERROR #166: CREATEVERTEXSHADER_INVALIDSHADERBYTECODE]

    Der Teil mit dem "doesn´t match specified size" ist Bullshit. Aber wo ist dann der Fehler?

    cbuffer WorldView {
    
    	float4x4 WorldViewMatrix;
    	float4x4 ProjectionMatrix;
    
    }
    
    cbuffer InstanceData {
    
    	float4x4 ModelMatrix[256];
    
    }
    
    struct VertexInputType {
    
    	float4 pos : POSITION;
    	float2 tex : TEXCOORD;
    	float3 nml : NORMAL;
    
    };
    
    struct Output {
    
    	float4 pos : SV_POSITION;
    	float2 tex : TEXCOORD;
    	float3 nml : NORMAL;
    
    };
    
    Output main(VertexInputType vit, uint instanceId : SV_InstanceId) {
    
    	Output outp;
    
    	outp.pos = mul(vit.pos, ModelMatrix[instanceId]);
    	outp.pos = mul(outp.pos, WorldViewMatrix);
    	outp.pos = mul(outp.pos, ProjectionMatrix);
    
    	outp.tex = vit.tex;
    
    	outp.nml = mul(vit.nml, (float3x3)ModelMatrix[instanceId]);
    	outp.nml = mul(vit.nml, (float3x3)WorldViewMatrix);
    
    	return outp;
    
    }
    

    Wenn ich sämtliche "instanceId" variablen durch konstanten ersetze funktioniert alles.
    Irgendjemand ne Idee?



  • Hat sich erledigt, hab bisher meine Shader selber mit D3DCompile kompiliert. Hab das jetzt mal von VS übernehmen lassen und schon funktioniert alles.


Anmelden zum Antworten