[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12497] branches/game_engine/source: 2d Filters updated, now you can use custom filter and write your own GLSL shader program to filter rendering result .

Hamed Zaghaghi hamed.zaghaghi at gmail.com
Tue Nov 6 13:16:12 CET 2007


Revision: 12497
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12497
Author:   zaghaghi
Date:     2007-11-06 13:16:12 +0100 (Tue, 06 Nov 2007)

Log Message:
-----------
2d Filters updated, now you can use custom filter and write your own GLSL shader program to filter rendering result.

Modified Paths:
--------------
    branches/game_engine/source/blender/blenloader/intern/readfile.c
    branches/game_engine/source/blender/makesdna/DNA_actuator_types.h
    branches/game_engine/source/blender/src/buttons_logic.c
    branches/game_engine/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
    branches/game_engine/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
    branches/game_engine/source/gameengine/Converter/KX_ConvertActuators.cpp
    branches/game_engine/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
    branches/game_engine/source/gameengine/GameLogic/SCA_2DFilterActuator.h
    branches/game_engine/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
    branches/game_engine/source/gameengine/GamePlayer/common/GPC_RenderTools.h
    branches/game_engine/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
    branches/game_engine/source/gameengine/Rasterizer/RAS_2DFilterManager.h
    branches/game_engine/source/gameengine/Rasterizer/RAS_IRenderTools.h
    branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Blur2DFilter.h
    branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Dilation2DFilter.h
    branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Erosion2DFilter.h
    branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_GrayScale2DFilter.h
    branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Invert2DFilter.h
    branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Laplacian2DFilter.h
    branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Prewitt2DFilter.h
    branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sepia2DFilter.h
    branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sharpen2DFilter.h
    branches/game_engine/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sobel2DFilter.h

Modified: branches/game_engine/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/game_engine/source/blender/blenloader/intern/readfile.c	2007-11-06 12:10:59 UTC (rev 12496)
+++ branches/game_engine/source/blender/blenloader/intern/readfile.c	2007-11-06 12:16:12 UTC (rev 12497)
@@ -2820,7 +2820,8 @@
 					ma->toObject= newlibadr(fd, ob->id.lib, ma->toObject);
 				}
 				else if(act->type==ACT_2DFILTER){
-					/* bTwoDFilterActuator *_2dfa = act->data; */
+					bTwoDFilterActuator *_2dfa = act->data; 
+					_2dfa->text= newlibadr(fd, ob->id.lib, _2dfa->text);
 				}
 				act= act->next;
 			}

Modified: branches/game_engine/source/blender/makesdna/DNA_actuator_types.h
===================================================================
--- branches/game_engine/source/blender/makesdna/DNA_actuator_types.h	2007-11-06 12:10:59 UTC (rev 12496)
+++ branches/game_engine/source/blender/makesdna/DNA_actuator_types.h	2007-11-06 12:16:12 UTC (rev 12497)
@@ -38,6 +38,7 @@
 struct Mesh;
 struct Scene;
 struct Group;
+struct Text;
 
 /* ****************** ACTUATORS ********************* */
 
