【问题标题】:Textures not drawing if multiple EAGLViews are used如果使用多个 EAGLView,则不绘制纹理
【发布时间】:2012-01-03 00:36:46
【问题描述】:

Apple 的 EAGLView 和 Texture2D 有点问题。如果我创建一个 EAGLView 实例并绘制一些纹理,它会很好用。但是,每当我创建 EAGLView 的第二个实例时,都不会绘制新视图中的纹理。
作为 OpenGL 的新手,我现在完全知道是什么导致了这种行为。如果有人愿意提供帮助,我创建了一个重现该行为的小项目。该项目可以在http://www.cocoabeans.se/OpenGLESBug.zip找到。

非常感谢,
蒂姆·安德森

更新
我尝试使用共享组,但我不确定我是否正确使用它们。但是,它确实稍微改变了行为;现在,它不再只在第一个实例化视图中绘制纹理,而是在 last 实例化视图中绘制纹理,并在其他视图中绘制白色矩形。我不知道这是好是坏,但至少 一些东西现在出现在其他视图中。
这让我发疯,如果有人能帮助我解决这个问题,我将不胜感激。我已在 http://www.cocoabeans.se/OpenGLESBug.zip 更新了项目以反映更改。

干杯,
蒂姆

第二次更新
在尝试了更多事情之后,问题似乎与 Apple 的 Texture2D 类有关,但我不确定究竟是什么导致了这种行为。我认为最好的办法是编写自己的纹理类(它将帮助我了解 OpenGL 如何处理纹理,这可能会派上用场)。

【问题讨论】:

  • 我在使用 Apple 的 Texture2D 类时遇到了同样的问题

标签: iphone objective-c opengl-es texture2d eaglview


【解决方案1】:

(尚未下载您的代码。)

如果您只使用两个 EAGLView,则 OpenGL 绘图上下文会有所不同(该基类中的代码创建并拥有 GL 上下文以及渲染/帧/深度缓冲区)。如果您在一个上下文中生成/绑定某些纹理,则它们在另一个上下文中将不可用。如果您喜欢使用共享组,可以共享上下文(有关更多信息,请参阅此问题:How to use OpenGL ES on a separate thread on iphone?)。或者在两个地方定义纹理(如果很小),等等。

【讨论】:

  • 创建帧缓冲区后,我在 EAGLView 的 initWithCoder: 中创建纹理。这是否意味着纹理应该绑定到两个不同的上下文?这就是你在两个地方创建纹理的意思吗?干杯,蒂姆
猜你喜欢
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多