summaryrefslogtreecommitdiff
path: root/LayerManagerPlugins
diff options
context:
space:
mode:
authorMichael Schuldt <michael.schuldt@bmw-carit.de>2011-12-23 10:48:37 +0100
committerMichael Schuldt <michael.schuldt@bmw-carit.de>2011-12-23 10:48:37 +0100
commit1cb47aae5c18e6e8a364eeac92fbb4fd413451dd (patch)
tree4a0159d637429bb8c90ed4e0a01a153e044c3ee8 /LayerManagerPlugins
parent60ef8c78e586faadb0b7fec3acb72f8e85122c73 (diff)
downloadlayer_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')
-rw-r--r--LayerManagerPlugins/Renderers/Base/include/BaseRenderer.h5
-rw-r--r--LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/include/X11GLESRenderer.h3
-rw-r--r--LayerManagerPlugins/Renderers/Platform/X11GLESRenderer/src/X11GLESRenderer.cpp15
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){