@@ -192,14 +193,16 @@
 } bVisibilityActuator;
 
 typedef struct bTwoDFilterActuator{
+	char pad[4];
 	/* Tells what type of 2D Filter*/
 	short type;
 	/* (flag == 0) means 2D filter is activate and
 	   (flag != 0) means 2D filter is inactive*/
 	short flag;
+	int   int_arg;
 	/* a float argument */
 	float float_arg;
-	int   int_arg;
+	struct Text *text;
 }bTwoDFilterActuator;
 
 typedef struct bActuator {
@@ -404,19 +407,22 @@
 #define ACT_VISIBILITY_INVISIBLE       (1 << 0)
 
 /* twodfilter->type */
-#define ACT_2DFILTER_NOFILTER			-1
-#define ACT_2DFILTER_MOTIONBLUR			0
-#define ACT_2DFILTER_BLUR				1
-#define ACT_2DFILTER_SHARPEN			2
-#define ACT_2DFILTER_DILATION			3
-#define ACT_2DFILTER_EROSION			4
-#define ACT_2DFILTER_LAPLACIAN			5
-#define ACT_2DFILTER_SOBEL				6
-#define ACT_2DFILTER_PREWITT			7
-#define ACT_2DFILTER_GRAYSCALE			8
-#define ACT_2DFILTER_SEPIA				9
-#define ACT_2DFILTER_INVERT				10
-#define ACT_2DFILTER_NUMBER_OF_FILTERS	11
+#define ACT_2DFILTER_ENABLED			-2
+#define ACT_2DFILTER_DISABLED			-1
+#define ACT_2DFILTER_NOFILTER			0
+#define ACT_2DFILTER_MOTIONBLUR			1
+#define ACT_2DFILTER_BLUR				2
+#define ACT_2DFILTER_SHARPEN			3
+#define ACT_2DFILTER_DILATION			4
+#define ACT_2DFILTER_EROSION			5
+#define ACT_2DFILTER_LAPLACIAN			6
+#define ACT_2DFILTER_SOBEL				7
+#define ACT_2DFILTER_PREWITT			8
+#define ACT_2DFILTER_GRAYSCALE			9
+#define ACT_2DFILTER_SEPIA				10
+#define ACT_2DFILTER_INVERT				11
+#define ACT_2DFILTER_CUSTOMFILTER		12
+#define ACT_2DFILTER_NUMBER_OF_FILTERS	13
 #endif
 
 

Modified: branches/game_engine/source/blender/src/buttons_logic.c
===================================================================
--- branches/game_engine/source/blender/src/buttons_logic.c	2007-11-06 12:10:59 UTC (rev 12496)
+++ branches/game_engine/source/blender/src/buttons_logic.c	2007-11-06 12:16:12 UTC (rev 12497)
@@ -2178,7 +2178,11 @@
 	case ACT_2DFILTER:
 		tdfa = act->data;
 
-		ysize= 50;
+		ysize = 50;
+		if(tdfa->type == ACT_2DFILTER_CUSTOMFILTER)
+		{
+			ysize +=20;
+		}
         glRects( xco, yco-ysize, xco+width, yco ); 
 		uiEmboss( (float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1 );
 
@@ -2206,12 +2210,19 @@
 			case ACT_2DFILTER_SEPIA:
 			case ACT_2DFILTER_INVERT:
 			case ACT_2DFILTER_NOFILTER:
-				uiDefButI(block, NUM, B_REDR, "Pass Number:", xco+30,yco-44,width-60,19,&tdfa->int_arg,-1.0,MAX_RENDER_PASS-1,0.0,0.0,"Set motion blur value");
+			case ACT_2DFILTER_DISABLED:
+			case ACT_2DFILTER_ENABLED:
+				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");
 				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, "");
+				break;
 		}
 		
-		str= "2D Filter   %t|Motion Blur   %x0|Blur %x1|Sharpen %x2|Dilation %x3|Erosion %x4|"
-				"Laplacian %x5|Sobel %x6|Prewitt %x7|Gray Scale %x8|Sepia %x9|Invert %x10|No Filter %x-1|";
+		str= "2D Filter   %t|Motion Blur   %x1|Blur %x2|Sharpen %x3|Dilation %x4|Erosion %x5|"
+				"Laplacian %x6|Sobel %x7|Prewitt %x8|Gray Scale %x9|Sepia %x10|Invert %x11|Custom Filter %x12|"
+				"Enable Filter %x-2|Disable Filter %x-1|Remove Filter %x0|";
 		uiDefButS(block, MENU, B_REDR, str,	xco+30,yco-24,width-60, 19, &tdfa->type, 0.0, 0.0, 0.0, 0.0, "2D filter type");
 		
 		yco -= ysize;

Modified: branches/game_engine/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
===================================================================
--- branches/game_engine/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp	2007-11-06 12:10:59 UTC (rev 12496)
+++ branches/game_engine/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp	2007-11-06 12:16:12 UTC (rev 12497)
@@ -475,9 +475,9 @@
 	}
 }
 
-void KX_BlenderRenderTools::Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass)
+void KX_BlenderRenderTools::Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text)
 {
-	m_filtermanager.EnableFilter(filtermode, pass);
+	m_filtermanager.EnableFilter(filtermode, pass, text);
 }
 
 void KX_BlenderRenderTools::Render2DFilters(RAS_ICanvas* canvas)

Modified: branches/game_engine/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
===================================================================
--- branches/game_engine/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h	2007-11-06 12:10:59 UTC (rev 12496)
+++ branches/game_engine/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h	2007-11-06 12:16:12 UTC (rev 12497)
@@ -104,7 +104,7 @@
 
 	virtual void MotionBlur(RAS_IRasterizer* rasterizer);
 
-	virtual void Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass);
+	virtual void Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text);
 
 	virtual	void Render2DFilters(RAS_ICanvas* canvas);
 

Modified: branches/game_engine/source/gameengine/Converter/KX_ConvertActuators.cpp
===================================================================
--- branches/game_engine/source/gameengine/Converter/KX_ConvertActuators.cpp	2007-11-06 12:10:59 UTC (rev 12496)
+++ branches/game_engine/source/gameengine/Converter/KX_ConvertActuators.cpp	2007-11-06 12:16:12 UTC (rev 12497)
@@ -37,6 +37,8 @@
 
 #define BLENDER_HACK_DTIME 0.02
 
