[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20863] branches/blender2.5/blender/source : GameEngine WIP,

Campbell Barton ideasman42 at gmail.com
Sat Jun 13 19:25:54 CEST 2009


Revision: 20863
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20863
Author:   campbellbarton
Date:     2009-06-13 19:25:54 +0200 (Sat, 13 Jun 2009)

Log Message:
-----------
GameEngine WIP,
* pressing P starts the BGE in the 3D view
* redraw window clipping isnt right
* BGE python api works in py3k (without __import__ override or Mathutils, BGL, Geometry)
* no events yet (so there is no way to exit)

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/space_view3d/SConscript
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c
    branches/blender2.5/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    branches/blender2.5/blender/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp
    branches/blender2.5/blender/source/gameengine/BlenderRoutines/KX_BlenderCanvas.h
    branches/blender2.5/blender/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp
    branches/blender2.5/blender/source/gameengine/BlenderRoutines/KX_BlenderGL.h
    branches/blender2.5/blender/source/gameengine/Ketsji/KX_PythonInit.cpp

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/SConscript
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/SConscript	2009-06-13 16:57:26 UTC (rev 20862)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/SConscript	2009-06-13 17:25:54 UTC (rev 20863)
@@ -2,10 +2,14 @@
 Import ('env')
 
 sources = env.Glob('*.c')
+defs = []
 
 incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
 incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
 incs += ' ../../render/extern/include #/intern/guardedalloc'
 incs += ' ../../gpu ../../makesrna ../../blenfont'
 
-env.BlenderLib ( 'bf_editors_space_view3d', sources, Split(incs), [], libtype=['core'], priority=[40] )
+if env['WITH_BF_GAMEENGINE']:
+	defs.append('GAMEBLENDER=1')
+
+env.BlenderLib ( 'bf_editors_space_view3d', sources, Split(incs), defines = defs, libtype=['core'], priority=[40] )

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h	2009-06-13 16:57:26 UTC (rev 20862)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h	2009-06-13 17:25:54 UTC (rev 20863)
@@ -120,7 +120,9 @@
 void VIEW3D_OT_smoothview(struct wmOperatorType *ot);
 void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot);
 void VIEW3D_OT_localview(struct wmOperatorType *ot);
+void VIEW3D_OT_game_start(struct wmOperatorType *ot);
 
+
 int boundbox_clip(RegionView3D *rv3d, float obmat[][4], struct BoundBox *bb);
 
 void centerview(struct ARegion *ar, View3D *v3d);

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c	2009-06-13 16:57:26 UTC (rev 20862)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c	2009-06-13 17:25:54 UTC (rev 20863)
@@ -85,6 +85,7 @@
 	WM_operatortype_append(VIEW3D_OT_drawtype);
 	WM_operatortype_append(VIEW3D_OT_editmesh_face_toolbox);
 	WM_operatortype_append(VIEW3D_OT_localview);
+	WM_operatortype_append(VIEW3D_OT_game_start);
 	WM_operatortype_append(VIEW3D_OT_layers);
 	
 	WM_operatortype_append(VIEW3D_OT_properties);
@@ -173,6 +174,8 @@
 
 	WM_keymap_add_item(keymap, "VIEW3D_OT_localview", PADSLASHKEY, KM_PRESS, 0, 0);
 	
+	WM_keymap_add_item(keymap, "VIEW3D_OT_game_start", PKEY, KM_PRESS, 0, 0);
+	
 	/* layers, shift + alt are properties set in invoke() */
 	RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", ONEKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 1);
 	RNA_int_set(WM_keymap_add_item(keymap, "VIEW3D_OT_layers", TWOKEY, KM_PRESS, KM_ANY, 0)->ptr, "nr", 2);

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c	2009-06-13 16:57:26 UTC (rev 20862)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_view.c	2009-06-13 17:25:54 UTC (rev 20863)
@@ -1382,6 +1382,75 @@
 	ot->poll= ED_operator_view3d_active;
 }
 
