1
我試圖在openGL的畫面保存到使用this解釋文件,但圖像我收到無效: 在OpenGL創建截圖不工作
什麼可以一個原因?
我正在使用雙緩衝區的glfw,它已被報告在某些情況下出現問題。但是,使用glFlush()凍結了我的屏幕。 :/
可能發生這種情況,glReadPixels方法在執行緩衝區交換時調用?我實際上使用互斥體來防止這種情況發生。
在glfw中我需要一些技巧嗎?
下面是代碼以供參考:
glfwGetWindowSize(&mWidth, &mHeight);
glBufferLock.lock();
std::cout << "\nSaving screenshot (" << mWidth << ", " << mHeight << ")\n";
int n=3 * mWidth * mHeight;
GLubyte* pixels = new GLubyte[n];
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels(0,0,mWidth,mHeight, GL_RGB, GL_UNSIGNED_BYTE, pixels);
if (GL_NO_ERROR != glGetError()) throw "Error: Unable to read pixels.";
// Convert to FreeImage format & save to file
FIBITMAP* image = FreeImage_ConvertFromRawBits(pixels, mWidth, mHeight, 3 * mWidth, 24, 0xFF0000, 0x00FF00, 0x0000FF, false);
FreeImage_Save(FIF_BMP, image, "test.bmp", 0);
// Free resources
FreeImage_Unload(image);
delete [] pixels;
glBufferLock.unlock();
非常感謝你對任何提示!
Mutex?你不需要它,你有一個線程。請告訴我們這個截圖應該如何。什麼是原始圖像? – HolyBlackCat
在[mcve]中編輯。 – genpfault
你想截取一張圖片*你自己的*程序的渲染效果嗎,或者想把其他程序所畫的屏幕拍攝到外部窗口中嗎?如果後面的情況是這樣,不要試圖用OpenGL來做,因爲不可能(乾淨地)做。在Windows Vista之前,您可以通過利用Windows爲窗口分配幀緩衝區的方式來實現(在Windows平臺上)。但是這不再有效。 – datenwolf