+#include "MEM_guardedalloc.h"
+
 #include "KX_BlenderSceneConverter.h"
 #include "KX_ConvertActuators.h"
 
@@ -70,7 +72,7 @@
 #include "KX_GameObject.h"
 
 /* This little block needed for linking to Blender... */
-
+#include "BKE_text.h"
 #include "BLI_blenlib.h"
 
 #include "KX_NetworkMessageActuator.h"
@@ -879,9 +881,18 @@
 				case ACT_2DFILTER_INVERT:
 					filtermode = RAS_2DFilterManager::RAS_2DFILTER_INVERT;
 					break;
+				case ACT_2DFILTER_CUSTOMFILTER:
+					filtermode = RAS_2DFilterManager::RAS_2DFILTER_CUSTOMFILTER;
+					break;
 				case ACT_2DFILTER_NOFILTER:
 					filtermode = RAS_2DFilterManager::RAS_2DFILTER_NOFILTER;
 					break;
+				case ACT_2DFILTER_DISABLED:
+					filtermode = RAS_2DFilterManager::RAS_2DFILTER_DISABLED;
+					break;
+				case ACT_2DFILTER_ENABLED:
+					filtermode = RAS_2DFilterManager::RAS_2DFILTER_ENABLED;
+					break;
 				default:
 					filtermode = RAS_2DFilterManager::RAS_2DFILTER_NOFILTER;
 					break;
@@ -890,6 +901,18 @@
 			tmp = new SCA_2DFilterActuator(gameobj, filtermode, _2dfilter->flag,
 				_2dfilter->float_arg,_2dfilter->int_arg,ketsjiEngine->GetRasterizer(),rendertools);
 
+			if (_2dfilter->text)
+			{
+				char *buf;
+				// this is some blender specific code
+				buf = txt_to_buf(_2dfilter->text);
+				if (buf)
+				{
+					tmp->SetShaderText(STR_String(buf));
+					MEM_freeN(buf);
+				}
+			}
+
             baseact = tmp;
 			
 		}

Modified: branches/game_engine/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
===================================================================
--- branches/game_engine/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp	2007-11-06 12:10:59 UTC (rev 12496)
+++ branches/game_engine/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp	2007-11-06 12:16:12 UTC (rev 12497)
@@ -8,6 +8,9 @@
 #include <iostream>
 
 
+SCA_2DFilterActuator::~SCA_2DFilterActuator()
+{
+}
 
 SCA_2DFilterActuator::SCA_2DFilterActuator(
         SCA_IObject *gameobj, 
@@ -28,13 +31,13 @@
 {
 }
 
-
-SCA_2DFilterActuator::~SCA_2DFilterActuator()
+void SCA_2DFilterActuator::SetShaderText(STR_String& text)
 {
-
+	m_shaderText = text;
 }
 
 
+
 CValue* SCA_2DFilterActuator::GetReplica()
 {
     SCA_2DFilterActuator* replica = new SCA_2DFilterActuator(*this);
@@ -69,7 +72,7 @@
 	}
 	else if(m_type < RAS_2DFilterManager::RAS_2DFILTER_NUMBER_OF_FILTERS)
 	{
-		m_rendertools->Update2DFilter(m_type, m_int_arg);
+		m_rendertools->Update2DFilter(m_type, m_int_arg, m_shaderText);
 	}
     return true;
 }

Modified: branches/game_engine/source/gameengine/GameLogic/SCA_2DFilterActuator.h
===================================================================
--- branches/game_engine/source/gameengine/GameLogic/SCA_2DFilterActuator.h	2007-11-06 12:10:59 UTC (rev 12496)
+++ branches/game_engine/source/gameengine/GameLogic/SCA_2DFilterActuator.h	2007-11-06 12:16:12 UTC (rev 12497)
@@ -16,6 +16,7 @@
 	short m_flag;
 	float m_float_arg;
 	int   m_int_arg;
+	STR_String	m_shaderText;
 	RAS_IRasterizer* m_rasterizer;
 	RAS_IRenderTools* m_rendertools;
 
@@ -32,7 +33,7 @@
         PyTypeObject* T=&Type
         );
 
-
+	void	SetShaderText(STR_String& text);
     virtual ~SCA_2DFilterActuator();
     virtual bool Update();
 

Modified: branches/game_engine/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
===================================================================
--- branches/game_engine/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp	2007-11-06 12:10:59 UTC (rev 12496)
+++ branches/game_engine/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp	2007-11-06 12:16:12 UTC (rev 12497)
@@ -593,9 +593,9 @@
 	}
 }
 
-void GPC_RenderTools::Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list