2010-08-18 146 views
2

我知道要使用标准的push/pop操作来保存/恢复矩阵状态。我一直无法找到像使用glLineWidth()或glColor4ub()时一样的保存/恢复状态的惯例。保存/恢复OpenGL ES状态的正确方法

只要您在任何时候想要绘制任何东西但您可以在自己的绘图函数中看到自己的位置的示例,就可以正确地设置线宽或颜色,就可以调用一些单独的绘图函数在你不知情的情况下你的线条宽度,然后当你继续绘画的时候,它不会像预期的那样出现。

为了解决这个问题,您可以在调用任何你不知道它做什么但看起来不雅的函数之后重置你的线宽,我觉得应该已经有一个解决方案,但是我错过了它以某种方式。

对于我自己的代码,我在每一个绘图函数的开始一直在做这样的:

GLfloat savedLineWidth = 1.0f; 
glGetFloatv(GL_LINE_WIDTH, &savedLineWidth); 
glLineWidth(lineWidth); 

,然后在绘图函数结束时恢复状态,像这样:

glLineWidth(savedLineWidth); 

这并不能真正帮助我,尽管除非我认为每个绘图函数我都不知道它的内部是好的,并且可以自行恢复状态。

我应该做出这样的假设吗?或者我错过了什么?

回答

1

如果这是普通的OpenGL(未ES变体),那么你可以像推属性:

glPushAttrib(GL_LINE_WIDTH); 
glLineWidth(2.0f); 
... etc ... 
glPopAttrib(); 

唉,在OpenGL ES,这是不可用。您获取和设置的方法与您将获得的一样好。

只是尝试减少您获得的次数,因为这是一个非常耗时的过程。与发送不同,获取不被缓冲。

也许你的方法应该是不用担心。无论何时你想设置线宽,只需设置它。线宽不应该太多影响。

艰难的召唤。取决于这些其他绘图功能是什么。你有代码吗?也许你可以看看?

+0

这很酷。我不知道glPushAttrib()和glPopAttrib()在OpenGL的非ES变体中可用。我也没有考虑堵塞巴士的请求。 是的,我确实有代码。这只是我现在摆弄的一些绘图代码,以尝试学习OpenGL ES。在我制定任何不良习惯之前,我只是寻找一些指导。 – djdrzzy 2010-08-19 15:35:35