| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -114,32 +114,10 @@ int main(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Initialization | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //-------------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    int screenWidth = 1080; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    int screenHeight = 600; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    int screenWidth = 1080;     // Mirror screen width (set to hmdDesc.Resolution.w/2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    int screenHeight = 600;     // Mirror screen height (set to hmdDesc.Resolution.h/2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_OCULUS) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    ovrResult result = ovr_Initialize(NULL); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (OVR_FAILURE(result)) TraceLog(LOG_ERROR, "OVR: Could not initialize Oculus device"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    result = ovr_Create(&session, &luid); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (OVR_FAILURE(result)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        TraceLog(LOG_WARNING, "OVR: Could not create Oculus session"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        ovr_Shutdown(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    hmdDesc = ovr_GetHmdDesc(session); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(LOG_INFO, "OVR: Product Name: %s", hmdDesc.ProductName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(LOG_INFO, "OVR: Manufacturer: %s", hmdDesc.Manufacturer); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(LOG_INFO, "OVR: Product ID: %i", hmdDesc.ProductId); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(LOG_INFO, "OVR: Product Type: %i", hmdDesc.Type); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(LOG_INFO, "OVR: Serian Number: %s", hmdDesc.SerialNumber); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(LOG_INFO, "OVR: Resolution: %ix%i", hmdDesc.Resolution.w, hmdDesc.Resolution.h); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    screenWidth = hmdDesc.Resolution.w/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    screenHeight = hmdDesc.Resolution.h/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: Mirror screen size can be set to any desired resolution! | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // GLFW3 Initialization + OpenGL 3.3 Context + Extensions | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //-------------------------------------------------------- | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -182,10 +160,32 @@ int main(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //-------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_OCULUS) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    ovrResult result = ovr_Initialize(NULL); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (OVR_FAILURE(result)) TraceLog(LOG_ERROR, "OVR: Could not initialize Oculus device"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    result = ovr_Create(&session, &luid); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (OVR_FAILURE(result)) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        TraceLog(LOG_WARNING, "OVR: Could not create Oculus session"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        ovr_Shutdown(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    hmdDesc = ovr_GetHmdDesc(session); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(LOG_INFO, "OVR: Product Name: %s", hmdDesc.ProductName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(LOG_INFO, "OVR: Manufacturer: %s", hmdDesc.Manufacturer); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(LOG_INFO, "OVR: Product ID: %i", hmdDesc.ProductId); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(LOG_INFO, "OVR: Product Type: %i", hmdDesc.Type); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(LOG_INFO, "OVR: Serian Number: %s", hmdDesc.SerialNumber); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(LOG_INFO, "OVR: Resolution: %ix%i", hmdDesc.Resolution.w, hmdDesc.Resolution.h); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //screenWidth = hmdDesc.Resolution.w/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //screenHeight = hmdDesc.Resolution.h/2; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Initialize Oculus Buffers | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    OculusLayer layer = InitOculusLayer(session);    | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    OculusBuffer buffer = LoadOculusBuffer(session, layer.width, layer.height); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    OculusMirror mirror = LoadOculusMirror(session, hmdDesc.Resolution.w/2, hmdDesc.Resolution.h/2); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    OculusMirror mirror = LoadOculusMirror(session, screenWidth, screenHeight); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    layer.eyeLayer.ColorTexture[0] = buffer.textureChain;     //SetOculusLayerTexture(eyeLayer, buffer.textureChain); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Recenter OVR tracking origin | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -311,17 +311,15 @@ int main(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_OCULUS) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    UnloadOculusMirror(session, mirror);    // Unload Oculus mirror buffer | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    UnloadOculusBuffer(session, buffer);    // Unload Oculus texture buffers | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    ovr_Destroy(session);   // Must be called after glfwTerminate() --> no | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    ovr_Shutdown(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    rlglClose();                            // Unload rlgl internal buffers and default shader/texture | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glfwDestroyWindow(window); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glfwTerminate(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(PLATFORM_OCULUS) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    ovr_Destroy(session);   // Must be called after glfwTerminate() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    ovr_Shutdown(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //-------------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return 0; | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -682,10 +680,13 @@ static void SetOculusBuffer(ovrSession session, OculusBuffer buffer) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, buffer.depthId, 0);    // Already binded | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //glViewport(0, 0, buffer.width, buffer.height);        // Useful if rendering to separate framebuffers (every eye) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);   // Same as rlClearScreenBuffers() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Required if OculusBuffer format is OVR_FORMAT_R8G8B8A8_UNORM_SRGB | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glEnable(GL_FRAMEBUFFER_SRGB); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: If your application is configured to treat the texture as a linear format (e.g. GL_RGBA)  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // and performs linear-to-gamma conversion in GLSL or does not care about gamma-correction, then: | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //     - Require OculusBuffer format to be OVR_FORMAT_R8G8B8A8_UNORM_SRGB | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //     - Do NOT enable GL_FRAMEBUFFER_SRGB | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //glEnable(GL_FRAMEBUFFER_SRGB); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Unset Oculus buffer | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |