Changeset View
Changeset View
Standalone View
Standalone View
source/blender/windowmanager/intern/wm_draw.c
| Show First 20 Lines • Show All 815 Lines • ▼ Show 20 Lines | if (wm->drags.first) { | ||||
| wm_drags_draw(C, win, NULL); | wm_drags_draw(C, win, NULL); | ||||
| } | } | ||||
| /* copy the ui + overlays */ | /* copy the ui + overlays */ | ||||
| wmSubWindowSet(win, screen->mainwin); | wmSubWindowSet(win, screen->mainwin); | ||||
| wm_triple_copy_textures(win, triple_all); | wm_triple_copy_textures(win, triple_all); | ||||
| } | } | ||||
| #ifdef WITH_INPUT_HMD | |||||
| static void wm_method_draw_triple_hmd_view(wmWindow *win) | |||||
| { | |||||
| wmDrawData *drawdata; | |||||
| for (int view = 0; view < 2; view++) { | |||||
| const int win_x_h = WM_window_pixels_x(win) / 2; | |||||
| drawdata = BLI_findlink(&win->drawdata, (view * 2) + 1); | |||||
| glPushMatrix(); | |||||
| glTranslatef(view * win_x_h, 0.0f, 0.0f); | |||||
| wm_triple_draw_textures(win, drawdata->triple, 1.0f, false); | |||||
| glPopMatrix(); | |||||
| } | |||||
| } | |||||
| #endif /* WITH_INPUT_HMD */ | |||||
| static void wm_method_draw_triple_all(bContext *C, wmWindow *win) | |||||
| { | |||||
| wmWindowManager *wm = CTX_wm_manager(C); | |||||
| const bool is_stereo3d_enabled = WM_stereo3d_enabled(win, false); | |||||
| const bool is_hmd_view = | |||||
| #ifdef WITH_INPUT_HMD | |||||
| wm->hmd_view.hmd_win == win && win->screen->is_hmd_running; | |||||
| #else | |||||
| false; | |||||
| #endif | |||||
| const bool draw_multiview_lr = is_stereo3d_enabled || is_hmd_view; | |||||
| if (draw_multiview_lr) { | |||||
| wm_method_draw_triple_multiview(C, win, STEREO_LEFT_ID); | |||||
| wm_method_draw_triple_multiview(C, win, STEREO_RIGHT_ID); | |||||
| } | |||||
| if (is_stereo3d_enabled) { | |||||
| wm_method_draw_stereo3d(win); | |||||
| } | |||||
| else if (is_hmd_view) { | |||||
| #ifdef WITH_INPUT_HMD | |||||
| wm_method_draw_triple_hmd_view(win); | |||||
| #else | |||||
| UNUSED_VARS(wm); | |||||
| #endif | |||||
| } | |||||
| else { | |||||
| wm_method_draw_triple(C, win); | |||||
| } | |||||
| } | |||||
| /****************** main update call **********************/ | /****************** main update call **********************/ | ||||
| /* quick test to prevent changing window drawable */ | /* quick test to prevent changing window drawable */ | ||||
| static bool wm_draw_update_test_window(wmWindow *win) | static bool wm_draw_update_test_window(wmWindow *win) | ||||
| { | { | ||||
| ScrArea *sa; | ScrArea *sa; | ||||
| ARegion *ar; | ARegion *ar; | ||||
| bool do_draw = false; | bool do_draw = false; | ||||
| ▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| void wm_draw_update(bContext *C) | void wm_draw_update(bContext *C) | ||||
| { | { | ||||
| wmWindowManager *wm = CTX_wm_manager(C); | wmWindowManager *wm = CTX_wm_manager(C); | ||||
| wmWindow *win; | wmWindow *win; | ||||
| int drawmethod; | int drawmethod; | ||||
| #ifdef WITH_INPUT_HMD | |||||
| BLI_assert(wm->hmd_view.hmd_win == NULL || | |||||
| wm->hmd_view.hmd_win->screen->state == SCREENFULL || | |||||
| !"BUG: HMD window should always be fullscreen!"); | |||||
| #endif | |||||
| #ifdef WITH_OPENSUBDIV | #ifdef WITH_OPENSUBDIV | ||||
| BKE_subsurf_free_unused_buffers(); | BKE_subsurf_free_unused_buffers(); | ||||
| #endif | #endif | ||||
| GPU_free_unused_buffers(); | GPU_free_unused_buffers(); | ||||
| for (win = wm->windows.first; win; win = win->next) { | for (win = wm->windows.first; win; win = win->next) { | ||||
| #ifdef WIN32 | #ifdef WIN32 | ||||
| Show All 20 Lines | if (wm_draw_update_test_window(win)) { | ||||
| wm_window_make_drawable(wm, win); | wm_window_make_drawable(wm, win); | ||||
| /* notifiers for screen redraw */ | /* notifiers for screen redraw */ | ||||
| if (win->screen->do_refresh) | if (win->screen->do_refresh) | ||||
| ED_screen_refresh(wm, win); | ED_screen_refresh(wm, win); | ||||
| drawmethod = wm_automatic_draw_method(win); | drawmethod = wm_automatic_draw_method(win); | ||||
| if (win->drawfail) | if (win->drawfail) { | ||||
| wm_method_draw_overlap_all(C, win, 0); | wm_method_draw_overlap_all(C, win, 0); | ||||
| else if (drawmethod == USER_DRAW_FULL) | } | ||||
| else if (drawmethod == USER_DRAW_FULL) { | |||||
| wm_method_draw_full(C, win); | wm_method_draw_full(C, win); | ||||
| else if (drawmethod == USER_DRAW_OVERLAP) | } | ||||
| else if (drawmethod == USER_DRAW_OVERLAP) { | |||||
| wm_method_draw_overlap_all(C, win, 0); | wm_method_draw_overlap_all(C, win, 0); | ||||
| else if (drawmethod == USER_DRAW_OVERLAP_FLIP) | } | ||||
| else if (drawmethod == USER_DRAW_OVERLAP_FLIP) { | |||||
| wm_method_draw_overlap_all(C, win, 1); | wm_method_draw_overlap_all(C, win, 1); | ||||
| else { /* USER_DRAW_TRIPLE */ | |||||
| if ((WM_stereo3d_enabled(win, false)) == false) { | |||||
| wm_method_draw_triple(C, win); | |||||
| } | } | ||||
| else { | else { | ||||
| wm_method_draw_triple_multiview(C, win, STEREO_LEFT_ID); | BLI_assert(drawmethod == USER_DRAW_TRIPLE); | ||||
| wm_method_draw_triple_multiview(C, win, STEREO_RIGHT_ID); | wm_method_draw_triple_all(C, win); | ||||
| wm_method_draw_stereo3d(C, win); | |||||
| } | |||||
| } | } | ||||
| win->screen->do_draw_gesture = false; | win->screen->do_draw_gesture = false; | ||||
| win->screen->do_draw_paintcursor = false; | win->screen->do_draw_paintcursor = false; | ||||
| win->screen->do_draw_drag = false; | win->screen->do_draw_drag = false; | ||||
| wm_window_swap_buffers(win); | wm_window_swap_buffers(win); | ||||
| ▲ Show 20 Lines • Show All 56 Lines • Show Last 20 Lines | |||||