summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorRay <[email protected]>2021-04-20 12:16:16 +0200
committerRay <[email protected]>2021-04-20 12:16:16 +0200
commitbb743e8c6ec1ab50bd5ab0f12e10a48da702d76a (patch)
tree6135bf9acde7a8418579b8e42cd9469e01dd70a4 /src
parentf90368606026697d55e7d91a71d114cbc1680f82 (diff)
downloadraylib-bb743e8c6ec1ab50bd5ab0f12e10a48da702d76a.tar.gz
raylib-bb743e8c6ec1ab50bd5ab0f12e10a48da702d76a.zip
ADDED: UpdateMeshBuffer()
Diffstat (limited to 'src')
-rw-r--r--src/models.c24
-rw-r--r--src/raylib.h3
2 files changed, 17 insertions, 10 deletions
diff --git a/src/models.c b/src/models.c
index 3dc6c3d5..d03d1040 100644
--- a/src/models.c
+++ b/src/models.c
@@ -829,13 +829,13 @@ void UploadMesh(Mesh *mesh, bool dynamic)
mesh->vboId = (unsigned int *)RL_CALLOC(MAX_MESH_VERTEX_BUFFERS, sizeof(unsigned int));
mesh->vaoId = 0; // Vertex Array Object
- mesh->vboId[0] = 0; // Vertex positions VBO
- mesh->vboId[1] = 0; // Vertex texcoords VBO
- mesh->vboId[2] = 0; // Vertex normals VBO
- mesh->vboId[3] = 0; // Vertex colors VBO
- mesh->vboId[4] = 0; // Vertex tangents VBO
- mesh->vboId[5] = 0; // Vertex texcoords2 VBO
- mesh->vboId[6] = 0; // Vertex indices VBO
+ mesh->vboId[0] = 0; // Vertex buffer: positions
+ mesh->vboId[1] = 0; // Vertex buffer: texcoords
+ mesh->vboId[2] = 0; // Vertex buffer: normals
+ mesh->vboId[3] = 0; // Vertex buffer: colors
+ mesh->vboId[4] = 0; // Vertex buffer: tangents
+ mesh->vboId[5] = 0; // Vertex buffer: texcoords2
+ mesh->vboId[6] = 0; // Vertex buffer: indices
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
mesh->vaoId = rlLoadVertexArray();
@@ -925,6 +925,12 @@ void UploadMesh(Mesh *mesh, bool dynamic)
#endif
}
+// Update mesh vertex data in GPU for a specific buffer index
+void UpdateMeshBuffer(Mesh mesh, int index, void *data, int dataSize, int offset)
+{
+ rlUpdateVertexBuffer(mesh->vboId[index], data, dataSize, offset);
+}
+
// Draw a 3d mesh with material and transform
void DrawMesh(Mesh mesh, Material material, Matrix transform)
{
@@ -1528,9 +1534,9 @@ Mesh GenMeshDefault(int vertexCount)
mesh.normals = (float *)RL_CALLOC(mesh.vertexCount*3, sizeof(float));
mesh.colors = (unsigned char *)RL_CALLOC(mesh.vertexCount*4, sizeof(unsigned char));
- // Upload vertex data to GPU (static mesh)
+ // Upload vertex data to GPU (dynamic mesh)
// NOTE: mesh.vboId array is allocated inside UploadMesh()
- UploadMesh(&mesh, false);
+ UploadMesh(&mesh, true);
return mesh;
}
diff --git a/src/raylib.h b/src/raylib.h
index 4c70e48a..abe7d8a1 100644
--- a/src/raylib.h
+++ b/src/raylib.h
@@ -1381,7 +1381,8 @@ RLAPI void UnloadModel(Model model);
RLAPI void UnloadModelKeepMeshes(Model model); // Unload model (but not meshes) from memory (RAM and/or VRAM)
// Mesh loading/unloading functions
-RLAPI void UploadMesh(Mesh *mesh, bool dynamic); // Upload vertex data into GPU and provided VAO/VBO ids
+RLAPI void UploadMesh(Mesh *mesh, bool dynamic); // Upload mesh vertex data in GPU and provide VAO/VBO ids
+RLAPI void UpdateMeshBuffer(Mesh mesh, int index, void *data, int dataSize, int offset); // Update mesh vertex data in GPU for a specific buffer index
RLAPI void DrawMesh(Mesh mesh, Material material, Matrix transform); // Draw a 3d mesh with material and transform
RLAPI void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int instances); // Draw multiple mesh instances with material and different transforms
RLAPI void UnloadMesh(Mesh mesh); // Unload mesh data from CPU and GPU