|
|
@ -1246,13 +1246,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[mi">0] = 0; // Vertex buffer: positions |
|
|
|
mesh->vboId[mi">1] = 0; // Vertex buffer: texcoords |
|
|
|
mesh->vboId[mi">2] = 0; // Vertex buffer: normals |
|
|
|
mesh->vboId[mi">3] = 0; // Vertex buffer: colors |
|
|
|
mesh->vboId[mi">4] = 0; // Vertex buffer: tangents |
|
|
|
mesh->vboId[mi">5] = 0; // Vertex buffer: texcoords2 |
|
|
|
mesh->vboId[mi">6] = 0; // Vertex buffer: indices |
|
|
|
mesh->vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION] = 0; // Vertex buffer: positions |
|
|
|
mesh->vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD] = 0; // Vertex buffer: texcoords |
|
|
|
mesh->vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL] = 0; // Vertex buffer: normals |
|
|
|
mesh->vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR] = 0; // Vertex buffer: colors |
|
|
|
mesh->vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT] = 0; // Vertex buffer: tangents |
|
|
|
mesh->vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2] = 0; // Vertex buffer: texcoords2 |
|
|
|
mesh->vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_INDICES] = 0; // Vertex buffer: indices |
|
|
|
|
|
|
|
#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) |
|
|
|
mesh->vaoId = rlLoadVertexArray(); |
|
|
@ -1262,12 +1262,12 @@ void UploadMesh(Mesh *mesh, bool dynamic) |
|
|
|
|
|
|
|
// Enable vertex attributes: position (shader-location = 0) |
|
|
|
void *vertices = (mesh->animVertices != NULL)? mesh->animVertices : mesh->vertices; |
|
|
|
mesh->vboId[mi">0] = rlLoadVertexBuffer(vertices, mesh->vertexCount*3*sizeof(float), dynamic); |
|
|
|
mesh->vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION] = rlLoadVertexBuffer(vertices, mesh->vertexCount*3*sizeof(float), dynamic); |
|
|
|
rlSetVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION, 3, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION); |
|
|
|
|
|
|
|
// Enable vertex attributes: texcoords (shader-location = 1) |
|
|
|
mesh->vboId[mi">1] = rlLoadVertexBuffer(mesh->texcoords, mesh->vertexCount*2*sizeof(float), dynamic); |
|
|
|
mesh->vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD] = rlLoadVertexBuffer(mesh->texcoords, mesh->vertexCount*2*sizeof(float), dynamic); |
|
|
|
rlSetVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD, 2, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD); |
|
|
|
|
|
|
@ -1278,7 +1278,7 @@ void UploadMesh(Mesh *mesh, bool dynamic) |
|
|
|
{ |
|
|
|
// Enable vertex attributes: normals (shader-location = 2) |
|
|
|
void *normals = (mesh->animNormals != NULL)? mesh->animNormals : mesh->normals; |
|
|
|
mesh->vboId[mi">2] = rlLoadVertexBuffer(normals, mesh->vertexCount*3*sizeof(float), dynamic); |
|
|
|
mesh->vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL] = rlLoadVertexBuffer(normals, mesh->vertexCount*3*sizeof(float), dynamic); |
|
|
|
rlSetVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL, 3, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL); |
|
|
|
} |
|
|
@ -1294,7 +1294,7 @@ void UploadMesh(Mesh *mesh, bool dynamic) |
|
|
|
if (mesh->colors != NULL) |
|
|
|
{ |
|
|
|
// Enable vertex attribute: color (shader-location = 3) |
|
|
|
mesh->vboId[mi">3] = rlLoadVertexBuffer(mesh->colors, mesh->vertexCount*4*sizeof(unsigned char), dynamic); |
|
|
|
mesh->vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR] = rlLoadVertexBuffer(mesh->colors, mesh->vertexCount*4*sizeof(unsigned char), dynamic); |
|
|
|
rlSetVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR, 4, RL_UNSIGNED_BYTE, 1, 0, 0); |
|
|
|
rlEnableVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR); |
|
|
|
} |
|
|
@ -1310,7 +1310,7 @@ void UploadMesh(Mesh *mesh, bool dynamic) |
|
|
|
if (mesh->tangents != NULL) |
|
|
|
{ |
|
|
|
// Enable vertex attribute: tangent (shader-location = 4) |
|
|
|
mesh->vboId[mi">4] = rlLoadVertexBuffer(mesh->tangents, mesh->vertexCount*4*sizeof(float), dynamic); |
|
|
|
mesh->vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT] = rlLoadVertexBuffer(mesh->tangents, mesh->vertexCount*4*sizeof(float), dynamic); |
|
|
|
rlSetVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT, 4, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT); |
|
|
|
} |
|
|
@ -1326,7 +1326,7 @@ void UploadMesh(Mesh *mesh, bool dynamic) |
|
|
|
if (mesh->texcoords2 != NULL) |
|
|
|
{ |
|
|
|
// Enable vertex attribute: texcoord2 (shader-location = 5) |
|
|
|
mesh->vboId[mi">5] = rlLoadVertexBuffer(mesh->texcoords2, mesh->vertexCount*2*sizeof(float), dynamic); |
|
|
|
mesh->vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2] = rlLoadVertexBuffer(mesh->texcoords2, mesh->vertexCount*2*sizeof(float), dynamic); |
|
|
|
rlSetVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2, 2, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2); |
|
|
|
} |
|
|
@ -1341,7 +1341,7 @@ void UploadMesh(Mesh *mesh, bool dynamic) |
|
|
|
|
|
|
|
if (mesh->indices != NULL) |
|
|
|
{ |
|
|
|
mesh->vboId[mi">6] = rlLoadVertexBufferElement(mesh->indices, mesh->triangleCount*3*sizeof(unsigned short), dynamic); |
|
|
|
mesh->vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_INDICES] = rlLoadVertexBufferElement(mesh->indices, mesh->triangleCount*3*sizeof(unsigned short), dynamic); |
|
|
|
} |
|
|
|
|
|
|
|
if (mesh->vaoId > 0) TRACELOG(LOG_INFO, "VAO: [ID %i] Mesh uploaded successfully to VRAM (GPU)", mesh->vaoId); |
|
|
@ -1478,19 +1478,19 @@ void DrawMesh(Mesh mesh, Material material, Matrix transform) |
|
|
|
if (!rlEnableVertexArray(mesh.vaoId)) |
|
|
|
{ |
|
|
|
// Bind mesh VBO data: vertex position (shader-location = 0) |
|
|
|
rlEnableVertexBuffer(mesh.vboId[mi">0]); |
|
|
|
rlEnableVertexBuffer(mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION]); |
|
|
|
rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_POSITION], 3, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_POSITION]); |
|
|
|
|
|
|
|
// Bind mesh VBO data: vertex texcoords (shader-location = 1) |
|
|
|
rlEnableVertexBuffer(mesh.vboId[mi">1]); |
|
|
|
rlEnableVertexBuffer(mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD]); |
|
|
|
rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_TEXCOORD01], 2, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_TEXCOORD01]); |
|
|
|
|
|
|
|
if (material.shader.locs[SHADER_LOC_VERTEX_NORMAL] != -1) |
|
|
|
{ |
|
|
|
// Bind mesh VBO data: vertex normals (shader-location = 2) |
|
|
|
rlEnableVertexBuffer(mesh.vboId[mi">2]); |
|
|
|
rlEnableVertexBuffer(mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL]); |
|
|
|
rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_NORMAL], 3, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_NORMAL]); |
|
|
|
} |
|
|
@ -1498,9 +1498,9 @@ void DrawMesh(Mesh mesh, Material material, Matrix transform) |
|
|
|
// Bind mesh VBO data: vertex colors (shader-location = 3, if available) |
|
|
|
if (material.shader.locs[SHADER_LOC_VERTEX_COLOR] != -1) |
|
|
|
{ |
|
|
|
if (mesh.vboId[mi">3] != 0) |
|
|
|
if (mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR] != 0) |
|
|
|
{ |
|
|
|
rlEnableVertexBuffer(mesh.vboId[mi">3]); |
|
|
|
rlEnableVertexBuffer(mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR]); |
|
|
|
rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_COLOR], 4, RL_UNSIGNED_BYTE, 1, 0, 0); |
|
|
|
rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_COLOR]); |
|
|
|
} |
|
|
@ -1517,7 +1517,7 @@ void DrawMesh(Mesh mesh, Material material, Matrix transform) |
|
|
|
// Bind mesh VBO data: vertex tangents (shader-location = 4, if available) |
|
|
|
if (material.shader.locs[SHADER_LOC_VERTEX_TANGENT] != -1) |
|
|
|
{ |
|
|
|
rlEnableVertexBuffer(mesh.vboId[mi">4]); |
|
|
|
rlEnableVertexBuffer(mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT]); |
|
|
|
rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_TANGENT], 4, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_TANGENT]); |
|
|
|
} |
|
|
@ -1525,12 +1525,12 @@ void DrawMesh(Mesh mesh, Material material, Matrix transform) |
|
|
|
// Bind mesh VBO data: vertex texcoords2 (shader-location = 5, if available) |
|
|
|
if (material.shader.locs[SHADER_LOC_VERTEX_TEXCOORD02] != -1) |
|
|
|
{ |
|
|
|
rlEnableVertexBuffer(mesh.vboId[mi">5]); |
|
|
|
rlEnableVertexBuffer(mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2]); |
|
|
|
rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_TEXCOORD02], 2, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_TEXCOORD02]); |
|
|
|
} |
|
|
|
|
|
|
|
if (mesh.indices != NULL) rlEnableVertexBufferElement(mesh.vboId[mi">6]); |
|
|
|
if (mesh.indices != NULL) rlEnableVertexBufferElement(mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_INDICES]); |
|
|
|
} |
|
|
|
|
|
|
|
int eyeCount = 1; |
|
|
@ -1696,19 +1696,19 @@ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, i |
|
|
|
if (!rlEnableVertexArray(mesh.vaoId)) |
|
|
|
{ |
|
|
|
// Bind mesh VBO data: vertex position (shader-location = 0) |
|
|
|
rlEnableVertexBuffer(mesh.vboId[mi">0]); |
|
|
|
rlEnableVertexBuffer(mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_POSITION]); |
|
|
|
rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_POSITION], 3, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_POSITION]); |
|
|
|
|
|
|
|
// Bind mesh VBO data: vertex texcoords (shader-location = 1) |
|
|
|
rlEnableVertexBuffer(mesh.vboId[mi">1]); |
|
|
|
rlEnableVertexBuffer(mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD]); |
|
|
|
rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_TEXCOORD01], 2, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_TEXCOORD01]); |
|
|
|
|
|
|
|
if (material.shader.locs[SHADER_LOC_VERTEX_NORMAL] != -1) |
|
|
|
{ |
|
|
|
// Bind mesh VBO data: vertex normals (shader-location = 2) |
|
|
|
rlEnableVertexBuffer(mesh.vboId[mi">2]); |
|
|
|
rlEnableVertexBuffer(mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_NORMAL]); |
|
|
|
rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_NORMAL], 3, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_NORMAL]); |
|
|
|
} |
|
|
@ -1716,9 +1716,9 @@ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, i |
|
|
|
// Bind mesh VBO data: vertex colors (shader-location = 3, if available) |
|
|
|
if (material.shader.locs[SHADER_LOC_VERTEX_COLOR] != -1) |
|
|
|
{ |
|
|
|
if (mesh.vboId[mi">3] != 0) |
|
|
|
if (mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR] != 0) |
|
|
|
{ |
|
|
|
rlEnableVertexBuffer(mesh.vboId[mi">3]); |
|
|
|
rlEnableVertexBuffer(mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_COLOR]); |
|
|
|
rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_COLOR], 4, RL_UNSIGNED_BYTE, 1, 0, 0); |
|
|
|
rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_COLOR]); |
|
|
|
} |
|
|
@ -1735,7 +1735,7 @@ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, i |
|
|
|
// Bind mesh VBO data: vertex tangents (shader-location = 4, if available) |
|
|
|
if (material.shader.locs[SHADER_LOC_VERTEX_TANGENT] != -1) |
|
|
|
{ |
|
|
|
rlEnableVertexBuffer(mesh.vboId[mi">4]); |
|
|
|
rlEnableVertexBuffer(mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_TANGENT]); |
|
|
|
rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_TANGENT], 4, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_TANGENT]); |
|
|
|
} |
|
|
@ -1743,12 +1743,12 @@ void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, i |
|
|
|
// Bind mesh VBO data: vertex texcoords2 (shader-location = 5, if available) |
|
|
|
if (material.shader.locs[SHADER_LOC_VERTEX_TEXCOORD02] != -1) |
|
|
|
{ |
|
|
|
rlEnableVertexBuffer(mesh.vboId[mi">5]); |
|
|
|
rlEnableVertexBuffer(mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_TEXCOORD2]); |
|
|
|
rlSetVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_TEXCOORD02], 2, RL_FLOAT, 0, 0, 0); |
|
|
|
rlEnableVertexAttribute(material.shader.locs[SHADER_LOC_VERTEX_TEXCOORD02]); |
|
|
|
} |
|
|
|
|
|
|
|
if (mesh.indices != NULL) rlEnableVertexBufferElement(mesh.vboId[mi">6]); |
|
|
|
if (mesh.indices != NULL) rlEnableVertexBufferElement(mesh.vboId[n">RL_DEFAULT_SHADER_ATTRIB_LOCATION_INDICES]); |
|
|
|
} |
|
|
|
|
|
|
|
int eyeCount = 1; |
|
|
|