| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -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)) | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |