[Bf-blender-cvs] [af3917049b] HMD_viewport: Refactor split-view drawing to make popups readable
Julian Eisel
noreply at git.blender.org
Mon Mar 6 21:04:53 CET 2017
Commit: af3917049ba345c05c6408024af839d15e6c11f2
Author: Julian Eisel
Date: Mon Mar 6 20:57:57 2017 +0100
Branches: HMD_viewport
https://developer.blender.org/rBaf3917049ba345c05c6408024af839d15e6c11f2
Refactor split-view drawing to make popups readable
===================================================================
M source/blender/editors/screen/area.c
M source/blender/editors/space_view3d/view3d_draw.c
M source/blender/windowmanager/intern/wm_draw.c
===================================================================
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index a1a96fbf36..226852bcfa 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -473,19 +473,53 @@ void ED_region_set(const bContext *C, ARegion *ar)
ED_region_pixelspace(ar);
}
+static void region_draw_view_setup(wmWindowManager *wm, wmWindow *win, ARegion *ar, bool is_popup)
+{
+#ifdef WITH_INPUT_HMD
+ if (!(wm->hmd_view.hmd_win == win && win->screen->is_hmd_running) || is_popup) {
+ /* pass */
+ }
+ else if ((wm->hmd_view.hmd_win == win) && win->screen->is_hmd_running) {
+ ar->winx /= 2;
+ ar->winrct.xmax -= ar->winx;
+ wm_subwindow_rect_set(win, ar->swinid, &ar->winrct);
+ }
+#else
+ UNUSED_VARS(wm, win, ar, is_popup);
+#endif
+}
+static void region_draw_view_reset(wmWindowManager *wm, wmWindow *win, ARegion *ar, bool is_popup)
+{
+#ifdef WITH_INPUT_HMD
+ if (!(wm->hmd_view.hmd_win == win && win->screen->is_hmd_running) || is_popup) {
+ /* pass */
+ }
+ else if ((wm->hmd_view.hmd_win == win) && win->screen->is_hmd_running) {
+ ar->winrct.xmax += ar->winx;
+ ar->winx *= 2;
+ wm_subwindow_rect_set(win, ar->swinid, &ar->winrct);
+ }
+#else
+ UNUSED_VARS(wm, win, ar, is_popup);
+#endif
+}
/* only exported for WM */
void ED_region_do_draw(bContext *C, ARegion *ar)
{
+ wmWindowManager *wm = CTX_wm_manager(C);
wmWindow *win = CTX_wm_window(C);
ScrArea *sa = CTX_wm_area(C);
ARegionType *at = ar->type;
+ const bool is_popup = ar == CTX_wm_menu(C);
bool scissor_pad;
/* see BKE_spacedata_draw_locks() */
if (at->do_lock)
return;
+ region_draw_view_setup(wm, win, ar, is_popup);
+
/* if no partial draw rect set, full rect */
if (ar->drawrct.xmin == ar->drawrct.xmax) {
ar->drawrct = ar->winrct;
@@ -545,6 +579,8 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
region_draw_emboss(ar, &ar->winrct);
}
}
+
+ region_draw_view_reset(wm, win, ar, is_popup);
}
/* **********************************
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 557ba00bd4..84523fc828 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -3715,9 +3715,6 @@ static void view3d_hmd_view_setup(Scene *scene, View3D *v3d, ARegion *ar)
float projmat[4][4];
float modelviewmat[4][4];
- /* hmd view uses half screen width, this makes sure winmatrix is calculated correctly for that */
- ar->winx /= 2;
-
/* update 3d view matrices before applying matrices from HMD */
view3d_viewmatrix_set(scene, v3d, rv3d);
view3d_winmatrix_set(ar, v3d, NULL);
@@ -3726,8 +3723,6 @@ static void view3d_hmd_view_setup(Scene *scene, View3D *v3d, ARegion *ar)
/* setup view with adjusted matrices */
view3d_main_region_setup_view(scene, v3d, ar, modelviewmat, projmat);
-
- ar->winx *= 2;
}
static void view3d_hmd_view_mirrored_setup(wmWindowManager *wm, Scene *scene, View3D *v3d, ARegion *ar)
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index 7a9fe99a3e..dbdd7d0384 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -826,18 +826,16 @@ static void wm_method_draw_triple_multiview(bContext *C, wmWindow *win, StereoVi
static void wm_method_draw_triple_hmd_view(wmWindow *win)
{
wmDrawData *drawdata;
- int view;
- for (view = 0; view < 2; view++) {
+ for (int view = 0; view < 2; view++) {
const int win_x_h = WM_window_pixels_x(win) / 2;
- const int win_y = WM_window_pixels_y(win);
drawdata = BLI_findlink(&win->drawdata, (view * 2) + 1);
- /* OpenHMD sends us matrices for one eye (half screen), but we draw viewport over
- * entire screen. Using glViewport compensates that and prevents streched view. */
- glViewport(view * win_x_h, 0, win_x_h, win_y);
+ glPushMatrix();
+ glTranslatef(view * win_x_h, 0.0f, 0.0f);
wm_triple_draw_textures(win, drawdata->triple, 1.0f, false);
+ glPopMatrix();
}
}
More information about the Bf-blender-cvs
mailing list