diff --git a/src/raylib.h b/src/raylib.h
index bd64bbe6f..afe3aa2ce 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -814,7 +814,7 @@ typedef enum {
SHADER_LOC_VERTEX_BONEIDS, // Shader location: vertex attribute: bone indices
SHADER_LOC_VERTEX_BONEWEIGHTS, // Shader location: vertex attribute: bone weights
SHADER_LOC_MATRIX_BONETRANSFORMS, // Shader location: matrix attribute: bone transforms (animation)
- SHADER_LOC_VERTEX_INSTANCETRANSFORMS // Shader location: vertex attribute: instance transforms
+ SHADER_LOC_VERTEX_INSTANCETRANSFORM // Shader location: vertex attribute: instance transforms
} ShaderLocationIndex;
#define SHADER_LOC_MAP_DIFFUSE SHADER_LOC_MAP_ALBEDO
diff --git a/src/rcore.c b/src/rcore.c
index 1090cfc9c..4c7854921 100644
--- a/src/rcore.c
+++ b/src/rcore.c
@@ -1305,7 +1305,7 @@ Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode)
shader.locs[SHADER_LOC_VERTEX_COLOR] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR);
shader.locs[SHADER_LOC_VERTEX_BONEIDS] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_BONEINDICES);
shader.locs[SHADER_LOC_VERTEX_BONEWEIGHTS] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS);
- shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORMS] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCETRANSFORMS);
+ shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORM] = rlGetLocationAttrib(shader.id, RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCETRANSFORM);
// Get handles to GLSL uniform locations (vertex shader)
shader.locs[SHADER_LOC_MATRIX_MVP] = rlGetLocationUniform(shader.id, RL_DEFAULT_SHADER_UNIFORM_NAME_MVP);
diff --git a/src/rlgl.h b/src/rlgl.h
index 67817a3c9..cb618d94a 100644
--- a/src/rlgl.h
+++ b/src/rlgl.h
@@ -345,16 +345,14 @@
#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_INDICES
#define RL_DEFAULT_SHADER_ATTRIB_LOCATION_INDICES 6
#endif
-#ifdef SUPPORT_GPU_SKINNING
- #ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES
- #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES 7
- #endif
- #ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS
- #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS 8
- #endif
+#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES
+ #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES 7
#endif
-#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCETRANSFORMS
- #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCETRANSFORMS 9
+#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS
+ #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS 8
+#endif
+#ifndef RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCETRANSFORM
+ #define RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCETRANSFORM 9
#endif
//----------------------------------------------------------------------------------
@@ -1018,8 +1016,8 @@ RLAPI void rlLoadDrawQuad(void); // Load and draw a quad
#ifndef RL_DEFAULT_SHADER_UNIFORM_NAME_BONEMATRICES
#define RL_DEFAULT_SHADER_UNIFORM_NAME_BONEMATRICES "boneMatrices" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEMATRICES
#endif
-#ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCETRANSFORMS
- #define RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCETRANSFORMS "instanceTransform" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCETRANSFORMS
+#ifndef RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCETRANSFORM
+ #define RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCETRANSFORM "instanceTransform" // Bound by default to shader location: RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCETRANSFORM
#endif
#ifndef RL_DEFAULT_SHADER_UNIFORM_NAME_MVP
@@ -4335,20 +4333,18 @@ unsigned int rlLoadShaderProgram(unsigned int vShaderId, unsigned int fShaderId)
glAttachShader(programId, vShaderId);
glAttachShader(programId, fShaderId);
- // NOTE: Default attribute shader locations must be Bound before linking
+ // Default attribute shader locations must be bound before linking
+ // NOTE: There is no problem with binding a generic attribute index to an attribute variable name
+ // that is never used; if some attrib name is no found on the shader, it locations becomes -1
glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION, RL_DEFAULT_SHADER_ATTRIB_NAME_POSITION);
glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD, RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD);
glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL, RL_DEFAULT_SHADER_ATTRIB_NAME_NORMAL);
glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR, RL_DEFAULT_SHADER_ATTRIB_NAME_COLOR);
glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT, RL_DEFAULT_SHADER_ATTRIB_NAME_TANGENT);
glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2, RL_DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2);
- glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCETRANSFORMS, RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCETRANSFORMS);
-#ifdef SUPPORT_GPU_SKINNING
+ glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_INSTANCETRANSFORM, RL_DEFAULT_SHADER_ATTRIB_NAME_INSTANCETRANSFORM);
glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEINDICES, RL_DEFAULT_SHADER_ATTRIB_NAME_BONEINDICES);
glBindAttribLocation(programId, RL_DEFAULT_SHADER_ATTRIB_LOCATION_BONEWEIGHTS, RL_DEFAULT_SHADER_ATTRIB_NAME_BONEWEIGHTS);
-#endif
-
- // NOTE: If some attrib name is no found on the shader, it locations becomes -1
glLinkProgram(programId);
diff --git a/src/rmodels.c b/src/rmodels.c
index 1649fb8f3..d2bc4f707 100644
--- a/src/rmodels.c
+++ b/src/rmodels.c
@@ -1688,7 +1688,7 @@ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, i
{
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
// Instancing required variables
- float16 *instanceTransforms = NULL;
+ float16 *instanceTransform = NULL;
unsigned int instancesVboId = 0;
// Bind shader program
@@ -1737,10 +1737,10 @@ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, i
if (material.shader.locs[SHADER_LOC_MATRIX_PROJECTION] != -1) rlSetUniformMatrix(material.shader.locs[SHADER_LOC_MATRIX_PROJECTION], matProjection);
// Create instances buffer
- instanceTransforms = (float16 *)RL_CALLOC(instances, sizeof(float16));
+ instanceTransform = (float16 *)RL_CALLOC(instances, sizeof(float16));
// Fill buffer with instances transformations as float16 arrays
- for (int i = 0; i < instances; i++) instanceTransforms[i] = MatrixToFloatV(transforms[i]);
+ for (int i = 0; i < instances; i++) instanceTransform[i] = MatrixToFloatV(transforms[i]);
// Enable mesh VAO to attach new buffer
rlEnableVertexArray(mesh.vaoId);
@@ -1749,16 +1749,16 @@ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, i
// 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
// no faster, since all the transform matrices are transferred anyway
- instancesVboId = rlLoadVertexBuffer(instanceTransforms, instances*sizeof(float16), false);
+ instancesVboId = rlLoadVertexBuffer(instanceTransform, instances*sizeof(float16), false);
- // Instances transformation matrices are sent to shader attribute location: SHADER_LOC_VERTEX_INSTANCETRANSFORMS
- if (material.shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORMS] != -1)
+ // Instances transformation matrices are sent to shader attribute location: SHADER_LOC_VERTEX_INSTANCETRANSFORM
+ if (material.shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORM] != -1)
{
for (unsigned int i = 0; i < 4; i++)
{
- rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORMS] + i);
- rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORMS] + i, 4, RL_FLOAT, 0, sizeof(Matrix), i*sizeof(Vector4));
- rlSetVertexAttributeDivisor(material.shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORMS] + i, 1);
+ rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORM] + i);
+ rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORM] + i, 4, RL_FLOAT, 0, sizeof(Matrix), i*sizeof(Vector4));
+ rlSetVertexAttributeDivisor(material.shader.locs[SHADER_LOC_VERTEX_INSTANCETRANSFORM] + i, 1);
}
}
@@ -1918,7 +1918,7 @@ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, i
// Remove instance transforms buffer
rlUnloadVertexBuffer(instancesVboId);
- RL_FREE(instanceTransforms);
+ RL_FREE(instanceTransform);
#endif
}
@@ -4404,11 +4404,10 @@ static void BuildPoseFromParentJoints(BoneInfo *bones, int boneCount, Transform
#if defined(SUPPORT_FILEFORMAT_OBJ)
// Load OBJ mesh data
-//
-// Keep the following information in mind when reading this
+// Notes to keep in mind:
// - A mesh is created for every material present in the obj file
-// - the model.meshCount is therefore the materialCount returned from tinyobj
-// - the mesh is automatically triangulated by tinyobj
+// - The model.meshCount is therefore the materialCount returned from tinyobj
+// - The mesh is automatically triangulated by tinyobj
static Model LoadOBJ(const char *fileName)
{
tinyobj_attrib_t objAttributes = { 0 };
@@ -4555,7 +4554,8 @@ static Model LoadOBJ(const char *fileName)
model.meshes[i].texcoords = (float *)MemAlloc(sizeof(float)*vertexCount*2);
model.meshes[i].colors = (unsigned char *)MemAlloc(sizeof(unsigned char)*vertexCount*4);
#else
- if (objAttributes.texcoords != NULL && objAttributes.num_texcoords > 0) model.meshes[i].texcoords = (float *)MemAlloc(sizeof(float)*vertexCount*2);
+ if (objAttributes.texcoords != NULL && objAttributes.num_texcoords > 0)
+ model.meshes[i].texcoords = (float *)MemAlloc(sizeof(float)*vertexCount*2);
else model.meshes[i].texcoords = NULL;
model.meshes[i].colors = NULL;
#endif
@@ -4657,12 +4657,12 @@ static Model LoadOBJ(const char *fileName)
// Load IQM mesh data
static Model LoadIQM(const char *fileName)
{
- #define IQM_MAGIC "INTERQUAKEMODEL" // IQM file magic number
- #define IQM_VERSION 2 // only IQM version 2 supported
+ #define IQM_MAGIC "INTERQUAKEMODEL" // IQM file magic number
+ #define IQM_VERSION 2 // Only IQM version 2 supported
- #define BONE_NAME_LENGTH 32 // BoneInfo name string length
- #define MESH_NAME_LENGTH 32 // Mesh name string length
- #define MATERIAL_NAME_LENGTH 32 // Material name string length
+ #define BONE_NAME_LENGTH 32 // BoneInfo name string length
+ #define MESH_NAME_LENGTH 32 // Mesh name string length
+ #define MATERIAL_NAME_LENGTH 32 // Material name string length
int dataSize = 0;
unsigned char *fileData = LoadFileData(fileName, &dataSize);
diff --git a/tools/rlparser/output/raylib_api.json b/tools/rlparser/output/raylib_api.json
index 3f56434cd..7785549f0 100644
--- a/tools/rlparser/output/raylib_api.json
+++ b/tools/rlparser/output/raylib_api.json
@@ -2556,7 +2556,7 @@
"description": "Shader location: matrix attribute: bone transforms (animation)"
},
{
- "name": "SHADER_LOC_VERTEX_INSTANCETRANSFORMS",
+ "name": "SHADER_LOC_VERTEX_INSTANCETRANSFORM",
"value": 29,
"description": "Shader location: vertex attribute: instance transforms"
}
diff --git a/tools/rlparser/output/raylib_api.lua b/tools/rlparser/output/raylib_api.lua
index 85edb02f1..ffbb51d94 100644
--- a/tools/rlparser/output/raylib_api.lua
+++ b/tools/rlparser/output/raylib_api.lua
@@ -2556,7 +2556,7 @@ return {
description = "Shader location: matrix attribute: bone transforms (animation)"
},
{
- name = "SHADER_LOC_VERTEX_INSTANCETRANSFORMS",
+ name = "SHADER_LOC_VERTEX_INSTANCETRANSFORM",
value = 29,
description = "Shader location: vertex attribute: instance transforms"
}
diff --git a/tools/rlparser/output/raylib_api.txt b/tools/rlparser/output/raylib_api.txt
index da57f2cfd..c42f5ddde 100644
--- a/tools/rlparser/output/raylib_api.txt
+++ b/tools/rlparser/output/raylib_api.txt
@@ -834,7 +834,7 @@ Enum 09: ShaderLocationIndex (30 values)
Value[SHADER_LOC_VERTEX_BONEIDS]: 26
Value[SHADER_LOC_VERTEX_BONEWEIGHTS]: 27
Value[SHADER_LOC_MATRIX_BONETRANSFORMS]: 28
- Value[SHADER_LOC_VERTEX_INSTANCETRANSFORMS]: 29
+ Value[SHADER_LOC_VERTEX_INSTANCETRANSFORM]: 29
Enum 10: ShaderUniformDataType (13 values)
Name: ShaderUniformDataType
Description: Shader uniform data type
diff --git a/tools/rlparser/output/raylib_api.xml b/tools/rlparser/output/raylib_api.xml
index 6c83dc5df..ca20800e8 100644
--- a/tools/rlparser/output/raylib_api.xml
+++ b/tools/rlparser/output/raylib_api.xml
@@ -540,7 +540,7 @@
-
+