2.4 深入探讨GLKView是怎么工作的
1个回答
推荐于2016-11-19
展开全部
注意如果你不想在你的应用中使用苹果的GLKit类,你就需要使用AGLKView示例或者自己再创建一个相似的类。本书剩下的例子都假设使用了GLKit。因此AGLKView不会出现在本书其他的任何例子中。
在OpenGLES_Ch2_2例子中的AGLKView类继承自Cocoa Touch的UIView类,下面是这个类的接口声明,与苹果的GLKView类接口相似。
AGLKViewDelegate协议指定了一个任何AGLKView的委托都必须实现的方法。如果AGLKView实例的委托属性不等于nil,每个AGLKView实例都会向它的委托发送“-glkView:drawInRect:”消息。
AGLKView的实现比较简单易懂,但重写了来自UIView的多个方法并添加了一些用于支持OpenGL ES绘图的方法。
每一个UIView实例都有一个相关联的被Cocoa Touch按需自动创建的Core Animation层。Cocoa Touch会调用“+layerClass”方法来确定要创建什么类型的层。在这个例子中,AGLKView类重写了继承自UIView的实现。当Cocoa Touch调用AGLKView实现的“+layerClass”方法时,它被告知要使用一个CAEAGLLayer类的实例,而不是原先的CALayer。CAEAGLLayer是Core Animation提供的标准层类之一。CAEAGLLayer会与一个OpenGL ES的帧缓存共享它的像素颜色仓库。
接下来的代码块实现了“-initWithFrame:context:”方法并重写了继承来的“-init WithCoder:”方法。“-initWithFrame:context:”方法初始化了通过代码手动分配的实例。“-initWithCoder:”方法是Cocoa Touch用于初始化对象的标准方法之一。Cocoa Touch会自动调用“-initWithCoder:”方法,这是反归档先前归档入一个文件的对象的过程的一部分。归档和反归档在其他流行的面向对象的框架中(比如Java和微软的.NET)叫做串行化和反串行化。当OpenGLES_Ch2_2应用启动时,在这个例子中使用的AGLKView实例会自动地从应用的storyboard文件中加载(又叫做反归档)。
在OpenGLES_Ch2_2例子中的AGLKView类继承自Cocoa Touch的UIView类,下面是这个类的接口声明,与苹果的GLKView类接口相似。
AGLKViewDelegate协议指定了一个任何AGLKView的委托都必须实现的方法。如果AGLKView实例的委托属性不等于nil,每个AGLKView实例都会向它的委托发送“-glkView:drawInRect:”消息。
AGLKView的实现比较简单易懂,但重写了来自UIView的多个方法并添加了一些用于支持OpenGL ES绘图的方法。
每一个UIView实例都有一个相关联的被Cocoa Touch按需自动创建的Core Animation层。Cocoa Touch会调用“+layerClass”方法来确定要创建什么类型的层。在这个例子中,AGLKView类重写了继承自UIView的实现。当Cocoa Touch调用AGLKView实现的“+layerClass”方法时,它被告知要使用一个CAEAGLLayer类的实例,而不是原先的CALayer。CAEAGLLayer是Core Animation提供的标准层类之一。CAEAGLLayer会与一个OpenGL ES的帧缓存共享它的像素颜色仓库。
接下来的代码块实现了“-initWithFrame:context:”方法并重写了继承来的“-init WithCoder:”方法。“-initWithFrame:context:”方法初始化了通过代码手动分配的实例。“-initWithCoder:”方法是Cocoa Touch用于初始化对象的标准方法之一。Cocoa Touch会自动调用“-initWithCoder:”方法,这是反归档先前归档入一个文件的对象的过程的一部分。归档和反归档在其他流行的面向对象的框架中(比如Java和微软的.NET)叫做串行化和反串行化。当OpenGLES_Ch2_2应用启动时,在这个例子中使用的AGLKView实例会自动地从应用的storyboard文件中加载(又叫做反归档)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询