Renderer: Introducing CreateShader interface
authorMichael Schuldt <michael.schuldt@bmw-carit.de>
Fri, 23 Dec 2011 09:48:37 +0000 (10:48 +0100)
committerMichael Schuldt <michael.schuldt@bmw-carit.de>
Fri, 23 Dec 2011 09:48:37 +0000 (10:48 +0100)
- If a shader is uploaded the shader program allocation can only be done
  in the Renderer Thread

LayerManagerPlugins/Renderers/Base/include/BaseRenderer.h
LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/include/X11GLESRenderer.h
LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/src/X11GLESRenderer.cpp
LayerManagerService/include/IRenderer.h

index 4230a2c..f342ba3 100644 (file)
@@ -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;
index c4a4316..4d0071b 100644 (file)
@@ -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;
index f8228f0..2d9b0a9 100644 (file)
@@ -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){
index 4d0d7bf..4a3a304 100644 (file)
@@ -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_ */