2017-02-16 61 views
2

我正在嘗試將OpenGL項目修改爲OpenGL ES 1.x.但有一個函數調用我找不到任何解決方案來替換它。如何在OpenGL ES 1.x中實現glPushAttrib(GL_CURRENT_BIT)

glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT | GL_COLOR_BUFFER_BIT | GL_ENABLE_BIT); 

我在OpenGL ES 1.x中找不到GL_CURRENT_BIT掩碼和glPushAttrib函數。

簡單地說,我只是從glPushAttrib參數中刪除了GL_CURRENT_BIT掩碼,並且應用程序在窗口上顯示了錯誤的背景(我在OpenGL環境下測試了它,背景是texutre)。有沒有什麼解決方案來替換glPushAttrib(GL_CURRENT_BIT),並讓我在OpenGL上正確運行應用程序,或者是否有解決方案來實現glPushAttrib(GL_CURRENT_BIT),我可以在OpenGL和OpenGL ES上正確運行?謝謝!

回答

1

glPushAttrib在OpenGL ES中不存在。將GL_CLIENT_PIXEL_STORE_BIT作爲輸入的函數實際上是glPushClientAttrib,它也不存在(因此常數也不存在)。

這些功能基本上是存儲可以使用glPixelStorei函數設置的所有狀態。這可以手動實現,通過記錄設置的這些狀態,並使用glPixelStorei的等效調用來恢復它們。參見here(item#8)進行討論(關於OpenGL,適用於OpenGL ES,因爲它沒有glPush/PopClientAttrib)。

+0

感謝您的回答。對不起,我寫了一個錯誤的常量。我真正想問的是GL_CURRENT_BIT。有沒有什麼解決方案來取代glPushAttrib(GL_CURRENT_BIT)? –

+0

相同的解決方案適用於您修改的問題,但狀態不同。如果您轉到「glPushAttrib」的鏈接,則會有一個表格指示它保存的是什麼狀態。在GLES中,您只需要記錄這些設置(在您的代碼中)並再次設置它們以獲得相同的功能。 – MuertoExcobito

+0

謝謝,我解決了這個問題。我找到一個名爲glues的開源項目。它實現了glPushAttrib函數。再次感謝。 –

相關問題