| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1421,7 +1421,7 @@ void rlglDrawModel(Model model, Vector3 position, Vector3 rotationAxis, float ro | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_11) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glEnable(GL_TEXTURE_2D); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glBindTexture(GL_TEXTURE_2D, model.texture.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glBindTexture(GL_TEXTURE_2D, model.material.texDiffuse.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: On OpenGL 1.1 we use Vertex Arrays to draw model | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glEnableClientState(GL_VERTEX_ARRAY);                     // Enable vertex array | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1452,7 +1452,7 @@ void rlglDrawModel(Model model, Vector3 position, Vector3 rotationAxis, float ro | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glUseProgram(model.shader.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glUseProgram(model.material.shader.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // At this point the modelview matrix just contains the view matrix (camera) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // That's because Begin3dMode() sets it an no model-drawing function modifies it, all use rlPushMatrix() and rlPopMatrix() | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -1476,28 +1476,30 @@ void rlglDrawModel(Model model, Vector3 position, Vector3 rotationAxis, float ro | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Matrix matMVP = MatrixMultiply(matModelView, matProjection);        // Transform to screen-space coordinates | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Send combined model-view-projection matrix to shader | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glUniformMatrix4fv(model.shader.mvpLoc, 1, false, MatrixToFloat(matMVP)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glUniformMatrix4fv(model.material.shader.mvpLoc, 1, false, MatrixToFloat(matMVP)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Apply color tinting to model | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: Just update one uniform on fragment shader | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    float vColor[4] = { (float)color.r/255, (float)color.g/255, (float)color.b/255, (float)color.a/255 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glUniform4fv(model.shader.tintColorLoc, 1, vColor); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glUniform4fv(model.material.shader.tintColorLoc, 1, vColor); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Set shader textures (diffuse, normal, specular) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glActiveTexture(GL_TEXTURE0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glBindTexture(GL_TEXTURE_2D, model.shader.texDiffuseId); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glUniform1i(model.shader.mapDiffuseLoc, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (model.shader.texNormalId != 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glBindTexture(GL_TEXTURE_2D, model.material.texDiffuse.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glUniform1i(model.material.shader.mapDiffuseLoc, 0);        // Texture fits in active texture unit 0 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (model.material.texNormal.id != 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glActiveTexture(GL_TEXTURE1); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindTexture(GL_TEXTURE_2D, model.shader.texNormalId); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindTexture(GL_TEXTURE_2D, model.material.texNormal.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glUniform1i(model.material.shader.mapNormalLoc, 1);     // Texture fits in active texture unit 1 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (model.shader.texSpecularId != 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (model.material.texSpecular.id != 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glActiveTexture(GL_TEXTURE2); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindTexture(GL_TEXTURE_2D, model.shader.texSpecularId); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindTexture(GL_TEXTURE_2D, model.material.texSpecular.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glUniform1i(model.material.shader.mapSpecularLoc, 2);   // Texture fits in active texture unit 2 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (vaoSupported) | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -1508,19 +1510,19 @@ void rlglDrawModel(Model model, Vector3 position, Vector3 rotationAxis, float ro | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Bind model VBOs data | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindBuffer(GL_ARRAY_BUFFER, model.mesh.vboId[0]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glVertexAttribPointer(model.shader.vertexLoc, 3, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glEnableVertexAttribArray(model.shader.vertexLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glVertexAttribPointer(model.material.shader.vertexLoc, 3, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glEnableVertexAttribArray(model.material.shader.vertexLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindBuffer(GL_ARRAY_BUFFER, model.mesh.vboId[1]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glVertexAttribPointer(model.shader.texcoordLoc, 2, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glEnableVertexAttribArray(model.shader.texcoordLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glVertexAttribPointer(model.material.shader.texcoordLoc, 2, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glEnableVertexAttribArray(model.material.shader.texcoordLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Add normals support | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (model.shader.normalLoc != -1) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (model.material.shader.normalLoc != -1) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            glBindBuffer(GL_ARRAY_BUFFER, model.mesh.vboId[2]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            glVertexAttribPointer(model.shader.normalLoc, 3, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            glEnableVertexAttribArray(model.shader.normalLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            glVertexAttribPointer(model.material.shader.normalLoc, 3, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            glEnableVertexAttribArray(model.material.shader.normalLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -1531,13 +1533,13 @@ void rlglDrawModel(Model model, Vector3 position, Vector3 rotationAxis, float ro | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //glDisableVertexAttribArray(model.shader.texcoordLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //if (model.shader.normalLoc != -1) glDisableVertexAttribArray(model.shader.normalLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (model.shader.texNormalId != 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (model.material.texNormal.id != 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glActiveTexture(GL_TEXTURE1); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindTexture(GL_TEXTURE_2D, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (model.shader.texSpecularId != 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (model.material.texSpecular.id != 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glActiveTexture(GL_TEXTURE2); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindTexture(GL_TEXTURE_2D, 0); | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1907,22 +1909,29 @@ Model rlglLoadModel(Mesh mesh) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Model model; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.mesh = mesh; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.transform = MatrixIdentity(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.mesh.vaoId = 0;       // Vertex Array Object | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.mesh.vboId[0] = 0;    // Vertex position VBO | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.mesh.vboId[1] = 0;    // Texcoords VBO | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.mesh.vboId[2] = 0;    // Normals VBO | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.mesh.vboId[0] = 0;    // Vertex positions VBO | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.mesh.vboId[1] = 0;    // Vertex texcoords VBO | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.mesh.vboId[2] = 0;    // Vertex normals VBO | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.transform = MatrixIdentity(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_11) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.texture.id = 0;       // No texture required | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.shader.id = 0;        // No shader used | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.material.texDiffuse.id = 0;    // No texture required | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.material.shader.id = 0;        // No shader used | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#elif defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.texture.id = whiteTexture;    // Default whiteTexture | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.texture.width = 1;            // Default whiteTexture width | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.texture.height = 1;           // Default whiteTexture height | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.texture.format = UNCOMPRESSED_R8G8B8A8; // Default whiteTexture format | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.shader = simpleShader;        // Default model shader | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.material.shader = simpleShader;           // Default model shader | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.material.texDiffuse.id = whiteTexture;    // Default whiteTexture | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.material.texDiffuse.width = 1;            // Default whiteTexture width | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.material.texDiffuse.height = 1;           // Default whiteTexture height | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.material.texDiffuse.format = UNCOMPRESSED_R8G8B8A8; // Default whiteTexture format | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.material.texNormal.id = 0;        // By default, no normal texture | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.material.texSpecular.id = 0;      // By default, no specular texture | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // TODO: Fill default material properties (color, glossiness...) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    GLuint vaoModel = 0;         // Vertex Array Objects (VAO) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    GLuint vertexBuffer[3];      // Vertex Buffer Objects (VBO) | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -1940,20 +1949,20 @@ Model rlglLoadModel(Mesh mesh) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Enable vertex attributes: position | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer[0]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glBufferData(GL_ARRAY_BUFFER, sizeof(float)*3*mesh.vertexCount, mesh.vertices, GL_STATIC_DRAW); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glVertexAttribPointer(model.shader.vertexLoc, 3, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glEnableVertexAttribArray(model.shader.vertexLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glVertexAttribPointer(model.material.shader.vertexLoc, 3, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glEnableVertexAttribArray(model.material.shader.vertexLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Enable vertex attributes: texcoords | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer[1]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glBufferData(GL_ARRAY_BUFFER, sizeof(float)*2*mesh.vertexCount, mesh.texcoords, GL_STATIC_DRAW); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glVertexAttribPointer(model.shader.texcoordLoc, 2, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glEnableVertexAttribArray(model.shader.texcoordLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glVertexAttribPointer(model.material.shader.texcoordLoc, 2, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glEnableVertexAttribArray(model.material.shader.texcoordLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Enable vertex attributes: normals | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer[2]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glBufferData(GL_ARRAY_BUFFER, sizeof(float)*3*mesh.vertexCount, mesh.normals, GL_STATIC_DRAW); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glVertexAttribPointer(model.shader.normalLoc, 3, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glEnableVertexAttribArray(model.shader.normalLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glVertexAttribPointer(model.material.shader.normalLoc, 3, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glEnableVertexAttribArray(model.material.shader.normalLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.mesh.vboId[0] = vertexBuffer[0];     // Vertex position VBO | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model.mesh.vboId[1] = vertexBuffer[1];     // Texcoords VBO | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2153,11 +2162,6 @@ Shader LoadShader(char *vsFileName, char *fsFileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (shader.id != 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            TraceLog(INFO, "[SHDR ID %i] Custom shader loaded successfully", shader.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Set shader textures ids (all 0 by default) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            shader.texDiffuseId = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            shader.texNormalId = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            shader.texSpecularId = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Get handles to GLSL input attibute locations | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            //------------------------------------------------------------------- | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2314,28 +2318,7 @@ void SetCustomShader(Shader shader) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (currentShader.id != shader.id) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlglDraw(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        currentShader = shader; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			/* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (vaoSupported) glBindVertexArray(vaoQuads); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Enable vertex attributes: position | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindBuffer(GL_ARRAY_BUFFER, quadsBuffer[0]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glEnableVertexAttribArray(currentShader.vertexLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glVertexAttribPointer(currentShader.vertexLoc, 3, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Enable vertex attributes: texcoords | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindBuffer(GL_ARRAY_BUFFER, quadsBuffer[1]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glEnableVertexAttribArray(currentShader.texcoordLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glVertexAttribPointer(currentShader.texcoordLoc, 2, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Enable vertex attributes: colors | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindBuffer(GL_ARRAY_BUFFER, quadsBuffer[2]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glEnableVertexAttribArray(currentShader.colorLoc); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glVertexAttribPointer(currentShader.colorLoc, 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (vaoSupported) glBindVertexArray(0);     // Unbind VAO | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*/ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -2358,7 +2341,7 @@ void SetPostproShader(Shader shader) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    texture.width = screenWidth; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    texture.height = screenHeight; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    SetShaderMapDiffuse(&postproQuad.shader, texture); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    postproQuad.material.texDiffuse = texture; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //TraceLog(DEBUG, "Postproquad texture id: %i", postproQuad.texture.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //TraceLog(DEBUG, "Postproquad shader diffuse map id: %i", postproQuad.shader.texDiffuseId); | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2386,7 +2369,7 @@ void SetDefaultShader(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetModelShader(Model *model, Shader shader) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model->shader = shader; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    model->material.shader = shader; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (vaoSupported) glBindVertexArray(model->mesh.vaoId); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -2406,9 +2389,7 @@ void SetModelShader(Model *model, Shader shader) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glVertexAttribPointer(shader.normalLoc, 3, GL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (vaoSupported) glBindVertexArray(0);     // Unbind VAO | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: If SetModelTexture() is called previously, texture is not assigned to new shader | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (model->texture.id > 0) model->shader.texDiffuseId = model->texture.id; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#elif (GRAPHICS_API_OPENGL_11) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    TraceLog(WARNING, "Shaders not supported on OpenGL 1.1"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2480,104 +2461,6 @@ void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Default diffuse shader map texture assignment | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetShaderMapDiffuse(Shader *shader, Texture2D texture) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader->texDiffuseId = texture.id; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glUseProgram(shader->id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glActiveTexture(GL_TEXTURE0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glBindTexture(GL_TEXTURE_2D, shader->texDiffuseId); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glUniform1i(shader->mapDiffuseLoc, 0);    // Texture fits in active texture unit 0 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glBindTexture(GL_TEXTURE_2D, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glActiveTexture(GL_TEXTURE0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    glUseProgram(0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Normal map texture shader assignment | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetShaderMapNormal(Shader *shader, const char *uniformName, Texture2D texture) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader->mapNormalLoc = glGetUniformLocation(shader->id, uniformName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (shader->mapNormalLoc == -1) TraceLog(WARNING, "[SHDR ID %i] Shader location for %s could not be found", shader->id, uniformName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader->texNormalId = texture.id; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glUseProgram(shader->id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glActiveTexture(GL_TEXTURE1); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindTexture(GL_TEXTURE_2D, shader->texNormalId); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glUniform1i(shader->mapNormalLoc, 1);    // Texture fits in active texture unit 1 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindTexture(GL_TEXTURE_2D, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glActiveTexture(GL_TEXTURE0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glUseProgram(0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Specular map texture shader assignment | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetShaderMapSpecular(Shader *shader, const char *uniformName, Texture2D texture) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader->mapSpecularLoc = glGetUniformLocation(shader->id, uniformName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (shader->mapSpecularLoc == -1) TraceLog(WARNING, "[SHDR ID %i] Shader location for %s could not be found", shader->id, uniformName); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader->texSpecularId = texture.id; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glUseProgram(shader->id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glActiveTexture(GL_TEXTURE2); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindTexture(GL_TEXTURE_2D, shader->texSpecularId); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glUniform1i(shader->mapSpecularLoc, 2);    // Texture fits in active texture unit 2 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindTexture(GL_TEXTURE_2D, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glActiveTexture(GL_TEXTURE0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glUseProgram(0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Generic shader maps assignment | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// TODO: Trying to find a generic shader to allow any kind of map | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// NOTE: mapLocation should be retrieved by user with GetShaderLocation() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// ISSUE: mapTextureId: Shader should contain a reference to map texture and corresponding textureUnit, | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			//        so it can be automatically checked and used in rlglDrawModel() | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetShaderMap(Shader *shader, int mapLocation, Texture2D texture, int textureUnit) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			/* | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (mapLocation == -1) TraceLog(WARNING, "[SHDR ID %i] Map location could not be found", shader->id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader->mapTextureId = texture.id; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glUseProgram(shader->id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glActiveTexture(GL_TEXTURE0 + textureUnit); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindTexture(GL_TEXTURE_2D, shader->mapTextureId); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glUniform1i(mapLocation, textureUnit);    // Texture fits in active textureUnit | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glBindTexture(GL_TEXTURE_2D, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glActiveTexture(GL_TEXTURE0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        glUseProgram(0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			*/ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Set blending mode (alpha, additive, multiplied) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// NOTE: Only 3 blending modes predefined | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void SetBlendMode(int mode) | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2652,15 +2535,11 @@ static void LoadCompressedTexture(unsigned char *data, int width, int height, in | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Load Shader (Vertex and Fragment) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// NOTE: This shader program is used n">only for batch buffers (lines, triangles, quads) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// NOTE: This shader program is used for batch buffers (lines, triangles, quads) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			static Shader LoadDefaultShader(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Shader shader; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: Shaders are written using GLSL 110 (desktop), that is equivalent to GLSL 100 on ES2 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: Detected an error on ATI cards if defined #version 110 while OpenGL 3.3+ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Just defined #version 330 despite shader is #version 110 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Vertex shader directly defined, no external file required | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_33) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    char vShaderStr[] = "#version 330       \n" | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -2668,7 +2547,7 @@ static Shader LoadDefaultShader(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "in vec2 vertexTexCoord;            \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "in vec4 vertexColor;               \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "out vec2 fragTexCoord;             \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "out vec4 fragTintColor;                \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "out vec4 fragTintColor;            \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#elif defined(GRAPHICS_API_OPENGL_ES2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    char vShaderStr[] = "#version 100       \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "attribute vec3 vertexPosition;     \n" | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -2677,7 +2556,7 @@ static Shader LoadDefaultShader(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "varying vec2 fragTexCoord;         \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "varying vec4 fragTintColor;        \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "uniform mat4 mvpMatrix;     \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "uniform mat4 mvpMatrix;            \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "void main()                        \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "{                                  \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "    fragTexCoord = vertexTexCoord; \n" | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -2689,7 +2568,7 @@ static Shader LoadDefaultShader(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_33) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    char fShaderStr[] = "#version 330       \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "in vec2 fragTexCoord;              \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "in vec4 fragTintColor;                 \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "in vec4 fragTintColor;             \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#elif defined(GRAPHICS_API_OPENGL_ES2) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    char fShaderStr[] = "#version 100       \n" | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        "precision mediump float;           \n"     // precision required for OpenGL ES2 (WebGL) | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2724,10 +2603,6 @@ static Shader LoadDefaultShader(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.mapDiffuseLoc = glGetUniformLocation(shader.id, "texture0"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.mapNormalLoc = -1;       // It can be set later | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.mapSpecularLoc = -1;     // It can be set later | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.texDiffuseId = whiteTexture; // Default white texture | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.texNormalId = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.texSpecularId = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //-------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return shader; | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -2739,10 +2614,6 @@ static Shader LoadSimpleShader(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Shader shader; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: Shaders are written using GLSL 110 (desktop), that is equivalent to GLSL 100 on ES2 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: Detected an error on ATI cards if defined #version 110 while OpenGL 3.3+ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Just defined #version 330 despite shader is #version 110 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Vertex shader directly defined, no external file required | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#if defined(GRAPHICS_API_OPENGL_33) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    char vShaderStr[] = "#version 330       \n" | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2802,10 +2673,6 @@ static Shader LoadSimpleShader(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.mapDiffuseLoc = glGetUniformLocation(shader.id, "texture0"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.mapNormalLoc = -1;       // It can be set later | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.mapSpecularLoc = -1;     // It can be set later | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.texDiffuseId = whiteTexture; // Default white texture | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.texNormalId = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.texSpecularId = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //-------------------------------------------------------------------- | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return shader; | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2878,7 +2745,6 @@ static void InitializeBuffers(void) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    quads.indices = (unsigned short *)malloc(sizeof(short)*6*MAX_QUADS_BATCH);  // 6 int by quad (indices) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    for (int i = 0; i < (3*4*MAX_QUADS_BATCH); i++) quads.vertices[i] = 0.0f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    for (int i = 0; i < (2*4*MAX_QUADS_BATCH); i++) quads.texcoords[i] = 0.0f; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    for (int i = 0; i < (4*4*MAX_QUADS_BATCH); i++) quads.colors[i] = 0; | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |