SDL OpenGL屏幕截图为黑色
我在SDL库的帮助下创建了一个opengl窗口的屏幕截图,但它全是黑色的,我不明白为什么。如何修复它 代码:SDL OpenGL屏幕截图为黑色,opengl,screenshot,sdl,glreadpixels,Opengl,Screenshot,Sdl,Glreadpixels,我在SDL库的帮助下创建了一个opengl窗口的屏幕截图,但它全是黑色的,我不明白为什么。如何修复它 代码: 我已经看到,您已经找到了删除glReadBuffer调用的方法,对于垂直翻转,您可以从以下位置获取函数: SDL_表面*flipVert(SDL_表面*sfc) { SDL_曲面*结果=SDL_CreateRGB曲面(sfc.flags、sfc.w、sfc.h、, sfc.format.bytesperpoixel*8,sfc.format.Rmask,sfc.format.Gmask,
我已经看到,您已经找到了删除glReadBuffer调用的方法,对于垂直翻转,您可以从以下位置获取函数:
SDL_表面*flipVert(SDL_表面*sfc)
{
SDL_曲面*结果=SDL_CreateRGB曲面(sfc.flags、sfc.w、sfc.h、,
sfc.format.bytesperpoixel*8,sfc.format.Rmask,sfc.format.Gmask,
sfc.format.Bmask、sfc.format.Amask);
ubyte*像素=强制转换(ubyte*)sfc.pixels;
ubyte*rpixels=强制转换(ubyte*)结果像素;
uint节距=sfc节距;
uint pxlength=节距*sfc.h;
断言(结果!=null);
对于(uint行=0;行
我发现,需要删除glReadBuffer(GLU前端)。。。但现在屏幕截图是颠倒的OpenGL将图像的原点放在左下角(请参见),而大多数图像文件格式都将其放在左上角。您必须自己翻转它,或者使用支持两种来源的图像文件格式;PNG文件格式支持这一点,但我不知道如何告诉SDL在PNG中指定原点。我希望这对您来说没问题,但我已经在一些示例代码中包含了您的代码。一切正常,关心就是共享:)
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);
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;
}