src/video/SDL_renderer_gl.c
changeset 3447 294b770c1989
parent 3446 0f969d273f65
child 3454 77366fae0094
equal deleted inserted replaced
3446:0f969d273f65 3447:294b770c1989
  1255 static int
  1255 static int
  1256 GL_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect,
  1256 GL_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect,
  1257                     Uint32 pixel_format, void * pixels, int pitch)
  1257                     Uint32 pixel_format, void * pixels, int pitch)
  1258 {
  1258 {
  1259     GL_RenderData *data = (GL_RenderData *) renderer->driverdata;
  1259     GL_RenderData *data = (GL_RenderData *) renderer->driverdata;
       
  1260     SDL_Window *window = SDL_GetWindowFromID(renderer->window);
  1260     GLint internalFormat;
  1261     GLint internalFormat;
  1261     GLenum format, type;
  1262     GLenum format, type;
  1262     Uint8 *src, *dst, *tmp;
  1263     Uint8 *src, *dst, *tmp;
  1263     int length, rows;
  1264     int length, rows;
  1264 
  1265 
  1274         data->glPixelStorei(GL_PACK_LSB_FIRST, 0);
  1275         data->glPixelStorei(GL_PACK_LSB_FIRST, 0);
  1275     }
  1276     }
  1276     data->glPixelStorei(GL_PACK_ALIGNMENT, 1);
  1277     data->glPixelStorei(GL_PACK_ALIGNMENT, 1);
  1277     data->glPixelStorei(GL_PACK_ROW_LENGTH,
  1278     data->glPixelStorei(GL_PACK_ROW_LENGTH,
  1278                         (pitch / bytes_per_pixel(pixel_format)));
  1279                         (pitch / bytes_per_pixel(pixel_format)));
  1279     data->glReadBuffer(GL_FRONT);
  1280 
  1280 
  1281     data->glReadPixels(rect->x, (window->h-rect->y)-rect->h, rect->w, rect->h,
  1281 memset(pixels, 0xff, rect->h*pitch);
       
  1282     data->glReadPixels(rect->x, rect->y+rect->h-1, rect->w, rect->h,
       
  1283                        format, type, pixels);
  1282                        format, type, pixels);
  1284 
  1283 
  1285 #if 0
       
  1286     /* Flip the rows to be top-down */
  1284     /* Flip the rows to be top-down */
  1287     length = rect->w * bytes_per_pixel(pixel_format);
  1285     length = rect->w * bytes_per_pixel(pixel_format);
  1288     src = (Uint8*)pixels + (rect->h-1)*pitch;
  1286     src = (Uint8*)pixels + (rect->h-1)*pitch;
  1289     dst = (Uint8*)pixels;
  1287     dst = (Uint8*)pixels;
  1290     tmp = SDL_stack_alloc(Uint8, length);
  1288     tmp = SDL_stack_alloc(Uint8, length);
  1291     rows = rect->h / 2;
  1289     rows = rect->h / 2;
  1292     while (rows--) {
  1290     while (rows--) {
  1293         SDL_memcpy(tmp, dst, length);
  1291         SDL_memcpy(tmp, dst, length);
  1294         SDL_memcpy(dst, src, length);
  1292         SDL_memcpy(dst, src, length);
  1295         SDL_memcpy(src, tmp, length);
  1293         SDL_memcpy(src, tmp, length);
       
  1294         dst += pitch;
       
  1295         src -= pitch;
  1296     }
  1296     }
  1297     SDL_stack_free(tmp);
  1297     SDL_stack_free(tmp);
  1298 #endif
       
  1299 
  1298 
  1300     return 0;
  1299     return 0;
  1301 }
  1300 }
  1302 
  1301 
  1303 static int
  1302 static int