gpt4 book ai didi

ios - Xcode 7/iOS 9:未在SKNode中使用OpenGL片段着色器

转载 作者:行者123 更新时间:2023-12-01 16:28:47 25 4
gpt4 key购买 nike

我使用SKSceneSKNode创建了一个Swift项目,以显示片段着色器的结果。该项目是使用iOS 8.x和Xcode 6.x创建的。
由于我已升级为使用Xcode 7和iOS 9(当前为7.1和iOS 9.1),因此着色器不再在运行时进行编译,并显示各种问题,例如:

program_source:16:7: warning: no previous prototype for function 'simpleRand'
float simpleRand(vec2 n)
^
program_source:26:31: error: use of undeclared identifier 'PI'
float rad = val.x * 2.0 * PI * u_frequency[0];
^
program_source:26:36: error: use of undeclared identifier 'u_frequency'
float rad = val.x * 2.0 * PI * u_frequency[0];

据我设法弄清楚,似乎从iOS 9 / Xcode 7开始,使用的默认片段着色器语言是Metal,而不是OpenGL,所以我的猜测是,编译器尝试编译Metal代码。
如果是这样,我该如何以及在哪里指定我想要OpenGL ES?

着色器的初始化方式为:
func setupShader(uniforms: Array<SKUniform>) {
if let shader = self.noiseShader {
shader.uniforms = uniforms
self.shaderContainer = SKSpriteNode(color: UIColor.redColor(), size: self.size)
if let shaderContainer = self.shaderContainer {
self.addChild(shaderContainer)
shaderContainer.position = CGPointMake(self.size.width/2.0, self.size.height/2.0)
shaderContainer.shader = shader;
}
}
}

并且此代码在Xcode 7 / iOS 9之前可以完美地工作。

这是我正在使用的一些着色器代码:
const float PI = 3.14159265;

float sinNoise(vec2 val) {
float rad = val.x * 2.0 * PI * u_frequency;
return sin(rad);
}

///////////////////////////////////////
// Main
///////////////////////////////////////

void main() {
vec2 position = v_tex_coord; // gets the location of the current pixel in the intervals [0..1] [0..1]

float vnoise = sinNoise(position) / 2.0;
float color = vec4(vec3(vnoise + 0.5), 1.0);

gl_FragColor = color;
}

重要信息:该代码可在模拟器中完美运行(例如,适用于具有iOS 9.1的iPad Air 2),但无法在与该OS相同的物理设备上运行时进行编译。

最佳答案

好的,我在另一篇文章中找到了答案。
您可以将条目添加到项目的info.plist文件中:

更喜欢OpenGL(BOOL)是

如对此帖子的答案所示:
xcode error calling display has no effect

这行得通,但闻起来不是很好。猜猜这是一个临时解决方案,它将在某个时间点中断。

关于ios - Xcode 7/iOS 9:未在SKNode中使用OpenGL片段着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33450888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com