Seite 1 von 1

DX11 - ConstantBuffer

Verfasst: 23.12.2013, 17:04
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?

Re: DX11 - ConstantBuffer

Verfasst: 23.12.2013, 17:39
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.

Re: DX11 - ConstantBuffer

Verfasst: 24.12.2013, 17:35
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ß

Re: DX11 - ConstantBuffer

Verfasst: 24.12.2013, 17:39
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...