mirror of
https://github.com/bkaradzic/bgfx.git
synced 2026-02-19 13:32:59 +01:00
WIP: Adding vertex stream support.
This commit is contained in:
@@ -4021,22 +4021,22 @@ namespace bgfx { namespace d3d9
|
||||
}
|
||||
|
||||
if (programChanged
|
||||
|| currentState.m_vertexBuffer.idx != draw.m_vertexBuffer.idx
|
||||
|| currentState.m_stream[0].m_handle.idx != draw.m_stream[0].m_handle.idx
|
||||
|| currentState.m_instanceDataBuffer.idx != draw.m_instanceDataBuffer.idx
|
||||
|| currentState.m_instanceDataOffset != draw.m_instanceDataOffset
|
||||
|| currentState.m_instanceDataStride != draw.m_instanceDataStride)
|
||||
|| currentState.m_instanceDataOffset != draw.m_instanceDataOffset
|
||||
|| currentState.m_instanceDataStride != draw.m_instanceDataStride)
|
||||
{
|
||||
currentState.m_vertexBuffer = draw.m_vertexBuffer;
|
||||
currentState.m_stream[0].m_handle = draw.m_stream[0].m_handle;
|
||||
currentState.m_instanceDataBuffer.idx = draw.m_instanceDataBuffer.idx;
|
||||
currentState.m_instanceDataOffset = draw.m_instanceDataOffset;
|
||||
currentState.m_instanceDataStride = draw.m_instanceDataStride;
|
||||
currentState.m_instanceDataOffset = draw.m_instanceDataOffset;
|
||||
currentState.m_instanceDataStride = draw.m_instanceDataStride;
|
||||
|
||||
uint16_t handle = draw.m_vertexBuffer.idx;
|
||||
uint16_t handle = draw.m_stream[0].m_handle.idx;
|
||||
if (invalidHandle != handle)
|
||||
{
|
||||
const VertexBufferD3D9& vb = m_vertexBuffers[handle];
|
||||
|
||||
uint16_t decl = !isValid(vb.m_decl) ? draw.m_vertexDecl.idx : vb.m_decl.idx;
|
||||
uint16_t decl = !isValid(vb.m_decl) ? draw.m_stream[0].m_decl.idx : vb.m_decl.idx;
|
||||
const VertexDeclD3D9& vertexDecl = m_vertexDecls[decl];
|
||||
DX_CHECK(device->SetStreamSource(0, vb.m_ptr, 0, vertexDecl.m_decl.m_stride) );
|
||||
|
||||
@@ -4082,13 +4082,13 @@ namespace bgfx { namespace d3d9
|
||||
}
|
||||
}
|
||||
|
||||
if (isValid(currentState.m_vertexBuffer) )
|
||||
if (isValid(currentState.m_stream[0].m_handle) )
|
||||
{
|
||||
uint32_t numVertices = draw.m_numVertices;
|
||||
if (UINT32_MAX == numVertices)
|
||||
{
|
||||
const VertexBufferD3D9& vb = m_vertexBuffers[currentState.m_vertexBuffer.idx];
|
||||
uint16_t decl = !isValid(vb.m_decl) ? draw.m_vertexDecl.idx : vb.m_decl.idx;
|
||||
const VertexBufferD3D9& vb = m_vertexBuffers[currentState.m_stream[0].m_handle.idx];
|
||||
uint16_t decl = !isValid(vb.m_decl) ? draw.m_stream[0].m_decl.idx : vb.m_decl.idx;
|
||||
const VertexDeclD3D9& vertexDecl = m_vertexDecls[decl];
|
||||
numVertices = vb.m_size/vertexDecl.m_decl.m_stride;
|
||||
}
|
||||
@@ -4115,7 +4115,7 @@ namespace bgfx { namespace d3d9
|
||||
numPrimsRendered = numPrimsSubmitted*draw.m_numInstances;
|
||||
|
||||
DX_CHECK(device->DrawIndexedPrimitive(prim.m_type
|
||||
, draw.m_startVertex
|
||||
, draw.m_stream[0].m_startVertex
|
||||
, 0
|
||||
, numVertices
|
||||
, 0
|
||||
@@ -4130,7 +4130,7 @@ namespace bgfx { namespace d3d9
|
||||
numPrimsRendered = numPrimsSubmitted*draw.m_numInstances;
|
||||
|
||||
DX_CHECK(device->DrawIndexedPrimitive(prim.m_type
|
||||
, draw.m_startVertex
|
||||
, draw.m_stream[0].m_startVertex
|
||||
, 0
|
||||
, numVertices
|
||||
, draw.m_startIndex
|
||||
@@ -4145,7 +4145,7 @@ namespace bgfx { namespace d3d9
|
||||
numPrimsRendered = numPrimsSubmitted*draw.m_numInstances;
|
||||
|
||||
DX_CHECK(device->DrawPrimitive(prim.m_type
|
||||
, draw.m_startVertex
|
||||
, draw.m_stream[0].m_startVertex
|
||||
, numPrimsSubmitted
|
||||
) );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user