/**
 * Main constructor.
 */
OpenGLRenderSystem::OpenGLRenderSystem() :
	_realised(false),
    _glProgramFactory(std::make_shared<GLProgramFactory>()),
	_currentShaderProgram(SHADER_PROGRAM_NONE),
	_time(0),
	m_lightsChanged(true),
	m_traverseRenderablesMutex(false)
{
	// For the static default rendersystem, the MaterialManager is not existent yet,
	// hence it will be attached in initialiseModule().
    if (module::ModuleRegistry::Instance().moduleExists(MODULE_SHADERSYSTEM))
	{
		_materialDefsLoaded = GlobalMaterialManager().signal_DefsLoaded().connect(
			sigc::mem_fun(*this, &OpenGLRenderSystem::realise));
		_materialDefsUnloaded = GlobalMaterialManager().signal_DefsUnloaded().connect(
			sigc::mem_fun(*this, &OpenGLRenderSystem::unrealise));

		if (GlobalMaterialManager().isRealised())
		{
			realise();
		}
	}

    // If the openGL module is already initialised and a shared context is created
    // trigger a call to extensionsInitialised().
    if (module::ModuleRegistry::Instance().moduleExists(MODULE_OPENGL) && 
        GlobalOpenGL().wxContextValid())
	{
        extensionsInitialised();
	}
}
void EClassManager::initialiseModule(const ApplicationContext& ctx)
{
	rMessage() << "EntityClassDoom3::initialiseModule called." << std::endl;

	GlobalFileSystem().addObserver(*this);
	realise();
}
Beispiel #3
0
 void refresh ()
 {
     if (isModified()) {
         flush();
         unrealise();
         realise();
     }
 }
Beispiel #4
0
    ModelResource (const std::string& name) :
        m_model(g_nullModel), m_originalName(name), m_type(os::getExtension(name)), m_loader(0),
        m_modified(0), m_unrealised(1)
    {
        m_loader = ModelLoader_forType(m_type);

        if (g_realised) {
            realise();
        }
    }
void EClassManager::initialiseModule(const ApplicationContext& ctx)
{
	rMessage() << "EntityClassDoom3::initialiseModule called." << std::endl;

	GlobalFileSystem().addObserver(*this);
	realise();

	GlobalCommandSystem().addCommand("ReloadDefs", boost::bind(&EClassManager::reloadDefsCmd, this, _1));
	GlobalEventManager().addCommand("ReloadDefs", "ReloadDefs");
}
Beispiel #6
0
/* Constructor. Sets the name and the ShaderDefinition to use.
 */
CShader::CShader(const std::string& name, const ShaderDefinition& definition) :
	_template(definition.shaderTemplate),
	_fileName(definition.filename),
	_name(name),
	m_bInUse(false),
	_visible(true)
{
	// Realise the shader
	realise();
}
void Doom3ShaderSystem::initialiseModule(const ApplicationContext& ctx)
{
	rMessage() << getName() << "::initialiseModule called" << std::endl;

	GlobalCommandSystem().addCommand("RefreshShaders", boost::bind(&Doom3ShaderSystem::refreshShadersCmd, this, _1));
	GlobalEventManager().addCommand("RefreshShaders", "RefreshShaders");

	construct();
	realise();

#ifdef _DEBUG
	testShaderExpressionParsing();
#endif
}
Beispiel #8
0
  ModelResource(const CopiedString& name) :
    m_model(g_nullModel),
    m_originalName(name),
    m_type(path_get_extension(name.c_str())),
    m_loader(0),
    m_modified(0),
    m_unrealised(1)
  {
    m_loader = ModelLoader_forType(m_type.c_str());

    if(g_realised)
    {
      realise();
    }
  }
void OpenGLRenderSystem::initialiseModule(const ApplicationContext& ctx)
{
	rMessage() << getName() << "::initialiseModule called." << std::endl;

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

	if (GlobalMaterialManager().isRealised())
	{
		realise();
	}

	// greebo: Don't realise the module yet, this must wait
	// until the shared GL context has been created (this
	// happens as soon as the first GL widget has been realised).
}
void OpenGLRenderSystem::setShaderProgram(RenderSystem::ShaderProgram newProg)
{
    ShaderProgram oldProgram = _currentShaderProgram;

    if (oldProgram != newProg)
    {
		unrealise();
		GlobalMaterialManager().setLightingEnabled(
            newProg == SHADER_PROGRAM_INTERACTION
        );
    }

    _currentShaderProgram = newProg;

    if (oldProgram != newProg)
    {
        realise();
    }
}
void Doom3ShaderSystem::refresh() {
	unrealise();
	realise();
}
void Doom3ShaderSystem::onFileSystemInitialise() {
	realise();
}
Beispiel #13
0
// Gets called on VFS initialise
void EClassManager::onFileSystemInitialise()
{
	realise();
}
void MaterialShaderSystem::refresh ()
{
	unrealise();
	realise();
}
void OpenGLRenderSystem::extensionsInitialised()
{
    // Determine if lighting is available based on GL extensions
	bool glslLightingAvailable = GLEW_VERSION_2_0 ? true : false;
    bool arbLightingAvailable  = GLEW_VERSION_1_3
                                 && GLEW_ARB_vertex_program
                                 && GLEW_ARB_fragment_program;

#if defined(DEBUG_NO_LIGHTING)
    glslLightingAvailable = arbLightingAvailable = false;
#endif

    rConsole() << "[OpenGLRenderSystem] GLSL shading "
              << (glslLightingAvailable ? "IS" : "IS NOT" ) << " available."
              << std::endl;
    rConsole() << "[OpenGLRenderSystem] ARB shading "
              << (arbLightingAvailable ? "IS" : "IS NOT" ) << " available."
              << std::endl;

    // Tell the GLProgramFactory which to use
    if (glslLightingAvailable)
    {
        _glProgramFactory->setUsingGLSL(true);
    }
    else
    {
        _glProgramFactory->setUsingGLSL(false);
    }

    // Set internal flags
    bool shaderProgramsAvailable = glslLightingAvailable || arbLightingAvailable;

    // Set the flag in the openGL module
    GlobalOpenGL().setShaderProgramsAvailable(shaderProgramsAvailable);

    // Inform the user of missing extensions
    if (!shaderProgramsAvailable)
    {
		rMessage() << "GL shading requires OpenGL features not"
                             << " supported by your graphics drivers:\n";

		if (!GLEW_VERSION_2_0) {
			rMessage() << "  GL version 2.0 or better\n";
		}

		if (!GLEW_ARB_shader_objects) {
			rMessage() << "  GL_ARB_shader_objects\n";
		}

		if (!GLEW_ARB_vertex_shader) {
			rMessage() << "  GL_ARB_vertex_shader\n";
		}

		if (!GLEW_ARB_fragment_shader) {
			rMessage() << "  GL_ARB_fragment_shader\n";
		}

		if (!GLEW_ARB_shading_language_100) {
			rMessage() << "  GL_ARB_shading_language_100\n";
		}

		if (!GLEW_ARB_vertex_program) {
			rMessage() << "  GL_ARB_vertex_program\n";
		}

		if (!GLEW_ARB_fragment_program) {
			rMessage() << "  GL_ARB_fragment_program\n";
		}
	}

	// Now that GL extensions are done, we can realise our shaders
	// This was previously done explicitly by the OpenGLModule after the
	// shared context was created. But we need realised shaders before
	// we can fire off the "extensions initialised" signal, map loading
	// code might rely on materials being constructed.
	realise();

	// Notify all our observers
	_sigExtensionsInitialised();
}