2011-09-01 72 views
0

我想使用OpenGL绘制视图,这是另一个视图的子视图。我为此创建了一个视图类,如果我在简单的测试应用程序中使用这个类,它就可以正常工作。但是,如果我在该应用的特定页面上放置此类的实例,则OpenGL绘画不会显示任何内容。我确信该视图是可见的(我可以设置背景颜色,并显示该视图,并且我可以接收触摸事件)。我也可以通过OpenGL初始化和绘制例程来追踪,并且一切看起来都很好。我的paint例程被调用,并且经常调用glGetError,并且不返回任何错误。我可以比较例行程序和案例的运作情况,而且一切看起来都差不多,但没有任何绘画(我甚至只是尝试着什么都不做,只是把窗口清理成黑色,但是也没有任何效果)。OpenGL iOS视图不绘制

无法运行的应用程序的代码很复杂,无法在此处发布。我认为我做错了什么,但对于我的生活,我无法弄清楚什么。任何人都可以给我任何想法,说明为什么OpenGL绘画看起来会成功并且没有绘制任何东西,或者提出一个解决这个问题的策略?

谢谢。

回答

0

OpenGL和外部世界之间的链接是平台特定的,而不是核心API的一部分。所以有一个问题不会影响glGetError的结果。

在iOS的情况下,相关调用为EAGLContext -presentRenderbuffer:,如果您已使用renderbufferStorage:fromDrawable:CAEAGLLayer创建渲染缓冲区的存储,则该工作将起作用。您可能想要检查presentRenderbuffer:的返回结果以及围绕该结果的代码,以查找错误而不是内部GL状态。

+0

谢谢你看看它。我使用renderbufferStorage:fromDrawable来创建存储,并且对presentRenderbuffer的调用返回'YES'。正如我所说,这个确切的类在其他地方起作用,所以我在这个引起问题的特定视图上做了些什么,但我无法理解它是什么。 –

+0

在这种情况下,您有可能使用了一个UIView子类,它隐式地为每个视图创建一个全新的EAGLContext,然后一直没有注意到您正在创建资源的上下文?如果他们不在共享组中,则资源不可移植。 – Tommy

+0

我遇到过类似的问题。 git hub的SignatureView库在演示项目中使用,但不适用于我的演示项目。最后,我发现在行显示之前,我必须将glColor4f设置为某种不透明的颜色。演示项目没有设置这种颜色。 – Cymric