在OpenGL层之上绘制“常规”绘图

时间:2012-01-11 00:56:20

标签: ios opengl-es

如何在后台运行的OpenGL动画之上实现“常规”绘图(通常在drawRect方法中完成)?我的应用程序是OpenGL应用程序,它是默认的Xcode游戏应用程序模板。 GLKViewController没有drawRect方法,当我添加一个时,它永远不会被调用。我试图在drawInRect方法中实现绘图代码(确实存在),但是我遇到了运行时错误。

总结一下:我想绘制不使用OpenGL的东西(线条,路径等),但是使用常规的石英图元并在现有的3d渲染上显示它。

1 个答案:

答案 0 :(得分:0)

为了确保调用drawRect,你应该走另一条路:创建一个标准的Cocoa Touch项目,改变主视图的+ (Class)layerClass方法返回[CAEAGLLayer class],然后开始绘图。请注意,CAEAGLLayer documentation特别警告不要执行您想要执行的操作:

  

避免在CAEAGLLayer对象的顶部绘制其他图层。如果您必须绘制其他非OpenGL内容,则可能会发现如果将透明2D内容置于GL内容之上并且还确保OpenGL内容不透明且未进行转换,则可接受的性能成本。

查看GLPaint项目,查看显示layerClass覆盖的简单OpenGL ES项目(在PaintingView.m中)。他们使用layoutSubviewstouchesBegan/Moved/Ended进行绘图。