Commit: 3774a424ea00c7d2a22e48e209dbe4f33840e2f1
Author: Joey Ferwerda
Date:   Sun Jul 31 21:24:55 2016 +0200
Branches: HMD_viewport
https://developer.blender.org/rB3774a424ea00c7d2a22e48e209dbe4f33840e2f1

Implemented initial support for using HMD projection matrices in blender 
viewport.
Also did some general cleaning

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

M       intern/cycles/render/camera.h
M       intern/ghost/GHOST_C-api.h
M       intern/ghost/intern/GHOST_C-api.cpp
M       source/blender/blenkernel/BKE_camera.h
M       source/blender/blenkernel/intern/camera.c
M       source/blender/editors/space_view3d/drawobject.c
M       source/blender/editors/space_view3d/view3d_draw.c
M       source/blender/gpu/shaders/gpu_shader_fx_lensdistortion_frag.glsl
M       source/blender/windowmanager/WM_api.h
M       source/blender/windowmanager/intern/wm_device.c

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

diff --git a/intern/cycles/render/camera.h b/intern/cycles/render/camera.h
index 141ef9c..0caa06f 100644
--- a/intern/cycles/render/camera.h
+++ b/intern/cycles/render/camera.h
@@ -172,7 +172,7 @@ public:
        /* functions */
        Camera();
        ~Camera();
-       
+
        void compute_auto_viewplane();
 
        void update();
diff --git a/intern/ghost/GHOST_C-api.h b/intern/ghost/GHOST_C-api.h
index 672de91..2a88e15 100644
--- a/intern/ghost/GHOST_C-api.h
+++ b/intern/ghost/GHOST_C-api.h
@@ -937,6 +937,10 @@ extern int         GHOST_HMDgetOpenDeviceIndex(void);
 extern const char *GHOST_HMDgetDeviceName(int index);
 extern const char *GHOST_HMDgetVendorName(int index);
 extern float       GHOST_HMDgetDeviceIPD(void);
+extern void        GHOST_HMDgetLeftModelviewMatrix(float leftMatrix[16]);
+extern void        GHOST_HMDgetRightModelviewMatrix(float rightMatrix[16]);
+extern void        GHOST_HMDgetLeftProjectionMatrix(float leftMatrix[16]);
+extern void        GHOST_HMDgetRightProjectionMatrix(float rightMatrix[16]);
 
 #ifdef __cplusplus
 }
diff --git a/intern/ghost/intern/GHOST_C-api.cpp 
b/intern/ghost/intern/GHOST_C-api.cpp
index ddf84e1..4bbbbb8 100644
--- a/intern/ghost/intern/GHOST_C-api.cpp
+++ b/intern/ghost/intern/GHOST_C-api.cpp
@@ -120,7 +120,7 @@ void GHOST_GetMainDisplayDimensions(GHOST_SystemHandle 
systemhandle,
                                     GHOST_TUns32 *height)
 {
        GHOST_ISystem *system = (GHOST_ISystem *) systemhandle;
-       
+
        system->getMainDisplayDimensions(*width, *height);
 }
 
