| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -72,7 +72,7 @@ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #include <stdarg.h>             // Required for: va_list, va_start(), vfprintf(), va_end() [Used only on TraceLog()] | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if !defined(GRAPHICS_API_OPENGL_11) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if !defined(GRAPHICS_API_OPENGL_11) && !defined(RLGL_NO_STANDARD_SHADER) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    #include "standard_shader.h"    // Standard shader to embed | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -240,7 +240,7 @@ static bool useTempBuffer = false; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static Shader defaultShader; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static Shader standardShader;               // Lazy initialization when GetStandardShader() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static Shader currentShader;                // By default, defaultShader | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static bool standardShaderLoaded = false;    | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static bool standardShaderLoaded = false;   // Flag to track if standard shader has been loaded | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Flags for supported extensions | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static bool vaoSupported = false;           // VAO support (OpenGL ES2 could not support VAO extension) | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -285,11 +285,16 @@ static PFNGLDELETEVERTEXARRAYSOESPROC glDeleteVertexArrays; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//static PFNGLISVERTEXARRAYOESPROC glIsVertexArray;        // NOTE: Fails in WebGL, omitted | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static int blendMode = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static int blendMode = 0;   // Track current blending mode | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// White texture useful for plain color polys (required by shader) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static unsigned int whiteTexture; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Default framebuffer size | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// NOTE: Updated when calling rlglInitGraphics() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static int screenWidth;     // Default framebuffer width | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static int screenHeight;    // Default framebuffer height | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Module specific Functions Declaration | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//---------------------------------------------------------------------------------- | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1089,18 +1094,7 @@ void rlglInit(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Initialize buffers, default shaders and default textures | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //---------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Set default draw mode | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    currentDrawMode = RL_TRIANGLES; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Reset projection and modelview matrices | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    projection = MatrixIdentity(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    modelview = MatrixIdentity(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    currentMatrix = &modelview; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Initialize matrix stack | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    for (int i = 0; i < MATRIX_STACK_SIZE; i++) stack[i] = MatrixIdentity(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Create default white texture for plain colors (required by shader) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Init default white texture | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    unsigned char pixels[4] = { 255, 255, 255, 255 };   // 1 pixel RGBA (4 bytes) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    whiteTexture = rlglLoadTexture(pixels, 1, 1, UNCOMPRESSED_R8G8B8A8, 1); | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -1112,7 +1106,8 @@ void rlglInit(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    defaultShader = LoadDefaultShader(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    currentShader = defaultShader; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    LoadDefaultBuffers();        // Initialize default vertex arrays buffers (lines, triangles, quads) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Init default vertex arrays buffers (lines, triangles, quads) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    LoadDefaultBuffers();         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Init temp vertex buffer, used when transformation required (translate, rotate, scale) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    tempBuffer = (Vector3 *)malloc(sizeof(Vector3)*TEMP_VERTEX_BUFFER_SIZE); | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -1130,6 +1125,15 @@ void rlglInit(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    drawsCounter = 1; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    draws[drawsCounter - 1].textureId = whiteTexture; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    currentDrawMode = RL_TRIANGLES;     // Set default draw mode | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Init internal matrix stack (emulating OpenGL 1.1) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    for (int i = 0; i < MATRIX_STACK_SIZE; i++) stack[i] = MatrixIdentity(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Init internal projection and modelview matrices | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    projection = MatrixIdentity(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    modelview = MatrixIdentity(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    currentMatrix = &modelview; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1175,7 +1179,11 @@ void rlglDraw(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Initialize Graphics Device (OpenGL stuff) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// NOTE: Stores global variables screenWidth and screenHeight | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void rlglInitGraphics(int offsetX, int offsetY, int width, int height) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{    | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Store default framebuffer size | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    screenWidth = width; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    screenHeight = height; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: Required! viewport must be recalculated if screen resized! | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glViewport(offsetX/2, offsetY/2, width - offsetX, height - offsetY);    // Set viewport width and height | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2312,7 +2320,7 @@ Shader GetDefaultShader(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			Shader GetStandardShader(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Shader shader = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (standardShaderLoaded) shader = standardShader; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -2333,7 +2341,7 @@ int GetShaderLocation(Shader shader, const char *uniformName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)    | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    location = glGetUniformLocation(shader.id, uniformName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (location == -1) TraceLog(WARNING, "[SHDR ID %i] Shader location for %s could not be found", shader.id, uniformName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (location == -1) TraceLog(DEBUG, "[SHDR ID %i] Shader location for %s could not be found", shader.id, uniformName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return location; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2532,10 +2540,7 @@ void InitOculusDevice(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (!oculusEnabled) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        TraceLog(INFO, "VR: Initializing Oculus simulator"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int screenWidth = 1080; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int screenHeight = 600; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        TraceLog(WARNING, "VR: Initializing Oculus simulator"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Initialize framebuffer and textures for stereo rendering | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        stereoFbo = rlglLoadRenderTexture(screenWidth, screenHeight); | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2642,14 +2647,11 @@ void SetOculusView(int eye) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int screenWidth = 1080; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int screenHeight = 600; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        float fovy = 45.0f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Setup viewport and projection/modelview matrices using tracking data | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlViewport(eye*screenWidth/2, 0, screenWidth/2, screenHeight); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        eyeProjection = MatrixPerspective(fovy, (double)(screenWidth/2)/(double)screenHeight, 0.01, 1000.0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // NOTE: fovy vaule hardcoded to 45.0 degrees | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        eyeProjection = MatrixPerspective(45.0, (double)(screenWidth/2)/(double)screenHeight, 0.01, 1000.0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        MatrixTranspose(&eyeProjection); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // TODO: Compute eyes IPD and apply to current modelview matrix (camera) | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2721,9 +2723,6 @@ void EndOculusDrawing(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlClearScreenBuffers();             // Clear current framebuffer | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int screenWidth = 1080; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        int screenHeight = 600; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Set viewport to default framebuffer size (screen size) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlViewport(0, 0, screenWidth, screenHeight); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -3007,6 +3006,7 @@ static Shader LoadStandardShader(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Shader shader; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if !defined(RLGL_NO_STANDARD_SHADER) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Load standard shader (embeded in standard_shader.h) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.id = LoadShaderProgram(vStandardShaderStr, fStandardShaderStr); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -3022,6 +3022,10 @@ static Shader LoadStandardShader(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        TraceLog(WARNING, "[SHDR ID %i] Standard shader could not be loaded, using default shader", shader.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader = GetDefaultShader(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#else | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader = defaultShader; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(WARNING, "[SHDR ID %i] Standard shader not available, using default shader", shader.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return shader; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -3072,12 +3076,13 @@ static void UnloadDefaultShader(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static void UnloadStandardShader(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glUseProgram(0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if !defined(RLGL_NO_STANDARD_SHADER) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //glDetachShader(defaultShader, vertexShader); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //glDetachShader(defaultShader, fragmentShader); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //glDeleteShader(vertexShader);     // Already deleted on shader compilation | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //glDeleteShader(fragmentShader);   // Already deleted on shader compilation | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glDeleteProgram(standardShader.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |