From 8977968b6d9b53c41723fb68944be86bbe45e748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Higor=20Eur=C3=ADpedes?= Date: Thu, 10 Nov 2016 21:19:50 -0300 Subject: [PATCH] (shader_glsl.c) Don't allocate/clear more than needed in gl_glsl_set_coords() --- gfx/drivers_shader/shader_glsl.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/gfx/drivers_shader/shader_glsl.c b/gfx/drivers_shader/shader_glsl.c index 27704eb688..5e3be0c109 100644 --- a/gfx/drivers_shader/shader_glsl.c +++ b/gfx/drivers_shader/shader_glsl.c @@ -1354,17 +1354,26 @@ static bool gl_glsl_set_coords(void *handle_data, void *shader_data, const struc if (!glsl || !glsl->shader->modern || !coords) goto fallback; + attr = attribs; + uni = &glsl->uniforms[glsl->active_idx]; + buffer = short_buffer; if (coords->vertices > 4) - buffer = (GLfloat*)calloc(coords->vertices * - (2 + 2 + 4 + 2), sizeof(*buffer)); + { + size_t elems = 0; + elems += (uni->color >= 0) * 4; + elems += (uni->tex_coord >= 0) * 2; + elems += (uni->vertex_coord >= 0) * 2; + elems += (uni->lut_tex_coord >= 0) * 2; + + elems *= coords->vertices * sizeof(GLfloat); + + buffer = (GLfloat*)malloc(elems); + } if (!buffer) goto fallback; - attr = attribs; - uni = &glsl->uniforms[glsl->active_idx]; - if (uni->tex_coord >= 0) gl_glsl_set_coord_array(attr, uni->tex_coord, coords->tex_coord, coords, size, 2);