[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49344] branches/ge_harmony/source/ gameengine: Float uniforms can now be passed into a 2D Filter from the UI, some data corruption is preventing other uniform types from working at the moment .

Daniel Stokes kupomail at gmail.com
Sun Jul 29 03:28:56 CEST 2012


Revision: 49344
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49344
Author:   kupoman
Date:     2012-07-29 01:28:51 +0000 (Sun, 29 Jul 2012)
Log Message:
-----------
Float uniforms can now be passed into a 2D Filter from the UI, some data corruption is preventing other uniform types from working at the moment.

Modified Paths:
--------------
    branches/ge_harmony/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
    branches/ge_harmony/source/gameengine/GameLogic/SCA_IScene.h
    branches/ge_harmony/source/gameengine/Ketsji/KX_Scene.cpp
    branches/ge_harmony/source/gameengine/Ketsji/KX_Scene.h
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.cpp
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.h
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h

Modified: branches/ge_harmony/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Converter/KX_BlenderSceneConverter.cpp	2012-07-29 01:02:25 UTC (rev 49343)
+++ branches/ge_harmony/source/gameengine/Converter/KX_BlenderSceneConverter.cpp	2012-07-29 01:28:51 UTC (rev 49344)
@@ -366,6 +366,10 @@
 		Shader *shader = link->shader;
 		if (shader) {
 			STR_String text = STR_String(shader->source);
+			CustomUniform *uni;
+			for (uni = (CustomUniform *)shader->uniforms.first; uni; uni = uni->next) {
+				destinationscene->Update2DUniform(i, STR_String(uni->name), RAS_IRasterizer::RAS_FLOAT, uni->data);
+			}
 			destinationscene->Update2DFilter(vector<STR_String>(), NULL, RAS_IRasterizer::RAS_2DFILTER_CUSTOMFILTER, i, text);
 		}
 	}

Modified: branches/ge_harmony/source/gameengine/GameLogic/SCA_IScene.h
===================================================================
--- branches/ge_harmony/source/gameengine/GameLogic/SCA_IScene.h	2012-07-29 01:02:25 UTC (rev 49343)
+++ branches/ge_harmony/source/gameengine/GameLogic/SCA_IScene.h	2012-07-29 01:28:51 UTC (rev 49344)
@@ -68,6 +68,7 @@
 	void			AddDebugProperty(class CValue* debugprop,
 									 const STR_String &name);
 	void			RemoveAllDebugProperties();
+	virtual void	Update2DUniform(int pass, STR_String& name, RAS_IRasterizer::RAS_UNIFORM_TYPE type, void *data){}
 	virtual void	Update2DFilter(std::vector<STR_String>& propNames, void* gameObj, 
 									RAS_IRasterizer::RAS_2DFILTER_MODE filtermode, 
 									int pass, STR_String& text) {}

Modified: branches/ge_harmony/source/gameengine/Ketsji/KX_Scene.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Ketsji/KX_Scene.cpp	2012-07-29 01:02:25 UTC (rev 49343)
+++ branches/ge_harmony/source/gameengine/Ketsji/KX_Scene.cpp	2012-07-29 01:28:51 UTC (rev 49344)
@@ -1926,6 +1926,11 @@
 	return true;
 }
 
+void KX_Scene::Update2DUniform(int pass, STR_String& name, RAS_IRasterizer::RAS_UNIFORM_TYPE type, void *data)
+{
+	KX_GetActiveEngine()->GetRasterizer()->EnableUniform(pass, name, type, data);
+}
+
 void KX_Scene::Update2DFilter(vector<STR_String>& propNames, void* gameObj, RAS_IRasterizer::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text)
 {
 	KX_GetActiveEngine()->GetRasterizer()->EnableFilter(propNames, gameObj, filtermode, pass, text);

Modified: branches/ge_harmony/source/gameengine/Ketsji/KX_Scene.h
===================================================================
--- branches/ge_harmony/source/gameengine/Ketsji/KX_Scene.h	2012-07-29 01:02:25 UTC (rev 49343)
+++ branches/ge_harmony/source/gameengine/Ketsji/KX_Scene.h	2012-07-29 01:28:51 UTC (rev 49344)
@@ -581,6 +581,7 @@
 	/**
 	 * 2D Filters
 	 */
+	virtual void	Update2DUniform(int pass, STR_String& name, RAS_IRasterizer::RAS_UNIFORM_TYPE type, void *data);
 	void Update2DFilter(std::vector<STR_String>& propNames, void* gameObj, RAS_IRasterizer::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text);
 	void Render2DFilters(RAS_ICanvas* canvas);
 

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h	2012-07-29 01:02:25 UTC (rev 49343)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_IRasterizer.h	2012-07-29 01:28:51 UTC (rev 49344)
@@ -436,7 +436,19 @@
 		RAS_2DFILTER_CUSTOMFILTER,
 		RAS_2DFILTER_NUMBER_OF_FILTERS
 	};
+	enum RAS_UNIFORM_TYPE {
+		RAS_FLOAT,
+		RAS_VEC2,
+		RAS_VEC3,
+		RAS_VEC4,
+		RAS_INT,
+		RAS_IVEC2,
+		RAS_IVEC3,
+		RAS_IVEC4,
+		RAS_SAMPLER_2D,
+	};
 	virtual void	RenderFilters(RAS_ICanvas* canvas)=0;
+	virtual void	EnableUniform(int pass, STR_String& name, RAS_UNIFORM_TYPE type, void *data)=0;
 	virtual void	EnableFilter(std::vector<STR_String>& propNames, void* gameObj, RAS_2DFILTER_MODE mode, int pass, STR_String& text)=0;
 
 

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.cpp	2012-07-29 01:02:25 UTC (rev 49343)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.cpp	2012-07-29 01:28:51 UTC (rev 49344)
@@ -266,6 +266,20 @@
 			glUniform1fARB(uniformLoc,value);
 		}
 	}
+
+	std::map<STR_String, FilterUniform>::iterator it;
+	for (it = m_uniforms[passindex].begin(); it != m_uniforms[passindex].end(); it++)
+	{
+		STR_String name = it->first;
+		FilterUniform uniform = it->second;
+
+		uniformLoc = glGetUniformLocationARB(m_filters[passindex], name);
+		if (uniformLoc != -1)
+		{
+			if (uniform.type == RAS_IRasterizer::RAS_FLOAT)
+				glUniform1fARB(uniformLoc, *(float*)&uniform.data);			
+		}
+	}
 }
 
 void RAS_OGLFilterManager::EndShaderProgram()
@@ -476,6 +490,12 @@
 	glPopMatrix();
 }
 
+void RAS_OGLFilterManager::UpdateUniform(int pass, STR_String& name, RAS_IRasterizer::RAS_UNIFORM_TYPE type, void *data)
+{
+	FilterUniform uni = {name, type, data};
+	m_uniforms[pass][name] = uni;
+}
+
 void RAS_OGLFilterManager::EnableFilter(vector<STR_String>& propNames, void* gameObj, RAS_IRasterizer::RAS_2DFILTER_MODE mode, int pass, STR_String& text)
 {
 	if (!isshadersupported)

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.h	2012-07-29 01:02:25 UTC (rev 49343)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OGLFilterManager.h	2012-07-29 01:28:51 UTC (rev 49344)
@@ -32,6 +32,8 @@
 #ifndef __RAS_OGLFILTERMANAGER_H__
 #define __RAS_OGLFILTERMANAGER_H__
 
+#include <map>
+
 #include "RAS_ICanvas.h"
 #include "RAS_IRasterizer.h"
 #define MAX_RENDER_PASS	100
@@ -40,6 +42,12 @@
 #include "MEM_guardedalloc.h"
 #endif
 
+typedef struct {
+	STR_String name;
+	RAS_IRasterizer::RAS_UNIFORM_TYPE type;
+	void *data;
+} FilterUniform;
+
 class RAS_OGLFilterManager
 {
 private:
@@ -76,6 +84,7 @@
 
 	unsigned int	m_filters[MAX_RENDER_PASS];
 	short		m_enabled[MAX_RENDER_PASS];
+	std::map<STR_String, FilterUniform> m_uniforms[MAX_RENDER_PASS];
 
 	// stores object properties to send to shaders in each pass
 	std::vector<STR_String>	m_properties[MAX_RENDER_PASS];
@@ -86,7 +95,7 @@
 	~RAS_OGLFilterManager();
 
 	void RenderFilters(RAS_ICanvas* canvas);
-
+	void UpdateUniform(int pass, STR_String& name, RAS_IRasterizer::RAS_UNIFORM_TYPE type, void *data);
 	void EnableFilter(std::vector<STR_String>& propNames, void* gameObj, RAS_IRasterizer::RAS_2DFILTER_MODE mode, int pass, STR_String& text);
 
 

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2012-07-29 01:02:25 UTC (rev 49343)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2012-07-29 01:28:51 UTC (rev 49344)
@@ -1264,6 +1264,11 @@
 {
 	m_filtermanager.RenderFilters(canvas);
 }
+
+void RAS_OpenGLRasterizer::EnableUniform(int pass, STR_String& name, RAS_UNIFORM_TYPE type, void *data)
+{
+	m_filtermanager.UpdateUniform(pass, name, type, data);
+}
 void RAS_OpenGLRasterizer::EnableFilter(std::vector<STR_String>& propNames, void* gameObj, RAS_2DFILTER_MODE mode, int pass, STR_String& text)
 {
 	m_filtermanager.EnableFilter(propNames, gameObj, mode, pass, text);

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h	2012-07-29 01:02:25 UTC (rev 49343)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h	2012-07-29 01:28:51 UTC (rev 49344)
@@ -320,6 +320,7 @@
 
 	/* 2D Filters */
 	virtual void	RenderFilters(RAS_ICanvas* canvas);
+	virtual void	EnableUniform(int pass, STR_String& name, RAS_UNIFORM_TYPE type, void *data);
 	virtual void	EnableFilter(std::vector<STR_String>& propNames, void* gameObj, RAS_2DFILTER_MODE mode, int pass, STR_String& text);
 
 




More information about the Bf-blender-cvs mailing list