[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