From eacb2eaee4ff2f3916aa800f406c725d339a8a2a Mon Sep 17 00:00:00 2001 From: codereader Date: Sun, 30 Jan 2022 18:42:15 +0100 Subject: [PATCH] #5893: Patches attach suitable geometry to the render entity, they are appearing in lit render mode now --- libs/render/RenderableGeometry.h | 12 ++++++------ radiantcore/patch/PatchNode.cpp | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/libs/render/RenderableGeometry.h b/libs/render/RenderableGeometry.h index 3d4502b1ba..769e03041b 100644 --- a/libs/render/RenderableGeometry.h +++ b/libs/render/RenderableGeometry.h @@ -162,7 +162,8 @@ class RenderableGeometry : } _renderEntity = entity; - _renderEntity->addRenderable(getRenderAdapter(), _shader); + ensureRenderAdapter(); + _renderEntity->addRenderable(_renderAdapter, _shader); } void detachFromEntity() @@ -174,23 +175,22 @@ class RenderableGeometry : } } +protected: + /** - * Returns the adapter class suitable to attach this geometry as surface to a render entity + * Creates the adapter class suitable to attach this geometry as surface to a render entity * The surface will have an identity transform (all vertices specified in world coords). * This adapter will be valid as long as this geometry is attached to the IGeometryRenderer, * otherwise no access to the stored vertices/indices is possible. */ - const IRenderableObject::Ptr& getRenderAdapter() + void ensureRenderAdapter() { if (!_renderAdapter) { _renderAdapter = std::make_shared(*this); } - - return _renderAdapter; } -protected: // Removes the geometry from the attached shader. Does nothing if no geometry has been added. void removeGeometry() { diff --git a/radiantcore/patch/PatchNode.cpp b/radiantcore/patch/PatchNode.cpp index e2e968be36..4ee5f485b4 100644 --- a/radiantcore/patch/PatchNode.cpp +++ b/radiantcore/patch/PatchNode.cpp @@ -347,6 +347,7 @@ void PatchNode::onPreRender(const VolumeTest& volume) if (volume.fill()) { _renderableSurfaceSolid.update(m_patch._shader.getGLShader()); + _renderableSurfaceSolid.attachToEntity(_renderEntity); } else {