Commit: 9c4e06fcc47d0d164ac797a0fd4b846877bcc3b2
Author: Julian Eisel
Date:   Thu Mar 17 18:14:56 2016 +0100
Branches: HMD_viewport
https://developer.blender.org/rB9c4e06fcc47d0d164ac797a0fd4b846877bcc3b2

Make HMD session non-modal and move it to WM level

===================================================================

M       release/scripts/startup/bl_ui/properties_render_layer.py
M       source/blender/editors/space_view3d/view3d_edit.c
M       source/blender/editors/space_view3d/view3d_intern.h
M       source/blender/editors/space_view3d/view3d_ops.c
M       source/blender/windowmanager/intern/wm_operators.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py 
b/release/scripts/startup/bl_ui/properties_render_layer.py
index 2ac0913..af722c70 100644
--- a/release/scripts/startup/bl_ui/properties_render_layer.py
+++ b/release/scripts/startup/bl_ui/properties_render_layer.py
@@ -236,7 +236,7 @@ class RENDERLAYER_PT_views(RenderLayerButtonsPanel, Panel):
 
             row = col.row(align=True)
             row.operator("wm.hmd_view_open", text=text_win)
-            row.operator("view3d.hmd_session_run", text=text_run, icon=icon)
+            row.operator("wm.hmd_session_run", text=text_run, icon=icon)
 
             col.prop(rd, "hmd_camlock")
 
diff --git a/source/blender/editors/space_view3d/view3d_edit.c 
b/source/blender/editors/space_view3d/view3d_edit.c
index c951f47..718696b 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -4800,176 +4800,6 @@ void VIEW3D_OT_enable_manipulator(wmOperatorType *ot)
        RNA_def_property_flag(prop, PROP_SKIP_SAVE);
 }
 
-/* ***************** HMD Session ******************* */
-
-typedef struct HMDData {
-       float orientation[4];
-} HMDData;
-
-static float pref_quat[4] = {1.0f, 0.0f, 0.0f, 0.0f};
-
-static void hmd_session_refresh(bContext *C, wmWindow *hmd_win, Scene *scene, 
HMDData *data)
-{
-       if (scene->r.scemode & R_HMD_IGNORE_ROT)
-               return;
-       if (!hmd_win) {
-               scene->flag &= ~SCE_HMD_RUNNING;
-               return;
-       }
-
-       View3D *v3d = CTX_wm_view3d(C);
-       Object *ob = v3d ? v3d->camera : scene->camera;
-       float delta_quat[4];
-       float quat[4];
-
-       /* get rotation delta */
-       sub_qt_qtqt(delta_quat, data->orientation, pref_quat);
-       /* store orientation for next update */
-       copy_qt_qt(pref_quat, data->orientation);
-       mul_qt_qtqt(quat, ob->quat, delta_quat);
-
-       if (ob->rotmode == ROT_MODE_QUAT) {
-               copy_qt_qt(ob->quat, quat);
-       }
-       else if (ob->rotmode == ROT_MODE_AXISANGLE) {
-               quat_to_axis_angle(ob->rotAxis, &ob->rotAngle, quat);
-       }
-       else {
-               quat_to_eulO(ob->rot, ob->rotmode, quat);
-       }
-
-       DAG_id_tag_update(&ob->id, OB_RECALC_OB);  /* sets recalc flags */
-       /* tag hmd region for update */
-       ScrArea *sa = hmd_win->screen->areabase.first;
-       ARegion *ar = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW);
-       ED_region_tag_redraw(ar);
-}
-
-static void hmd_run_exit(wmWindow *hmd_win, Scene *scene)
-{
-       scene->flag &= ~SCE_HMD_RUNNING;
-       WM_window_fullscreen_toggle(hmd_win, false, true);
-}
-
-static int hmd_session_run_poll(bContext *C)
-{
-       return (CTX_wm_manager(C)->win_hmd != NULL);
-}
-
-static int hmd_session_run_modal(bContext *C, wmOperator *UNUSED(op), const 
wmEvent *event)
-{
-       wmWindowManager *wm = CTX_wm_manager(C);
-       wmWindow *hmd_win = wm->win_hmd;
-       Scene *scene = CTX_data_scene(C);
-
-       switch (event->type) {
-               case EVT_HMD_TRANSFORM:
-                       hmd_session_refresh(C, hmd_win, scene, 
event->customdata);
-                       return (OPERATOR_RUNNING_MODAL | OPERATOR_PASS_THROUGH);
-               case ESCKEY:
-                       hmd_run_exit(hmd_win, scene);
-                       return OPERATOR_FINISHED;
-       }
-
-       return OPERATOR_PASS_THROUGH;
-}
-
-static int hmd_session_run_invoke(bContext *C, wmOperator *op, const wmEvent 
*UNUSED(event))
-{
-       Scene *scene = CTX_data_scene(C);
-       wmWindowManager *wm = CTX_wm_manager(C);
-       wmWindow *hmd_win = wm->win_hmd;
-       const bool was_hmd_running = (scene->flag & SCE_HMD_RUNNING);
-
-       if (!hmd_win) {
-               return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
-       }
-
-       scene->flag ^= SCE_HMD_RUNNING;
-       if (was_hmd_running) {
-               WM_window_fullscreen_toggle(hmd_win, false, true);
-               return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
-       }
-       else {
-               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);
-
-               /* 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;
-               }
-
-               WM_window_fullscreen_toggle(hmd_win, true, false);
-
-               WM_event_add_modal_handler(C, op);
-               return OPERATOR_RUNNING_MODAL;
-       }
-}
-
-void VIEW3D_OT_hmd_session_run(wmOperatorType *ot)
-{
-       /* identifiers */
-       ot->name = "Run HMD Session";
-       ot->description = "Start/Stop a head mounted display (virtual reality) 
session";
-       ot->idname = "VIEW3D_OT_hmd_session_run";
-
-       /* api callbacks */
-       ot->invoke = hmd_session_run_invoke;
-       ot->modal = hmd_session_run_modal;
-       ot->poll = hmd_session_run_poll;
-}
-
-static int hmd_session_refresh_invoke(bContext *C, wmOperator *UNUSED(op), 
const wmEvent *event)
-{
-       Scene *scene = CTX_data_scene(C);
-       if ((scene->flag & SCE_HMD_RUNNING) == 0)
-               return OPERATOR_CANCELLED; /* no pass through, we don't need to 
keep that event in queue */
-
-       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;
-}
-
-/**
- * Only needed since VIEW3D_OT_hmd_session_run modal can only update while
- * mouse is inside initial window. For other windows, this is called.
- */
-void VIEW3D_OT_hmd_session_refresh(wmOperatorType *ot)
-{
-       /* identifiers */
-       ot->name = "Refresh HMD Session";
-       ot->description = "Refresh data for a head mounted display (virtual 
reality) session";
-       ot->idname = "VIEW3D_OT_hmd_session_refresh";
-
-       /* api callbacks */
-       ot->invoke = hmd_session_refresh_invoke;
-
-       /* flags */
-       ot->flag = OPTYPE_INTERNAL;
-}
-
 /* ************************* below the line! *********************** */
 
 
