summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/models.c3
-rw-r--r--src/rlgl.h24
2 files changed, 27 insertions, 0 deletions
diff --git a/src/models.c b/src/models.c
index e437a0ab..7a9acdf7 100644
--- a/src/models.c
+++ b/src/models.c
@@ -2302,6 +2302,9 @@ void MeshTangents(Mesh *mesh)
free(tan1);
free(tan2);
+
+ // Load a new tangent attributes buffer
+ mesh->vboId[LOC_VERTEX_TANGENT] = rlLoadAttribBuffer(mesh->vaoId, LOC_VERTEX_TANGENT, mesh->tangents, mesh->vertexCount*4*sizeof(float), false);
TraceLog(LOG_INFO, "Tangents computed for mesh");
}
diff --git a/src/rlgl.h b/src/rlgl.h
index 3d433377..bf50ad0d 100644
--- a/src/rlgl.h
+++ b/src/rlgl.h
@@ -456,6 +456,7 @@ void rlDeleteBuffers(unsigned int id); // Unload vertex data (V
void rlClearColor(byte r, byte g, byte b, byte a); // Clear color buffer with color
void rlClearScreenBuffers(void); // Clear used screen buffers (color and depth)
void rlUpdateBuffer(int bufferId, void *data, int dataSize); // Update GPU buffer with new data
+unsigned int rlLoadAttribBuffer(unsigned int vaoId, int shaderLoc, void *buffer, int size, bool dynamic); // Load a new attributes buffer
//------------------------------------------------------------------------------------
// Functions Declaration - rlgl functionality
@@ -2532,6 +2533,29 @@ void rlLoadMesh(Mesh *mesh, bool dynamic)
#endif
}
+// Load a new attributes buffer
+unsigned int rlLoadAttribBuffer(unsigned int vaoId, int shaderLoc, void *buffer, int size, bool dynamic)
+{
+ unsigned int id = 0;
+
+#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
+ int drawHint = GL_STATIC_DRAW;
+ if (dynamic) drawHint = GL_DYNAMIC_DRAW;
+
+ if (vaoSupported) glBindVertexArray(vaoId);
+
+ glGenBuffers(1, &id);
+ glBindBuffer(GL_ARRAY_BUFFER, id);
+ glBufferData(GL_ARRAY_BUFFER, size, buffer, drawHint);
+ glVertexAttribPointer(shaderLoc, 2, GL_FLOAT, 0, 0, 0);
+ glEnableVertexAttribArray(shaderLoc);
+
+ if (vaoSupported) glBindVertexArray(0);
+#endif
+
+ return id;
+}
+
// Update vertex data on GPU (upload new data to one buffer)
void rlUpdateMesh(Mesh mesh, int buffer, int numVertex)
{