D
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