[Bf-blender-cvs] [2d2d44c] HMD_viewport: No need to apply HMD rotation in operator anymore
Julian Eisel
noreply at git.blender.org
Fri Oct 28 20:38:06 CEST 2016
Commit: 2d2d44ca71e549b14be875ccd3b502937b6799f6
Author: Julian Eisel
Date: Fri Oct 28 20:22:44 2016 +0200
Branches: HMD_viewport
https://developer.blender.org/rB2d2d44ca71e549b14be875ccd3b502937b6799f6
No need to apply HMD rotation in operator anymore
Now done by requesting modelview/projection matrices from OpenHMD.
===================================================================
M source/blender/windowmanager/intern/wm_event_system.c
M source/blender/windowmanager/intern/wm_operators.c
M source/blender/windowmanager/intern/wm_window.c
===================================================================
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 07afac2..d915713 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -3494,10 +3494,6 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, int U
if (e->subtype == GHOST_kOrientationUpdate) {
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);
}
break;
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index fe23e24..28c110c 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -4126,28 +4126,6 @@ static void WM_OT_stereo3d_set(wmOperatorType *ot)
/* ******************************************************* */
/* Head Mounted Display */
-typedef struct HMDOrientationData {
- float orientation[4];
-} HMDOrientationData;
-
-/**
- * Initial camera rotation (quaternion).
- * A bit ugly, but we need to calculate the rotation delta since session start.
- */
-static float init_rot[4];
-
-static void hmd_view_exit(const bContext *C, Scene *scene)
-{
- View3D *v3d = CTX_wm_view3d(C);
- Object *ob = v3d ? v3d->camera : scene->camera;
-
- if (ob) {
- /* reset initial camera rotation */
- BKE_object_quat_to_rot(ob, init_rot);
- DAG_id_tag_update(&ob->id, OB_RECALC_OB); /* sets recalc flags */
- }
-}
-
static void hmd_view_prepare_screen(bContext *C, Scene *scene, wmWindow *win)
{
ScrArea *sa = win->screen->areabase.first;
@@ -4177,7 +4155,6 @@ static int wm_hmd_view_toggle_invoke(bContext *C, wmOperator *UNUSED(op), const
if ((win = wm->win_hmd)) {
Scene *sc = CTX_data_scene(C);
sc->hmd_settings.flag &= ~HMDVIEW_SESSION_RUNNING;
- hmd_view_exit(C, sc);
wm_window_close(C, wm, win);
wm->win_hmd = NULL;
/* close HMD */
@@ -4231,14 +4208,12 @@ static int hmd_session_toggle_invoke(bContext *C, wmOperator *UNUSED(op), const
scene->hmd_settings.flag ^= HMDVIEW_SESSION_RUNNING;
if (was_hmd_running) {
- hmd_view_exit(C, scene);
WM_window_fullscreen_toggle(hmd_win, false, true);
WM_device_HMD_state_set(U.hmd_device, false);
return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
}
else {
ScrArea *sa = hmd_win->screen->areabase.first;
- View3D *v3d = sa->spacedata.first;
BLI_assert(sa->spacetype = SPACE_VIEW3D);
WM_device_HMD_state_set(U.hmd_device, true);
@@ -4247,11 +4222,6 @@ static int hmd_session_toggle_invoke(bContext *C, wmOperator *UNUSED(op), const
WM_device_HMD_IPD_set(scene->hmd_settings.custom_ipd);
}
- BLI_assert(v3d->camera == scene->camera);
- if (scene->camera) {
- BKE_object_rot_to_quat(scene->camera, init_rot);
- }
-
WM_window_fullscreen_toggle(hmd_win, true, false);
return OPERATOR_FINISHED;
@@ -4270,40 +4240,23 @@ static void WM_OT_hmd_session_toggle(wmOperatorType *ot)
ot->poll = hmd_session_toggle_poll;
}
-static void hmd_session_refresh(bContext *C, wmWindow *hmd_win, Scene *scene, HMDOrientationData *data)
+static int hmd_session_refresh_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *UNUSED(event))
{
- View3D *v3d = CTX_wm_view3d(C);
- Object *ob = v3d ? v3d->camera : scene->camera;
- float quat[4];
+ Scene *scene = CTX_data_scene(C);
- if ((scene->hmd_settings.flag & HMDVIEW_IGNORE_ROT) || !ob) {
- return;
- }
- if (!hmd_win) {
- BLI_assert(0);
- scene->hmd_settings.flag &= ~HMDVIEW_SESSION_RUNNING;
- return;
+ if ((scene->hmd_settings.flag & HMDVIEW_SESSION_RUNNING) == 0) {
+ return OPERATOR_CANCELLED; /* no pass through, we don't need to keep that event in queue */
}
- mul_qt_qtqt(quat, init_rot, data->orientation);
- BKE_object_quat_to_rot(ob, quat);
-
- DAG_id_tag_update(&ob->id, OB_RECALC_OB); /* sets recalc flags */
- /* tag hmd region for update */
+ wmWindowManager *wm = CTX_wm_manager(C);
+ wmWindow *hmd_win = wm->win_hmd;
ScrArea *sa = hmd_win->screen->areabase.first;
- ARegion *ar = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW);
- ED_region_tag_redraw(ar);
-}
-static int hmd_session_refresh_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
-{
- Scene *scene = CTX_data_scene(C);
- if ((scene->hmd_settings.flag & HMDVIEW_SESSION_RUNNING) == 0)
- return OPERATOR_CANCELLED; /* no pass through, we don't need to keep that event in queue */
+ BLI_assert(sa->spacetype == SPACE_VIEW3D);
+ /* Actually the only thing we have to do is ensuring a redraw, we'll then
+ * get the modelview/projection matrices from HMD device when drawing */
+ ED_area_tag_redraw(sa);
- wmWindowManager *wm = CTX_wm_manager(C);
- wmWindow *hmd_win = wm->win_hmd;
- hmd_session_refresh(C, hmd_win, CTX_data_scene(C), event->customdata);
return (OPERATOR_FINISHED | OPERATOR_PASS_THROUGH);
}
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index e98f521..bb9b7d1 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -1258,9 +1258,9 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr C_void_ptr
#ifdef WITH_INPUT_HMD
case GHOST_kEventHMD:
{
- GHOST_TEventOpenHMDData *hmdd = data;
+ GHOST_TEventOpenHMDData *hmd_data = data;
- if (hmdd->subtype == GHOST_kDeviceNumChanged) {
+ if (hmd_data->subtype == GHOST_kDeviceNumChanged) {
if (WM_device_HMD_num_devices_get() > 0) {
if (U.hmd_device == -1) { /* Only if 'None' item is selected */
U.hmd_device = 0; /* last device plugged in */
More information about the Bf-blender-cvs
mailing list