void GFXD3D9Device::drawIndexedPrimitive( GFXPrimitiveType primType, U32 startVertex, U32 minIndex, U32 numVerts, U32 startIndex, U32 primitiveCount ) { // This is done to avoid the function call overhead if possible if( mStateDirty ) updateStates(); if (mCurrentShaderConstBuffer) setShaderConstBufferInternal(mCurrentShaderConstBuffer); AssertFatal( mCurrentOpenAllocVB == NULL, "Calling drawIndexedPrimitive() when a vertex buffer is still open for editing" ); AssertFatal( mCurrentVB != NULL, "Trying to call drawIndexedPrimitive with no current vertex buffer, call setVertexBuffer()" ); AssertFatal( mCurrentOpenAllocPB == NULL, "Calling drawIndexedPrimitive() when a index buffer is still open for editing" ); AssertFatal( mCurrentPB != NULL, "Trying to call drawIndexedPrimitive with no current index buffer, call setIndexBuffer()" ); D3D9Assert( mD3DDevice->DrawIndexedPrimitive( GFXD3D9PrimType[primType], mCurrentVB->mVolatileStart + startVertex, /* mCurrentPB->mVolatileStart + */ minIndex, numVerts, mCurrentPB->mVolatileStart + startIndex, primitiveCount ), "Failed to draw indexed primitive" ); mDeviceStatistics.mDrawCalls++; mDeviceStatistics.mPolyCount += primitiveCount; }
void GFXD3D9Device::drawIndexedPrimitive( GFXPrimitiveType primType, U32 startVertex, U32 minIndex, U32 numVerts, U32 startIndex, U32 primitiveCount ) { // This is done to avoid the function call overhead if possible if( mStateDirty ) updateStates(); if (mCurrentShaderConstBuffer) setShaderConstBufferInternal(mCurrentShaderConstBuffer); AssertFatal( mCurrentPB != NULL, "Trying to call drawIndexedPrimitive with no current index buffer, call setIndexBuffer()" ); if ( mVolatileVB ) startVertex += mVolatileVB->mVolatileStart; D3D9Assert( mD3DDevice->DrawIndexedPrimitive( GFXD3D9PrimType[primType], startVertex, /* mCurrentPB->mVolatileStart + */ minIndex, numVerts, mCurrentPB->mVolatileStart + startIndex, primitiveCount ), "Failed to draw indexed primitive" ); mDeviceStatistics.mDrawCalls++; if ( mVertexBufferFrequency[0] > 1 ) mDeviceStatistics.mPolyCount += primitiveCount * mVertexBufferFrequency[0]; else mDeviceStatistics.mPolyCount += primitiveCount; }
inline void GFXGLDevice::preDrawPrimitive() { if( mStateDirty ) { updateStates(); } if(mCurrentShaderConstBuffer) setShaderConstBufferInternal(mCurrentShaderConstBuffer); if( mNeedUpdateVertexAttrib ) { AssertFatal(mCurrVertexDecl, ""); const GFXGLVertexDecl* decl = static_cast<const GFXGLVertexDecl*>(mCurrVertexDecl); for(int i = 0; i < getNumVertexStreams(); ++i) { if(mCurrentVB[i]) { mCurrentVB[i]->prepare(i, mCurrentVB_Divisor[i]); // GL_ARB_vertex_attrib_binding decl->prepareBuffer_old( i, mCurrentVB[i]->mBuffer, mCurrentVB_Divisor[i] ); // old vertex buffer/format } } decl->updateActiveVertexAttrib( GFXGL->getOpenglCache()->getCacheVertexAttribActive() ); } mNeedUpdateVertexAttrib = false; }
void GFXD3D9Device::drawPrimitive( GFXPrimitiveType primType, U32 vertexStart, U32 primitiveCount ) { // This is done to avoid the function call overhead if possible if( mStateDirty ) updateStates(); if (mCurrentShaderConstBuffer) setShaderConstBufferInternal(mCurrentShaderConstBuffer); if ( mVolatileVB ) vertexStart += mVolatileVB->mVolatileStart; D3D9Assert( mD3DDevice->DrawPrimitive( GFXD3D9PrimType[primType], vertexStart, primitiveCount ), "Failed to draw primitives" ); mDeviceStatistics.mDrawCalls++; if ( mVertexBufferFrequency[0] > 1 ) mDeviceStatistics.mPolyCount += primitiveCount * mVertexBufferFrequency[0]; else mDeviceStatistics.mPolyCount += primitiveCount; }