GLInterop 1.6.1

GLInterop 1.6.1

秦鸿维护。



GLInterop 1.6.1

  • 秦鸿

GLInterop

GLInterop 是一个库,支持 GL 纹理、Metal 纹理和 CVPixelBufferRef 之间的可互操作渲染目标。

特性

渲染目标

GLInterop 提供多种渲染目标,以满足大多数业务需求。

RenderTarget GL Texture GL 框架缓冲区 Metal Texture CVPixelBufferRef
GLIRenderTarget o x x o
GLIMetalRenderTarget o x o o
GLIFramebufferTextureRenderTarget o o x x
GLITextureRenderTarget o x x x

GLIRenderer

GLIRenderer 是 GL 程序的轻量级封装,提供调用 GL 程序的基本能力。

GLIRenderer 提供一个 inputTextures 数组,一个支持多种渲染目标类型的 output,用于清除帧缓冲区的 clearColor,以及执行实际渲染操作的 render 方法。

对于视图端口设置,GLIRenderer 提供以下方法

- (void)setViewPortWithContentMode:(UIViewContentMode)contentMode inputSize:(CGSize)inputSize;

对于顶点属性,GLIRenderer 提供以下方法

- (void)setVertexAttributeToBuffer:(NSString *)attribName bytes:(void *)bytes size:(size_t)size;
- (void)applyVertexAttributes;

为了统一,以下方法将存储统一值,并在执行applyUniforms方法之前不会传递给GL。

- (void)setUniform:(NSString *)uniformName bytes:(void *)bytes;
- (void)setTexture:(NSString *)textureName texture:(GLuint)glTexture;

这使您可以在实际渲染开始之前为您的GL程序做一些准备,例如参数默认设置,或一些内置的静态图像纹理设置。

如果您重写了render方法,那么您需要调用此方法将统一和其他纹理传递给GL着色器

- (void)applyUniforms;

事实上,如果GLIRenderer仅提供这些方法,它仍会使您觉得使用不方便。例如,inputTextures将假设着色器中的纹理名为"inputTexture + Number",这会降低着色器的可读性。此外,inputTextures是一个数组,这意味着您必须一次性收集所有渲染所需的纹理,即使下一次渲染只有一个纹理发生变化。

现在,这个版本提供了一个新的方法,您只需要在GLIRenderer的子类中定义以uniform_开头的属性,就可以获取/设置纹理/浮点/整型的统一值。

@property (nonatomic, strong) id <GLITexture> uniform_blurTexture;
@property (nonatomic) float uniform_intensity;
@property (nonatomic) int uniform_stride;

此代码表示,要设置着色器中的blueTextureintensitystride,您只需要定义它,而不需要编写这些实现。实际上,GLIRenderer将在运行时生成这些统一的getter/setter。

这个框架中有多种渲染器

GLIBaseShapeRenderer

GLIBaseShapeRenderer用于渲染GL基元,如纹理四边形、点、线和三角带。

GLIViewRenderer

GLIViewRenderer用于将GL纹理渲染到一个符合GLIRenderableSurface协议的可渲染表面(例如。GLIView)。

GLITransform

GLITransform可以对其输入纹理应用转换,并以指定的大小渲染到输出。它可以用于调整大小、裁剪、翻转内容等。

Utils

  • GLIContext
  • GLITextureCache
  • GLIMetalTextureCache
  • GLIPixelBufferPool
  • GLITexture
  • GLISyncObject

GLIView

GLIView 是一个纯视图,符合 GLIRenderableSurface 协议以便成为可渲染的表面。其实现中不包含 GL API 调用,可以避免上下文管理问题。

示例

要运行示例项目,请克隆仓库,然后首先从 Example 目录中运行 pod install

需求

iOS 8.0 或更高版本。

安装

GLInterop 通过 CocoaPods 提供。要安装它,只需在 Podfile 中添加以下行

pod 'GLInterop'

作者

秦红,[email protected]

许可协议

GLInterop 在 MIT 许可协议下提供。有关更多信息,请查看 LICENSE 文件。