当前位置:   article > 正文

iOS中滤镜的使用(三)OpenGLES渲染_ios opengl c++ render

ios opengl c++ render

iOS中滤镜的使用(三)

OpenGLES渲染


首先,Open Graphics Library(OpenGL)用于二维和三维的可视化。而OpenGL for Embedded Systems(OpenGL ES)是OpenGL的一个简化版本,消除冗余的功能并提供一个库,非常容易学习,在移动装置上应用实践容易。
它直接运行的图形处理硬件上,也就是GPU,并不运行在CPU上,因此,对CPU的消耗非常的小,并不影响程序的运行速度。如果是罗列出各种滤镜,反而吃cpu,让程序运行速度慢。
OpenGL运行在GPU上

其次,OpenGLES是基于C语言编写的,与平台无关的应用程序接口。

因此,进行大量渲染的时候,通常使用OpenGLES
下面是一个例子:

#import "ViewController.h"

#import <GLKit/GLKit.h>

@interface ViewController ()
@property (strong, nonatomic) GLKView   *glkView;//渲染用的buffer视图
@property (strong, nonatomic) CIFilter  *filter;
@property (strong, nonatomic) CIImage   *ciImage;
@property (strong, nonatomic) CIContext *ciContext;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    UIImage *showImage = [UIImage imageNamed:@"IMG_0160"];
    CGRect rect = CGRectMake(0, 0, 350, 400);

    // 获取OpenGLES上下文
    EAGLContext *eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

    //创建出渲染的buffer
    _glkView = [[GLKView alloc] initWithFrame:rect context:eaglContext];
    [_glkView bindDrawable];//绑定绘制
    [self.view addSubview:_glkView];

//创建出CoreImage用的上下文
    _ciContext = [CIContext contextWithEAGLContext:eaglContext options:@{kCIContextWorkingColorSpace:[NSNull null]}];


    //CoreImage相关设置
    _ciImage = [[CIImage alloc] initWithImage:showImage];

    _filter = [CIFilter filterWithName:@"CISepiaTone"];//  //棕黑色调
    [_filter setValue:_ciImage forKey:kCIInputImageKey];
    [_filter setValue:@(0) forKey:kCIInputIntensityKey];

    //开始渲染
    [_ciContext drawImage:[_filter outputImage] inRect:CGRectMake(0, 0, _glkView.drawableWidth, _glkView.drawableHeight) fromRect:[_ciImage extent]];

    [_glkView display];
  //  [self filter];

    //动态渲染
    UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(0, 450, 320, 20)];
    slider.minimumValue = 0.f;
    slider.maximumValue = 1.f;
    [slider addTarget:self action:@selector(sliderEvent:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:slider];
}

- (void)sliderEvent:(UISlider *)slider
{
    _filter = [CIFilter filterWithName:@"CISepiaTone"];//  //棕黑色调
    [_filter setValue:_ciImage forKey:kCIInputImageKey];
    [_filter setValue:@(slider.value) forKey:kCIInputIntensityKey];

    //开始渲染
    [_ciContext drawImage:[_filter outputImage] inRect:CGRectMake(0, 0, _glkView.drawableWidth, _glkView.drawableHeight) fromRect:[_ciImage extent]];
    [_glkView display];
}
@end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/125049
推荐阅读
相关标签
  

闽ICP备14008679号