【问题标题】:Programmatically reset opengl以编程方式重置opengl
【发布时间】:2017-04-05 06:55:47
【问题描述】:

我正在使用一个使用 Opengl(处理)的库。我在不同的运行中遇到了关于图形矩阵深度的奇怪问题:

如果运行正确启动,则应用程序永远不会崩溃,否则我会在随机点收到关于矩阵深度(太多弹出或推送)的错误,然后许多后续运行必然会失败。

我检查了一下,我的 push 和 pops 正确配对,即使在我完成 push 之后,我也收到了太多 pop 之类的错误:

...

1 行代码

...

pop(弹出太多错误)

有没有办法以编程方式重置 opengl 的状态或无论如何管理矩阵深度问题?

【问题讨论】:

  • 这看起来像是一个不同的问题,被掩盖为不平衡矩阵堆栈的使用。因此,首先为您提出一些后续问题(以帮助定位问题):。你在使用多线程吗?你有不止一个 GL 上下文。您使用的是什么操作系统和 gfx 卡?您的应用程序中是否有任何内存或资源泄漏(AMD 驱动程序非常容易受到此类问题的影响)?每个矩阵的最大推送深度是多少?此外,最好尝试使用 GLIntercept 之类的 GL 调试器来检查 GL 调用
  • 确保您推送/弹出 same 矩阵堆栈。在旧版 OpenGL 中至少有 4 个矩阵堆栈:投影、模型视图、纹理和颜色(使用 glMatrixMode 切换),您必须平衡每个堆栈内的推送/弹出。
  • 我在同一个图形线程中使用所有(处理)opengl 函数,但我也有一些 awt 组件,所以是的。我使用的是 ge-force 580,AMD fx 6 内核。我最多使用 3-4 级嵌套变换矩阵。我从未使用过 gl 调试器,也没有直接使用过 opengl,我使用的是处理,因为它在我不详细了解的图形功能上放置了一层。 push/pop 应该是平衡的,处理矩阵应该是一个抽象(我认为)所以我不知道我到底在做什么低级操作。

标签: java eclipse opengl processing


【解决方案1】:

Processing 有一个您可以使用的resetMatrix()。更多信息请访问the reference

但是您所描述的内容听起来很可疑,因此您可能应该尝试找出您看到错误的原因,而不是仅仅解决它们。请张贴MCVE 说明问题。

【讨论】:

  • 重置矩阵将当前矩阵重置为正常的(1,1,1,1 diag)矩阵堆栈用于进行嵌套转换,例如旋转对象的平移...我不知道我是否可以对此进行 MCVE,问题本身就是应用程序在增长时缺乏健壮性。我有兴趣以某种方式平衡 opengl 状态。
  • @Yggdrasil 就像已经指出的那样,这听起来像是您的代码中的一个错误,特别是您正在推动和弹出矩阵失去平衡。
猜你喜欢
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 2011-03-26
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
相关资源
最近更新 更多