| 
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -738,7 +738,7 @@ Model LoadModel(const char *fileName) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (model.meshMaterial == NULL) model.meshMaterial = (int *)RL_CALLOC(model.meshCount, sizeof(int)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    return model; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -839,7 +839,7 @@ void UploadMesh(Mesh *mesh, bool dynamic) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    rlEnableVertexArray(mesh->vaoId); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // NOTE: Attributes must be uploaded considering default locations points | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Enable vertex attributes: position (shader-location = 0) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    mesh->vboId[0] = rlLoadVertexBuffer(mesh->vertices, mesh->vertexCount*3*sizeof(float), dynamic); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    rlSetVertexAttribute(0, 3, RL_FLOAT, 0, 0, 0); | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -917,7 +917,7 @@ void UploadMesh(Mesh *mesh, bool dynamic) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (mesh->vaoId > 0) TRACELOG(LOG_INFO, "VAO: [ID %i] Mesh uploaded successfully to VRAM (GPU)", mesh->vaoId); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else TRACELOG(LOG_INFO, "VBO: Mesh uploaded successfully to VRAM (GPU)"); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    rlDisableVertexArray(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			#endif | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			} | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -943,12 +943,12 @@ void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int ins | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    rlEnableStatePointer(GL_TEXTURE_COORD_ARRAY, mesh.texcoords); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    rlEnableStatePointer(GL_NORMAL_ARRAY, mesh.normals); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    rlEnableStatePointer(GL_COLOR_ARRAY, mesh.colors); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    rlPushMatrix(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlMultMatrixf(MatrixToFloat(transforms[0])); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlColor4ub(material.maps[MATERIAL_MAP_DIFFUSE].color.r,  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                   material.maps[MATERIAL_MAP_DIFFUSE].color.g,  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                   material.maps[MATERIAL_MAP_DIFFUSE].color.b,  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlColor4ub(material.maps[MATERIAL_MAP_DIFFUSE].color.r, | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                   material.maps[MATERIAL_MAP_DIFFUSE].color.g, | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                   material.maps[MATERIAL_MAP_DIFFUSE].color.b, | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                   material.maps[MATERIAL_MAP_DIFFUSE].color.a); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if (mesh.indices != NULL) rlDrawVertexArrayElements(0, mesh.triangleCount*3, mesh.indices); | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -970,7 +970,7 @@ void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int ins | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    else if (instances > 1) instancing = true; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    float16 *instanceTransforms = NULL; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    unsigned int instancesVboId = 0; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Bind shader program | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    rlEnableShader(material.shader.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -983,9 +983,9 @@ void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int ins | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            (float)material.maps[MATERIAL_MAP_DIFFUSE].color.r/255.0f, | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            (float)material.maps[MATERIAL_MAP_DIFFUSE].color.g/255.0f, | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            (float)material.maps[MATERIAL_MAP_DIFFUSE].color.b/255.0f, | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            (float)material.maps[MATERIAL_MAP_DIFFUSE].color.a/255.0f  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            (float)material.maps[MATERIAL_MAP_DIFFUSE].color.a/255.0f | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlSetUniform(material.shader.locs[SHADER_LOC_COLOR_DIFFUSE], values, SHADER_UNIFORM_VEC4, 1); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -996,9 +996,9 @@ void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int ins | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            (float)material.maps[SHADER_LOC_COLOR_SPECULAR].color.r/255.0f, | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            (float)material.maps[SHADER_LOC_COLOR_SPECULAR].color.g/255.0f, | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            (float)material.maps[SHADER_LOC_COLOR_SPECULAR].color.b/255.0f, | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            (float)material.maps[SHADER_LOC_COLOR_SPECULAR].color.a/255.0f  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            (float)material.maps[SHADER_LOC_COLOR_SPECULAR].color.a/255.0f | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        }; | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlSetUniform(material.shader.locs[SHADER_LOC_COLOR_SPECULAR], values, SHADER_UNIFORM_VEC4, 1); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1028,7 +1028,7 @@ void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int ins | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // This could alternatively use a static VBO and either glMapBuffer() or glBufferSubData(). | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // It isn't clear which would be reliably faster in all cases and on all platforms, | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // anecdotally glMapBuffer() seems very slow (syncs) while glBufferSubData() seems  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // anecdotally glMapBuffer() seems very slow (syncs) while glBufferSubData() seems | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // no faster, since we're transferring all the transform matrices anyway | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        instancesVboId = rlLoadVertexBuffer(instanceTransforms, instances*sizeof(float16), false); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -1042,7 +1042,7 @@ void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int ins | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlDisableVertexBuffer(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlDisableVertexArray(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Accumulate internal matrix transform (push/pop) and view matrix | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // NOTE: In this case, model instance transformation must be computed in the shader | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        matModelView = MatrixMultiply(rlGetMatrixTransform(), matView); | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -1058,7 +1058,7 @@ void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int ins | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        //    transform: function parameter transformation | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        matModelView = MatrixMultiply(transforms[0], MatrixMultiply(rlGetMatrixTransform(), matView)); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    // Upload model normal matrix (if locations available) | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    if (material.shader.locs[SHADER_LOC_MATRIX_NORMAL] != -1) rlSetUniformMatrix(material.shader.locs[SHADER_LOC_MATRIX_NORMAL], MatrixTranspose(MatrixInvert(matModelView))); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    //----------------------------------------------------- | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -1070,10 +1070,10 @@ void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int ins | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Select current shader texture slot | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            rlActiveTextureSlot(i); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			             | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            // Enable texture for active slot | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if ((i == MATERIAL_MAP_IRRADIANCE) ||  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                (i == MATERIAL_MAP_PREFILTER) ||  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            if ((i == MATERIAL_MAP_IRRADIANCE) || | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                (i == MATERIAL_MAP_PREFILTER) || | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			                (i == MATERIAL_MAP_CUBEMAP)) rlEnableTextureCubemap(material.maps[i].texture.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            else rlEnableTexture(material.maps[i].texture.id); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
	
		
			
				| 
				
				
				
					
						
					
				
				 | 
			
			 | 
			
			@ -1089,7 +1089,7 @@ void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int ins | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlEnableVertexBuffer(mesh.vboId[0]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_POSITION], 3, RL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_POSITION]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			     | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlEnableVertexBuffer(mesh.vboId[0]); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_POSITION], 3, RL_FLOAT, 0, 0, 0); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_POSITION]); | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
					
						
					
				
				
				 | 
			
			 | 
			
			@ -1180,10 +1180,10 @@ void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int ins | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    { | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Select current shader texture slot | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        rlActiveTextureSlot(i); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			         | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			
 | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        // Disable texture for active slot | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if ((i == MATERIAL_MAP_IRRADIANCE) ||  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            (i == MATERIAL_MAP_PREFILTER) ||  | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        if ((i == MATERIAL_MAP_IRRADIANCE) || | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            (i == MATERIAL_MAP_PREFILTER) || | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			            (i == MATERIAL_MAP_CUBEMAP)) rlDisableTextureCubemap(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			        else rlDisableTexture(); | 
			
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
			    } | 
			
		
		
	
	
		
			
				| 
				
					
						
					
				
				
				
				 | 
			
			 | 
			
			
 |