Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
pelya 2010-07-12 03:53:48 PDT
Browse files Browse the repository at this point in the history
In function GLES_RenderCopy() in SDL_renderer_gles.c:819 there is one memcpy()
that can be avoided if we're updating whole texture.
Because of that the SDL 1.3 in compatibility mode is working even slower than
software rendering in SDL 1.2.
  • Loading branch information
slouken committed Jul 14, 2010
1 parent 79747a7 commit 1a463bf
Showing 1 changed file with 13 additions and 8 deletions.
21 changes: 13 additions & 8 deletions src/video/SDL_renderer_gles.c
Expand Up @@ -822,20 +822,25 @@ GLES_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
maybe it'd be a good idea to keep a temp buffer around
for this purpose rather than allocating it each time
*/
temp_buffer = SDL_malloc(rect->w * rect->h * bpp);
temp_ptr = temp_buffer;
for (i = 0; i < rect->h; i++) {
SDL_memcpy(temp_ptr, pixels, rect->w * bpp);
temp_ptr += rect->w * bpp;
pixels += pitch;
if( rect->x == 0 && rect->w * bpp == pitch ) {
temp_buffer = pixels; /* Updating whole texture, no need to reformat */
} else {
temp_buffer = SDL_malloc(rect->w * rect->h * bpp);
temp_ptr = temp_buffer;
for (i = 0; i < rect->h; i++) {
SDL_memcpy(temp_ptr, pixels, rect->w * bpp);
temp_ptr += rect->w * bpp;
pixels += pitch;
}
}

data->glTexSubImage2D(texturedata->type, 0, rect->x, rect->y,
rect->w, rect->h, texturedata->format,
texturedata->formattype, temp_buffer);

SDL_free(temp_buffer);

if( temp_buffer != pixels ) {
SDL_free(temp_buffer);
}
}
SDL_ClearDirtyRects(&texturedata->dirty);
}
Expand Down

0 comments on commit 1a463bf

Please sign in to comment.