2013-03-14 76 views
0

經過一個多小時的尋找答案(嘗試Munshi的「OpenGL ES 2.0編程指南」中的東西,搜索Apple的文檔,搜索StackOverflow),我仍然無法讓glReadPixels工作。我嘗試了很多不同的方式,而我得到的最好的結果是波動的(因此是錯誤的)結果。解釋glReadPixels()

我已經設置了一個簡單的情況,使用着色器渲染到屏幕上,我手動將gl_FragColor分配給純紅色,所以屏幕上應該沒有任何波動。然後,我嘗試類似下面的代碼之前presentRenderbuffer:

GLubyte *pixels = (GLubyte *)malloc(3); 

glReadPixels(100, 100, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixels); 

NSLog(@"%d", (int)pixels[0]); 

free(pixels); 

基本上,試圖閱讀(100,100)的單個像素讀它的紅色值,這是我希望是1或255相反我獲得了像1522775,3587和65536這樣的值,但屏幕上的圖像始終不變。我在Mac上做了這樣的事情,它運行良好,但出於某種原因,我無法在iOS上使用它。在撥打glDrawArrays()之後和撥打presentBuffer:之前,我有上面的說明(並嘗試了一些我在互聯網上遇到的變化)。我甚至嘗試了通過查詢glGetIntegerv()獲取幀緩衝區信息來處理所有讀取類型和讀取格式的「OpenGL ES 2.0編程指南」中的方法。

任何想法?我相信有人會說,「使用搜索功能」,但我認真幹起來,無法進一步。謝謝你的幫助!

回答

1

從OpenGL ES的手冊:

只有兩個格式/類型參數對被接受。總是接受GL_RGBA/GL_UNSIGNED_BYTE,並且可以通過查詢GL_IMPLEMENTATION_COLOR_READ_FORMAT和GL_IMPLEMENTATION_COLOR_READ_TYPE來發現其他可接受的對。

所以,你最好使用GL_RGBA而不是GL_RGB。

+0

沒辦法!我以前認真地嘗試過,並沒有奏效。突然它有效。我完全不知道我現在做什麼(哪些工作)與我之前做的不同(當我嘗試GL_RGBA時)。但是,謝謝! – Mike 2013-03-14 09:40:36

+0

@Mike,我無法在iOS上使用GL_RGB。你能分享你的代碼嗎? – grisevg 2016-12-06 23:37:28