美文网首页
OpenGL_ES GLKit

OpenGL_ES GLKit

作者: tp夕阳武士 | 来源:发表于2020-03-31 11:52 被阅读0次

    1. 简介

    基于OpenGL / OpenGL ES进行简化设计的开发框架,使得iOS上使用OpenGL变得容易。它的出现加快OpenGL ES或OpenGL应⽤用程序开发。 使用数学库,背景纹理理加载,预先创建的着⾊器效果,以及标准视图和视图控制器器来实现渲染循环。
    GLKit框架提供了方法和类,可以减少创建新的基于着⾊器的应用程序所需的⼯作量,
    或者⽀持依赖早期版本的OpenGL ES或OpenGL提供的固定函数顶点或⽚段处理的现有应⽤程序。

    GLKit功能

    • 加载纹理
    • 提供高性能的数学运算
    • 提供常见的着色器
    • 提供视图和视图控制器

    GLKit 实现视图内容成像的方式

    image.png

    2.GLKit关键类

    2.1GLkView

    GLKview是一个继承于UIView的类,提供了绘制内容的场所;

    //1.初始化方法
    - (instancetype)initWithFrame:(CGRect)frame context:(EAGLContext *)context;
    
    //参数1:frame view的位置
    //参数2: context 上下文内容
    
    //2.代理
    delegate 用来捆绑视图(GLKView)的代理对象
    //代理提供的方法
    @required 
    //(必须重写的方法)绘制视图内容
    - (void)glkView:(GLKView *)view drawInRect:(CGRect)rect;
    
    //3.配置帧缓存区
    //颜色缓存区的格式
    @property (nonatomic) GLKViewDrawableColorFormat drawableColorFormat;
    //深度缓存区格式
    @property (nonatomic) GLKViewDrawableDepthFormat drawableDepthFormat;
    //模版缓存区格式
    @property (nonatomic) GLKViewDrawableStencilFormat drawableStencilFormat;
    //多重采样缓存区格式
    @property (nonatomic) GLKViewDrawableMultisample drawableMultisample;]
    
    //4.缓存区属性
    //底层缓存区对象的高度(以像素为单位)
    @property (nonatomic, readonly) NSInteger drawableWidth;
    //底层换粗去对象的宽度(以像素为单位)
    @property (nonatomic, readonly) NSInteger drawableHeight;
    
    //5.绘制视图内容
    //绘制视图内容时使⽤的OpenGL ES 上下文
    @property (nonatomic, retain) EAGLContext *context;
    //将底层FrameBuffer 对象绑定到OpenGL ES
    - (void)bindDrawable;
    //指定视图是否响应使得视图内容⽆无效的消息
    @property (nonatomic) BOOL enableSetNeedsDisplay;
    //立即重新绘制内容
    - (void)display;
    //绘制视图内容并将其作为新图像对象返回
    @property (readonly, strong) UIImage *snapshot;
    //删除与视图关联的可绘制对象
    - (void)deleteDrawable;
    
    2.2 GLKViewController

    GLKViewController 继承 UIViewController,(管理理OpenGL ES 渲染循环的视图控制器)

    //1.代理
    id <GLKViewControllerDelegate> delegate
    
    @required
    /*
     Required method for implementing GLKViewControllerDelegate. This update method variant should be used
     when not subclassing GLKViewController. This method will not be called if the GLKViewController object
     has been subclassed and implements -(void)update.
     */
    - (void)glkViewControllerUpdate:(GLKViewController *)controller;
    
    @optional
    /*
     Delegate method that gets called when the pause state changes. 
     */
    - (void)glkViewController:(GLKViewController *)controller willPause:(BOOL)pause;
    
    //2.刷新速率属性
    //用于设置所需的每秒帧数,以便进行更新和绘图。默认值是30。
    @property (nonatomic) NSInteger preferredFramesPerSecond;
    
    //3.实际刷新频率
    /*根据preferredFramesPerSecond的值确定的实际每秒帧数
    以及GLKView所在的屏幕。所选的值将与
    在不超过屏幕刷新率的情况下,尽可能地优先选择redframespersecond。这个值
    不考虑掉帧,所以它不是测量您的统计帧率
    第二。它是会被更新的静态值。*/
    @property (nonatomic, readonly) NSInteger framesPerSecond;
    
    //4.控制帧刷新
    //布尔值,渲染循环是否已暂停。
    @property (nonatomic, getter=isPaused) BOOL paused;
    //布尔值,当前程序重新激活活动状态时视图控制器是否自动暂停渲染循环。
    @property (nonatomic) BOOL pauseOnWillResignActive; 
    // 布尔值,当前程序变为活动状态时视图控制是否自动恢复呈现循环。
    @property (nonatomic) BOOL resumeOnDidBecomeActive;
    
    //还有很多其他的属性与方法,可自行查看GLKViewController后台;
    
    

    相关文章

      网友评论

          本文标题:OpenGL_ES GLKit

          本文链接:https://www.haomeiwen.com/subject/kyxwuhtx.html