Fixed bug in GLES_UpdateTexture()
This commit is contained in:
@@ -590,13 +590,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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user