| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -2069,6 +2069,50 @@ Shader LoadShader(const char *vsFileName, const char *fsFileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return shader; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Load shader from code strings and bind default locations | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			RLAPI Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    Shader shader = { 0 }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.locs = (int *)RL_CALLOC(MAX_SHADER_LOCATIONS, sizeof(int)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    shader.id = rlLoadShaderCode(vsCode, fsCode); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // After shader loading, we TRY to set default location names | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (shader.id > 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Default shader attrib locations have been fixed before linking: | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //          vertex position location    = 0 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //          vertex texcoord location    = 1 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //          vertex normal location      = 2 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //          vertex color location       = 3 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //          vertex tangent location     = 4 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //          vertex texcoord2 location   = 5 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // NOTE: If any location is not found, loc point becomes -1 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Get handles to GLSL input attibute locations | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader.locs[SHADER_LOC_VERTEX_POSITION] = rlGetLocationAttrib(shader.id, DEFAULT_SHADER_ATTRIB_NAME_POSITION); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader.locs[SHADER_LOC_VERTEX_TEXCOORD01] = rlGetLocationAttrib(shader.id, DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader.locs[SHADER_LOC_VERTEX_TEXCOORD02] = rlGetLocationAttrib(shader.id, DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader.locs[SHADER_LOC_VERTEX_NORMAL] = rlGetLocationAttrib(shader.id, DEFAULT_SHADER_ATTRIB_NAME_NORMAL); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader.locs[SHADER_LOC_VERTEX_TANGENT] = rlGetLocationAttrib(shader.id, DEFAULT_SHADER_ATTRIB_NAME_TANGENT); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader.locs[SHADER_LOC_VERTEX_COLOR] = rlGetLocationAttrib(shader.id, DEFAULT_SHADER_ATTRIB_NAME_COLOR); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Get handles to GLSL uniform locations (vertex shader) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader.locs[SHADER_LOC_MATRIX_MVP]  = rlGetLocationUniform(shader.id, "mvp"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader.locs[SHADER_LOC_MATRIX_PROJECTION]  = rlGetLocationUniform(shader.id, "projection"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader.locs[SHADER_LOC_MATRIX_VIEW]  = rlGetLocationUniform(shader.id, "view"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Get handles to GLSL uniform locations (fragment shader) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader.locs[SHADER_LOC_COLOR_DIFFUSE] = rlGetLocationUniform(shader.id, "colDiffuse"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader.locs[SHADER_LOC_MAP_DIFFUSE] = rlGetLocationUniform(shader.id, "texture0"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader.locs[SHADER_LOC_MAP_SPECULAR] = rlGetLocationUniform(shader.id, "texture1"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        shader.locs[SHADER_LOC_MAP_NORMAL] = rlGetLocationUniform(shader.id, "texture2"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return shader; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			// Unload shader from GPU memory (VRAM) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			void UnloadShader(Shader shader) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			{ | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |