1

我正在分析我的 iOS 和 Android 应用程序,并意识到每帧有很多冗余的 glVertexAttribPointer 调用。我想出了一个缓存这些状态的策略,并且只在需要时调用该方法。

我认为只有在发生以下情况时才需要调用 glVertexAttribPointer:

  • 该属性尚未设置
  • 绑定了新的着色器(可能使属性位置无效)
  • 顶点声明更改(可能使偏移量或类型无效)

不出所料,在测试后没有多余的 glVertexAttribPointer 调用。但是,我的逻辑一定存在缺陷,因为渲染不再正常工作。我认为我的缓存策略太热心了,我没有像我应该的那样频繁地重新调用 glVertexAttribPointer。然后我尝试在我们的材质更改时(即渲染状态更改时)使缓存无效。这修复了渲染,但返回了冗余调用(尽管比以前少)。

我的初始缓存策略是否在正确的轨道上,任何人都可以帮助我确定缓存应该失效的其他情况吗?

4

0 回答 0