diff options
4 files changed, 25 insertions, 5 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){ diff --git a/LayerManagerService/include/IRenderer.h b/LayerManagerService/include/IRenderer.h index 4d0d7bf..4a3a304 100644 --- a/LayerManagerService/include/IRenderer.h +++ b/LayerManagerService/include/IRenderer.h @@ -22,7 +22,7 @@ #include <string> #include "LayerType.h" - +#include "Shader.h" /** * Abstract Base of all CompositingControllers, ie Renderers. */ @@ -60,9 +60,10 @@ public: virtual unsigned int* getScreenResolution(unsigned int screenID) = 0; virtual unsigned int* getScreenIDs(unsigned int* length) = 0; + + virtual Shader* createShader(const string* vertexName, const string* fragmentName) = 0; - virtual void signalWindowSystemRedraw()=0; - + virtual void signalWindowSystemRedraw()=0; }; #endif /* _IRENDERER_H_ */ |