Instead of calling memcpy() 'n' times, we can do it all at once since the source and dest regions are all contiguous. Reviewed-by: Matt Turner <mattst88@gmail.com>tags/11.1-branchpoint
static void | static void | ||||
vbo_exec_vtx_wrap(struct vbo_exec_context *exec) | vbo_exec_vtx_wrap(struct vbo_exec_context *exec) | ||||
{ | { | ||||
fi_type *data = exec->vtx.copied.buffer; | |||||
GLuint i; | |||||
unsigned numComponents; | |||||
/* Run pipeline on current vertices, copy wrapped vertices | /* Run pipeline on current vertices, copy wrapped vertices | ||||
* to exec->vtx.copied. | * to exec->vtx.copied. | ||||
*/ | */ | ||||
assert(exec->vtx.max_vert - exec->vtx.vert_count > exec->vtx.copied.nr); | assert(exec->vtx.max_vert - exec->vtx.vert_count > exec->vtx.copied.nr); | ||||
for (i = 0 ; i < exec->vtx.copied.nr ; i++) { | |||||
memcpy( exec->vtx.buffer_ptr, data, | |||||
exec->vtx.vertex_size * sizeof(GLfloat)); | |||||
exec->vtx.buffer_ptr += exec->vtx.vertex_size; | |||||
data += exec->vtx.vertex_size; | |||||
exec->vtx.vert_count++; | |||||
} | |||||
numComponents = exec->vtx.copied.nr * exec->vtx.vertex_size; | |||||
memcpy(exec->vtx.buffer_ptr, | |||||
exec->vtx.copied.buffer, | |||||
numComponents * sizeof(fi_type)); | |||||
exec->vtx.buffer_ptr += numComponents; | |||||
exec->vtx.vert_count += exec->vtx.copied.nr; | |||||
exec->vtx.copied.nr = 0; | exec->vtx.copied.nr = 0; | ||||
} | } |
_save_wrap_filled_vertex(struct gl_context *ctx) | _save_wrap_filled_vertex(struct gl_context *ctx) | ||||
{ | { | ||||
struct vbo_save_context *save = &vbo_context(ctx)->save; | struct vbo_save_context *save = &vbo_context(ctx)->save; | ||||
fi_type *data = save->copied.buffer; | |||||
GLuint i; | |||||
unsigned numComponents; | |||||
/* Emit a glEnd to close off the last vertex list. | /* Emit a glEnd to close off the last vertex list. | ||||
*/ | */ | ||||
*/ | */ | ||||
assert(save->max_vert - save->vert_count > save->copied.nr); | assert(save->max_vert - save->vert_count > save->copied.nr); | ||||
for (i = 0; i < save->copied.nr; i++) { | |||||
memcpy(save->buffer_ptr, data, save->vertex_size * sizeof(GLfloat)); | |||||
data += save->vertex_size; | |||||
save->buffer_ptr += save->vertex_size; | |||||
save->vert_count++; | |||||
} | |||||
numComponents = save->copied.nr * save->vertex_size; | |||||
memcpy(save->buffer_ptr, | |||||
save->copied.buffer, | |||||
numComponents * sizeof(fi_type)); | |||||
save->buffer_ptr += numComponents; | |||||
save->vert_count += save->copied.nr; | |||||
} | } | ||||