Skip to content

Commit

Permalink
#5336: Move shader programs availability methods from OpenGLBinding i…
Browse files Browse the repository at this point in the history
…nterface to RenderSystem
  • Loading branch information
codereader committed Sep 20, 2020
1 parent 8bbf340 commit 8e63c9d
Show file tree
Hide file tree
Showing 9 changed files with 30 additions and 34 deletions.
7 changes: 0 additions & 7 deletions include/igl.h
Expand Up @@ -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.
Expand Down
6 changes: 6 additions & 0 deletions include/irender.h
Expand Up @@ -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<void> signal_extensionsInitialised() = 0;
};
Expand Down
2 changes: 1 addition & 1 deletion libs/wxutil/preview/RenderPreview.cpp
Expand Up @@ -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);
}
Expand Down
4 changes: 2 additions & 2 deletions radiant/camera/CamWnd.cpp
Expand Up @@ -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);
Expand Down Expand Up @@ -279,7 +279,7 @@ void CamWnd::onGLExtensionsInitialised()
wxToolBar* camToolbar = findNamedObject<wxToolBar>(_mainWxWidget, "CamToolbar");
const wxToolBarToolBase* lightingBtn = getToolBarToolByLabel(camToolbar, "lightingBtn");

camToolbar->EnableTool(lightingBtn->GetId(), GlobalOpenGL().shaderProgramsAvailable());
camToolbar->EnableTool(lightingBtn->GetId(), GlobalRenderSystem().shaderProgramsAvailable());
}

void CamWnd::setFarClipButtonSensitivity()
Expand Down
15 changes: 1 addition & 14 deletions radiant/render/OpenGLModule.cpp
Expand Up @@ -14,8 +14,7 @@
#include <FTGL/ftgl.h>

OpenGLModule::OpenGLModule() :
_unknownError("Unknown error."),
_shaderProgramsAvailable(false)
_unknownError("Unknown error.")
{}

void OpenGLModule::assertNoErrors()
Expand Down Expand Up @@ -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);
Expand Down
5 changes: 0 additions & 5 deletions radiant/render/OpenGLModule.h
Expand Up @@ -17,8 +17,6 @@ class OpenGLModule :

wxutil::GLFontPtr _font;

bool _shaderProgramsAvailable;

sigc::connection _contextCreated;
sigc::connection _contextDestroyed;

Expand All @@ -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;
Expand Down
18 changes: 14 additions & 4 deletions radiantcore/rendersystem/OpenGLRenderSystem.cpp
Expand Up @@ -39,6 +39,7 @@ namespace {
*/
OpenGLRenderSystem::OpenGLRenderSystem() :
_realised(false),
_shaderProgramsAvailable(false),
_glProgramFactory(std::make_shared<GLProgramFactory>()),
_currentShaderProgram(SHADER_PROGRAM_NONE),
_time(0),
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -252,7 +252,7 @@ void OpenGLRenderSystem::unrealise()
}

if (GlobalOpenGLContext().getSharedContext() &&
GlobalOpenGL().shaderProgramsAvailable() &&
shaderProgramsAvailable() &&
getCurrentShaderProgram() != SHADER_PROGRAM_NONE)
{
// Unrealise the GLPrograms
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -386,6 +386,16 @@ sigc::signal<void> 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(
Expand Down
5 changes: 5 additions & 0 deletions radiantcore/rendersystem/OpenGLRenderSystem.h
Expand Up @@ -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;

Expand Down Expand Up @@ -89,6 +91,9 @@ class OpenGLRenderSystem
void extensionsInitialised() override;
sigc::signal<void> 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;
Expand Down
2 changes: 1 addition & 1 deletion radiantcore/rendersystem/backend/OpenGLShader.cpp
Expand Up @@ -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;
}

Expand Down

0 comments on commit 8e63c9d

Please sign in to comment.