2

我知道要保存/恢复矩阵状态,您需要使用标准的推送/弹出操作。我还没有找到一个像样的保存/恢复状态的约定,例如在使用 glLineWidth() 或 glColor4ub() 时。

只要您在想要绘制任何东西时正确设置线宽或颜色,这似乎并不是必需的,但我可以看到您在自己的绘图函数中的位置的示例,调用一些单独的绘图函数来更改线宽你在你不知情的情况下,然后当你继续画的时候,它却不像预期的那样出来。

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

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

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

然后在绘图函数结束时恢复状态,如下所示:

glLineWidth(savedLineWidth);

除非我假设我不知道其内部的每个绘图功能都很好并且可以自行恢复状态,否则这并没有真正帮助我。

我应该做这个假设吗?还是我错过了什么?

4

1 回答 1

2

如果这是普通的 OpenGL(不是 ES 变体),那么您可以像这样推送属性:

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

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

尽量减少获取的次数,因为这是一个非常耗时的过程。与发送不同,获取没有缓冲。

也许你的方法应该是不要担心。每当您想设置线宽时,只需设置它即可。线宽不应该影响太大。

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

于 2010-08-19T04:28:11.640 回答