[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15376] trunk/blender/source: BGE 2d-filter, custom shaders now can have depth texture and luminance texture
Hamed Zaghaghi
hamed.zaghaghi at gmail.com
Sat Jun 28 05:18:17 CEST 2008
Revision: 15376
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15376
Author: zaghaghi
Date: 2008-06-28 05:18:11 +0200 (Sat, 28 Jun 2008)
Log Message:
-----------
BGE 2d-filter, custom shaders now can have depth texture and luminance texture
Modified Paths:
--------------
trunk/blender/source/blender/makesdna/DNA_actuator_types.h
trunk/blender/source/blender/src/buttons_logic.c
trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp
trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h
trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.h
trunk/blender/source/gameengine/Rasterizer/RAS_IRenderTools.h
Modified: trunk/blender/source/blender/makesdna/DNA_actuator_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_actuator_types.h 2008-06-28 01:14:26 UTC (rev 15375)
+++ trunk/blender/source/blender/makesdna/DNA_actuator_types.h 2008-06-28 03:18:11 UTC (rev 15376)
@@ -192,11 +192,13 @@
} bVisibilityActuator;
typedef struct bTwoDFilterActuator{
- char pad[4];
- /* Tells what type of 2D Filter*/
+ char pad[2];
+ /* bitwise flag for enabling or disabling depth(bit 0) and luminance(bit 1) */
+ short texture_flag;
+ /* Tells what type of 2D Filter */
short type;
/* (flag == 0) means 2D filter is activate and
- (flag != 0) means 2D filter is inactive*/
+ (flag != 0) means 2D filter is inactive */
short flag;
int int_arg;
/* a float argument */
Modified: trunk/blender/source/blender/src/buttons_logic.c
===================================================================
--- trunk/blender/source/blender/src/buttons_logic.c 2008-06-28 01:14:26 UTC (rev 15375)
+++ trunk/blender/source/blender/src/buttons_logic.c 2008-06-28 03:18:11 UTC (rev 15376)
@@ -2382,7 +2382,11 @@
break;
case ACT_2DFILTER_CUSTOMFILTER:
uiDefButI(block, NUM, B_REDR, "Pass Number:", xco+30,yco-44,width-60,19,&tdfa->int_arg,0.0,MAX_RENDER_PASS-1,0.0,0.0,"Set motion blur value");
- uiDefIDPoinBut(block, test_scriptpoin_but, ID_SCRIPT, 1, "Script: ", xco+30,yco-64,width-60, 19, &tdfa->text, "");
+ uiDefIDPoinBut(block, test_scriptpoin_but, ID_SCRIPT, 1, "Script: ", xco+30,yco-64,width/2-32, 19, &tdfa->text, "");
+ uiDefButS(block, TOG|BIT|0, B_REDR, "Depth", xco+width/2+2 , yco - 64, width/4-16 , 19,
+ &tdfa->texture_flag, 0.0, 0.0, 0, 0, "Includes Depth Texture (bgl_DepthTexture)");
+ uiDefButS(block, TOG|BIT|1, B_REDR, "Luminance", xco+3*width/4-14 , yco - 64, width/4-16 , 19,
+ &tdfa->texture_flag, 0.0, 0.0, 0, 0, "Includes Luminance Texture (bgl_LuminanceTexture)");
break;
}
Modified: trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp 2008-06-28 01:14:26 UTC (rev 15375)
+++ trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp 2008-06-28 03:18:11 UTC (rev 15376)
@@ -483,9 +483,9 @@
}
}
-void KX_BlenderRenderTools::Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text)
+void KX_BlenderRenderTools::Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text, short texture_flag)
{
- m_filtermanager.EnableFilter(filtermode, pass, text);
+ m_filtermanager.EnableFilter(filtermode, pass, text, texture_flag);
}
void KX_BlenderRenderTools::Render2DFilters(RAS_ICanvas* canvas)
Modified: trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h 2008-06-28 01:14:26 UTC (rev 15375)
+++ trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h 2008-06-28 03:18:11 UTC (rev 15376)
@@ -101,7 +101,7 @@
virtual void MotionBlur(RAS_IRasterizer* rasterizer);
- virtual void Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text);
+ virtual void Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text, short texture_flag);
virtual void Render2DFilters(RAS_ICanvas* canvas);
Modified: trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp 2008-06-28 01:14:26 UTC (rev 15375)
+++ trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp 2008-06-28 03:18:11 UTC (rev 15376)
@@ -944,7 +944,7 @@
}
tmp = new SCA_2DFilterActuator(gameobj, filtermode, _2dfilter->flag,
- _2dfilter->float_arg,_2dfilter->int_arg,ketsjiEngine->GetRasterizer(),rendertools);
+ _2dfilter->float_arg,_2dfilter->int_arg,_2dfilter->texture_flag,ketsjiEngine->GetRasterizer(),rendertools);
if (_2dfilter->text)
{
Modified: trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp 2008-06-28 01:14:26 UTC (rev 15375)
+++ trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp 2008-06-28 03:18:11 UTC (rev 15376)
@@ -18,6 +18,7 @@
short flag,
float float_arg,
int int_arg,
+ short texture_flag,
RAS_IRasterizer* rasterizer,
RAS_IRenderTools* rendertools,
PyTypeObject* T)
@@ -25,6 +26,7 @@
m_type(type),
m_flag(flag),
m_int_arg(int_arg),
+ m_texture_flag(texture_flag),
m_float_arg(float_arg),
m_rasterizer(rasterizer),
m_rendertools(rendertools)
@@ -72,7 +74,7 @@
}
else if(m_type < RAS_2DFilterManager::RAS_2DFILTER_NUMBER_OF_FILTERS)
{
- m_rendertools->Update2DFilter(m_type, m_int_arg, m_shaderText);
+ m_rendertools->Update2DFilter(m_type, m_int_arg, m_shaderText, m_texture_flag);
}
return true;
}
Modified: trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h 2008-06-28 01:14:26 UTC (rev 15375)
+++ trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h 2008-06-28 03:18:11 UTC (rev 15376)
@@ -16,6 +16,7 @@
short m_flag;
float m_float_arg;
int m_int_arg;
+ short m_texture_flag;
STR_String m_shaderText;
RAS_IRasterizer* m_rasterizer;
RAS_IRenderTools* m_rendertools;
@@ -28,6 +29,7 @@
short flag,
float float_arg,
int int_arg,
+ short texture_flag,
RAS_IRasterizer* rasterizer,
RAS_IRenderTools* rendertools,
PyTypeObject* T=&Type
Modified: trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp 2008-06-28 01:14:26 UTC (rev 15375)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp 2008-06-28 03:18:11 UTC (rev 15376)
@@ -54,7 +54,7 @@
RAS_2DFilterManager::RAS_2DFilterManager():
-texname(-1), texturewidth(-1), textureheight(-1),
+texturewidth(-1), textureheight(-1),
canvaswidth(-1), canvasheight(-1),
numberoffilters(0)
{
@@ -72,8 +72,9 @@
{
m_filters[passindex] = 0;
m_enabled[passindex] = 0;
+ texflag[passindex] = 0;
}
-
+ texname[0] = texname[1] = texname[2] = -1;
}
RAS_2DFilterManager::~RAS_2DFilterManager()
@@ -150,30 +151,54 @@
return 0;
}
-void RAS_2DFilterManager::StartShaderProgram(unsigned int shaderprogram)
+void RAS_2DFilterManager::StartShaderProgram(int passindex)
{
GLint uniformLoc;
- glUseProgramObjectARB(shaderprogram);
- uniformLoc = glGetUniformLocationARB(shaderprogram, "bgl_RenderedTexture");
+ glUseProgramObjectARB(m_filters[passindex]);
+ uniformLoc = glGetUniformLocationARB(m_filters[passindex], "bgl_RenderedTexture");
glActiveTextureARB(GL_TEXTURE0);
- //glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, texname);
+ glBindTexture(GL_TEXTURE_2D, texname[0]);
if (uniformLoc != -1)
{
glUniform1iARB(uniformLoc, 0);
}
- uniformLoc = glGetUniformLocationARB(shaderprogram, "bgl_TextureCoordinateOffset");
+
+ /* send depth texture to glsl program if it needs */
+ if(texflag[passindex] & 0x1){
+ uniformLoc = glGetUniformLocationARB(m_filters[passindex], "bgl_DepthTexture");
+ glActiveTextureARB(GL_TEXTURE1);
+ glBindTexture(GL_TEXTURE_2D, texname[1]);
+
+ if (uniformLoc != -1)
+ {
+ glUniform1iARB(uniformLoc, 1);
+ }
+ }
+
+ /* send luminance texture to glsl program if it needs */
+ if(texflag[passindex] & 0x1){
+ uniformLoc = glGetUniformLocationARB(m_filters[passindex], "bgl_LuminanceTexture");
+ glActiveTextureARB(GL_TEXTURE2);
+ glBindTexture(GL_TEXTURE_2D, texname[2]);
+
+ if (uniformLoc != -1)
+ {
+ glUniform1iARB(uniformLoc, 2);
+ }
+ }
+
+ uniformLoc = glGetUniformLocationARB(m_filters[passindex], "bgl_TextureCoordinateOffset");
if (uniformLoc != -1)
{
glUniform2fvARB(uniformLoc, 9, textureoffsets);
}
- uniformLoc = glGetUniformLocationARB(shaderprogram, "bgl_RenderedTextureWidth");
+ uniformLoc = glGetUniformLocationARB(m_filters[passindex], "bgl_RenderedTextureWidth");
if (uniformLoc != -1)
{
glUniform1fARB(uniformLoc,texturewidth);
}
- uniformLoc = glGetUniformLocationARB(shaderprogram, "bgl_RenderedTextureHeight");
+ uniformLoc = glGetUniformLocationARB(m_filters[passindex], "bgl_RenderedTextureHeight");
if (uniformLoc != -1)
{
glUniform1fARB(uniformLoc,textureheight);
@@ -187,18 +212,37 @@
void RAS_2DFilterManager::SetupTexture()
{
- if(texname!=-1)
+ if(texname[0]!=-1 || texname[1]!=-1)
{
- glDeleteTextures(1,(const GLuint *)&texname);
+ glDeleteTextures(2, texname);
}
- glGenTextures(1, (GLuint *)&texname);
- glBindTexture(GL_TEXTURE_2D, texname);
+ glGenTextures(3, texname);
+
+ glBindTexture(GL_TEXTURE_2D, texname[0]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texturewidth, textureheight, 0, GL_RGB,
- GL_UNSIGNED_BYTE, 0);
+ GL_UNSIGNED_BYTE, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+
+ glBindTexture(GL_TEXTURE_2D, texname[1]);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, texturewidth,textureheight, 0, GL_DEPTH_COMPONENT,
+ GL_FLOAT,NULL);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE,
+ GL_NONE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+
+ glBindTexture(GL_TEXTURE_2D, texname[2]);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE16, texturewidth, textureheight, 0, GL_LUMINANCE,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list