[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27231] trunk/blender: BGE 2D Filters: filters run per scene now (fix for [#18152]) - it (slightly) breaks backward compatibility !!!

Dalai Felinto dfelinto at gmail.com
Wed Mar 3 07:38:49 CET 2010


Revision: 27231
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27231
Author:   dfelinto
Date:     2010-03-03 07:38:47 +0100 (Wed, 03 Mar 2010)

Log Message:
-----------
BGE 2D Filters: filters run per scene now (fix for [#18152]) - it (slightly) breaks backward compatibility !!!

Originally we had 2DFilters (m_filtermanager) stored in RenderTools. That way filters were stored globally and were being called once per each scene. This was producing two big problems: (1) performance and (2) flexibility of use.

(1) Performance - To run the filters 2X == 2X slower
(2) flexibility of use - Very often we want the filter in the scene but not in the UI for example.

For those reasons I believe that 2DFilters with multiple scenes was very useless or unpredictable. I hope they work fine now.
To make it work as before (2.4) you can simply recreate the 2dfilter actuators across the scenes.

* * * * *

Imagine that we have:
(a) Main Scene
(b) Overlay Scene

in Main Scene the Z Buffer and RGB will be from the main scene.
in Overlay Scene the Z Buffer will be from the Overlay Scene and the RBG buffer is from both [(a + 2D Filter) + b].

So in pseudo code if we have a,b,c,d,e scenes we have: (2DFilterE(2DFilterD(2DFilterC(2DFilterB(2DFilterA(a) + b) + c) + d) + e)

Modified Paths:
--------------
    trunk/blender/CMakeLists.txt
    trunk/blender/source/blender/editors/screen/screen_ops.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/CMakeLists.txt
    trunk/blender/source/gameengine/GameLogic/Makefile
    trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h
    trunk/blender/source/gameengine/GameLogic/SConscript
    trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
    trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.h
    trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
    trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.h
    trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp
    trunk/blender/source/gameengine/Ketsji/KX_Scene.h
    trunk/blender/source/gameengine/Rasterizer/CMakeLists.txt
    trunk/blender/source/gameengine/Rasterizer/Makefile
    trunk/blender/source/gameengine/Rasterizer/RAS_2DFilterManager.h
    trunk/blender/source/gameengine/Rasterizer/RAS_IRenderTools.h

Modified: trunk/blender/CMakeLists.txt
===================================================================
--- trunk/blender/CMakeLists.txt	2010-03-03 00:32:51 UTC (rev 27230)
+++ trunk/blender/CMakeLists.txt	2010-03-03 06:38:47 UTC (rev 27231)
@@ -261,7 +261,7 @@
 	# this file is included anyway when building under Windows with cl.exe
 	#  INCLUDE(${CMAKE_ROOT}/Modules/Platform/Windows-cl.cmake)
   
-	SET(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/windows)
+	SET(LIBDIR ${CMAKE_SOURCE_DIR}/../../../lib/windows)
 
 	# Setup 64bit and 64bit windows systems
 	IF(CMAKE_CL_64)

Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c	2010-03-03 00:32:51 UTC (rev 27230)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c	2010-03-03 06:38:47 UTC (rev 27231)
@@ -2250,7 +2250,53 @@
 	ot->poll= ED_operator_areaactive;
 	ot->flag= 0;
 }
+/* ************** header pan to left + mouse over editor changes operator ***************************** */
+// This is a hacky, or a workaround if you prefer
+// I like being able to quickly switch Editors (ALT+MOUSEWHEEL)
+// Since the editor switcher is not always visible (and it should IMHO) this operator helps you with that :)
 
+static int header_focus_exec(bContext *C, wmOperator *op)
+{
+	int i;
+	int bounds[4] = {0,20,0,0};
+	ARegion *ar= CTX_wm_region(C);
+
+	/* find the header region 
+	 *	- try context first, but upon failing, search all regions in area...
+	 */
+	if((ar == NULL) || (ar->regiontype != RGN_TYPE_HEADER)) {
+		ScrArea *sa= CTX_wm_area(C);
+		
+		/* loop over all regions until a matching one is found */
+		for (ar= sa->regionbase.first; ar; ar= ar->next) {
+			if(ar->regiontype == RGN_TYPE_HEADER)
+				break;
+		}
+		
+		/* don't do anything if no region */
+		if(ar == NULL)
+			return OPERATOR_CANCELLED;
+	}
+	for (i =0; i <40; i++){
+		WM_operator_name_call(C, "VIEW2D_OT_scroll_left", WM_OP_INVOKE_DEFAULT, NULL);
+	}
+	
+	return OPERATOR_FINISHED;
+}
+
+static void SCREEN_OT_header_focus(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Header Focus";
+	ot->idname= "SCREEN_OT_header_focus";
+	
+	/* api callbacks */
+	ot->exec= header_focus_exec;
+	
+	ot->poll= ED_operator_areaactive;
+	ot->flag= 0;
+}
+
 /* ************** header flip operator ***************************** */
 
 /* flip a header region alignment */
@@ -2325,7 +2371,7 @@
 		uiItemO(layout, "Flip to Bottom", 0, "SCREEN_OT_header_flip");	
 	else
 		uiItemO(layout, "Flip to Top", 0, "SCREEN_OT_header_flip");
-	
+	uiItemO(layout, "Focus on Editor Type", 0, "SCREEN_OT_header_focus");	
 	uiItemS(layout);
 	
 	/* file browser should be fullscreen all the time, but other regions can be maximised/restored... */
@@ -3996,6 +4042,7 @@
 	WM_operatortype_append(SCREEN_OT_region_flip);
 	WM_operatortype_append(SCREEN_OT_header_flip);
 	WM_operatortype_append(SCREEN_OT_header_toolbox);
+	WM_operatortype_append(SCREEN_OT_header_focus);
 	WM_operatortype_append(SCREEN_OT_screen_set);
 	WM_operatortype_append(SCREEN_OT_screen_full_area);
 	WM_operatortype_append(SCREEN_OT_back_to_previous);
@@ -4080,6 +4127,7 @@
 	keymap= WM_keymap_find(keyconf, "Header", 0, 0);
 	
 	WM_keymap_add_item(keymap, "SCREEN_OT_header_toolbox", RIGHTMOUSE, KM_PRESS, 0, 0);
+	WM_keymap_add_item(keymap, "SCREEN_OT_header_focus", MIDDLEMOUSE, KM_PRESS, KM_ALT, 0);
 	
 	/* Screen General ------------------------------------------------ */
 	keymap= WM_keymap_find(keyconf, "Screen", 0, 0);

Modified: trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp	2010-03-03 00:32:51 UTC (rev 27230)
+++ trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp	2010-03-03 06:38:47 UTC (rev 27231)
@@ -379,13 +379,3 @@
 		}
 	}
 }
-
-void KX_BlenderRenderTools::Update2DFilter(vector<STR_String>& propNames, void* gameObj, RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text)
-{
-	m_filtermanager.EnableFilter(propNames, gameObj, filtermode, pass, text);
-}
-
-void KX_BlenderRenderTools::Render2DFilters(RAS_ICanvas* canvas)
-{
-	m_filtermanager.RenderFilters(canvas);
-}

Modified: trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h	2010-03-03 00:32:51 UTC (rev 27230)
+++ trunk/blender/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h	2010-03-03 06:38:47 UTC (rev 27231)
@@ -94,10 +94,6 @@
 
 	virtual void MotionBlur(RAS_IRasterizer* rasterizer);
 
-	virtual void Update2DFilter(vector<STR_String>& propNames, void* gameObj, RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text);
-
-	virtual	void Render2DFilters(RAS_ICanvas* canvas);
-
 	virtual void SetClientObject(RAS_IRasterizer *rasty, void* obj);
 	
 	

Modified: trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp	2010-03-03 00:32:51 UTC (rev 27230)
+++ trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp	2010-03-03 06:38:47 UTC (rev 27231)
@@ -969,7 +969,7 @@
 			}
             
 			tmp = new SCA_2DFilterActuator(gameobj, filtermode, _2dfilter->flag,
-				_2dfilter->float_arg,_2dfilter->int_arg,ketsjiEngine->GetRasterizer(),rendertools);
+				_2dfilter->float_arg,_2dfilter->int_arg,ketsjiEngine->GetRasterizer(),scene);
 
 			if (_2dfilter->text)
 			{

Modified: trunk/blender/source/gameengine/GameLogic/CMakeLists.txt
===================================================================
--- trunk/blender/source/gameengine/GameLogic/CMakeLists.txt	2010-03-03 00:32:51 UTC (rev 27230)
+++ trunk/blender/source/gameengine/GameLogic/CMakeLists.txt	2010-03-03 06:38:47 UTC (rev 27231)
@@ -32,6 +32,7 @@
 	../../../intern/string
 	../../../source/gameengine/Expressions 
 	../../../source/gameengine/SceneGraph
+	../../../source/gameengine/Ketsji
 	../../../intern/moto/include
 	../../../source/gameengine/Rasterizer
 )

