aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2016-07-06 00:54:38 +0200
committerRay <raysan5@gmail.com>2016-07-06 00:54:38 +0200
commitbc80174357392c0a16b74cd4a9e497a1de367760 (patch)
treefdcf31178509e2e5dde7d2b8fcc8e78edba578b8 /src
parent2ff2096b36d80078cbda5e61ff77d7fedeeeaeb5 (diff)
downloadraylib-bc80174357392c0a16b74cd4a9e497a1de367760.tar.gz
raylib-bc80174357392c0a16b74cd4a9e497a1de367760.zip
VR Functions renaming (for generic HMD device)
Stereo rendering has been moved again to Begin3dMode() and End3dMode(), it has some limitations but makes more sense...
Diffstat (limited to 'src')
-rw-r--r--src/core.c8
-rw-r--r--src/raylib.h29
-rw-r--r--src/rlgl.c45
-rw-r--r--src/rlgl.h16
4 files changed, 56 insertions, 42 deletions
diff --git a/src/core.c b/src/core.c
index f8a83e25..107fc0a0 100644
--- a/src/core.c
+++ b/src/core.c
@@ -521,8 +521,6 @@ void BeginDrawing(void)
updateTime = currentTime - previousTime;
previousTime = currentTime;
- //if (IsOculusReady()) BeginOculusDrawing();
-
rlClearScreenBuffers(); // Clear current framebuffers
rlLoadIdentity(); // Reset current matrix (MODELVIEW)
rlMultMatrixf(MatrixToFloat(downscaleView)); // If downscale required, apply it here
@@ -535,8 +533,6 @@ void BeginDrawing(void)
void EndDrawing(void)
{
rlglDraw(); // Draw Buffers (Only OpenGL 3+ and ES2)
-
- //if (IsOculusReady()) EndOculusDrawing();
SwapBuffers(); // Copy back buffer to front buffer
PollInputEvents(); // Poll user events
@@ -590,6 +586,8 @@ void End2dMode(void)
void Begin3dMode(Camera camera)
{
rlglDraw(); // Draw Buffers (Only OpenGL 3+ and ES2)
+
+ if (IsVrDeviceReady()) BeginVrDrawing();
rlMatrixMode(RL_PROJECTION); // Switch to projection matrix
@@ -618,6 +616,8 @@ void Begin3dMode(Camera camera)
void End3dMode(void)
{
rlglDraw(); // Process internal buffers (update + draw)
+
+ if (IsVrDeviceReady()) EndVrDrawing();
rlMatrixMode(RL_PROJECTION); // Switch to projection matrix
rlPopMatrix(); // Restore previous matrix (PROJECTION) from matrix stack
diff --git a/src/raylib.h b/src/raylib.h
index 89fc457f..227f83f2 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -527,6 +527,19 @@ typedef struct GestureEvent {
// Camera system modes
typedef enum { CAMERA_CUSTOM = 0, CAMERA_FREE, CAMERA_ORBITAL, CAMERA_FIRST_PERSON, CAMERA_THIRD_PERSON } CameraMode;
+// Head Mounted Display devices
+typedef enum {
+ HMD_DEFAULT_DEVICE = 0,
+ HMD_OCULUS_RIFT_DK2,
+ HMD_OCULUS_RIFT_CV1,
+ HMD_VALVE_HTC_VIVE,
+ HMD_SAMSUNG_GEAR_VR,
+ HMD_GOOGLE_CARDBOARD,
+ HMD_SONY_PLAYSTATION_VR,
+ HMD_RAZER_OSVR,
+ HMD_FOVE_VR,
+} HmdDevice;
+
#ifdef __cplusplus
extern "C" { // Prevents name mangling of functions
#endif
@@ -846,16 +859,16 @@ Light CreateLight(int type, Vector3 position, Color diffuse); // Create a
void DestroyLight(Light light); // Destroy a light and take it out of the list
//------------------------------------------------------------------------------------
-// Oculus Rift CV1 Functions (Module: rlgl)
+// VR experience Functions (Module: rlgl)
// NOTE: This functions are useless when using OpenGL 1.1
//------------------------------------------------------------------------------------
-void InitOculusDevice(void); // Init Oculus Rift device
-void CloseOculusDevice(void); // Close Oculus Rift device
-void UpdateOculusTracking(void); // Update Oculus Rift tracking (position and orientation)
-void BeginOculusDrawing(void); // Begin Oculus drawing configuration
-void EndOculusDrawing(void); // End Oculus drawing process (and desktop mirror)
-bool IsOculusReady(void); // Detect if oculus device (or simulator) is ready
-void ToggleVR(void); // Enable/Disable VR experience (Oculus device or simulator)
+void InitVrDevice(int hmdDevice); // Init VR device
+void CloseVrDevice(void); // Close VR device
+void UpdateVrTracking(void); // Update VR tracking (position and orientation)
+void BeginVrDrawing(void); // Begin VR drawing configuration
+void EndVrDrawing(void); // End VR drawing process (and desktop mirror)
+bool IsVrDeviceReady(void); // Detect if VR device (or simulator) is ready
+void ToggleVrMode(void); // Enable/Disable VR experience (device or simulator)
//------------------------------------------------------------------------------------
// Audio Loading and Playing Functions (Module: audio)
diff --git a/src/rlgl.c b/src/rlgl.c
index af2d57cb..a71142b0 100644
--- a/src/rlgl.c
+++ b/src/rlgl.c
@@ -322,7 +322,7 @@ static void DrawDefaultBuffers(int eyesCount); // Draw default internal buffers
static void UnloadDefaultBuffers(void); // Unload default internal buffers vertex data from CPU and GPU
// Set internal projection and modelview matrix depending on eyes tracking data
-static void SetOculusView(int eye, Matrix matProjection, Matrix matModelView);
+static void SetStereoView(int eye, Matrix matProjection, Matrix matModelView);
static void SetShaderLights(Shader shader); // Sets shader uniform values for lights array
@@ -2001,7 +2001,7 @@ void rlglDrawMesh(Mesh mesh, Material material, Matrix transform)
for (int eye = 0; eye < eyesCount; eye++)
{
- if (eyesCount == 2) SetOculusView(eye, matProjection, matModelView);
+ if (eyesCount == 2) SetStereoView(eye, matProjection, matModelView);
else modelview = matModelView;
// Calculate model-view-projection matrix (MVP)
@@ -2504,8 +2504,9 @@ void DestroyLight(Light light)
#endif
}
-// Init Oculus Rift device (or Oculus device simulator)
-void InitOculusDevice(void)
+// Init VR device (or simulator)
+// NOTE: If device is not available, it fallbacks to default device (simulator)
+void InitVrDevice(int hmdDevice)
{
#if defined(RLGL_OCULUS_SUPPORT)
// Initialize Oculus device
@@ -2557,7 +2558,7 @@ void InitOculusDevice(void)
if (!oculusReady)
{
- TraceLog(WARNING, "VR: Initializing Oculus simulator");
+ TraceLog(WARNING, "HMD Device not found: Initializing VR simulator");
// Initialize framebuffer and textures for stereo rendering
stereoFbo = rlglLoadRenderTexture(screenWidth, screenHeight);
@@ -2571,8 +2572,8 @@ void InitOculusDevice(void)
}
}
-// Close Oculus Rift device (or Oculus device simulator)
-void CloseOculusDevice(void)
+// Close VR device (or simulator)
+void CloseVrDevice(void)
{
#if defined(RLGL_OCULUS_SUPPORT)
if (oculusReady)
@@ -2596,20 +2597,20 @@ void CloseOculusDevice(void)
oculusReady = false;
}
-// Detect if oculus device is available
-bool IsOculusReady(void)
+// Detect if VR device is available
+bool IsVrDeviceReady(void)
{
return (oculusReady || oculusSimulator) && vrEnabled;
}
-// Enable/Disable VR experience (Oculus device or simulator)
-void ToggleVR(void)
+// Enable/Disable VR experience (device or simulator)
+void ToggleVrMode(void)
{
vrEnabled = !vrEnabled;
}
-// Update Oculus Rift tracking (position and orientation)
-void UpdateOculusTracking(void)
+// Update VR tracking (position and orientation)
+void UpdateVrTracking(void)
{
#if defined(RLGL_OCULUS_SUPPORT)
if (oculusReady)
@@ -2641,7 +2642,7 @@ void UpdateOculusTracking(void)
}
// Set internal projection and modelview matrix depending on eyes tracking data
-static void SetOculusView(int eye, Matrix matProjection, Matrix matModelView)
+static void SetStereoView(int eye, Matrix matProjection, Matrix matModelView)
{
if (vrEnabled)
{
@@ -2675,12 +2676,12 @@ static void SetOculusView(int eye, Matrix matProjection, Matrix matModelView)
// Setup viewport and projection/modelview matrices using tracking data
rlViewport(eye*screenWidth/2, 0, screenWidth/2, screenHeight);
- static float IPD = 0.064f; // InterpupillaryDistance
+ static float IPD = 0.064f; // InterpupillaryDistance
float HScreenSize = 0.14976f;
- float VScreenSize = 0.0936f; // HScreenSize/(1280.0f/800.0f)
- float VScreenCenter = 0.04675f;
+ float VScreenSize = 0.0936f; // HScreenSize/(1280.0f/800.0f) (DK2)
+ float VScreenCenter = 0.04675f; // VScreenSize/2
float EyeToScreenDistance = 0.041f;
- float LensSeparationDistance = 0.064f; //0.0635f (DK1)
+ float LensSeparationDistance = 0.064f; //0.0635f (DK1)
// NOTE: fovy value obtained from device parameters (Oculus Rift CV1)
float halfScreenDistance = VScreenSize/2.0f;
@@ -2730,13 +2731,13 @@ static void SetOculusView(int eye, Matrix matProjection, Matrix matModelView)
MatrixTranspose(&eyeProjection);
}
- SetMatrixModelview(eyeModelView); // ERROR! We are modifying modelview for next eye!!!
+ SetMatrixModelview(eyeModelView);
SetMatrixProjection(eyeProjection);
}
}
// Begin Oculus drawing configuration
-void BeginOculusDrawing(void)
+void BeginVrDrawing(void)
{
#if defined(RLGL_OCULUS_SUPPORT)
if (oculusReady)
@@ -2771,7 +2772,7 @@ void BeginOculusDrawing(void)
}
// End Oculus drawing process (and desktop mirror)
-void EndOculusDrawing(void)
+void EndVrDrawing(void)
{
#if defined(RLGL_OCULUS_SUPPORT)
if (oculusReady)
@@ -3414,7 +3415,7 @@ static void DrawDefaultBuffers(int eyesCount)
for (int eye = 0; eye < eyesCount; eye++)
{
- if (eyesCount == 2) SetOculusView(eye, matProjection, matModelView);
+ if (eyesCount == 2) SetStereoView(eye, matProjection, matModelView);
// Set current shader and upload current MVP matrix
if ((lines.vCounter > 0) || (triangles.vCounter > 0) || (quads.vCounter > 0))
diff --git a/src/rlgl.h b/src/rlgl.h
index f52af6f9..f984c0c6 100644
--- a/src/rlgl.h
+++ b/src/rlgl.h
@@ -350,15 +350,15 @@ Light CreateLight(int type, Vector3 position, Color diffuse); // Create a
void DestroyLight(Light light); // Destroy a light and take it out of the list
void TraceLog(int msgType, const char *text, ...);
-#endif
-void InitOculusDevice(void); // Init Oculus Rift device
-void CloseOculusDevice(void); // Close Oculus Rift device
-void UpdateOculusTracking(void); // Update Oculus Rift tracking (position and orientation)
-void BeginOculusDrawing(void); // Begin Oculus drawing configuration
-void EndOculusDrawing(void); // End Oculus drawing process (and desktop mirror)
-bool IsOculusReady(void); // Detect if oculus device (or simulator) is ready
-void ToggleVR(void); // Enable/Disable VR experience (Oculus device or simulator)
+void InitVrDevice(int hmdDevice); // Init VR device
+void CloseVrDevice(void); // Close VR device
+void UpdateVrTracking(void); // Update VR tracking (position and orientation)
+void BeginVrDrawing(void); // Begin VR drawing configuration
+void EndVrDrawing(void); // End VR drawing process (and desktop mirror)
+bool IsVrDeviceReady(void); // Detect if VR device (or simulator) is ready
+void ToggleVrMode(void); // Enable/Disable VR experience (device or simulator)
+#endif
#ifdef __cplusplus
}