我需要将一些OpenGL ES代码转换为Mac上的OpenGL。 我已经转换了大部分代码,但我想知道转换的最佳方法是什么:
[self.context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer *)self.layer];
答案 0 :(得分:0)
您要问的是如何设置渲染目标以在视图或图层中显示OpenGL内容。这比将一种方法换成另一种方法要复杂一点。
在iOS上,您有CAEAGLLayer,您可以使用它来支持任何将显示OpenGL ES内容的UIView。上面的方法是将渲染缓冲区附加到该缓冲区。
在Mac上,您有NSOpenGLView或CAOpenGLLayer(NSOpenGLLayer)。这两者彼此非常不同,两者也与CAEAGLLayer不同。对于Mac类,您需要将一个或另一个子类化,并覆盖设置OpenGL上下文并将内容呈现到屏幕所需的方法。根据我的经验,我很难让CAOpenGLLayer在非主线程上呈现内容,但是与NSOpenGLView相比,叠加视图和其他图层要容易得多。
您很可能希望使用模板来设置子类。 Apple的GLEssentials sample code提供了一个如何设置NSOpenGLView的好例子,他们的CALayerEssentials包含了CAOpenGLLayer子类的代码。