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();
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to