diff --git a/source/blender/editors/space_view3d/view3d_intern.h 
b/source/blender/editors/space_view3d/view3d_intern.h
index 9240952..c398356 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -103,8 +103,6 @@ void VIEW3D_OT_enable_manipulator(struct wmOperatorType 
*ot);
 void VIEW3D_OT_render_border(struct wmOperatorType *ot);
 void VIEW3D_OT_clear_render_border(struct wmOperatorType *ot);
 void VIEW3D_OT_zoom_border(struct wmOperatorType *ot);
-void VIEW3D_OT_hmd_session_run(struct wmOperatorType *ot);
-void VIEW3D_OT_hmd_session_refresh(struct wmOperatorType *ot);
 
 void view3d_boxview_copy(ScrArea *sa, ARegion *ar);
 
diff --git a/source/blender/editors/space_view3d/view3d_ops.c 
b/source/blender/editors/space_view3d/view3d_ops.c
index ec31981..6572573 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -218,8 +218,6 @@ void view3d_operatortypes(void)
        WM_operatortype_append(VIEW3D_OT_snap_cursor_to_center);
        WM_operatortype_append(VIEW3D_OT_snap_cursor_to_selected);
        WM_operatortype_append(VIEW3D_OT_snap_cursor_to_active);
-       WM_operatortype_append(VIEW3D_OT_hmd_session_run);
-       WM_operatortype_append(VIEW3D_OT_hmd_session_refresh);
 
        transform_operatortypes();
 }
@@ -506,8 +504,6 @@ void view3d_keymap(wmKeyConfig *keyconf)
        
        WM_keymap_add_menu(keymap, "VIEW3D_MT_snap", SKEY, KM_PRESS, KM_SHIFT, 
0);
 
-       WM_keymap_add_item(keymap, "VIEW3D_OT_hmd_session_refresh", 
EVT_HMD_TRANSFORM, 0, KM_ANY, 0);
-
 #ifdef __APPLE__
        WM_keymap_add_item(keymap, "VIEW3D_OT_copybuffer", CKEY, KM_PRESS, 
KM_OSKEY, 0);
        WM_keymap_add_item(keymap, "VIEW3D_OT_pastebuffer", VKEY, KM_PRESS, 
KM_OSKEY, 0);
diff --git a/source/blender/windowmanager/intern/wm_operators.c 
b/source/blender/windowmanager/intern/wm_operators.c
index 134f1aa..edb5b5c 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -5097,6 +5097,23 @@ static void WM_OT_stereo3d_set(wmOperatorType *ot)
        RNA_def_property_flag(prop, PROP_SKIP_SAVE);
 }
 
+
+/* ******************************************************* */
+/* Head Mounted Display */
+
+/**
+ * Same as #GHOST_TEventOpenHMDData.
+ */
+typedef struct HMDData {
+       float orientation[4];
+} HMDData;
+
+/**
+ * Previous HMD rotation value (quaternion).
+ * A bit ugly, but we need to calculate the rotation delta since the last 
event.
+ */
+static float prev_quat[4] = {1.0f, 0.0f, 0.0f, 0.0f};
+
 static int wm_hmd_view_open_invoke(bContext *C, wmOperator *UNUSED(op), const 
wmEvent *UNUSED(event))
 {
        wmWindow *prevwin = CTX_wm_window(C);
@@ -5128,6 +5145,142 @@ static void WM_OT_hmd_view_open(wmOperatorType *ot)
        ot->invoke = wm_hmd_view_open_invoke;
 }
 
+static int hmd_session_run_poll(bContext *C)
+{
+       return (CTX_wm_manager(C)->win_hmd != NULL);
+}
+
+static int hmd_session_run_invoke(bContext *C, wmOperator *UNUSED(op), const 
wmEvent *UNUSED(event))
+{
+       Scene *scene = CTX_data_scene(C);
+       wmWindowManager *wm = CTX_wm_manager(C);
+       wmWindow *hmd_win = wm->win_hmd;
+       const bool was_hmd_running = (scene->flag & SCE_HMD_RUNNING);
+
+       if (!hmd_win) {
+               return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
+       }
+
+       scene->flag ^= SCE_HMD_RUNNING;
+       if (was_hmd_running) {
+               WM_window_fullscreen_toggle(hmd_win, false, true);
+               return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
+       }
+       else {
+               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);
+
+               /* 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 == NU

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to