+
+static void SaveState(void)
+{
+	glPushAttrib(GL_ALL_ATTRIB_BITS);
+
+	GPU_state_init();
+
+	if(G.f & G_TEXTUREPAINT)
+		GPU_paint_set_mipmap(1);
+
+	//XXX waitcursor(1);
+}
+
+static void RestoreState(void)
+{
+	if(G.f & G_TEXTUREPAINT)
+		GPU_paint_set_mipmap(0);
+
+	//XXX curarea->win_swap = 0;
+	//XXX curarea->head_swap=0;
+	//XXX allqueue(REDRAWVIEW3D, 1);
+	//XXX allqueue(REDRAWBUTSALL, 0);
+	//XXX reset_slowparents();
+	//XXX waitcursor(0);
+	//XXX G.qual= 0;
+	glPopAttrib();
+}
+
+/* maybe we need this defined somewhere else */
+extern void StartKetsjiShell(wmWindow *win, ScrArea *area, struct ARegion *ar, struct Scene *scene, struct Main* maggie,int always_use_expand_framing);
+
+
+static int game_engine_exec(bContext *C, wmOperator *unused)
+{
+	View3D *v3d= CTX_wm_view3d(C);
+	ScrArea *sa= CTX_wm_area(C); // curarea
+	ARegion *ar= CTX_wm_region(C);
+	Scene *sc, *startscene = CTX_data_scene(C);
+	
+#if GAMEBLENDER == 1
+	SaveState();
+	StartKetsjiShell(CTX_wm_window(C), sa, ar, startscene, CTX_data_main(C), 1);
+	RestoreState();
+	
+	//XXX restore_all_scene_cfra(scene_cfra_store);
+	set_scene_bg(startscene);
+	//XXX scene_update_for_newframe(G.scene, G.scene->lay);
+	
+	ED_area_tag_redraw(CTX_wm_area(C));
+#else
+	printf("GameEngine Disabled\n");
+#endif
+	
+	return OPERATOR_FINISHED;
+}
+
+void VIEW3D_OT_game_start(wmOperatorType *ot)
+{
+	
+	/* identifiers */
+	ot->name= "Start Game Engine";
+	ot->idname= "VIEW3D_OT_game_start";
+	
+	/* api callbacks */
+	ot->exec= game_engine_exec;
+	
+	ot->poll= ED_operator_view3d_active;
+}
+
 /* ************************************** */
 
 void view3d_align_axis_to_vector(View3D *v3d, RegionView3D *rv3d, int axisidx, float vec[3])

Modified: branches/blender2.5/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- branches/blender2.5/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2009-06-13 16:57:26 UTC (rev 20862)
+++ branches/blender2.5/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2009-06-13 17:25:54 UTC (rev 20863)
@@ -88,11 +88,11 @@
 extern "C" {
 #endif
 //XXX #include "BSE_headerbuttons.h"
-void update_for_newframe();
 #ifdef __cplusplus
 }
 #endif
 
+
 static BlendFileData *load_game_data(char *filename)
 {
 	ReportList reports;
@@ -111,17 +111,17 @@
 	return bfd;
 }
 
