(另外,OpenGL ES 2没有转换管理功能,所以在某些情况下你别无选择.)
更重要的是,我发现通过OpenGL的内置矩阵堆栈管理矩阵有时是一种真正的痛苦,迫使我在渲染代码的更复杂部分中大量推送和弹出,甚至有时重新排序渲染简化堆栈管理.我还编写了一个C++ pusher-popper类,它使用RAII自动管理所有这些,但它需要仔细确定局部变量.
当我切换到ES 2时,我很沮丧地得知所有功能都消失了.然而,我发现切换到我自己的矩阵实际上简化了我的代码,因为我可以使用局部变量和成员变量(具有有意义的名称)的组合来处理多个变换而不会在空间中丢失,并且变换栈主要通过使用来替换调用堆栈 - 即,当前变换是一个正常的局部矩阵变量,它作为父变换参数传递给下一个函数 - 但可以灵活地在其他时间以不同方式执行.