Так что моя проблема в том, что у меня есть буфер, называемый «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) вернулась как истина, поэтому отображение не сработало. Я читал на 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