摘要:
RunLoop 源码地址 RunLoop 官方文档 Threading Programming Guide 一、Runloop 介绍 1、RunLoop 是什么? 运行循环是与线程相关联的基础设施的一部分。运行循环是一个事件处理循环,用于调度工作和协调接收传入事件。 运行循环的目的是让线程在有工作要 阅读全文
摘要:
本文主要用来 对 SDWebImage 的整体实现原理和源码进行简单解析。 SDWebImage 架构图: 流程简概: 图片加载流程 一、加载图片流程 加载图片时,首先 图片是在本地缓存还是网络 - (void)sd_internalSetImageWithURL:(nullable NSURL * 阅读全文
摘要:
一、Metal 实现视频预览 首先我们知道视频其实就是一帧帧的图片。 渲染业务流程: (注:AVFoundation 有提供的预览图层: AVCaptureVideoPreviewLayer) 0、初始化工作 // 1.获取 MTKView 预览图层 self.mtkView = [[MTKView 阅读全文
摘要:
一、Metal 大量顶点数据处理 如上图,setVertexByte: 方法对数据是有限制的 不能大于4K。当大量数据,超过了4K时,我们可以使用 MTLBuffer。 1、MTLBuffer 当顶点数量太多时,对CPU的消耗会增大,尤其在游戏、AI等场景中,为更好的扩展管理 (并不是为了图形图片的 阅读全文
摘要:
通过 Metal,实现 渲染颜色到屏幕 和 三角形的绘制 两个简单案例。 一、Metal 使用 Metal Programing Guide 官方文档 类似于 OpenGL ES 的 GLKit, 苹果为开发者提供了 MetalKit 。并对开发者做了以下建议(当然这只是建议,不是必须遵循的规则): 阅读全文
摘要:
Metal 简介 与 Metal 编程语言语法。 一、Metal 简介 1、Metal 是 Apple 为了解决 3D 渲染而推出的框架。游戏开发者的新的技术平台,该技术能够为3D图像提高 10 倍的渲染性能。苹果2018年推出 Metal,在此之前一直使用OpenGL ES。 Metal 的2个目 阅读全文
摘要:
此案例用来处理纹理的拉伸,并对拉伸后图片进行保存。 拉伸效果: 一、拉伸案例 - 主流程 1、加载原图 2、拉伸区域的滑块处理 -- sliderView 3、图片拉伸绘制 4、保存图片到本地相册 二、拉伸,顶点/纹理坐标处理过程 1、手动指定拉伸区域、选取合适的图元装配方式 8个顶点,通过方式 G 阅读全文
摘要:
最终实现滤镜效果: 详细Demo文章见底部 一、缩放 1)实现思路:修改顶点坐标和纹理坐标的对应关系。纹理坐标不变的情况下,对顶点坐标进行放大. 缩放过程: 1、设置一次缩放效果的时长 duration 0.6 2、设置最大振幅 maxAmplitude 0.3 --> 放大程度 [1 ~ 1.3] 阅读全文
摘要:
图片显示到屏幕上由CPU/GPU 协作完成: CPU:计算视图 frame 、图片解码,需要绘制的图片通过数据总线交给 GPU。 GPU:纹理混合、顶点变换与计算、像素点的填充计算、渲染到帧缓冲区。 iOS双缓冲机制:2个帧缓冲区 纹理图片滤镜处理,通过修改片元着色器实现滤镜效果。 效果: 一、灰度 阅读全文
摘要:
案例:利用 GLSL 实现分屏滤镜 --> 2、3、4、6、9分屏。 分屏滤镜简单思路:绘制原始纹理图片 -- 绘制分屏 --> 1、片元着色器 来修改设置每个像素 --> 2、重绘 实现效果: 一、绘制原图过程不变: 1、创建图层:CAEAGLLayer 2、创建上下文 EAGLContext 3 阅读全文