0

在为 iOS 开发 API 时,我编写了几个对 API 非常重要的着色器。这些着色器采用 vsh 和 fsh 文件的形式。现在,在使用 API 处理实际项目时,我发现当我们将带有 API 源的文件夹添加到 Xcode iOS 项目中时,我们必须做一个额外的步骤,包括将文件添加到 Build 中的“Copy Bundle Resources”项目配置的阶段选项卡。因此,我们正在考虑以最佳方式处理此问题(“最佳”是指根本不应该存在该步骤!)因为着色器作为字符串加载到 GPU,所以,最好的方式是什么在 API 中处理这些着色器?

4

1 回答 1

1

避免将着色器文件与框架或静态库捆绑在一起的一种方法是将它们嵌入为字符串常量。我在这个项目中使用以下宏执行此操作:

#define STRINGIZE(x) #x
#define STRINGIZE2(x) STRINGIZE(x)
#define SHADER_STRING(text) @ STRINGIZE2(text)

这让我可以执行以下操作:

NSString *const kGPUImagePassthroughFragmentShaderString = SHADER_STRING
(
 varying highp vec2 textureCoordinate;

 uniform sampler2D inputImageTexture;

 void main()
 {
     gl_FragColor = texture2D(inputImageTexture, textureCoordinate);
 }
);

并在需要时使用该 NSString 常量为我的程序提供着色器。然后不需要着色器文件,这简化了分发过程。

Xcode 中的语法高亮显示不像专用的顶点和片段着色器文件那样具体,但您确实获得了基本的 C 着色。

于 2013-07-18T17:09:59.887 回答