作者urganxx (Excelsior)
看板C_and_CPP
標題[問題] glReadPixels 前該如何更新framebuffer
時間Tue Aug 25 23:44:50 2015
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Mac OSX Qt
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
OpenGL
問題(Question):
讓畫面強制更新後 再用glReadPixels 可正確截到圖
但是否有辦法讓OpenGL自己去做更新呢?
餵入的資料(Input):
預期的正確結果(Expected Output):
每當用glReadPixels 都可得到當下螢幕的RGB截圖
錯誤結果(Wrong Output):
RGB截圖為全黑或全白
程式碼(Code):(請善用置底文網頁, 記得排版)
void paintGL()
{
makeCurrent();
QOpenGLContext *m_context = context()->currentContext();
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glEnable(GL_TEXTURE_2D);
glReadBuffer(GL_BACK);
glFlush();
m_context->swapBuffers(m_context->surface());
glReadPixels(0, 0, Width, Height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, pixels);
}
補充說明(Supplement):
快速的讀取主螢幕的RGB data
但不論glReadBuffer(GL_FRONT) or glReadBuffer(GL_BACK)
取出的都是glClearColor()的setting
但有試用過CGDisplayCreateImageForRect
讓畫面強制更新後 再用glReadPixels 即可正確截到圖
還請各位前輩提點 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.171.49.169
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1440517494.A.EE0.html
推 longlongint: swap buffer 跟 read 順序互換? 08/26 01:11
→ urganxx: 我試了兩天 似乎無法改變現狀呢.... 但還是謝謝 08/28 15:54
推 Bencrie: 你要不要乾脆畫到 FBO 然後 glGetTexImage2D 08/29 00:14