我知道要保存/恢复矩阵状态,您可以使用标准的推/弹操作。我无法找到保存/恢复状态的合适约定,例如使用glLineWidth()或glColor4ub()时。
似乎没有必要,只要你想要绘制任何东西就可以正确设置线宽或颜色,但我可以看到你在自己的绘图函数中的位置示例,调用一些单独的绘图函数来改变在你不知情的情况下你的线宽,然后当你继续绘画时它的出现并不像预期的那样。
要解决这个问题,你可以在调用任何你不知道它的功能之后重置你的线宽,但这看起来不那么优雅,而且我觉得应该有一个解决方案,但我已经错过了不知。
对于我自己的代码,我一直在每个绘图函数的开头做这个:
GLfloat savedLineWidth = 1.0f;
glGetFloatv(GL_LINE_WIDTH, &savedLineWidth);
glLineWidth(lineWidth);
然后在绘图函数结束时恢复状态,如下所示:
glLineWidth(savedLineWidth);
这并不能帮助我,除非我假设每个我不了解内部的绘图功能都很好并且自己恢复状态。
我应该做出这个假设吗?或者我错过了什么?
答案 0 :(得分:2)
如果这是普通的OpenGL(不是ES变体),那么你可以推送属性,如:
glPushAttrib(GL_LINE_WIDTH);
glLineWidth(2.0f);
... etc ...
glPopAttrib();
唉,在OpenGL ES中,这是不可用的。获取和设置的方法与您将获得的一样好。
尝试减少获取次数,因为这是一个非常耗时的过程。与发送不同,获取不是缓冲的。
也许你的方法应该是不要担心。无论何时想要设置线宽,只需设置它即可。线宽不应该影响太多。
艰难的电话。取决于这些其他绘图功能是什么。你有代码吗?也许你可以看看?