ios - 如何在 SceneKit : consecutive statements on a line must be separated by ;? 中写入新的着色器文件

标签 ios compiler-errors shader scenekit

我从 SceneKit 和着色器开始,我创建了一个 swift 文件,将其名称更改为 myFragment.shader,并添加了以下内容:

uniform sampler2D RTBlurH; // this should hold the texture rendered by the horizontal blur pass
varying vec2 vTexCoord;
const float blurSize = 1.0/512.0;

sum += texture2D(RTBlurH, vec2(vTexCoord.x, vTexCoord.y - 4.0*blurSize)) * 0.05;
sum += texture2D(RTBlurH, vec2(vTexCoord.x, vTexCoord.y - 3.0*blurSize)) * 0.09;
sum += texture2D(RTBlurH, vec2(vTexCoord.x, vTexCoord.y - 2.0*blurSize)) * 0.12;
sum += texture2D(RTBlurH, vec2(vTexCoord.x, vTexCoord.y - blurSize)) * 0.15;
sum += texture2D(RTBlurH, vec2(vTexCoord.x, vTexCoord.y)) * 0.16;
sum += texture2D(RTBlurH, vec2(vTexCoord.x, vTexCoord.y + blurSize)) * 0.15;
sum += texture2D(RTBlurH, vec2(vTexCoord.x, vTexCoord.y + 2.0*blurSize)) * 0.12;
sum += texture2D(RTBlurH, vec2(vTexCoord.x, vTexCoord.y + 3.0*blurSize)) * 0.09;
sum += texture2D(RTBlurH, vec2(vTexCoord.x, vTexCoord.y + 4.0*blurSize)) * 0.05;

gl_FragColor = sum;

来自模糊教程 here

但我在前 3 行出现 3 个错误:它要求我添加 ; :

enter image description here

我不明白这个问题。

谢谢

最佳答案

I created a swift file, changed its name for myFragment.shader

那是你的问题。

当您将文件添加到项目时,Xcode 会根据文件的类型确定在构建时如何处理它。如果您创建一个 Swift 文件,它将使用 Swift 编译器对其进行编译。 (而且 Swift 编译器会期望该文件的内容是用 Swift 编写的,而不是 GLSL。)

您不希望将着色器编译为 native (CPU) 源代码。着色器在您的应用程序运行时由 OpenGL 编译(用于 GPU),因此您只需将它们复制到您的包中并在您准备好使用它们时将它们传递给 GL(在您的情况下通过 SceneKit)。

重命名文件的类型扩展名时,项目中的文件处理规则不会自动更改。 (这是因为对于某些文件类型,您可以合理地使用不同于 Xcode 默认值的扩展名。)因此,这里有两个针对两个不同上下文的修复:

更改现有文件的构建规则

对于您所拥有的,您可能不想重新创建项目的某些部分,您只想告诉 Xcode 将您的着色器视为着色器,而不是 Swift 源。在导航器中选择您的项目,转到构建阶段,然后将 myFragment.shader 从 Compile Sources 移动到 Copy Bundle Resources。

enter image description here

使用正确的构建规则添加一个新文件

您可以在创建新的着色器文件时避免上述情况。如果您使用 Empty 文件模板创建一个新文件,它将被视为一个包资源,所以您不需要做任何进一步的事情。

enter image description here

同样,如果您拖动 .shader.fsh.vsh(或者其他任何不是 Swift/C/ObjC/etc 源文件)到您的项目中,默认情况下将被视为捆绑资源。

关于ios - 如何在 SceneKit : consecutive statements on a line must be separated by ;? 中写入新的着色器文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29083239/

相关文章:

actionscript-3 - 鼹鼠丘着色器

ios - 当选择另一个单元格按钮时取消选择 Collection View 单元格按钮

ios - 如何在iOS中进行填充进度圈?

java - 编译错误java hadoop程序

c++ - C++模板方法定义在类中不匹配

c++ - 将代码从 OpenGL 2.1 转换为 OpenGL 3.2

ios - CABasicAnimation 内存管理

ios - NSAppleMusicUsageDescription - 缺少 Info.plist 键

ios - 自发的 Swift 编译器错误

opengl - 将 OpenGL draw_indirect 与 OpenCL 结合使用