diff --git a/GL/flush.c b/GL/flush.c index 1fa552c..74a1f04 100644 --- a/GL/flush.c +++ b/GL/flush.c @@ -78,7 +78,10 @@ void APIENTRY glFinish() { void APIENTRY glKosInitConfig(GLdcConfig* config) { config->autosort_enabled = GL_FALSE; - config->initial_vbuf_capacity = 1024; + config->initial_op_capacity = 1024; + config->initial_pt_capacity = 512; + config->initial_tr_capacity = 1024; + config->initial_immediate_capacity = 1024; config->internal_palette_format = GL_RGBA4; } @@ -91,7 +94,7 @@ void APIENTRY glKosInitEx(GLdcConfig* config) { _glInitAttributePointers(); _glInitContext(); _glInitLights(); - _glInitImmediateMode(); + _glInitImmediateMode(config->initial_immediate_capacity); _glInitFramebuffers(); _glSetInternalPaletteFormat(config->internal_palette_format); @@ -106,9 +109,9 @@ void APIENTRY glKosInitEx(GLdcConfig* config) { aligned_vector_init(&PT_LIST.vector, sizeof(ClipVertex)); aligned_vector_init(&TR_LIST.vector, sizeof(ClipVertex)); - aligned_vector_reserve(&OP_LIST.vector, config->initial_vbuf_capacity); - aligned_vector_reserve(&PT_LIST.vector, config->initial_vbuf_capacity); - aligned_vector_reserve(&TR_LIST.vector, config->initial_vbuf_capacity); + aligned_vector_reserve(&OP_LIST.vector, config->initial_op_capacity); + aligned_vector_reserve(&PT_LIST.vector, config->initial_pt_capacity); + aligned_vector_reserve(&TR_LIST.vector, config->initial_tr_capacity); } void APIENTRY glKosInit() { diff --git a/GL/immediate.c b/GL/immediate.c index b45e79f..3bbc9d1 100644 --- a/GL/immediate.c +++ b/GL/immediate.c @@ -28,12 +28,18 @@ static GLfloat UV_COORD[2] = {0.0f, 0.0f}; static GLfloat ST_COORD[2] = {0.0f, 0.0f}; -void _glInitImmediateMode() { +void _glInitImmediateMode(GLuint initial_size) { aligned_vector_init(&VERTICES, sizeof(GLfloat)); aligned_vector_init(&COLOURS, sizeof(GLfloat)); aligned_vector_init(&UV_COORDS, sizeof(GLfloat)); aligned_vector_init(&ST_COORDS, sizeof(GLfloat)); aligned_vector_init(&NORMALS, sizeof(GLfloat)); + + aligned_vector_reserve(&VERTICES, initial_size); + aligned_vector_reserve(&COLOURS, initial_size); + aligned_vector_reserve(&UV_COORDS, initial_size); + aligned_vector_reserve(&ST_COORDS, initial_size); + aligned_vector_reserve(&NORMALS, initial_size); } GLubyte _glCheckImmediateModeInactive(const char* func) { diff --git a/GL/private.h b/GL/private.h index ebdb9b4..bdb6038 100644 --- a/GL/private.h +++ b/GL/private.h @@ -104,7 +104,7 @@ PolyList *_glTransparentPolyList(); void _glInitAttributePointers(); void _glInitContext(); void _glInitLights(); -void _glInitImmediateMode(); +void _glInitImmediateMode(GLuint initial_size); void _glInitMatrices(); void _glInitFramebuffers(); diff --git a/include/glkos.h b/include/glkos.h index ba2b323..34435bd 100644 --- a/include/glkos.h +++ b/include/glkos.h @@ -46,7 +46,10 @@ typedef struct { GLenum internal_palette_format; /* Initial capacity of each of the OP, TR and PT lists in vertices */ - GLuint initial_vbuf_capacity; + GLuint initial_op_capacity; + GLuint initial_tr_capacity; + GLuint initial_pt_capacity; + GLuint initial_immediate_capacity; } GLdcConfig;