minuitwrp: fix crash when taking a screenshot.

when "gr_mem_surface.format = GGL_PIXEL_FORMAT_RGBA_8888", "gl->recti" will be crash.
this is a simple fix.

Change-Id: I39da7298286f34cdf7eae98f6b082c36695b222e
This commit is contained in:
xiaolu
2015-05-23 12:11:09 +08:00
committed by Dees Troy
parent 9416f4f9d6
commit 26ffa869d0
+12 -6
View File
@@ -28,12 +28,12 @@ GGLSurface gr_mem_surface;
int gr_save_screenshot(const char *dest)
{
uint32_t y, stride_bytes;
int res = -1;
volatile int res = -1;
GGLContext *gl = NULL;
GGLSurface surface;
uint8_t * volatile img_data = NULL;
uint8_t *ptr;
FILE *fp = NULL;
FILE * volatile fp = NULL;
png_structp png_ptr = NULL;
png_infop info_ptr = NULL;
@@ -41,18 +41,21 @@ int gr_save_screenshot(const char *dest)
if(!fp)
goto exit;
img_data = malloc(vi.xres * vi.yres * 3);
img_data = malloc(gr_mem_surface.stride * vi.yres * 4);
surface.version = sizeof(surface);
surface.width = gr_mem_surface.width;
surface.height = gr_mem_surface.height;
surface.stride = gr_mem_surface.width;
surface.stride = gr_mem_surface.stride;
surface.data = img_data;
surface.format = GGL_PIXEL_FORMAT_RGB_888;
surface.format = GGL_PIXEL_FORMAT_RGBA_8888;
gglInit(&gl);
gl->colorBuffer(gl, &surface);
gl->activeTexture(gl, 0);
if(gr_mem_surface.format == GGL_PIXEL_FORMAT_RGBX_8888)
gl->disable(gl, GGL_BLEND);
gl->bindTexture(gl, &gr_mem_surface);
gl->texEnvi(gl, GGL_TEXTURE_ENV, GGL_TEXTURE_ENV_MODE, GGL_REPLACE);
gl->texGeni(gl, GGL_S, GGL_TEXTURE_GEN_MODE, GGL_ONE_TO_ONE);
@@ -81,8 +84,11 @@ int gr_save_screenshot(const char *dest)
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
png_write_info(png_ptr, info_ptr);
// To remove the alpha channel for PNG_COLOR_TYPE_RGB format,
png_set_filler(png_ptr, 0, PNG_FILLER_AFTER);
ptr = img_data;
stride_bytes = surface.width*3;
stride_bytes = surface.stride*4;
for(y = 0; y < surface.height; ++y)
{
png_write_row(png_ptr, ptr);