-extern "C" void StartKetsjiShell(struct ScrArea *area,
+extern "C" void StartKetsjiShell(struct wmWindow *win,
+								 struct ScrArea *area,
 								 struct ARegion *ar,
-								 char* scenename,
+								 Scene *scene,
 								 struct Main* maggie1,
 								 int always_use_expand_framing)
 {
 	int exitrequested = KX_EXIT_REQUEST_NO_REQUEST;
-	Scene *scene= NULL; // XXX give as arg
 	Main* blenderdata = maggie1;
 
-	char* startscenename = scenename;
+	char* startscenename = scene->id.name+2;
 	char pathname[FILE_MAXDIR+FILE_MAXFILE], oldsce[FILE_MAXDIR+FILE_MAXFILE];
 	STR_String exitstring = "";
 	BlendFileData *bfd= NULL;
@@ -155,7 +155,7 @@
 		bool nodepwarnings = (SYS_GetCommandLineInt(syshandle, "ignore_deprecation_warnings", 0) != 0);
 		bool novertexarrays = (SYS_GetCommandLineInt(syshandle, "novertexarrays", 0) != 0);
 		// create the canvas, rasterizer and rendertools
-		RAS_ICanvas* canvas = new KX_BlenderCanvas(area);
+		RAS_ICanvas* canvas = new KX_BlenderCanvas(win, ar);
 		canvas->SetMouseState(RAS_ICanvas::MOUSE_INVISIBLE);
 		RAS_IRenderTools* rendertools = new KX_BlenderRenderTools();
 		RAS_IRasterizer* rasterizer = NULL;
@@ -235,7 +235,7 @@
 		}
 		for (i = 0; i < 16; i++)
 		{
-			float *projmat_linear; 			//XXX = (float*) area->winmat;
+			float *projmat_linear= (float*) rv3d->winmat;
 			projmat.setElem(i, projmat_linear[i]);
 		}
 		
@@ -423,7 +423,7 @@
 					exitrequested = ketsjiengine->GetExitCode();
 					
 					// kick the engine
-					bool render = ketsjiengine->NextFrame();
+					bool render = ketsjiengine->NextFrame(); // XXX 2.5 Bug, This is never true! FIXME-  Campbell
 					
 					if (render)
 					{
@@ -434,7 +434,7 @@
 					// test for the ESC key
 					while (0) //XXX while (qtest())
 					{
-						short val; 
+						short val = 0;
 						unsigned short event = 0; //XXX extern_qread(&val);
 						
 						if (keyboarddevice->ConvertBlenderEvent(event,val))
@@ -444,9 +444,9 @@
 							* should this really be?
 						*/
 						if (event==MOUSEX) {
-							val = 0;//XXX val - scrarea_get_win_x(area);
+							val = val - ar->winrct.xmin;
 						} else if (event==MOUSEY) {
-							val = 0;//XXX scrarea_get_win_height(area) - (val - scrarea_get_win_y(area)) - 1;
+							val = ar->winy - (val - ar->winrct.ymin) - 1;
 						}
 						
 						mousedevice->ConvertBlenderEvent(event,val);
@@ -557,7 +557,8 @@
 	PyGILState_Release(gilstate);
 }
 
-extern "C" void StartKetsjiShellSimulation(struct ScrArea *area,
+extern "C" void StartKetsjiShellSimulation(struct wmWindow *win,
+								 struct ScrArea *area,
 								 struct ARegion *ar,
 								 char* scenename,
 								 struct Main* maggie,
@@ -595,7 +596,7 @@
 		bool usemat = false;
 
 		// create the canvas, rasterizer and rendertools
-		RAS_ICanvas* canvas = new KX_BlenderCanvas(area);
+		RAS_ICanvas* canvas = new KX_BlenderCanvas(win, ar);
 		//canvas->SetMouseState(RAS_ICanvas::MOUSE_INVISIBLE);
 		RAS_IRenderTools* rendertools = new KX_BlenderRenderTools();
 		RAS_IRasterizer* rasterizer = NULL;
@@ -648,7 +649,7 @@
 			cframe=blscene->r.cfra;
 			startFrame = blscene->r.sfra;
 			blscene->r.cfra=startFrame;
-			update_for_newframe();
+			// update_for_newframe(); // XXX scene_update_for_newframe wont cut it!
 			ketsjiengine->SetGame2IpoMode(game2ipo,startFrame);
 		}
 
@@ -722,7 +723,7 @@
 					// kick the engine
 					ketsjiengine->NextFrame();
 				    blscene->r.cfra=blscene->r.cfra+1;
-				    update_for_newframe();
+				    // update_for_newframe(); // XXX scene_update_for_newframe wont cut it
 					
 				}
 				exitstring = ketsjiengine->GetExitString();

Modified: branches/blender2.5/blender/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp
===================================================================
--- branches/blender2.5/blender/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp	2009-06-13 16:57:26 UTC (rev 20862)
+++ branches/blender2.5/blender/source/gameengine/BlenderRoutines/KX_BlenderCanvas.cpp	2009-06-13 17:25:54 UTC (rev 20863)
@@ -26,15 +26,16 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
-//XXX #include "BIF_scrarea.h"
 #include "KX_BlenderCanvas.h"
+#include "DNA_screen_types.h"
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
 
-KX_BlenderCanvas::KX_BlenderCanvas(struct ScrArea *area) :
-m_area(area)
+KX_BlenderCanvas::KX_BlenderCanvas(struct wmWindow *win, ARegion *ar) :
+m_win(win),
+m_ar(ar)
 {
 }
 
@@ -50,7 +51,7 @@
 
 void KX_BlenderCanvas::SwapBuffers()
 {
-	BL_SwapBuffers();
+	BL_SwapBuffers(m_win);
 }
 
 void KX_BlenderCanvas::BeginFrame()
@@ -93,12 +94,12 @@
 
 int KX_BlenderCanvas::GetWidth(
 ) const {
-	return 0; //XXX scrarea_get_win_width(m_area);
+	return m_ar->winx;
 }
 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list