diff --git a/include/irender.h b/include/irender.h index 5c07334a2a..62c0bac39a 100644 --- a/include/irender.h +++ b/include/irender.h @@ -1,6 +1,7 @@ #pragma once #include "imodule.h" +#include "iwindingrenderer.h" #include #include @@ -386,7 +387,8 @@ typedef std::shared_ptr MaterialPtr; * which use it -- the actual rendering is performed by traversing a list of * Shaders and rendering the geometry attached to each one. */ -class Shader +class Shader : + public render::IWindingRenderer { public: // Observer interface to get notified on (un-)realisation diff --git a/radiantcore/rendersystem/backend/OpenGLShader.cpp b/radiantcore/rendersystem/backend/OpenGLShader.cpp index 46955e75c3..f9f088981d 100644 --- a/radiantcore/rendersystem/backend/OpenGLShader.cpp +++ b/radiantcore/rendersystem/backend/OpenGLShader.cpp @@ -164,6 +164,21 @@ bool OpenGLShader::hasSurfaces() const return _vertexBuffer && _vertexBuffer->getNumVertices() > 0; } +IWindingRenderer::Slot OpenGLShader::addWinding(const std::vector& vertices) +{ + return WindingRenderer::addWinding(vertices); +} + +void OpenGLShader::removeWinding(Slot slot) +{ + WindingRenderer::removeWinding(slot); +} + +void OpenGLShader::updateWinding(Slot slot, const std::vector& vertices) +{ + WindingRenderer::updateWinding(slot, vertices); +} + void OpenGLShader::setVisible(bool visible) { // Control visibility by inserting or removing our shader passes from the GL diff --git a/radiantcore/rendersystem/backend/OpenGLShader.h b/radiantcore/rendersystem/backend/OpenGLShader.h index db43b9c8d4..cba947984a 100644 --- a/radiantcore/rendersystem/backend/OpenGLShader.h +++ b/radiantcore/rendersystem/backend/OpenGLShader.h @@ -6,6 +6,7 @@ #include "ishaders.h" #include "string/string.h" #include "render/IndexedVertexBuffer.h" +#include "render/WindingRenderer.h" #include #include @@ -19,7 +20,8 @@ class OpenGLRenderSystem; * Implementation of the Shader class. */ class OpenGLShader final : - public Shader + public Shader, + protected WindingRenderer { private: // Name used to construct the shader @@ -103,6 +105,10 @@ class OpenGLShader final : bool hasSurfaces() const; void drawSurfaces(); + Slot addWinding(const std::vector& vertices) override; + void removeWinding(Slot slot) override; + void updateWinding(Slot slot, const std::vector& vertices) override; + void setVisible(bool visible) override; bool isVisible() const override; void incrementUsed() override;