Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-10-27 03:25:38 +0300
committerCampbell Barton <ideasman42@gmail.com>2009-10-27 03:25:38 +0300
commit641072a769cc7bff4d69945c71f536c5b0394bc9 (patch)
treee6202ad7ca66dfc88bfb9b63cc4a47b71ceed2cb /source
parent491463c41659d791c09787ad5975c84a42ada74a (diff)
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)
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c22
-rw-r--r--source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp30
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp12
3 files changed, 47 insertions, 17 deletions
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 12654bdac14..b108d38a3f9 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -1550,7 +1550,7 @@ void game_set_commmandline_options(GameData *gm)
}
/* 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 @@ static int game_engine_exec(bContext *C, wmOperator *unused)
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 @@ static int game_engine_exec(bContext *C, wmOperator *unused)
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);
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index 5c7e18b5304..d4421f9f3e1 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -120,19 +120,19 @@ static BlendFileData *load_game_data(char *filename)
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 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, int alw
}
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 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, int alw
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 @@ extern "C" void StartKetsjiShellSimulation(struct wmWindow *win,
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)
{
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
index 5b732e802f6..336d80507e4 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
@@ -107,11 +107,7 @@ bool RAS_OpenGLRasterizer::Init()
{
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 @@ bool RAS_OpenGLRasterizer::Init()
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;