bool RenderDevice::bindBuffers(RenderBatch* renderable) { BufferManager* buffers = activeContext->bufferManager; GeometryBuffer* gb = renderable->getGeometryBuffer().get(); VertexBuffer* vb = buffers->getVertexBuffer(gb).get(); IndexBuffer* ib = buffers->getIndexBuffer(gb).get(); if( !vb ) return false; if( !vb->isBuilt() || gb->needsRebuild ) { // If the vertex buffer is not built yet, then we build it. renderBackend->buildVertexBuffer(vb); } renderBackend->bindVertexBuffer(vb); // If there is no index buffer associated with the geometry, we are done. if( !ib ) goto done; renderBackend->bindIndexBuffer(ib); if( !ib->isBuilt || gb->needsRebuild ) { // If the index buffer is not built, we also need to build it. renderBackend->buildIndexBuffer(ib); } done: gb->needsRebuild = false; return true; }
bool RenderDevice::unbindBuffers(RenderBatch* renderable) { BufferManager* buffers = activeContext->bufferManager; const GeometryBuffer* gb = renderable->getGeometryBuffer().get(); VertexBuffer* vb = buffers->getVertexBuffer(gb).get(); if( !vb ) return false; renderBackend->unbindVertexBuffer(vb); IndexBuffer* ib = buffers->getIndexBuffer(gb).get(); if( ib ) renderBackend->unbindIndexBuffer(ib); return true; }