[Bf-blender-cvs] [6e30e9b] HMD_viewport: Various cleanup
Julian Eisel
noreply at git.blender.org
Mon Aug 1 21:58:46 CEST 2016
Commit: 6e30e9b16dceaade366dececf301d8eda9092669
Author: Julian Eisel
Date: Mon Aug 1 21:58:21 2016 +0200
Branches: HMD_viewport
https://developer.blender.org/rB6e30e9b16dceaade366dececf301d8eda9092669
Various cleanup
===================================================================
M source/blender/blenkernel/intern/camera.c
M source/blender/editors/space_view3d/view3d_draw.c
===================================================================
diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c
index 9f9bd09..74431c7 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -800,19 +800,20 @@ void BKE_camera_multiview_view_matrix(RenderData *rd, Object *camera, const bool
/* get the projection matrix for HMD */
void BKE_camera_multiview_proj_matrix(const bool is_left, float r_projmat[4][4])
{
+#ifdef WITH_INPUT_HMD
/* set projection matrix from hmd */
- if (U.hmd_device != -1)
- {
- float cameraProjMatrix[4][4];
- if (is_left)
- WM_device_HMD_left_projection_matrix_get(cameraProjMatrix);
- else
- WM_device_HMD_right_projection_matrix_get(cameraProjMatrix);
-
- copy_m4_m4(r_projmat, cameraProjMatrix);
-
+ if (U.hmd_device != -1) {
+ if (is_left) {
+ WM_device_HMD_left_projection_matrix_get(r_projmat);
+ }
+ else {
+ WM_device_HMD_right_projection_matrix_get(r_projmat);
+ }
//transpose_m4(r_projmat);
}
+#else
+ UNUSED_VARS(is_left, r_projmat);
+#endif
}
/* left is the default */
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 6c53c8e..189568f 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -104,7 +104,7 @@
#include "view3d_intern.h" /* own include */
/* prototypes */
-static void view3d_stereo3d_setup(Scene *scene, View3D *v3d, ARegion *ar);
+static void view3d_stereo3d_setup(Scene *scene, View3D *v3d, ARegion *ar, const bool is_hmd_view);
static void view3d_stereo3d_setup_offscreen(Scene *scene, View3D *v3d, ARegion *ar,
float winmat[4][4], const char *viewname);
@@ -3752,7 +3752,7 @@ static bool view3d_stereo3d_active(const bContext *C, Scene *scene, View3D *v3d,
* we do a small hack to replace it temporarily so we don't need to change the
* view3d)main_region_setup_view() code to account for that.
*/
-static void view3d_stereo3d_setup(Scene *scene, View3D *v3d, ARegion *ar)
+static void view3d_stereo3d_setup(Scene *scene, View3D *v3d, ARegion *ar, const bool is_hmd_view)
{
bool is_left;
const char *names[2] = {STEREO_LEFT_NAME, STEREO_RIGHT_NAME};
@@ -3766,10 +3766,9 @@ static void view3d_stereo3d_setup(Scene *scene, View3D *v3d, ARegion *ar)
viewname = names[is_left ? STEREO_LEFT_ID : STEREO_RIGHT_ID];
/* update the viewport matrices with the new camera */
- if (ELEM(scene->r.views_format, SCE_VIEWS_FORMAT_STEREO_3D, SCE_VIEWS_FORMAT_HMD)) {
+ if (scene->r.views_format == SCE_VIEWS_FORMAT_STEREO_3D) {
Camera *data;
float viewmat[4][4];
- float projmat[4][4];
float shiftx;
data = (Camera *)v3d->camera->data;
@@ -3779,19 +3778,27 @@ static void view3d_stereo3d_setup(Scene *scene, View3D *v3d, ARegion *ar)
data->shiftx = BKE_camera_multiview_shift_x(&scene->r, v3d->camera, viewname);
BKE_camera_multiview_view_matrix(&scene->r, v3d->camera, is_left, viewmat);
- BKE_camera_multiview_proj_matrix(is_left, projmat);
- if (WM_device_HMD_current_get() >= 0) //HMD active, use HMD camera matrix
- {
- shiftx = 0.0f;
- view3d_main_region_setup_view(scene, v3d, ar, viewmat, projmat);
- }
- else
- view3d_main_region_setup_view(scene, v3d, ar, viewmat, NULL);
+ view3d_main_region_setup_view(scene, v3d, ar, viewmat, NULL);
data->shiftx = shiftx;
BLI_unlock_thread(LOCK_VIEW3D);
}
+ else if (scene->r.views_format == SCE_VIEWS_FORMAT_HMD) {
+ if (is_hmd_view) {
+ float viewmat[4][4];
+ float projmat[4][4];
+
+ BLI_lock_thread(LOCK_VIEW3D);
+
+ BKE_camera_multiview_view_matrix(&scene->r, v3d->camera, is_left, viewmat);
+ BKE_camera_multiview_proj_matrix(is_left, projmat);
+
+ view3d_main_region_setup_view(scene, v3d, ar, viewmat, projmat);
+
+ BLI_unlock_thread(LOCK_VIEW3D);
+ }
+ }
else { /* SCE_VIEWS_FORMAT_MULTIVIEW */
float viewmat[4][4];
Object *view_ob = v3d->camera;
@@ -3843,8 +3850,10 @@ static void update_lods(Scene *scene, float camera_pos[3])
}
#endif
-static void view3d_main_region_draw_objects(const bContext *C, Scene *scene, View3D *v3d,
- ARegion *ar, const char **grid_unit)
+static void view3d_main_region_draw_objects(
+ const bContext *C, Scene *scene, View3D *v3d,
+ ARegion *ar, const char **grid_unit,
+ const bool is_hmd_view)
{
wmWindow *win = CTX_wm_window(C);
RegionView3D *rv3d = ar->regiondata;
@@ -3865,7 +3874,7 @@ static void view3d_main_region_draw_objects(const bContext *C, Scene *scene, Vie
/* setup the view matrix */
if (view3d_stereo3d_active(C, scene, v3d, rv3d))
- view3d_stereo3d_setup(scene, v3d, ar);
+ view3d_stereo3d_setup(scene, v3d, ar, is_hmd_view);
else
view3d_main_region_setup_view(scene, v3d, ar, NULL, NULL);
@@ -4047,7 +4056,7 @@ void view3d_main_region_draw(const bContext *C, ARegion *ar)
const char *grid_unit = NULL;
rcti border_rect;
bool render_border, clip_border;
- const bool HMD_view =
+ const bool is_hmd_view =
#ifdef WITH_INPUT_HMD
((CTX_wm_manager(C)->win_hmd == CTX_wm_window(C)) &&
(scene->r.views_format == SCE_VIEWS_FORMAT_HMD) &&
@@ -4063,7 +4072,7 @@ void view3d_main_region_draw(const bContext *C, ARegion *ar)
/* draw viewport using opengl */
if (v3d->drawtype != OB_RENDER || !view3d_main_region_do_render_draw(scene) || clip_border) {
- view3d_main_region_draw_objects(C, scene, v3d, ar, &grid_unit);
+ view3d_main_region_draw_objects(C, scene, v3d, ar, &grid_unit, is_hmd_view);
#ifdef DEBUG_DRAW
bl_debug_draw();
@@ -4073,7 +4082,7 @@ void view3d_main_region_draw(const bContext *C, ARegion *ar)
ED_region_pixelspace(ar);
- if (HMD_view) {
+ if (is_hmd_view) {
return;
}
}
More information about the Bf-blender-cvs
mailing list