DX11 - ConstantBuffer

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Raven280438
Establishment
Beiträge: 140
Registriert: 03.10.2010, 20:14

DX11 - ConstantBuffer

Beitrag von Raven280438 »

Hi,

ich habe ein Problem mit meinem VertexShader.

Folgender Code funktioniert:

Code: Alles auswählen

struct ShaderInputStruct
{
    D3DXVECTOR2 CameraPosition;
    D3DXVECTOR2 ScreenSize;
};

[...]

D3D11_BUFFER_DESC ShaderInputBufferDesc;
ShaderInputBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
ShaderInputBufferDesc.ByteWidth = sizeof(ShaderInputStruct);
ShaderInputBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
ShaderInputBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
ShaderInputBufferDesc.MiscFlags = 0;
ShaderInputBufferDesc.StructureByteStride = 0;

result = this->GetGrafics()->GetDXDevice()->CreateBuffer(&ShaderInputBufferDesc, NULL, &this->ShaderInputBuffer);
Sobald ich die Struktur aber in

Code: Alles auswählen

struct ShaderInputStruct
{
	D3DXVECTOR2 CameraPosition;
	D3DXVECTOR2 ScreenSize;
	float ZoomFactor;
};
ändere, bekomm ich beim Erstellen des Buffers ein "E_INVALIDARG"


Woran kann das liegen?
anonym
Beiträge: 79
Registriert: 15.07.2009, 07:35
Kontaktdaten:

Re: DX11 - ConstantBuffer

Beitrag von anonym »

Raven280438 hat geschrieben:Woran kann das liegen?
Dokumentation nicht gelesen!
http://msdn.microsoft.com/de-de/library/windows/desktop/ff476092(v=vs.85).aspx hat geschrieben:If the bind flag is D3D11_BIND_CONSTANT_BUFFER then the ByteWidth value must be in multiples of 16, and less than or equal to D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT.
Raven280438
Establishment
Beiträge: 140
Registriert: 03.10.2010, 20:14

Re: DX11 - ConstantBuffer

Beitrag von Raven280438 »

Hi,

und was kann man da machen?

Code: Alles auswählen

struct ShaderInputStruct
	{
		D3DXVECTOR2 CameraPosition;
		D3DXVECTOR2 ScreenSize;
		float ZoomFactor;
		float Dummy1;
		float Dummy2;
		float Dummy3;
	};
Das kann ja nicht der Weg sein, oder?


Gruß
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: DX11 - ConstantBuffer

Beitrag von dot »

Du kannst dem struct auch 16 Byte Alignment geben:

Code: Alles auswählen

struct __declspec(align(16)) ShaderInputStruct
{
  D3DXVECTOR2 CameraPosition;
  D3DXVECTOR2 ScreenSize;
  float ZoomFactor;
};
Dazu sei aber gesagt, dass das von Direct3D erwartete Layout nicht in allen Fällen mit dem Layout von structs in MSVC übereinstimmt...
Antworten