Modified: trunk/blender/source/gameengine/GameLogic/Makefile
===================================================================
--- trunk/blender/source/gameengine/GameLogic/Makefile	2010-03-03 00:32:51 UTC (rev 27230)
+++ trunk/blender/source/gameengine/GameLogic/Makefile	2010-03-03 06:38:47 UTC (rev 27231)
@@ -41,6 +41,7 @@
 CPPFLAGS += -I../Expressions 
 CPPFLAGS += -I../SceneGraph
 CPPFLAGS += -I../Rasterizer
+CPPFLAGS += -I../Ketsji
 CPPFLAGS += -I$(NAN_STRING)/include    
 CPPFLAGS += -I$(NAN_MOTO)/include
 CPPFLAGS += -I../../blender/makesdna

Modified: trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp	2010-03-03 00:32:51 UTC (rev 27230)
+++ trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp	2010-03-03 06:38:47 UTC (rev 27231)
@@ -42,14 +42,14 @@
 		float float_arg,
 		int int_arg,
 		RAS_IRasterizer* rasterizer,
-		RAS_IRenderTools* rendertools)
+		KX_Scene* scene)
     : SCA_IActuator(gameobj, KX_ACT_2DFILTER),
      m_type(type),
 	 m_disableMotionBlur(flag),
 	 m_float_arg(float_arg),
 	 m_int_arg(int_arg),
 	 m_rasterizer(rasterizer),
