diff --git a/radiantcore/rendersystem/backend/FullBrightRenderer.cpp b/radiantcore/rendersystem/backend/FullBrightRenderer.cpp index 1da0afa9b8..6c7b61bebf 100644 --- a/radiantcore/rendersystem/backend/FullBrightRenderer.cpp +++ b/radiantcore/rendersystem/backend/FullBrightRenderer.cpp @@ -55,20 +55,33 @@ IRenderResult::Ptr FullBrightRenderer::render(RenderStateFlags globalstate, cons for (const auto& [_, pass] : _sortedStates) { // Render the OpenGLShaderPass - if (pass->empty() || pass->hasRenderables()) continue; + if (pass->empty()) continue; if (pass->getShader().isVisible() && pass->isApplicableTo(_renderViewType)) { // Apply our state to the current state object pass->evaluateStagesAndApplyState(current, globalstate, time, nullptr); - pass->submitSurfaces(view); + + if (!pass->hasRenderables()) + { + // All regular geometry like patches, brushes, meshes, single vertices + pass->submitSurfaces(view); + } + else + { + // Selection overlays are processed by OpenGLRenderable + pass->submitRenderables(current); + } } + + pass->clearRenderables(); } // Unbind the geometry buffer and draw the rest of the renderables vertexBuffer->unbind(); indexBuffer->unbind(); +#if 0 // Run all the passes with OpenGLRenderables for (const auto& [_, pass] : _sortedStates) { @@ -84,7 +97,7 @@ IRenderResult::Ptr FullBrightRenderer::render(RenderStateFlags globalstate, cons pass->clearRenderables(); } - +#endif cleanupState(); return std::make_shared(view.getCullStats()); diff --git a/radiantcore/rendersystem/backend/GeometryRenderer.h b/radiantcore/rendersystem/backend/GeometryRenderer.h index 62e29c182b..ce3088af99 100644 --- a/radiantcore/rendersystem/backend/GeometryRenderer.h +++ b/radiantcore/rendersystem/backend/GeometryRenderer.h @@ -139,6 +139,7 @@ class GeometryRenderer : auto& slotInfo = _slots.at(slot); auto& group = getGroupByIndex(slotInfo.groupIndex); +#if 0 auto renderParms = _store.getRenderParameters(slotInfo.storageHandle); auto [vertexBuffer, indexBuffer] = _store.getBufferObjects(); @@ -146,10 +147,12 @@ class GeometryRenderer : indexBuffer->bind(); ObjectRenderer::InitAttributePointers(renderParms.bufferStart); +#endif ObjectRenderer::SubmitGeometry(slotInfo.storageHandle, group.primitiveMode, _store); - +#if 0 vertexBuffer->unbind(); indexBuffer->unbind(); +#endif } IGeometryStore::Slot getGeometryStorageLocation(Slot slot) override diff --git a/radiantcore/rendersystem/backend/OpenGLShader.cpp b/radiantcore/rendersystem/backend/OpenGLShader.cpp index 8b524ea389..9a1f2c5f8f 100644 --- a/radiantcore/rendersystem/backend/OpenGLShader.cpp +++ b/radiantcore/rendersystem/backend/OpenGLShader.cpp @@ -221,7 +221,7 @@ bool OpenGLShader::hasWindings() const void OpenGLShader::renderWinding(IWindingRenderer::RenderMode mode, IWindingRenderer::Slot slot) { - _windingRenderer->renderWinding(mode, slot); + //_windingRenderer->renderWinding(mode, slot); } void OpenGLShader::setVisible(bool visible) diff --git a/radiantcore/rendersystem/backend/SurfaceRenderer.h b/radiantcore/rendersystem/backend/SurfaceRenderer.h index af2c92544e..a687baa676 100644 --- a/radiantcore/rendersystem/backend/SurfaceRenderer.h +++ b/radiantcore/rendersystem/backend/SurfaceRenderer.h @@ -98,7 +98,7 @@ class SurfaceRenderer : void renderSurface(Slot slot) override { - renderSlot(_surfaces.at(slot), true); + renderSlot(_surfaces.at(slot), false); } IGeometryStore::Slot getSurfaceStorageLocation(ISurfaceRenderer::Slot slot) override @@ -157,6 +157,7 @@ class SurfaceRenderer : throw std::logic_error("Cannot render unprepared slot, ensure calling SurfaceRenderer::prepareForRendering first"); } +#if 0 if (bindBuffer) { auto renderParams = _store.getRenderParameters(surface.getStorageLocation()); @@ -172,6 +173,7 @@ class SurfaceRenderer : indexBuffer->unbind(); } else +#endif { ObjectRenderer::SubmitObject(surface, _store); }