我知道要保存/恢复矩阵状态,您需要使用标准的推送/弹出操作。我还没有找到一个像样的保存/恢复状态的约定,例如在使用 glLineWidth() 或 glColor4ub() 时。
只要您在想要绘制任何东西时正确设置线宽或颜色,这似乎并不是必需的,但我可以看到您在自己的绘图函数中的位置的示例,调用一些单独的绘图函数来更改线宽你在你不知情的情况下,然后当你继续画的时候,它却不像预期的那样出来。
要解决这个问题,您可以在调用任何您不知道它做什么但似乎不优雅的函数后重置您的线宽,我觉得应该已经有一个解决方案,但我以某种方式错过了它。
对于我自己的代码,我在每个绘图函数的开头都这样做:
GLfloat savedLineWidth = 1.0f;
glGetFloatv(GL_LINE_WIDTH, &savedLineWidth);
glLineWidth(lineWidth);
然后在绘图函数结束时恢复状态,如下所示:
glLineWidth(savedLineWidth);
除非我假设我不知道其内部的每个绘图功能都很好并且可以自行恢复状态,否则这并没有真正帮助我。
我应该做这个假设吗?还是我错过了什么?