-	 m_rendertools(rendertools)
+	 m_scene(scene)
 {
 	m_gameObj = NULL;
 	if(gameobj){
@@ -87,7 +87,7 @@
 	}
 	else if(m_type < RAS_2DFilterManager::RAS_2DFILTER_NUMBER_OF_FILTERS)
 	{
-		m_rendertools->Update2DFilter(m_propNames, m_gameObj, m_type, m_int_arg, m_shaderText);
+		m_scene->Update2DFilter(m_propNames, m_gameObj, m_type, m_int_arg, m_shaderText);
 	}
 	// once the filter is in place, no need to update it again => disable the actuator
     return false;

Modified: trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h	2010-03-03 00:32:51 UTC (rev 27230)
+++ trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h	2010-03-03 06:38:47 UTC (rev 27231)
@@ -29,8 +29,8 @@
 #define __SCA_2DFILETRACTUATOR_H__
 
 #include "RAS_IRasterizer.h"
-#include "RAS_IRenderTools.h"
 #include "SCA_IActuator.h"
+#include "KX_Scene.h"
 
 class SCA_2DFilterActuator : public SCA_IActuator
 {
@@ -45,7 +45,7 @@
 	int   m_int_arg;
 	STR_String	m_shaderText;
 	RAS_IRasterizer* m_rasterizer;
-	RAS_IRenderTools* m_rendertools;
+	KX_Scene* m_scene;
 
 public:
 
@@ -56,7 +56,7 @@
 		float float_arg,
 		int int_arg,
 		RAS_IRasterizer* rasterizer,
-		RAS_IRenderTools* rendertools);
+		KX_Scene* scene);
 
 	void	SetShaderText(const char *text);
     virtual ~SCA_2DFilterActuator();

Modified: trunk/blender/source/gameengine/GameLogic/SConscript
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SConscript	2010-03-03 00:32:51 UTC (rev 27230)
+++ trunk/blender/source/gameengine/GameLogic/SConscript	2010-03-03 06:38:47 UTC (rev 27231)
@@ -6,6 +6,7 @@
 incs = '. #/source/kernel/gen_system #/intern/string'
 incs += ' #/source/gameengine/Expressions #/intern/moto/include'
 incs += ' #/source/gameengine/Rasterizer #/source/gameengine/SceneGraph'
+incs += ' #/source/gameengine/Ketsji'
 
 defs = []
 

Modified: trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp
===================================================================
--- trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp	2010-03-03 00:32:51 UTC (rev 27230)
+++ trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp	2010-03-03 06:38:47 UTC (rev 27231)
@@ -433,13 +433,3 @@
 	}
 }
 
-void GPC_RenderTools::Update2DFilter(vector<STR_String>& propNames, void* gameObj, RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text)
-{
-	m_filtermanager.EnableFilter(propNames, gameObj, filtermode, pass, text);
-}
-
-void GPC_RenderTools::Render2DFilters(RAS_ICanvas* canvas)
-{
-	m_filtermanager.RenderFilters(canvas);
-}
-

Modified: trunk/blender/source/gameengine/GamePlayer/common/GPC_RenderTools.h
===================================================================

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list