Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SpriteKit着色器故障(SKAttributeValue崩溃)_Ios_Swift_Opengl Es_Sprite Kit_Shader - Fatal编程技术网

Ios SpriteKit着色器故障(SKAttributeValue崩溃)

Ios SpriteKit着色器故障(SKAttributeValue崩溃),ios,swift,opengl-es,sprite-kit,shader,Ios,Swift,Opengl Es,Sprite Kit,Shader,我使用的是一个简单的着色器,在这里 void main() { vec2 p = -1.0 + 2.0 * v_tex_coord; float len = length(p); vec2 uv = v_tex_coord - (p/len)*(sin(len*22.-u_time*5.28) + 1.)*0.1; gl_FragColor = texture2D(u_texture, uv) * u_color; } 这就是我如何设置它以将其用于具有不同颜色的

我使用的是一个简单的着色器,在这里

void main() {
    vec2 p = -1.0 + 2.0 * v_tex_coord;
    float len = length(p);
    vec2 uv = v_tex_coord - (p/len)*(sin(len*22.-u_time*5.28) + 1.)*0.1;
    gl_FragColor = texture2D(u_texture, uv) * u_color;
}
这就是我如何设置它以将其用于具有不同颜色的节点

self.swirlShader.attributes = [SKAttribute(name: "u_color", type: SKAttributeType.vectorFloat4)]
有时会出现小故障,向场景添加节点会影响其工作方式,基本上会将节点的纹理更改为正弦函数。

这在所有节点之间交替非常快,仅当某些粒子发射时,如左下角的粒子。 当两个节点发生碰撞时,它们会爆炸,发生碰撞时也会崩溃,堆栈跟踪中的最后一条指令是[SKAttributeValue copyValueTo:type:count:]

也时不时地得到这个

Execution of the command buffer was aborted due to an error during execution. Caused GPU Hang Error (IOAF code 3)
编辑:我发现为每个节点使用着色器的新实例并增加节点数会显著增加崩溃的发生率,但不是小故障,它实际上改变了崩溃,并降低了崩溃的频率。以下是每个节点的新实例的故障:

更新:这似乎是与着色器的访问或着色器的执行相关的某种线程问题。另外,为什么使用着色器时CPU时间会上下波动,而不使用着色器时CPU时间会稳定在低位?我认为着色器直接在GPU上工作

更新2:发现它正在崩溃,因为我在场景中添加了太多节点(大约3600个)。但我不知道为什么,因为这是不一致的,只有在使用着色器时才会发生。 这个小故障仍然存在,我不知道到底是什么原因造成的。我认为这也是因为在场景中添加了节点,但不够一致,无法运行大量测试。 我试着删除所有动作并进行手动alpha、旋转等更新,但这不是原因。在其中一个测试中,所有东西都冻结了,开始在2-3帧之间来回跳跃,并且向前跳跃了几次,有什么东西导致了GPU挂起错误。
我不确定着色器是如何受到其变量之外的任何影响的,但它会干扰GPU。

看起来是一个好地方。感谢更新。在一般意义上,我可以针对SpriteKit中的着色器向您提出一些问题吗。。。“有些问题会非常幼稚,可能会非常愚蠢吗?”困惑者继续问吧,但我很肯定,如果他们幼稚愚蠢,他们已经在某个地方得到了回答。