diff --git a/radiantcore/rendersystem/backend/ObjectRenderer.cpp b/radiantcore/rendersystem/backend/ObjectRenderer.cpp index 4ee0ce9e0a..4ae84241a0 100644 --- a/radiantcore/rendersystem/backend/ObjectRenderer.cpp +++ b/radiantcore/rendersystem/backend/ObjectRenderer.cpp @@ -19,13 +19,20 @@ void ObjectRenderer::SubmitObject(IRenderableObject& object, IGeometryStore& sto glFrontFace(GL_CCW); } + // Orient the object glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + glMultMatrixd(object.getObjectTransform()); - auto renderParams = store.getRenderParameters(object.getStorageLocation()); + // Submit the geometry of this single slot + SubmitGeometry(object.getStorageLocation(), store); - glPushMatrix(); + glPopMatrix(); +} - glMultMatrixd(object.getObjectTransform()); +void ObjectRenderer::SubmitGeometry(IGeometryStore::Slot slot, IGeometryStore& store) +{ + auto renderParams = store.getRenderParameters(slot); glVertexPointer(3, GL_DOUBLE, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->vertex); glColorPointer(4, GL_DOUBLE, sizeof(ArbitraryMeshVertex), &renderParams.bufferStart->colour); @@ -40,8 +47,6 @@ void ObjectRenderer::SubmitObject(IRenderableObject& object, IGeometryStore& sto glDrawElementsBaseVertex(GL_TRIANGLES, static_cast(renderParams.indexCount), GL_UNSIGNED_INT, renderParams.firstIndex, static_cast(renderParams.firstVertex)); - - glPopMatrix(); } } diff --git a/radiantcore/rendersystem/backend/ObjectRenderer.h b/radiantcore/rendersystem/backend/ObjectRenderer.h index 3aa8dce98c..9df7d77a93 100644 --- a/radiantcore/rendersystem/backend/ObjectRenderer.h +++ b/radiantcore/rendersystem/backend/ObjectRenderer.h @@ -11,7 +11,11 @@ class IRenderableObject; class ObjectRenderer { public: + // Draws the given object, sets up transform and submits geometry static void SubmitObject(IRenderableObject& object, IGeometryStore& store); + + // Draws the geometry of the given slot, no transforms + static void SubmitGeometry(IGeometryStore::Slot slot, IGeometryStore& store); }; }