Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我在试图使用freeimage库保存opengl缓冲区时总是得到黑色图像?_C_Opengl_Freeimage - Fatal编程技术网

C 为什么我在试图使用freeimage库保存opengl缓冲区时总是得到黑色图像?

C 为什么我在试图使用freeimage库保存opengl缓冲区时总是得到黑色图像?,c,opengl,freeimage,C,Opengl,Freeimage,有没有人有使用freeimage库保存opengl缓冲区的经验 这是我的密码: void screenshot(const char *ptr){ GLint viewPort[4]; glGetIntegerv(GL_VIEWPORT, viewPort); GLubyte *pixels=new GLubyte[3*winWidth*winHeight]; glPixelStorei(GL_PACK_ALIGNMENT, 1); glReadPi

有没有人有使用freeimage库保存opengl缓冲区的经验

这是我的密码:

void screenshot(const char *ptr){
    GLint viewPort[4]; 
    glGetIntegerv(GL_VIEWPORT, viewPort);  
    GLubyte *pixels=new GLubyte[3*winWidth*winHeight];
    glPixelStorei(GL_PACK_ALIGNMENT, 1);
    glReadPixels(0, 0, viewPort[2],viewPort[3], GL_RGB, GL_UNSIGNED_BYTE, pixels);  
    FIBITMAP* image = FreeImage_ConvertFromRawBits(pixels,viewPort[2], viewPort[3],3*viewPort[2] 
    ,24,FI_RGBA_RED, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK,false);
    FreeImage_Save(FIF_BMP, image, ptr, 0);
    FreeImage_Unload(image);
    delete pixels;
}

为什么我总是得到黑色图像?

您没有设置从哪个缓冲区读取。如果要在缓冲区交换后拍摄屏幕截图,则必须从前缓冲区读取。如果要在交换缓冲区之前拍摄屏幕截图,请从后缓冲区读取。

您是否尝试过任何调试?在调用
glReadPixels
后,尝试检查
pixels
变量。确保您在绘制对象后调用此函数,而不是在
glClear
之后立即调用。是的,您是对的,这是出问题的地方,谢谢。但是我如何读取前缓冲区,只需在使用屏幕截图函数之前添加一个函数glreadbuffer(GL_front)?@XiaojunZhao:是的,您就是这样做的。