@ -128,54 +128,23 @@
/ / Types and Structures Definition
/ / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/ / Vertex buffer ( position + color arrays )
/ / NOTE : Used for lines and triangles VAOs
/ / Dynamic vertex buffers ( position + texcoords + colors + indices arrays )
typedef struct {
int vCounter ;
int cCounter ;
float * vertices ; / / 3 components per vertex
unsigned char * colors ; / / 4 components per vertex
} VertexPositionColorBuffer ;
/ / Vertex buffer ( position + texcoords + color arrays )
/ / NOTE : Not used
typedef struct {
int vCounter ;
int tcCounter ;
int cCounter ;
float * vertices ; / / 3 components per vertex
float * texcoords ; / / 2 components per vertex
unsigned char * colors ; / / 4 components per vertex
} VertexPositionColorTextureBuffer ;
/ / Vertex buffer ( position + texcoords + normals arrays )
/ / NOTE : Not used
typedef struct {
int vCounter ;
int tcCounter ;
int nCounter ;
float * vertices ; / / 3 components per vertex
float * texcoords ; / / 2 components per vertex
float * normals ; / / 3 components per vertex
/ / short * normals ; / / NOTE : Less data load . . . but padding issues and normalizing required !
} VertexPositionTextureNormalBuffer ;
/ / Vertex buffer ( position + texcoords + colors + indices arrays )
/ / NOTE : Used for quads VAO
typedef struct {
int vCounter ;
int tcCounter ;
int cCounter ;
float * vertices ; / / 3 components per vertex
float * texcoords ; / / 2 components per vertex
unsigned char * colors ; / / 4 components per vertex
int vCounter ; / / vertex position counter to process ( and draw ) from full buffer
int tcCounter ; / / vertex texcoord counter to process ( and draw ) from full buffer
int cCounter ; / / vertex color counter to process ( and draw ) from full buffer
float * vertices ; / / vertex position ( XYZ - 3 components per vertex ) ( shader - location = 0 )
float * texcoords ; / / vertex texture coordinates ( UV - 2 components per vertex ) ( shader - location = 1 )
unsigned char * colors ; / / vertex colors ( RGBA - 4 components per vertex ) ( shader - location = 3 )
# if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33)
unsigned int * indices ; / / mi">6 indices per quad ( could be int )
unsigned int * indices ; / / vertex indices ( in case vertex data comes indexed ) ( 6 indices per quad )
# elif defined(GRAPHICS_API_OPENGL_ES2)
unsigned short * indices ; / / mi">6 indices per quad ( must be short )
unsigned short * indices ; / / vertex indices ( in case vertex data comes indexed ) ( 6 indices per quad )
/ / NOTE : 6 * 2 byte = 12 byte , not alignment problem !
# endif
} VertexPositionColorTextureIndexBuffer ;
unsigned int vaoId ; / / OpenGL Vertex Array Object id
unsigned int vboId [ 4 ] ; / / OpenGL Vertex Buffer Objects id ( 4 types of vertex data )
} DynamicBuffer ;
/ / Draw call type
/ / NOTE : Used to track required draw - calls , organized by texture
@ -205,18 +174,9 @@ static DrawMode currentDrawMode;
static float currentDepth = - 1.0f ;
/ / Default vertex buffers for lines , triangles and quads
static VertexPositionColorBuffer lines ; / / No texture support
static VertexPositionColorBuffer triangles ; / / No texture support
static VertexPositionColorTextureIndexBuffer quads ;
/ / Default vertex buffers VAOs ( if supported )
static GLuint vaoLines , vaoTriangles , vaoQuads ;
/ / Default vertex buffers VBOs
static GLuint linesBuffer [ 2 ] ; / / Lines buffers ( position , color )
static GLuint trianglesBuffer [ 2 ] ; / / Triangles buffers ( position , color )
static GLuint quadsBuffer [ 4 ] ; / / Quads buffers ( position , texcoord , color , index )
static DynamicBuffer lines ;
static DynamicBuffer triangles ;
static DynamicBuffer quads ;
/ / Default buffers draw calls
static DrawCall * draws ;
@ -1207,7 +1167,7 @@ void rlglDrawEx(Mesh mesh, Material material, Matrix transform, bool wires)
glEnableVertexAttribArray ( material . shader . texcoord2Loc ) ;
}
if ( mesh . indices ! = NULL ) glBindBuffer ( GL_ELEMENT_ARRAY_BUFFER , quadsBuffer [ 3 ] ) ;
if ( mesh . indices ! = NULL ) glBindBuffer ( GL_ELEMENT_ARRAY_BUFFER , quads. vboId [ 3 ] ) ;
}
/ / Draw call !
@ -1692,7 +1652,6 @@ void rlglLoadMesh(Mesh *mesh)
mesh - > vboId [ 4 ] = 0 ; / / Vertex tangents VBO
mesh - > vboId [ 5 ] = 0 ; / / Vertex texcoords2 VBO
mesh - > vboId [ 6 ] = 0 ; / / Vertex indices VBO
# if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)
GLuint vaoId = 0 ; / / Vertex Array Objects ( VAO )
@ -2407,22 +2366,28 @@ static void LoadDefaultBuffers(void)
/ / Lines - Initialize arrays ( vertex position and color data )
lines . vertices = ( float * ) malloc ( sizeof ( float ) * 3 * 2 * MAX_LINES_BATCH ) ; / / 3 float by vertex , 2 vertex by line
lines . colors = ( unsigned char * ) malloc ( sizeof ( unsigned char ) * 4 * 2 * MAX_LINES_BATCH ) ; / / 4 float by color , 2 colors by line
lines . texcoords = NULL ;
lines . indices = NULL ;
for ( int i = 0 ; i < ( 3 * 2 * MAX_LINES_BATCH ) ; i + + ) lines . vertices [ i ] = 0.0f ;
for ( int i = 0 ; i < ( 4 * 2 * MAX_LINES_BATCH ) ; i + + ) lines . colors [ i ] = 0 ;
lines . vCounter = 0 ;
lines . cCounter = 0 ;
lines . tcCounter = 0 ;
/ / Triangles - Initialize arrays ( vertex position and color data )
triangles . vertices = ( float * ) malloc ( sizeof ( float ) * 3 * 3 * MAX_TRIANGLES_BATCH ) ; / / 3 float by vertex , 3 vertex by triangle
triangles . colors = ( unsigned char * ) malloc ( sizeof ( unsigned char ) * 4 * 3 * MAX_TRIANGLES_BATCH ) ; / / 4 float by color , 3 colors by triangle
triangles . texcoords = NULL ;
triangles . indices = NULL ;
for ( int i = 0 ; i < ( 3 * 3 * MAX_TRIANGLES_BATCH ) ; i + + ) triangles . vertices [ i ] = 0.0f ;
for ( int i = 0 ; i < ( 4 * 3 * MAX_TRIANGLES_BATCH ) ; i + + ) triangles . colors [ i ] = 0 ;
triangles . vCounter = 0 ;
triangles . cCounter = 0 ;
triangles . tcCounter = 0 ;
/ / Quads - Initialize arrays ( vertex position , texcoord , color data and indexes )
quads . vertices = ( float * ) malloc ( sizeof ( float ) * 3 * 4 * MAX_QUADS_BATCH ) ; / / 3 float by vertex , 4 vertex by quad
@ -2468,96 +2433,95 @@ static void LoadDefaultBuffers(void)
if ( vaoSupported )
{
/ / Initialize Lines VAO
glGenVertexArrays ( 1 , & vaoLines ) ;
glBindVertexArray ( vaoLines ) ;
glGenVertexArrays ( 1 , & lines . vaoId ) ;
glBindVertexArray ( lines . vaoId ) ;
}
/ / Create buffers for our vertex data
glGenBuffers ( 2 , linesBuffer ) ;
/ / Lines - Vertex buffers binding and attributes enable
/ / Vertex position buffer ( shader - location = 0 )
glBindBuffer ( GL_ARRAY_BUFFER , linesBuffer [ 0 ] ) ;
glGenBuffers ( 2 , & lines . vboId [ 0 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , lines . vboId [ 0 ] ) ;
glBufferData ( GL_ARRAY_BUFFER , sizeof ( float ) * 3 * 2 * MAX_LINES_BATCH , lines . vertices , GL_DYNAMIC_DRAW ) ;
glEnableVertexAttribArray ( currentShader . vertexLoc ) ;
glVertexAttribPointer ( currentShader . vertexLoc , 3 , GL_FLOAT , 0 , 0 , 0 ) ;
/ / Vertex color buffer ( shader - location = 3 )
glBindBuffer ( GL_ARRAY_BUFFER , linesBuffer [ 1 ] ) ;
glGenBuffers ( 2 , & lines . vboId [ 1 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , lines . vboId [ 1 ] ) ;
glBufferData ( GL_ARRAY_BUFFER , sizeof ( unsigned char ) * 4 * 2 * MAX_LINES_BATCH , lines . colors , GL_DYNAMIC_DRAW ) ;
glEnableVertexAttribArray ( currentShader . colorLoc ) ;
glVertexAttribPointer ( currentShader . colorLoc , 4 , GL_UNSIGNED_BYTE , GL_TRUE , 0 , 0 ) ;
if ( vaoSupported ) TraceLog ( INFO , " [VAO ID %i] Default buffers VAO initialized successfully (lines) " , vaoLines ) ;
else TraceLog ( INFO , " [VBO ID %i][VBO ID %i] Default buffers VBOs initialized successfully (lines) " , linesBuffer[0], linesBuffer [1]) ;
if ( vaoSupported ) TraceLog ( INFO , " [VAO ID %i] Default buffers VAO initialized successfully (lines) " , lines . vaoId ) ;
else TraceLog ( INFO , " [VBO ID %i][VBO ID %i] Default buffers VBOs initialized successfully (lines) " , lines.vboId[0], lines.vboId [1]) ;
/ / Upload and link triangles vertex buffers
if ( vaoSupported )
{
/ / Initialize Triangles VAO
glGenVertexArrays ( 1 , & vaoTriangles ) ;
glBindVertexArray ( vaoTriangles ) ;
glGenVertexArrays ( 1 , & triangles . vaoId ) ;
glBindVertexArray ( triangles . vaoId ) ;
}
/ / Create buffers for our vertex data
glGenBuffers ( 2 , trianglesBuffer ) ;
/ / Triangles - Vertex buffers binding and attributes enable
/ / Vertex position buffer ( shader - location = 0 )
glBindBuffer ( GL_ARRAY_BUFFER , trianglesBuffer [ 0 ] ) ;
glGenBuffers ( 1 , & triangles . vboId [ 0 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , triangles . vboId [ 0 ] ) ;
glBufferData ( GL_ARRAY_BUFFER , sizeof ( float ) * 3 * 3 * MAX_TRIANGLES_BATCH , triangles . vertices , GL_DYNAMIC_DRAW ) ;
glEnableVertexAttribArray ( currentShader . vertexLoc ) ;
glVertexAttribPointer ( currentShader . vertexLoc , 3 , GL_FLOAT , 0 , 0 , 0 ) ;
/ / Vertex color buffer ( shader - location = 3 )
glBindBuffer ( GL_ARRAY_BUFFER , trianglesBuffer [ 1 ] ) ;
glGenBuffers ( 1 , & triangles . vboId [ 1 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , triangles . vboId [ 1 ] ) ;
glBufferData ( GL_ARRAY_BUFFER , sizeof ( unsigned char ) * 4 * 3 * MAX_TRIANGLES_BATCH , triangles . colors , GL_DYNAMIC_DRAW ) ;
glEnableVertexAttribArray ( currentShader . colorLoc ) ;
glVertexAttribPointer ( currentShader . colorLoc , 4 , GL_UNSIGNED_BYTE , GL_TRUE , 0 , 0 ) ;
if ( vaoSupported ) TraceLog ( INFO , " [VAO ID %i] Default buffers VAO initialized successfully (triangles) " , vaoTriangles ) ;
else TraceLog ( INFO , " [VBO ID %i][VBO ID %i] Default buffers VBOs initialized successfully(triangles) " , trianglesBuffer[0], trianglesBuffer [1]) ;
if ( vaoSupported ) TraceLog ( INFO , " [VAO ID %i] Default buffers VAO initialized successfully (triangles) " , triangles . vaoId ) ;
else TraceLog ( INFO , " [VBO ID %i][VBO ID %i] Default buffers VBOs initialized successfully(triangles) " , triangles.vboId[0], triangles.vboId [1]) ;
/ / Upload and link quads vertex buffers
if ( vaoSupported )
{
/ / Initialize Quads VAO
glGenVertexArrays ( 1 , & vaoQuads ) ;
glBindVertexArray ( vaoQuads ) ;
glGenVertexArrays ( 1 , & quads . vaoId ) ;
glBindVertexArray ( quads . vaoId ) ;
}
/ / Create buffers for our vertex data
glGenBuffers ( 4 , quadsBuffer ) ;
/ / Quads - Vertex buffers binding and attributes enable
/ / Vertex position buffer ( shader - location = 0 )
glBindBuffer ( GL_ARRAY_BUFFER , quadsBuffer [ 0 ] ) ;
glGenBuffers ( 1 , & quads . vboId [ 0 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , quads . vboId [ 0 ] ) ;
glBufferData ( GL_ARRAY_BUFFER , sizeof ( float ) * 3 * 4 * MAX_QUADS_BATCH , quads . vertices , GL_DYNAMIC_DRAW ) ;
glEnableVertexAttribArray ( currentShader . vertexLoc ) ;
glVertexAttribPointer ( currentShader . vertexLoc , 3 , GL_FLOAT , 0 , 0 , 0 ) ;
/ / Vertex texcoord buffer ( shader - location = 1 )
glBindBuffer ( GL_ARRAY_BUFFER , quadsBuffer [ 1 ] ) ;
glGenBuffers ( 1 , & quads . vboId [ 1 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , quads . vboId [ 1 ] ) ;
glBufferData ( GL_ARRAY_BUFFER , sizeof ( float ) * 2 * 4 * MAX_QUADS_BATCH , quads . texcoords , GL_DYNAMIC_DRAW ) ;
glEnableVertexAttribArray ( currentShader . texcoordLoc ) ;
glVertexAttribPointer ( currentShader . texcoordLoc , 2 , GL_FLOAT , 0 , 0 , 0 ) ;
/ / Vertex color buffer ( shader - location = 3 )
glBindBuffer ( GL_ARRAY_BUFFER , quadsBuffer [ 2 ] ) ;
glGenBuffers ( 1 , & quads . vboId [ 2 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , quads . vboId [ 2 ] ) ;
glBufferData ( GL_ARRAY_BUFFER , sizeof ( unsigned char ) * 4 * 4 * MAX_QUADS_BATCH , quads . colors , GL_DYNAMIC_DRAW ) ;
glEnableVertexAttribArray ( currentShader . colorLoc ) ;
glVertexAttribPointer ( currentShader . colorLoc , 4 , GL_UNSIGNED_BYTE , GL_TRUE , 0 , 0 ) ;
/ / Fill index buffer
glBindBuffer ( GL_ELEMENT_ARRAY_BUFFER , quadsBuffer [ 3 ] ) ;
glGenBuffers ( 1 , & quads . vboId [ 3 ] ) ;
glBindBuffer ( GL_ELEMENT_ARRAY_BUFFER , quads . vboId [ 3 ] ) ;
# if defined(GRAPHICS_API_OPENGL_33)
glBufferData ( GL_ELEMENT_ARRAY_BUFFER , sizeof ( int ) * 6 * MAX_QUADS_BATCH , quads . indices , GL_STATIC_DRAW ) ;
# elif defined(GRAPHICS_API_OPENGL_ES2)
glBufferData ( GL_ELEMENT_ARRAY_BUFFER , sizeof ( short ) * 6 * MAX_QUADS_BATCH , quads . indices , GL_STATIC_DRAW ) ;
# endif
if ( vaoSupported ) TraceLog ( INFO , " [VAO ID %i] Default buffers VAO initialized successfully (quads) " , vaoQuads ) ;
else TraceLog ( INFO , " [VBO ID %i][VBO ID %i][VBO ID %i][VBO ID %i] Default buffers VBOs initialized successfully (quads) " , quadsBuffer[0], quadsBuffer[1], quadsBuffer[2], quadsBuffer [3]) ;
if ( vaoSupported ) TraceLog ( INFO , " [VAO ID %i] Default buffers VAO initialized successfully (quads) " , quads . vaoId ) ;
else TraceLog ( INFO , " [VBO ID %i][VBO ID %i][VBO ID %i][VBO ID %i] Default buffers VBOs initialized successfully (quads) " , quads.vboId[0], quads.vboId[1], quads.vboId[2], quads.vboId [3]) ;
/ / Unbind the current VAO
if ( vaoSupported ) glBindVertexArray ( 0 ) ;
@ -2573,15 +2537,15 @@ static void UpdateDefaultBuffers(void)
if ( lines . vCounter > 0 )
{
/ / Activate Lines VAO
if ( vaoSupported ) glBindVertexArray ( vaoLines ) ;
if ( vaoSupported ) glBindVertexArray ( lines . vaoId ) ;
/ / Lines - vertex positions buffer
glBindBuffer ( GL_ARRAY_BUFFER , linesBuffer [ 0 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , lines. vboId [ 0 ] ) ;
/ / glBufferData ( GL_ARRAY_BUFFER , sizeof ( float ) * 3 * 2 * MAX_LINES_BATCH , lines . vertices , GL_DYNAMIC_DRAW ) ;
glBufferSubData ( GL_ARRAY_BUFFER , 0 , sizeof ( float ) * 3 * lines . vCounter , lines . vertices ) ; / / target - offset ( in bytes ) - size ( in bytes ) - data pointer
/ / Lines - colors buffer
glBindBuffer ( GL_ARRAY_BUFFER , linesBuffer [ 1 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , lines. vboId [ 1 ] ) ;
/ / glBufferData ( GL_ARRAY_BUFFER , sizeof ( float ) * 4 * 2 * MAX_LINES_BATCH , lines . colors , GL_DYNAMIC_DRAW ) ;
glBufferSubData ( GL_ARRAY_BUFFER , 0 , sizeof ( unsigned char ) * 4 * lines . cCounter , lines . colors ) ;
}
@ -2590,15 +2554,15 @@ static void UpdateDefaultBuffers(void)
if ( triangles . vCounter > 0 )
{
/ / Activate Triangles VAO
if ( vaoSupported ) glBindVertexArray ( vaoTriangles ) ;
if ( vaoSupported ) glBindVertexArray ( triangles . vaoId ) ;
/ / Triangles - vertex positions buffer
glBindBuffer ( GL_ARRAY_BUFFER , trianglesBuffer [ 0 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , triangles. vboId [ 0 ] ) ;
/ / glBufferData ( GL_ARRAY_BUFFER , sizeof ( float ) * 3 * 3 * MAX_TRIANGLES_BATCH , triangles . vertices , GL_DYNAMIC_DRAW ) ;
glBufferSubData ( GL_ARRAY_BUFFER , 0 , sizeof ( float ) * 3 * triangles . vCounter , triangles . vertices ) ;
/ / Triangles - colors buffer
glBindBuffer ( GL_ARRAY_BUFFER , trianglesBuffer [ 1 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , triangles. vboId [ 1 ] ) ;
/ / glBufferData ( GL_ARRAY_BUFFER , sizeof ( float ) * 4 * 3 * MAX_TRIANGLES_BATCH , triangles . colors , GL_DYNAMIC_DRAW ) ;
glBufferSubData ( GL_ARRAY_BUFFER , 0 , sizeof ( unsigned char ) * 4 * triangles . cCounter , triangles . colors ) ;
}
@ -2607,20 +2571,20 @@ static void UpdateDefaultBuffers(void)
if ( quads . vCounter > 0 )
{
/ / Activate Quads VAO
if ( vaoSupported ) glBindVertexArray ( vaoQuads ) ;
if ( vaoSupported ) glBindVertexArray ( quads . vaoId ) ;
/ / Quads - vertex positions buffer
glBindBuffer ( GL_ARRAY_BUFFER , quadsBuffer [ 0 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , quads. vboId [ 0 ] ) ;
/ / glBufferData ( GL_ARRAY_BUFFER , sizeof ( float ) * 3 * 4 * MAX_QUADS_BATCH , quads . vertices , GL_DYNAMIC_DRAW ) ;
glBufferSubData ( GL_ARRAY_BUFFER , 0 , sizeof ( float ) * 3 * quads . vCounter , quads . vertices ) ;
/ / Quads - texture coordinates buffer
glBindBuffer ( GL_ARRAY_BUFFER , quadsBuffer [ 1 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , quads. vboId [ 1 ] ) ;
/ / glBufferData ( GL_ARRAY_BUFFER , sizeof ( float ) * 2 * 4 * MAX_QUADS_BATCH , quads . texcoords , GL_DYNAMIC_DRAW ) ;
glBufferSubData ( GL_ARRAY_BUFFER , 0 , sizeof ( float ) * 2 * quads . vCounter , quads . texcoords ) ;
/ / Quads - colors buffer
glBindBuffer ( GL_ARRAY_BUFFER , quadsBuffer [ 2 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , quads. vboId [ 2 ] ) ;
/ / glBufferData ( GL_ARRAY_BUFFER , sizeof ( float ) * 4 * 4 * MAX_QUADS_BATCH , quads . colors , GL_DYNAMIC_DRAW ) ;
glBufferSubData ( GL_ARRAY_BUFFER , 0 , sizeof ( unsigned char ) * 4 * quads . vCounter , quads . colors ) ;
@ -2659,17 +2623,17 @@ static void DrawDefaultBuffers(void)
if ( vaoSupported )
{
glBindVertexArray ( vaoLines ) ;
glBindVertexArray ( lines . vaoId ) ;
}
else
{
/ / Bind vertex attrib : position ( shader - location = 0 )
glBindBuffer ( GL_ARRAY_BUFFER , linesBuffer [ 0 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , lines. vboId [ 0 ] ) ;
glVertexAttribPointer ( currentShader . vertexLoc , 3 , GL_FLOAT , 0 , 0 , 0 ) ;
glEnableVertexAttribArray ( currentShader . vertexLoc ) ;
/ / Bind vertex attrib : color ( shader - location = 3 )
glBindBuffer ( GL_ARRAY_BUFFER , linesBuffer [ 1 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , lines. vboId [ 1 ] ) ;
glVertexAttribPointer ( currentShader . colorLoc , 4 , GL_UNSIGNED_BYTE , GL_TRUE , 0 , 0 ) ;
glEnableVertexAttribArray ( currentShader . colorLoc ) ;
}
@ -2687,17 +2651,17 @@ static void DrawDefaultBuffers(void)
if ( vaoSupported )
{
glBindVertexArray ( vaoTriangles ) ;
glBindVertexArray ( triangles . vaoId ) ;
}
else
{
/ / Bind vertex attrib : position ( shader - location = 0 )
glBindBuffer ( GL_ARRAY_BUFFER , trianglesBuffer [ 0 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , triangles. vboId [ 0 ] ) ;
glVertexAttribPointer ( currentShader . vertexLoc , 3 , GL_FLOAT , 0 , 0 , 0 ) ;
glEnableVertexAttribArray ( currentShader . vertexLoc ) ;
/ / Bind vertex attrib : color ( shader - location = 3 )
glBindBuffer ( GL_ARRAY_BUFFER , trianglesBuffer [ 1 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , triangles. vboId [ 1 ] ) ;
glVertexAttribPointer ( currentShader . colorLoc , 4 , GL_UNSIGNED_BYTE , GL_TRUE , 0 , 0 ) ;
glEnableVertexAttribArray ( currentShader . colorLoc ) ;
}
@ -2717,26 +2681,26 @@ static void DrawDefaultBuffers(void)
if ( vaoSupported )
{
glBindVertexArray ( vaoQuads ) ;
glBindVertexArray ( quads . vaoId ) ;
}
else
{
/ / Bind vertex attrib : position ( shader - location = 0 )
glBindBuffer ( GL_ARRAY_BUFFER , quadsBuffer [ 0 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , quads. vboId [ 0 ] ) ;
glVertexAttribPointer ( currentShader . vertexLoc , 3 , GL_FLOAT , 0 , 0 , 0 ) ;
glEnableVertexAttribArray ( currentShader . vertexLoc ) ;
/ / Bind vertex attrib : texcoord ( shader - location = 1 )
glBindBuffer ( GL_ARRAY_BUFFER , quadsBuffer [ 1 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , quads. vboId [ 1 ] ) ;
glVertexAttribPointer ( currentShader . texcoordLoc , 2 , GL_FLOAT , 0 , 0 , 0 ) ;
glEnableVertexAttribArray ( currentShader . texcoordLoc ) ;
/ / Bind vertex attrib : color ( shader - location = 3 )
glBindBuffer ( GL_ARRAY_BUFFER , quadsBuffer [ 2 ] ) ;
glBindBuffer ( GL_ARRAY_BUFFER , quads. vboId [ 2 ] ) ;
glVertexAttribPointer ( currentShader . colorLoc , 4 , GL_UNSIGNED_BYTE , GL_TRUE , 0 , 0 ) ;
glEnableVertexAttribArray ( currentShader . colorLoc ) ;
glBindBuffer ( GL_ELEMENT_ARRAY_BUFFER , quadsBuffer [ 3 ] ) ;
glBindBuffer ( GL_ELEMENT_ARRAY_BUFFER , quads. vboId [ 3 ] ) ;
}
/ / TraceLog ( DEBUG , " Draws required per frame: %i " , drawsCounter ) ;
@ -2806,21 +2770,21 @@ static void UnloadDefaultBuffers(void)
glBindBuffer ( GL_ELEMENT_ARRAY_BUFFER , 0 ) ;
/ / Delete VBOs from GPU ( VRAM )
glDeleteBuffers ( 1 , & linesBuffer [ 0 ] ) ;
glDeleteBuffers ( 1 , & linesBuffer [ 1 ] ) ;
glDeleteBuffers ( 1 , & trianglesBuffer [ 0 ] ) ;
glDeleteBuffers ( 1 , & trianglesBuffer [ 1 ] ) ;
glDeleteBuffers ( 1 , & quadsBuffer [ 0 ] ) ;
glDeleteBuffers ( 1 , & quadsBuffer [ 1 ] ) ;
glDeleteBuffers ( 1 , & quadsBuffer [ 2 ] ) ;
glDeleteBuffers ( 1 , & quadsBuffer [ 3 ] ) ;
glDeleteBuffers ( 1 , & lines. vboId [ 0 ] ) ;
glDeleteBuffers ( 1 , & lines. vboId [ 1 ] ) ;
glDeleteBuffers ( 1 , & triangles. vboId [ 0 ] ) ;
glDeleteBuffers ( 1 , & triangles. vboId [ 1 ] ) ;
glDeleteBuffers ( 1 , & quads. vboId [ 0 ] ) ;
glDeleteBuffers ( 1 , & quads. vboId [ 1 ] ) ;
glDeleteBuffers ( 1 , & quads. vboId [ 2 ] ) ;
glDeleteBuffers ( 1 , & quads. vboId [ 3 ] ) ;
if ( vaoSupported )
{
/ / Delete VAOs from GPU ( VRAM )
glDeleteVertexArrays ( 1 , & vaoLines ) ;
glDeleteVertexArrays ( 1 , & vaoTriangles ) ;
glDeleteVertexArrays ( 1 , & vaoQuads ) ;
glDeleteVertexArrays ( 1 , & lines . vaoId ) ;
glDeleteVertexArrays ( 1 , & triangles . vaoId ) ;
glDeleteVertexArrays ( 1 , & quads . vaoId ) ;
}
/ / Free vertex arrays memory from CPU ( RAM )