diff options
author | Michael Schuldt <michael.schuldt@bmw-carit.de> | 2011-12-23 10:48:37 +0100 |
---|---|---|
committer | Michael Schuldt <michael.schuldt@bmw-carit.de> | 2011-12-23 10:48:37 +0100 |
commit | 1cb47aae5c18e6e8a364eeac92fbb4fd413451dd (patch) | |
tree | 4a0159d637429bb8c90ed4e0a01a153e044c3ee8 /LayerManagerPlugins | |
parent | 60ef8c78e586faadb0b7fec3acb72f8e85122c73 (diff) | |
download | layer_management-1cb47aae5c18e6e8a364eeac92fbb4fd413451dd.tar.gz |
Renderer: Introducing CreateShader interface
- If a shader is uploaded the shader program allocation can only be done
in the Renderer Thread
Diffstat (limited to 'LayerManagerPlugins')
3 files changed, 21 insertions, 2 deletions
diff --git a/LayerManagerPlugins/Renderers/Base/include/BaseRenderer.h b/LayerManagerPlugins/Renderers/Base/include/BaseRenderer.h index 4230a2c..f342ba3 100644 --- a/LayerManagerPlugins/Renderers/Base/include/BaseRenderer.h +++ b/LayerManagerPlugins/Renderers/Base/include/BaseRenderer.h @@ -37,6 +37,7 @@ public: virtual void doScreenShot(std::string fileToSave) = 0; virtual uint getLayerTypeCapabilities(LayerType layerType); + virtual Shader* createShader(const string* vertexName, const string* fragmentName); protected: Scene* m_pScene; @@ -45,6 +46,10 @@ private: static bool debugMode; }; +inline Shader* BaseRenderer::createShader(const string* vertexName, const string* fragmentName) +{ + return NULL; +} inline void BaseRenderer::setdebug(bool onoff) { debugMode = onoff; diff --git a/LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/include/X11GLESRenderer.h b/LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/include/X11GLESRenderer.h index c4a4316..4d0071b 100644 --- a/LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/include/X11GLESRenderer.h +++ b/LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/include/X11GLESRenderer.h @@ -37,7 +37,8 @@ public: uint getNumberOfHardwareLayers(uint screenID); uint* getScreenResolution(uint screenID); uint* getScreenIDs(uint* length); - void signalWindowSystemRedraw(); + void signalWindowSystemRedraw(); + Shader* createShader(const string* vertexName, const string* fragmentName); private: X11WindowSystem* m_pWindowSystem; diff --git a/LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/src/X11GLESRenderer.cpp b/LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/src/X11GLESRenderer.cpp index f8228f0..2d9b0a9 100644 --- a/LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/src/X11GLESRenderer.cpp +++ b/LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/src/X11GLESRenderer.cpp @@ -19,6 +19,7 @@ #include "X11GLESRenderer.h" #include "config.h" +#include "Shader.h" #include "ShaderProgramGLES.h" #include "X11/Xlib.h" #include "TextureBinders/X11CopyGLES.h" @@ -148,7 +149,19 @@ uint* X11GLESRenderer::getScreenIDs(uint* length) void X11GLESRenderer::signalWindowSystemRedraw() { - m_pWindowSystem->signalRedrawEvent(); + m_pWindowSystem->signalRedrawEvent(); +} + +Shader* X11GLESRenderer::createShader(const string* vertexName, const string* fragmentName) +{ + Shader *result = NULL; + m_pWindowSystem->setSystemState(WAKEUP_STATE); + m_pWindowSystem->wakeUpRendererThread(); + m_pGraphicSystem->activateGraphicContext(); + result = Shader::createShader(*vertexName,*fragmentName); + m_pGraphicSystem->releaseGraphicContext(); + m_pWindowSystem->setSystemState(IDLE_STATE); + return result; } extern "C" BaseRenderer* createX11GLESRenderer(Scene* pScene){ |