2017-02-16 154 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函数。再次感谢。 –