Ich bin wirklich frustriert, weil mein cbufer nicht aktualisiert wird. Das ist mein VS:
cbuffer MatrixBuffer: register(b0)
{
float4x4 worldViewProj;
};
struct VertexIn
{
float4 Pos : POSITION;
float4 Color: COLOR;
};
struct PixelIn
{
float4 PosH : SV_POSITION;
float4 Color: COLOR;
};
PixelIn VS (VertexIn vin)
{
PixelIn vout;
vin.Pos.w = 1.0f;
vout.PosH = mul(vin.Pos, worldViewProj);
vout.Color = vin.Color;
return vout;
}
PixelIn VS1(VertexIn vin)
{
PixelIn vout;
vin.Pos.w = 1.0f;
vout.PosH = vin.Pos;
vout.Color = vin.Color;
return vout;
}
Bei Verwendung von VS1 wird korrekt gezeichnet, bei Verwendung von VS wird jedoch nichts gezeichnet?
Hier ist mein CBUFFER-Update-Code
bool Game::UpdateShaders()
{
HRESULT result;
D3D11_MAPPED_SUBRESOURCE mappedResource;
MatrixBufferType* dataPtr;
worldViewProjM = worldM * viewM * projM;
worldViewProjM = XMMatrixTranspose(worldViewProjM);
result = md3dDeviceContext->Map(mMatrixBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
if (FAILED(result))
{
MessageBoxW(mMainWnd, L"FAOE:", 0, 0);
return false;
}
dataPtr = (MatrixBufferType*)mappedResource.pData;
dataPtr->worldViewProj = worldViewProjM;
md3dDeviceContext->Unmap(mMatrixBuffer, 0);
int NBuffers = 0;
md3dDeviceContext->VSSetConstantBuffers(0, 1, &mMatrixBuffer);
//md3dDeviceContext->PSSetConstantBuffers(0, 1, &mMatrixBuffer);
return true;
}
Hier ist meine MATRIXBUFFERTYPE-Struktur:
struct MatrixBufferType
{
XMMATRIX worldViewProj;
};
Dies wird aufgerufen, nachdem ich meine Tiefenschablonenansicht gelöscht und die Zielansicht gerendert habe. Weiß jemand, warum mein CBUFFER nicht aktualisiert wird?
Danke im Voraus.
Antworten:
Sie müssen Ihre Subressource aktualisieren (wenn ich mich nicht irre):
quelle
UpdateSubresource
oderMap
/Discard
aktualisieren. Siehe Windows to Reality: