[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