Problem mit Constantbuffer



  • Guten Morgen,

    ich hab mir vor kurzen ein Shader, für ein einfaches Beleuchtungssystem geschrieben. Hab dann im Shader, die globalen Variablen im Constantbuffer zusammengefasst und hab dann in mein C++ Programm die Struktur mit einer Licht- und Materialstruktur erweitert.
    Sieht dann so aus.
    Shader:

    struct SLight
    {
        int Type;
        float4 Diffuse;
        float4 Ambient;
        // usw.
    };
    
    struct SMaterial
    {
       float4 Diffuse;
       float4 Ambient;
       // usw.
    };
    
    cbuffer Buffer : register(b0)
    {
        matrix World;
        matrix View;
        matrix Projection;
    
        SLight Light;
        SMaterial Material;
    };
    

    Im C++ Code sieht es so aus

    struct SLight
    {
        LightType Type;
        CColor Diffuse;
        CColor Ambient;
        // usw.
    };
    
    struct SMaterial
    {
       CColor Diffuse;
       CColor Ambient;
       // usw.
    };
    
    struct ConstantBuffer
    {
       CMatrix World, View, Projection;
       SLight Light;
       SMaterial Material;
    };
    

    So wenn ich jetzt den Constantbuffer erstellen will, wirft die Funktion den Fehler "E_INVALIDARG". Der Constantbuffer lässt sich ohne die Licht- und Materialstruktur normal erstellen. Was ich dann versucht habe ist, ein zweiten Constantbuffer zu erstellen, der nur die Licht- und Materialstruktur hat, aber da kommt auch der Fehler "E_INVALIDARG", ich hab auch natürlich im Shader Code ein zweiten cbuffer geschrieben.
    Mein Constantbuffer erstelle ich so:

    Desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
    Desc.ByteWidth = Size;
    Desc.Usage = Usage; // Ist D3D11_USAGE_DYNAMIC
    Desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
    

    Warum lässt sich der erste Constantbuffer so erstellen, aber ohne Licht und Material, und warum lässt sich der zweite überhaupt nicht erstellen?

    Vielen Dank im voraus
    Mfg Darkblade


Anmelden zum Antworten