@@ -167,7 +167,7 @@ GHOST_TSuccess GHOST_DisposeWindow(GHOST_SystemHandle 
systemhandle,
 {
        GHOST_ISystem *system = (GHOST_ISystem *) systemhandle;
        GHOST_IWindow *window = (GHOST_IWindow *) windowhandle;
-       
+
        return system->disposeWindow(window);
 }
 
@@ -178,7 +178,7 @@ int GHOST_ValidWindow(GHOST_SystemHandle systemhandle,
 {
        GHOST_ISystem *system = (GHOST_ISystem *) systemhandle;
        GHOST_IWindow *window = (GHOST_IWindow *) windowhandle;
-       
+
        return (int) system->validWindow(window);
 }
 
@@ -196,7 +196,7 @@ GHOST_WindowHandle GHOST_BeginFullScreen(GHOST_SystemHandle 
systemhandle,
                bstereoVisual = true;
        else
                bstereoVisual = false;
-       
+
        system->beginFullScreen(*setting, &window, bstereoVisual);
 
        return (GHOST_WindowHandle)window;
@@ -225,7 +225,7 @@ int GHOST_GetFullScreen(GHOST_SystemHandle systemhandle)
 int GHOST_ProcessEvents(GHOST_SystemHandle systemhandle, int waitForEvent)
 {
        GHOST_ISystem *system = (GHOST_ISystem *) systemhandle;
-       
+
        return (int) system->processEvents(waitForEvent ? true : false);
 }
 
@@ -234,7 +234,7 @@ int GHOST_ProcessEvents(GHOST_SystemHandle systemhandle, 
int waitForEvent)
 void GHOST_DispatchEvents(GHOST_SystemHandle systemhandle)
 {
        GHOST_ISystem *system = (GHOST_ISystem *) systemhandle;
-       
+
        system->dispatchEvents();
 }
 
@@ -242,7 +242,7 @@ void GHOST_DispatchEvents(GHOST_SystemHandle systemhandle)
 GHOST_TSuccess GHOST_AddEventConsumer(GHOST_SystemHandle systemhandle, 
GHOST_EventConsumerHandle consumerhandle)
 {
        GHOST_ISystem *system = (GHOST_ISystem *) systemhandle;
-       
+
        return system->addEventConsumer((GHOST_CallbackEventConsumer 
*)consumerhandle);
 }
 
@@ -338,7 +338,7 @@ GHOST_TSuccess GHOST_GetCursorPosition(GHOST_SystemHandle 
systemhandle,
                                        GHOST_TInt32 *y)
 {
        GHOST_ISystem *system = (GHOST_ISystem *) systemhandle;
-       
+
        return system->getCursorPosition(*x, *y);
 }
 
@@ -349,7 +349,7 @@ GHOST_TSuccess GHOST_SetCursorPosition(GHOST_SystemHandle 
systemhandle,
                                        GHOST_TInt32 y)
 {
        GHOST_ISystem *system = (GHOST_ISystem *) systemhandle;
-       
+
        return system->setCursorPosition(x, y);
 }
 
@@ -383,7 +383,7 @@ GHOST_TSuccess GHOST_GetModifierKeyState(GHOST_SystemHandle 
systemhandle,
        GHOST_ISystem *system = (GHOST_ISystem *) systemhandle;
        GHOST_TSuccess result;
        bool isdown = false;
-       
+
        result = system->getModifierKeyState(mask, isdown);
        *isDown = (int) isdown;
 
@@ -399,7 +399,7 @@ GHOST_TSuccess GHOST_GetButtonState(GHOST_SystemHandle 
systemhandle,
        GHOST_ISystem *system = (GHOST_ISystem *) systemhandle;
        GHOST_TSuccess result;
        bool isdown = false;
-       
+
        result = system->getButtonState(mask, isdown);
        *isDown = (int) isdown;
 
@@ -425,7 +425,7 @@ void GHOST_setAcceptDragOperation(GHOST_WindowHandle 
windowhandle, GHOST_TInt8 c
 GHOST_TEventType GHOST_GetEventType(GHOST_EventHandle eventhandle)
 {
        GHOST_IEvent *event = (GHOST_IEvent *) eventhandle;
-       
+
        return event->getType();
 }
 
@@ -450,7 +450,7 @@ GHOST_WindowHandle GHOST_GetEventWindow(GHOST_EventHandle 
eventhandle)
 GHOST_TEventDataPtr GHOST_GetEventData(GHOST_EventHandle eventhandle)
 {
        GHOST_IEvent *event = (GHOST_IEvent *) eventhandle;
-       
+
        return event->getData();
 }
 
@@ -459,7 +459,7 @@ GHOST_TEventDataPtr GHOST_GetEventData(GHOST_EventHandle 
eventhandle)
 GHOST_TimerProcPtr GHOST_GetTimerProc(GHOST_TimerTaskHandle timertaskhandle)
 {
        GHOST_ITimerTask *timertask = (GHOST_ITimerTask *) timertaskhandle;
-       
+
        return timertask->getTimerProc();
 }
 
@@ -469,7 +469,7 @@ void GHOST_SetTimerProc(GHOST_TimerTaskHandle 
timertaskhandle,
                         GHOST_TimerProcPtr timerproc)
 {
        GHOST_ITimerTask *timertask = (GHOST_ITimerTask *) timertaskhandle;
-       
+
        timertask->setTimerProc(timerproc);
 }
 
@@ -488,13 +488,13 @@ void GHOST_SetTimerTaskUserData(GHOST_TimerTaskHandle 
timertaskhandle,
                                 GHOST_TUserDataPtr userdata)
 {
        GHOST_ITimerTask *timertask = (GHOST_ITimerTask *) timertaskhandle;
-       
+
        timertask->setUserData(userdata);
 }
 
 
 
-int GHOST_GetValid(GHOST_WindowHandle windowhandle) 
+int GHOST_GetValid(GHOST_WindowHandle windowhandle)
 {
        GHOST_IWindow *window = (GHOST_IWindow *) windowhandle;
 
@@ -526,7 +526,7 @@ void GHOST_SetTitle(GHOST_WindowHandle windowhandle,
                     const char *title)
 {
        GHOST_IWindow *window = (GHOST_IWindow *) windowhandle;
-       
+
        window->setTitle(title);
 }
 
@@ -662,16 +662,16 @@ GHOST_TSuccess GHOST_SetWindowState(GHOST_WindowHandle 
windowhandle,
 GHOST_TSuccess GHOST_SetWindowModifiedState(GHOST_WindowHandle windowhandle, 
GHOST_TUns8 isUnsavedChanges)
 {
        GHOST_IWindow *window = (GHOST_IWindow *) windowhandle;
-       
+
        return window->setModifiedState(isUnsavedChanges);
-}      
+}
 
 
 GHOST_TSuccess GHOST_SetWindowOrder(GHOST_WindowHandle windowhandle,
                                     GHOST_TWindowOrder order)
 {
        GHOST_IWindow *window = (GHOST_IWindow *) windowhandle;
-       
+
        return window->setOrder(order);
 }
 
@@ -709,7 +709,7 @@ GHOST_TUns16 GHOST_GetNumOfAASamples(GHOST_WindowHandle 
windowhandle)
 GHOST_TSuccess GHOST_ActivateWindowDrawingContext(GHOST_WindowHandle 
windowhandle)
 {
        GHOST_IWindow *window = (GHOST_IWindow *) windowhandle;
-       
+
        return window->activateDrawingContext();
 }
 
@@ -1012,4 +1012,43 @@ float GHOST_HMDgetDeviceIPD()
 #endif
 }
 
+void GHOST_HMDgetLeftModelviewMatrix(float leftMatrix[16])
+{
+#ifdef WITH_OPENHMD
+       GHOST_ISystem *system = GHOST_ISystem::getSystem();
+       GHOST_OpenHMDManager *ohmd = system->getOpenHMDManager();
+       ohmd->getLeftEyeGLModelviewMatrix(leftMatrix);
+#else
+#endif
+}
+
+void GHOST_HMDgetRightModelviewMatrix(float rightMatrix[16])
+{
+#ifdef WITH_OPENHMD
+       GHOST_ISystem *system = GHOST_ISystem::getSystem();
+       GHOST_OpenHMDManager *ohmd = system->getOpenHMDManager();
+       ohmd->getRightEyeGLModelviewMatrix(rightMatrix);
+#else
+#endif
+}
+
+void GHOST_HMDgetLeftProjectionMatrix(float leftMatrix[16])
+{
+#ifdef WITH_OPENHMD
+       GHOST_ISystem *system = GHOST_ISystem::getSystem();
+       GHOST_OpenHMDManager *ohmd = system->getOpenHMDManager();
+       ohmd->getLeftEyeGLProjectionMatrix(leftMatrix);
+#else
+#endif
+}
+
+void GHOST_HMDgetRightProjectionMatrix(float rightMatrix[16])
+{
+#ifdef WITH_OPENHMD
+       GHOST_ISystem *system = GHOST_ISystem::getSystem();
+       GHOST_OpenHMDManager *ohmd = system->getOpenHMDManager();
+       ohmd->getRightEyeGLProjectionMatrix(rightMatrix);
+#else
+#endif
+}
 #endif
diff --git a/source/blender/blenkernel/BKE_camera.h 
b/source/blender/blenkernel/BKE_camera.h
index d13a711..b475c87 100644
--- a/source/blender/blenkernel/BKE_camera.h
+++ b/source/blender/blenkernel/BKE_camera.h
@@ -141,6 +141,7 @@ void BKE_camera_to_gpu_dof(struct Object *camera, struct 
GPUFXSettings *r_fx_set
 
 struct Object *BKE_camera_multiview_render(struct Scene *scene, struct Object 
*camera, const char *viewname);
 void           BKE_camera_multiview_view_matrix(struct RenderData *rd, struct 
Object *camera, const bool is_left, float r_viewmat[4][4]);
+void           BKE_camera_multiview_proj_matrix(const bool is_left, float 
r_projmat[4][4]);
 void           BKE_camera_multiview_model_matrix(struct RenderData *rd, struct 
Object *camera, const char *viewname, float r_modelmat[4][4]);
 float          BKE_camera_multiview_shift_x(struct RenderData *rd, struct 
Object *camera, const char *viewname);
 void           BKE_camera_multiview_params(struct RenderData *rd, struct 
CameraParams *params, struct Object *camera, const char *viewname);
diff --git a/source/blender/blenkernel/intern/camera.c 
b/source/blender/blenkernel/intern/camera.c
index 1f6f211e..789b309 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -96,7 +96,7 @@ void *BKE_camera_add(Main *bmain, const char *name)
 Camera *BKE_camera_copy(Camera *cam)
 {
        Camera *camn;
-       
+
        camn = BKE_libblock_copy(&cam->id);
 
        id_lib_extern((ID *)camn->dof_ob);
@@ -118,20 +118,20 @@ void BKE_camera_make_local(Camera *cam)
         * - only local users: set flag
         * - mixed: make copy
         */
-       
+
        if (cam->id.lib == NULL) return;
        if (cam->id.us == 1) {
                id_clear_lib_data(bmain, &cam->id);
                return;
        }
-       
+
        for (ob = bmain->object.first; ob && ELEM(0, is_lib, is_local); ob = 
ob->id.next) {
                if (ob->data == cam) {
                        if (ob->id.lib) is_lib = true;
                        else is_local = true;
                }
        }
-       
+
        if (is_local && is_lib == false) {
                id_clear_lib_data(bmain, &cam->id);
        }
@@ -176,7 +176,7 @@ void BKE_camera_object_mode(RenderData *rd, Object *cam_ob)
 /* get the camera's dof value, takes the dof object into account */
 float BKE_camera_object_dof_distance(Object *ob)
 {
-       Camera *cam = (Camera *)ob->data; 
+       Camera *

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to