[Bf-blender-cvs] [7a4138a] HMD_viewport: Toggle into scene camera when opening HMD window
Julian Eisel
noreply at git.blender.org
Wed Oct 12 13:27:49 CEST 2016
Commit: 7a4138a5b9c95a8a2e1a1691164806dffd8fe1cd
Author: Julian Eisel
Date: Tue Oct 11 21:53:06 2016 +0200
Branches: HMD_viewport
https://developer.blender.org/rB7a4138a5b9c95a8a2e1a1691164806dffd8fe1cd
Toggle into scene camera when opening HMD window
===================================================================
M source/blender/windowmanager/intern/wm_event_system.c
M source/blender/windowmanager/intern/wm_operators.c
===================================================================
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 411f884..07afac2 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -3496,6 +3496,7 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int U
event.type = EVT_HMD_TRANSFORM;
event.customdata = MEM_mallocN(sizeof(e->orientation), "HMD orientation event data");
event.customdatafree = true;
+ /* Take care for HMDOrientationData when changing this! */
memcpy(event.customdata, e->orientation, sizeof(e->orientation));
wm_event_add(win, &event);
}
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 250aa25..f2dbcca 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -4148,6 +4148,23 @@ static void hmd_view_exit(const bContext *C, Scene *scene)
}
}
+static void hmd_view_prepare_screen(bContext *C, Scene *scene, wmWindow *win)
+{
+ ScrArea *sa = win->screen->areabase.first;
+ View3D *v3d = sa->spacedata.first;
+ RegionView3D *rv3d = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW)->regiondata;
+
+ BLI_assert(sa->spacetype == SPACE_VIEW3D);
+ ED_screen_state_toggle(C, win, sa, SCREENFULL);
+
+ /* sync view options */
+ v3d->drawtype = scene->hmd_settings.view_shade;
+ v3d->fx_settings.fx_flag = scene->hmd_settings.flag;
+
+ rv3d->persp = RV3D_CAMOB;
+ rv3d->camzoom = BKE_screen_view3d_zoom_from_fac(1.0f);
+}
+
static int wm_hmd_view_toggle_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *UNUSED(event))
{
wmWindow *prevwin = CTX_wm_window(C);
@@ -4172,14 +4189,7 @@ static int wm_hmd_view_toggle_invoke(bContext *C, wmOperator *UNUSED(op), const
win = WM_window_open_temp(C, &rect, WM_WINDOW_HMD);
wm->win_hmd = win;
- /* prepare area */
- ScrArea *sa = win->screen->areabase.first;
- View3D *v3d = sa->spacedata.first;
- BLI_assert(sa->spacetype == SPACE_VIEW3D);
- ED_screen_state_toggle(C, win, sa, SCREENFULL);
- /* sync view options */
- v3d->drawtype = scene->hmd_settings.view_shade;
- v3d->fx_settings.fx_flag = scene->hmd_settings.flag;
+ hmd_view_prepare_screen(C, scene, win);
}
return OPERATOR_FINISHED;
@@ -4228,36 +4238,15 @@ static int hmd_session_toggle_invoke(bContext *C, wmOperator *UNUSED(op), const
ScrArea *sa = hmd_win->screen->areabase.first;
ARegion *ar = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW);
View3D *v3d = sa->spacedata.first;
- RegionView3D *rv3d = ar->regiondata;
BLI_assert(sa->spacetype = SPACE_VIEW3D);
WM_device_HMD_state_set(U.hmd_device, true);
- /* XXX duplicated code from viewnumpad_exec */
- if (rv3d->persp != RV3D_CAMOB) {
- Object *ob = OBACT;
- /* first get the default camera for the view lock type */
- if (v3d->scenelock) {
- /* sets the camera view if available */
- v3d->camera = scene->camera;
- }
- else {
- /* use scene camera if one is not set (even though we're unlocked) */
- if (v3d->camera == NULL) {
- v3d->camera = scene->camera;
- }
- }
- /* if the camera isn't found, check a number of options */
- if (v3d->camera == NULL && ob && ob->type == OB_CAMERA)
- v3d->camera = ob;
- if (v3d->camera == NULL)
- v3d->camera = BKE_scene_camera_find(scene);
- if (v3d->camera) {
- rv3d->persp = RV3D_CAMOB;
- BKE_object_rot_to_quat(v3d->camera, init_rot);
- }
- ED_view3d_update_viewmat(scene, sa->spacedata.first, ar, NULL, NULL);
+ BLI_assert(v3d->camera == scene->camera);
+ if (scene->camera) {
+ BKE_object_rot_to_quat(scene->camera, init_rot);
}
+ ED_view3d_update_viewmat(scene, sa->spacedata.first, ar, NULL, NULL);
WM_window_fullscreen_toggle(hmd_win, true, false);
More information about the Bf-blender-cvs
mailing list