diff options
author | Campbell Barton <ideasman42@gmail.com> | 2009-10-27 03:25:38 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2009-10-27 03:25:38 +0300 |
commit | 641072a769cc7bff4d69945c71f536c5b0394bc9 (patch) | |
tree | e6202ad7ca66dfc88bfb9b63cc4a47b71ceed2cb /source | |
parent | 491463c41659d791c09787ad5975c84a42ada74a (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')
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; |