[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24102] trunk/blender/source: BGE: when letterbox is enabled use the camera framing as a clipping area ( good for avoiding the HUD showing outside the bounds), use the framing color too (from dalai and myself)

Campbell Barton ideasman42 at gmail.com
Tue Oct 27 01:26:53 CET 2009


Revision: 24102
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24102
Author:   campbellbarton
Date:     2009-10-27 01:25:38 +0100 (Tue, 27 Oct 2009)

Log Message:
-----------
BGE: when letterbox is enabled use the camera framing as a clipping area (good for avoiding the HUD showing outside the bounds), use the framing color too (from dalai and myself)

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c
    trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2009-10-26 23:17:48 UTC (rev 24101)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2009-10-27 00:25:38 UTC (rev 24102)
@@ -1550,7 +1550,7 @@
 }
 
 /* maybe we need this defined somewhere else */
-extern void StartKetsjiShell(struct bContext *C, struct ARegion *ar, int always_use_expand_framing);
+extern void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *cam_frame, int always_use_expand_framing);
 
 #endif // GAMEBLENDER == 1
 
@@ -1566,6 +1566,7 @@
 	bScreen *sc= CTX_wm_screen(C);
 	ScrArea *sa, *prevsa= CTX_wm_area(C);
 	ARegion *ar, *prevar= CTX_wm_region(C);
+	rcti cam_frame;
 
 	sa= prevsa;
 	if(sa->spacetype != SPACE_VIEW3D) {
@@ -1592,8 +1593,25 @@
 	
 	game_set_commmandline_options(&startscene->gm);
 
+	if(startscene->gm.framing.type == SCE_GAMEFRAMING_BARS) { /* Letterbox */
+		rctf cam_framef;
+		calc_viewborder(startscene, ar, CTX_wm_view3d(C), &cam_framef);
+		cam_frame.xmin = cam_framef.xmin + ar->winrct.xmin;
+		cam_frame.xmax = cam_framef.xmax + ar->winrct.xmin;
+		cam_frame.ymin = cam_framef.ymin + ar->winrct.ymin;
+		cam_frame.ymax = cam_framef.ymax + ar->winrct.ymin;
+		BLI_isect_rcti(&ar->winrct, &cam_frame, &cam_frame);
+	}
+	else {
+		cam_frame.xmin = ar->winrct.xmin;
+		cam_frame.xmax = ar->winrct.xmax;
+		cam_frame.ymin = ar->winrct.ymin;
+		cam_frame.ymax = ar->winrct.ymax;
+	}
+
+
 	SaveState(C);
-	StartKetsjiShell(C, ar, 1);
+	StartKetsjiShell(C, ar, &cam_frame, 1);
 	RestoreState(C);
 	
 	CTX_wm_region_set(C, prevar);

Modified: trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
===================================================================
--- trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2009-10-26 23:17:48 UTC (rev 24101)
+++ trunk/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp	2009-10-27 00:25:38 UTC (rev 24102)
@@ -120,19 +120,19 @@
 	return bfd;
 }
 
-extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, int always_use_expand_framing)
+extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *cam_frame, int always_use_expand_framing)
 {
 	/* context values */
 	struct wmWindow *win= CTX_wm_window(C);
 	struct Scene *scene= CTX_data_scene(C);
 	struct Main* maggie1= CTX_data_main(C);
-	
 
+
 	RAS_Rect area_rect;
-	area_rect.SetLeft(ar->winrct.xmin);
-	area_rect.SetBottom(ar->winrct.ymin);
-	area_rect.SetRight(ar->winrct.xmax);
-	area_rect.SetTop(ar->winrct.ymax);
+	area_rect.SetLeft(cam_frame->xmin);
+	area_rect.SetBottom(cam_frame->ymin);
+	area_rect.SetRight(cam_frame->xmax);
+	area_rect.SetTop(cam_frame->ymax);
 
 	int exitrequested = KX_EXIT_REQUEST_NO_REQUEST;
 	Main* blenderdata = maggie1;
@@ -246,14 +246,21 @@
 		}
 		
 		if(rv3d->persp==V3D_CAMOB) {
-			camzoom = (1.41421 + (rv3d->camzoom / 50.0));
-			camzoom *= camzoom;
+			if(scene->gm.framing.type == SCE_GAMEFRAMING_BARS) { /* Letterbox */
+				camzoom = 1.0f;
+			}
+			else {
+				camzoom = (1.41421 + (rv3d->camzoom / 50.0));
+				camzoom *= camzoom;
+				camzoom = 4.0 / camzoom;
+			}
 		}
-		else
+		else {
 			camzoom = 2.0;
+		}
 
-		camzoom = 4.0 / camzoom;
 		
+
 		ketsjiengine->SetDrawType(v3d->drawtype);
 		ketsjiengine->SetCameraZoom(camzoom);
 		
@@ -336,6 +343,8 @@
 				if (blscene->gm.stereomode != RAS_IRasterizer::RAS_STEREO_QUADBUFFERED)
 					rasterizer->SetStereoMode((RAS_IRasterizer::StereoMode) blscene->gm.stereomode);
 			}
+
+			rasterizer->SetBackColor(blscene->gm.framing.col[0], blscene->gm.framing.col[1], blscene->gm.framing.col[2], 0.0f);
 		}
 		
 		if (exitrequested != KX_EXIT_REQUEST_QUIT_GAME)
@@ -688,6 +697,7 @@
 			if (blscene->gm.stereomode != RAS_IRasterizer::RAS_STEREO_QUADBUFFERED)
 				rasterizer->SetStereoMode((RAS_IRasterizer::StereoMode) blscene->gm.stereomode);
 		}
+		rasterizer->SetBackColor(blscene->gm.framing.col[0], blscene->gm.framing.col[1], blscene->gm.framing.col[2], 0.0f);
 
 		if (exitrequested != KX_EXIT_REQUEST_QUIT_GAME)
 		{

Modified: trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
===================================================================
--- trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2009-10-26 23:17:48 UTC (rev 24101)
+++ trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2009-10-27 00:25:38 UTC (rev 24102)
@@ -107,11 +107,7 @@
 {
 	GPU_state_init();
 
-	m_redback = 0.4375;
-	m_greenback = 0.4375;
-	m_blueback = 0.4375;
-	m_alphaback = 0.0;
-	
+
 	m_ambr = 0.0f;
 	m_ambg = 0.0f;
 	m_ambb = 0.0f;
@@ -128,6 +124,12 @@
 	glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
 	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
+
+	m_redback = 0.4375;
+	m_greenback = 0.4375;
+	m_blueback = 0.4375;
+	m_alphaback = 0.0;
+
 	glShadeModel(GL_SMOOTH);
 
 	return true;





More information about the Bf-blender-cvs mailing list