所以我的問題是我有一個名爲「lightbuffer」的緩衝區,它有一堆東西在裏面,我希望能夠修改它的一個或多個元素,重寫整個事情。具體來說,如果我做的:在DirectX,C++中映射緩衝區
result = devicecontext->Map(lightbuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
if(FAILED(result)) { die("map lightbuffer"); }
dataPtr2 = (dxapp::LightBufferType*)mappedResource.pData;
dataPtr2->diffuse = diffuse;
devicecontext->Unmap(lightbuffer, 0);
此代碼幾乎刪除除了因爲我用「D3D11_MAP_WRITE_DISCARD」「漫」的一切。我嘗試使用「D3D11_MAP_WRITE」,所以其餘的lightbuffer不會搞砸,但FAILED(result)返回爲true,所以映射不起作用。我讀的MSDN,我需要在緩衝器描述使用「D3D11_CPU_ACCESS_WRITE」如果我想這樣做,但我做的,我的緩衝器描述如下:
lightBufferDesc.Usage = D3D11_USAGE_DYNAMIC;
lightBufferDesc.ByteWidth = sizeof(LightBufferType);
lightBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
lightBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
lightBufferDesc.MiscFlags = 0;
lightBufferDesc.StructureByteStride = 0;
result = mydevice->CreateBuffer(&lightBufferDesc, NULL, &mylightbuffer);
if(FAILED(result)) { return false; }
那麼,我需要做的是能夠修改緩衝區的元素而不用重寫整個事物?
啓用[DirectX調試圖層](http://msdn.microsoft.com/en-us/library/windows/desktop/jj200584%28v=vs.85%29.aspx)並從其輸出中發佈消息。 – Drop