D3D11: Fixed dynamic index/vertex buffer update. Issue #601.
This commit is contained in:
parent
61b78529af
commit
5a03a03b95
@ -2324,7 +2324,7 @@ namespace bgfx
|
||||
DynamicIndexBuffer& dib = m_dynamicIndexBuffers[handle.idx];
|
||||
dib.m_handle.idx = uint16_t(ptr>>32);
|
||||
dib.m_offset = uint32_t(ptr);
|
||||
dib.m_size = size;
|
||||
dib.m_size = _num * indexSize;
|
||||
dib.m_startIndex = bx::strideAlign(dib.m_offset, indexSize)/indexSize;
|
||||
dib.m_flags = _flags;
|
||||
|
||||
@ -2469,9 +2469,9 @@ namespace bgfx
|
||||
DynamicVertexBuffer& dvb = m_dynamicVertexBuffers[handle.idx];
|
||||
dvb.m_handle.idx = uint16_t(ptr>>32);
|
||||
dvb.m_offset = uint32_t(ptr);
|
||||
dvb.m_size = size;
|
||||
dvb.m_size = _num * _decl.m_stride;
|
||||
dvb.m_startVertex = bx::strideAlign(dvb.m_offset, _decl.m_stride)/_decl.m_stride;
|
||||
dvb.m_numVertices = dvb.m_size/_decl.m_stride;
|
||||
dvb.m_numVertices = _num;
|
||||
dvb.m_stride = _decl.m_stride;
|
||||
dvb.m_decl = declHandle;
|
||||
dvb.m_flags = _flags;
|
||||
|
@ -1975,7 +1975,7 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
{
|
||||
ID3D11DeviceContext* deviceCtx = m_deviceCtx;
|
||||
|
||||
m_indexBuffers [_blitter.m_ib->handle.idx].update(0, _numIndices*2, _blitter.m_ib->data);
|
||||
m_indexBuffers [_blitter.m_ib->handle.idx].update(0, _numIndices*2, _blitter.m_ib->data, true);
|
||||
m_vertexBuffers[_blitter.m_vb->handle.idx].update(0, numVertices*_blitter.m_decl.m_stride, _blitter.m_vb->data, true);
|
||||
|
||||
deviceCtx->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
@ -3619,8 +3619,6 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
|
||||
#if 0
|
||||
BX_UNUSED(_discard);
|
||||
ID3D11Device* device = s_renderD3D11->m_device;
|
||||
|
||||
D3D11_BUFFER_DESC desc;
|
||||
desc.ByteWidth = _size;
|
||||
desc.Usage = D3D11_USAGE_STAGING;
|
||||
@ -3634,17 +3632,19 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
srd.SysMemPitch = 0;
|
||||
srd.SysMemSlicePitch = 0;
|
||||
|
||||
D3D11_BOX srcBox;
|
||||
srcBox.left = 0;
|
||||
srcBox.top = 0;
|
||||
srcBox.front = 0;
|
||||
srcBox.right = _size;
|
||||
srcBox.bottom = 1;
|
||||
srcBox.back = 1;
|
||||
|
||||
ID3D11Device* device = s_renderD3D11->m_device;
|
||||
|
||||
ID3D11Buffer* ptr;
|
||||
DX_CHECK(device->CreateBuffer(&desc, &srd, &ptr) );
|
||||
|
||||
D3D11_BOX box;
|
||||
box.left = 0;
|
||||
box.top = 0;
|
||||
box.front = 0;
|
||||
box.right = _size;
|
||||
box.bottom = 1;
|
||||
box.back = 1;
|
||||
|
||||
deviceCtx->CopySubresourceRegion(m_ptr
|
||||
, 0
|
||||
, _offset
|
||||
@ -3652,14 +3652,16 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
, 0
|
||||
, ptr
|
||||
, 0
|
||||
, &box
|
||||
, &srcBox
|
||||
);
|
||||
|
||||
DX_RELEASE(ptr, 0);
|
||||
#else
|
||||
D3D11_MAPPED_SUBRESOURCE mapped;
|
||||
BX_UNUSED(_discard);
|
||||
D3D11_MAP type = D3D11_MAP_WRITE_DISCARD;
|
||||
D3D11_MAP type = _discard
|
||||
? D3D11_MAP_WRITE_DISCARD
|
||||
: D3D11_MAP_WRITE_NO_OVERWRITE
|
||||
;
|
||||
DX_CHECK(deviceCtx->Map(m_ptr, 0, type, 0, &mapped) );
|
||||
memcpy( (uint8_t*)mapped.pData + _offset, _data, _size);
|
||||
deviceCtx->Unmap(m_ptr, 0);
|
||||
@ -4666,13 +4668,13 @@ BX_PRAGMA_DIAGNOSTIC_POP();
|
||||
if (0 < _render->m_iboffset)
|
||||
{
|
||||
TransientIndexBuffer* ib = _render->m_transientIb;
|
||||
m_indexBuffers[ib->handle.idx].update(0, _render->m_iboffset, ib->data);
|
||||
m_indexBuffers[ib->handle.idx].update(0, _render->m_iboffset, ib->data, true);
|
||||
}
|
||||
|
||||
if (0 < _render->m_vboffset)
|
||||
{
|
||||
TransientVertexBuffer* vb = _render->m_transientVb;
|
||||
m_vertexBuffers[vb->handle.idx].update(0, _render->m_vboffset, vb->data);
|
||||
m_vertexBuffers[vb->handle.idx].update(0, _render->m_vboffset, vb->data, true);
|
||||
}
|
||||
|
||||
_render->sort();
|
||||
|
Loading…
Reference in New Issue
Block a user