From 8e63c9dd441c58032cbe9d48beb01e8ae0553e87 Mon Sep 17 00:00:00 2001 From: codereader Date: Sun, 20 Sep 2020 17:48:46 +0200 Subject: [PATCH] #5336: Move shader programs availability methods from OpenGLBinding interface to RenderSystem --- include/igl.h | 7 ------- include/irender.h | 6 ++++++ libs/wxutil/preview/RenderPreview.cpp | 2 +- radiant/camera/CamWnd.cpp | 4 ++-- radiant/render/OpenGLModule.cpp | 15 +-------------- radiant/render/OpenGLModule.h | 5 ----- .../rendersystem/OpenGLRenderSystem.cpp | 18 ++++++++++++++---- radiantcore/rendersystem/OpenGLRenderSystem.h | 5 +++++ .../rendersystem/backend/OpenGLShader.cpp | 2 +- 9 files changed, 30 insertions(+), 34 deletions(-) diff --git a/include/igl.h b/include/igl.h index d9a47f9b42..6d3c4d8458 100644 --- a/include/igl.h +++ b/include/igl.h @@ -73,13 +73,6 @@ class OpenGLBinding : // Normally, you want to use the debug::assertNoGlErrors() wrapper which does nothing in release builds virtual void assertNoErrors() = 0; - // Returns true if openGL supports ARB or GLSL lighting - virtual bool shaderProgramsAvailable() const = 0; - - // Sets the flag whether shader programs are available. - // This is set by the RenderSystem once the extensions are initialised - virtual void setShaderProgramsAvailable(bool available) = 0; - virtual int getFontHeight() = 0; /// \brief Renders \p string at the current raster-position of the current context. diff --git a/include/irender.h b/include/irender.h index 80fdc9194e..62667525bf 100644 --- a/include/irender.h +++ b/include/irender.h @@ -646,6 +646,12 @@ class RenderSystem // Initialises the OpenGL extensions virtual void extensionsInitialised() = 0; + // Returns true if openGL supports ARB or GLSL lighting + virtual bool shaderProgramsAvailable() const = 0; + + // Sets the flag whether shader programs are available. + virtual void setShaderProgramsAvailable(bool available) = 0; + // Subscription to get notified as soon as the openGL extensions have been initialised virtual sigc::signal signal_extensionsInitialised() = 0; }; diff --git a/libs/wxutil/preview/RenderPreview.cpp b/libs/wxutil/preview/RenderPreview.cpp index 84c213ae4d..dc41e46391 100644 --- a/libs/wxutil/preview/RenderPreview.cpp +++ b/libs/wxutil/preview/RenderPreview.cpp @@ -213,7 +213,7 @@ void RenderPreview::initialisePreview() glLightfv(GL_LIGHT1, GL_DIFFUSE, l1Dif); glLightfv(GL_LIGHT1, GL_POSITION, l1Pos); - if (GlobalOpenGL().shaderProgramsAvailable()) + if (_renderSystem->shaderProgramsAvailable()) { setLightingModeEnabled(false); } diff --git a/radiant/camera/CamWnd.cpp b/radiant/camera/CamWnd.cpp index cadee0712c..ba2ad470fa 100644 --- a/radiant/camera/CamWnd.cpp +++ b/radiant/camera/CamWnd.cpp @@ -203,7 +203,7 @@ void CamWnd::constructToolbar() const wxToolBarToolBase* texturedBtn = getToolBarToolByLabel(camToolbar, "texturedBtn"); const wxToolBarToolBase* lightingBtn = getToolBarToolByLabel(camToolbar, "lightingBtn"); - if (!GlobalOpenGL().shaderProgramsAvailable()) + if (!GlobalRenderSystem().shaderProgramsAvailable()) { //lightingBtn->set_sensitive(false); camToolbar->EnableTool(lightingBtn->GetId(), false); @@ -279,7 +279,7 @@ void CamWnd::onGLExtensionsInitialised() wxToolBar* camToolbar = findNamedObject(_mainWxWidget, "CamToolbar"); const wxToolBarToolBase* lightingBtn = getToolBarToolByLabel(camToolbar, "lightingBtn"); - camToolbar->EnableTool(lightingBtn->GetId(), GlobalOpenGL().shaderProgramsAvailable()); + camToolbar->EnableTool(lightingBtn->GetId(), GlobalRenderSystem().shaderProgramsAvailable()); } void CamWnd::setFarClipButtonSensitivity() diff --git a/radiant/render/OpenGLModule.cpp b/radiant/render/OpenGLModule.cpp index dcd4c6401c..360f43cff1 100644 --- a/radiant/render/OpenGLModule.cpp +++ b/radiant/render/OpenGLModule.cpp @@ -14,8 +14,7 @@ #include OpenGLModule::OpenGLModule() : - _unknownError("Unknown error."), - _shaderProgramsAvailable(false) + _unknownError("Unknown error.") {} void OpenGLModule::assertNoErrors() @@ -64,18 +63,6 @@ void OpenGLModule::sharedContextDestroyed() _font.reset(); } -bool OpenGLModule::shaderProgramsAvailable() const -{ - return _shaderProgramsAvailable; -} - -// Sets the flag whether shader programs are available. -// This is set by the RenderSystem once the extensions are initialised -void OpenGLModule::setShaderProgramsAvailable(bool available) -{ - _shaderProgramsAvailable = available; -} - void OpenGLModule::drawString(const std::string& string) const { ftglRenderFont(_font->getFtglFont(),string.c_str(),0xFFFF);//FTGL_RENDER_ALL); diff --git a/radiant/render/OpenGLModule.h b/radiant/render/OpenGLModule.h index c5f26f7a24..d4835adde2 100644 --- a/radiant/render/OpenGLModule.h +++ b/radiant/render/OpenGLModule.h @@ -17,8 +17,6 @@ class OpenGLModule : wxutil::GLFontPtr _font; - bool _shaderProgramsAvailable; - sigc::connection _contextCreated; sigc::connection _contextDestroyed; @@ -31,9 +29,6 @@ class OpenGLModule : void drawChar(char character) const override; int getFontHeight() override; - bool shaderProgramsAvailable() const override; - void setShaderProgramsAvailable(bool available) override; - // RegisterableModule implementation const std::string& getName() const override; const StringSet& getDependencies() const override; diff --git a/radiantcore/rendersystem/OpenGLRenderSystem.cpp b/radiantcore/rendersystem/OpenGLRenderSystem.cpp index 7ff2254bd0..9c5376017d 100644 --- a/radiantcore/rendersystem/OpenGLRenderSystem.cpp +++ b/radiantcore/rendersystem/OpenGLRenderSystem.cpp @@ -39,6 +39,7 @@ namespace { */ OpenGLRenderSystem::OpenGLRenderSystem() : _realised(false), + _shaderProgramsAvailable(false), _glProgramFactory(std::make_shared()), _currentShaderProgram(SHADER_PROGRAM_NONE), _time(0), @@ -217,8 +218,7 @@ void OpenGLRenderSystem::realise() _realised = true; - if (GlobalOpenGL().shaderProgramsAvailable() - && getCurrentShaderProgram() != SHADER_PROGRAM_NONE) + if (shaderProgramsAvailable() && getCurrentShaderProgram() != SHADER_PROGRAM_NONE) { // Realise the GLPrograms _glProgramFactory->realise(); @@ -252,7 +252,7 @@ void OpenGLRenderSystem::unrealise() } if (GlobalOpenGLContext().getSharedContext() && - GlobalOpenGL().shaderProgramsAvailable() && + shaderProgramsAvailable() && getCurrentShaderProgram() != SHADER_PROGRAM_NONE) { // Unrealise the GLPrograms @@ -333,7 +333,7 @@ void OpenGLRenderSystem::extensionsInitialised() bool shaderProgramsAvailable = glslLightingAvailable || arbLightingAvailable; // Set the flag in the openGL module - GlobalOpenGL().setShaderProgramsAvailable(shaderProgramsAvailable); + setShaderProgramsAvailable(shaderProgramsAvailable); // Inform the user of missing extensions if (!shaderProgramsAvailable) @@ -386,6 +386,16 @@ sigc::signal OpenGLRenderSystem::signal_extensionsInitialised() return _sigExtensionsInitialised; } +bool OpenGLRenderSystem::shaderProgramsAvailable() const +{ + return _shaderProgramsAvailable; +} + +void OpenGLRenderSystem::setShaderProgramsAvailable(bool available) +{ + _shaderProgramsAvailable = available; +} + LightList& OpenGLRenderSystem::attachLitObject(LitObject& object) { return m_lightLists.insert( diff --git a/radiantcore/rendersystem/OpenGLRenderSystem.h b/radiantcore/rendersystem/OpenGLRenderSystem.h index 8bea88be8a..448f49d228 100644 --- a/radiantcore/rendersystem/OpenGLRenderSystem.h +++ b/radiantcore/rendersystem/OpenGLRenderSystem.h @@ -31,6 +31,8 @@ class OpenGLRenderSystem // whether this module has been realised bool _realised; + bool _shaderProgramsAvailable; + // The GL program manager to acquire vfps GLProgramFactoryPtr _glProgramFactory; @@ -89,6 +91,9 @@ class OpenGLRenderSystem void extensionsInitialised() override; sigc::signal signal_extensionsInitialised() override; + bool shaderProgramsAvailable() const override; + void setShaderProgramsAvailable(bool available) override; + LightList& attachLitObject(LitObject& cullable) override; void detachLitObject(LitObject& cullable) override; void litObjectChanged(LitObject& cullable) override; diff --git a/radiantcore/rendersystem/backend/OpenGLShader.cpp b/radiantcore/rendersystem/backend/OpenGLShader.cpp index 282a5931f4..24387f0de6 100644 --- a/radiantcore/rendersystem/backend/OpenGLShader.cpp +++ b/radiantcore/rendersystem/backend/OpenGLShader.cpp @@ -262,7 +262,7 @@ OpenGLState& OpenGLShader::appendDefaultPass() // Test if we can render in bump map mode bool OpenGLShader::canUseLightingMode() const { - return GlobalOpenGL().shaderProgramsAvailable() && + return _renderSystem.shaderProgramsAvailable() && _renderSystem.getCurrentShaderProgram() == RenderSystem::SHADER_PROGRAM_INTERACTION; }