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