Skip to content

Commit

Permalink
OpenGLRenderSystem is now using sigc signals instead of ModuleObserve…
Browse files Browse the repository at this point in the history
…r impl.
  • Loading branch information
codereader committed Dec 19, 2017
1 parent 90eafea commit 2d4dfdb
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 45 deletions.
3 changes: 0 additions & 3 deletions include/ishaders.h
Expand Up @@ -414,9 +414,6 @@ class MaterialManager
*/
virtual void setActiveShaderUpdates(bool val) = 0;

virtual void attach(ModuleObserver& observer) = 0;
virtual void detach(ModuleObserver& observer) = 0;

virtual void setLightingEnabled(bool enabled) = 0;

virtual const char* getTexturePrefix() const = 0;
Expand Down
23 changes: 0 additions & 23 deletions plugins/shaders/Doom3ShaderSystem.cpp
Expand Up @@ -46,7 +46,6 @@ Doom3ShaderSystem::Doom3ShaderSystem() :
_defLoader(std::bind(&Doom3ShaderSystem::loadMaterialFiles, this)),
_enableActiveUpdates(true),
_realised(false),
_observers(getName()),
_currentOperation(nullptr)
{}

Expand Down Expand Up @@ -120,7 +119,6 @@ void Doom3ShaderSystem::realise()
_defLoader.start();

_signalDefsLoaded.emit();
_observers.realise();
_realised = true;
}
}
Expand All @@ -130,7 +128,6 @@ void Doom3ShaderSystem::unrealise()
if (_realised)
{
_signalDefsUnloaded.emit();
_observers.unrealise();
freeShaders();
_realised = false;
}
Expand Down Expand Up @@ -208,26 +205,6 @@ void Doom3ShaderSystem::foreachShaderName(const ShaderNameCallback& callback)
_library->foreachShaderName(callback);
}

void Doom3ShaderSystem::attach(ModuleObserver& observer)
{
_observers.attach(observer);

if (_realised)
{
observer.realise();
}
}

void Doom3ShaderSystem::detach(ModuleObserver& observer)
{
if (_realised)
{
observer.unrealise();
}

_observers.detach(observer);
}

void Doom3ShaderSystem::setLightingEnabled(bool enabled)
{
ensureDefsLoaded();
Expand Down
8 changes: 0 additions & 8 deletions plugins/shaders/Doom3ShaderSystem.h
Expand Up @@ -7,7 +7,6 @@
#include "icommandsystem.h"

#include <functional>
#include "moduleobservers.h"

#include "ShaderLibrary.h"
#include "TableDefinition.h"
Expand Down Expand Up @@ -44,10 +43,6 @@ class Doom3ShaderSystem :
// TRUE if the material files have been parsed
bool _realised;

// The observers that are attached to this system. These get
// notified upon realisation of this class.
ModuleObservers _observers;

// Signals for module subscribers
sigc::signal<void> _signalDefsLoaded;
sigc::signal<void> _signalDefsUnloaded;
Expand Down Expand Up @@ -96,9 +91,6 @@ class Doom3ShaderSystem :
_enableActiveUpdates = v;
}

void attach(ModuleObserver& observer) override;
void detach(ModuleObserver& observer) override;

void setLightingEnabled(bool enabled) override;

const char* getTexturePrefix() const override;
Expand Down
21 changes: 12 additions & 9 deletions radiant/render/OpenGLRenderSystem.cpp
Expand Up @@ -48,7 +48,10 @@ OpenGLRenderSystem::OpenGLRenderSystem() :
// hence it will be attached in initialiseModule().
if (module::ModuleRegistry::Instance().moduleExists(MODULE_SHADERSYSTEM))
{
GlobalMaterialManager().attach(*this);
_materialDefsLoaded = GlobalMaterialManager().signal_DefsLoaded().connect(
sigc::mem_fun(*this, &OpenGLRenderSystem::realise));
_materialDefsUnloaded = GlobalMaterialManager().signal_DefsUnloaded().connect(
sigc::mem_fun(*this, &OpenGLRenderSystem::unrealise));
}

// If the openGL module is already initialised and a shared context is created
Expand All @@ -62,12 +65,8 @@ OpenGLRenderSystem::OpenGLRenderSystem() :

OpenGLRenderSystem::~OpenGLRenderSystem()
{
// The static default rendersystem won't use this, it will detach itself
// in the shutdownModule() method.
if (module::ModuleRegistry::Instance().moduleExists(MODULE_SHADERSYSTEM))
{
GlobalMaterialManager().detach(*this);
}
_materialDefsLoaded.disconnect();
_materialDefsUnloaded.disconnect();
}

ShaderPtr OpenGLRenderSystem::capture(const std::string& name)
Expand Down Expand Up @@ -524,7 +523,10 @@ void OpenGLRenderSystem::initialiseModule(const ApplicationContext& ctx)
{
rMessage() << getName() << "::initialiseModule called." << std::endl;

GlobalMaterialManager().attach(*this);
_materialDefsLoaded = GlobalMaterialManager().signal_DefsLoaded().connect(
sigc::mem_fun(*this, &OpenGLRenderSystem::realise));
_materialDefsUnloaded = GlobalMaterialManager().signal_DefsUnloaded().connect(
sigc::mem_fun(*this, &OpenGLRenderSystem::unrealise));

// greebo: Don't realise the module yet, this must wait
// until the shared GL context has been created (this
Expand All @@ -533,7 +535,8 @@ void OpenGLRenderSystem::initialiseModule(const ApplicationContext& ctx)

void OpenGLRenderSystem::shutdownModule()
{
GlobalMaterialManager().detach(*this);
_materialDefsLoaded.disconnect();
_materialDefsUnloaded.disconnect();
}

// Define the static ShaderCache module
Expand Down
7 changes: 5 additions & 2 deletions radiant/render/OpenGLRenderSystem.h
@@ -1,6 +1,7 @@
#pragma once

#include "irender.h"
#include <sigc++/connection.h>
#include <map>
#include "imodule.h"
#include "backend/OpenGLStateManager.h"
Expand All @@ -20,8 +21,7 @@ typedef std::shared_ptr<GLProgramFactory> GLProgramFactoryPtr;
*/
class OpenGLRenderSystem
: public RenderSystem,
public OpenGLStateManager,
public ModuleObserver
public OpenGLStateManager
{
private:
// Map of named Shader objects
Expand Down Expand Up @@ -51,6 +51,9 @@ class OpenGLRenderSystem

sigc::signal<void> _sigExtensionsInitialised;

sigc::connection _materialDefsLoaded;
sigc::connection _materialDefsUnloaded;

private:
void propagateLightChangedFlagToAllLights();

Expand Down

0 comments on commit 2d4dfdb

Please sign in to comment.