SDL OpenGL скриншот черный - PullRequest
0 голосов
/ 03 мая 2011

Я создаю скриншот моего окна opengl с помощью библиотеки SDL, но все было черным, и я не понимаю, почему. Как это исправить?

Код:

SDL_Surface * image = SDL_CreateRGBSurface(SDL_SWSURFACE, current_w, current_h, 24, 0x000000FF, 0x0000FF00, 0x00FF0000, 0);

glReadBuffer(GL_FRONT);
glReadPixels(0, 0, current_w, current_h, GL_RGB, GL_UNSIGNED_BYTE, image->pixels);

SDL_SaveBMP(image, "pic.bmp");
SDL_FreeSurface(image);

1 Ответ

2 голосов
/ 03 мая 2011

Я видел, что вы нашли удаление вызова glReadBuffer, и для вертикального переворота вы можете взять здесь функцию из http://lists.libsdl.org/pipermail/sdl-libsdl.org/2005-January/047965.html:

SDL_Surface* flipVert(SDL_Surface* sfc)
{
     SDL_Surface* result = SDL_CreateRGBSurface(sfc.flags, sfc.w, sfc.h,
         sfc.format.BytesPerPixel * 8, sfc.format.Rmask, sfc.format.Gmask,
         sfc.format.Bmask, sfc.format.Amask);
     ubyte* pixels = cast(ubyte*) sfc.pixels;
     ubyte* rpixels = cast(ubyte*) result.pixels;
     uint pitch = sfc.pitch;
     uint pxlength = pitch*sfc.h;
     assert(result != null);

     for(uint line = 0; line < sfc.h; ++line) {
         uint pos = line * pitch;
         rpixels[pos..pos+pitch] = 
             pixels[(pxlength-pos)-pitch..pxlength-pos];
     }

     return result;
}
...