Commit 92b3d10a authored by Sam Lantinga's avatar Sam Lantinga

Fixed bug #1028

pelya      2010-07-21 04:54:41 PDT

GLES_UpdateTexture() ignores pitch value, because of that some textures created
with SDL_CreateTextureFromSurface() are drawn incorrectly, especially if image
width is not multiplier of 2.
parent 7a1c6519
...@@ -557,13 +557,36 @@ GLES_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, ...@@ -557,13 +557,36 @@ GLES_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
GLES_RenderData *renderdata = (GLES_RenderData *) renderer->driverdata; GLES_RenderData *renderdata = (GLES_RenderData *) renderer->driverdata;
GLES_TextureData *data = (GLES_TextureData *) texture->driverdata; GLES_TextureData *data = (GLES_TextureData *) texture->driverdata;
GLenum result; GLenum result;
int bpp = SDL_BYTESPERPIXEL(texture->format);
void * temp_buffer;
void * temp_ptr;
int i;
renderdata->glGetError(); renderdata->glGetError();
renderdata->glEnable(data->type); renderdata->glEnable(data->type);
SetupTextureUpdate(renderdata, texture, pitch); SetupTextureUpdate(renderdata, texture, pitch);
if( rect->w * bpp == pitch ) {
temp_buffer = (void *)pixels; /* No need to reformat */
} else {
/* Reformatting of mem area required */
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;
}
}
renderdata->glTexSubImage2D(data->type, 0, rect->x, rect->y, rect->w, renderdata->glTexSubImage2D(data->type, 0, rect->x, rect->y, rect->w,
rect->h, data->format, data->formattype, rect->h, data->format, data->formattype,
pixels); temp_buffer);
if( temp_buffer != pixels ) {
SDL_free(temp_buffer);
}
renderdata->glDisable(data->type); renderdata->glDisable(data->type);
result = renderdata->glGetError(); result = renderdata->glGetError();
if (result != GL_NO_ERROR) { if (result != GL_NO_ERROR) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment