SpriteKit shader crash iOS 9: SKDefaultShading, gl_FragCoord

前端 未结 4 2108
小蘑菇
小蘑菇 2021-02-20 02:51

Just installed the iOS 9 open beta (version 3) and now I\'m having loads of problems with SpriteKit shaders. On iOS 8 the following code worked just fine:

_fontS         


        
相关标签:
4条回答
  • 2021-02-20 03:24

    Try to add parameter 'PrefersOpenGL' of type boolean set to 'YES' in info.plist. This will disable Metal

    0 讨论(0)
  • 2021-02-20 03:36

    My custom SKShader also stopped working in ios9 on metal devices.

    I was able to fix it using v_tex_coord to get the pixel position, and custom uniform to send in the sprite size (There seems to be a bug where u_sprite_size isn't being passed in.)

    [SKUniform uniformWithName:@"u_fixed_size" floatVector2:GLKVector2Make(n.calculateAccumulatedFrame.size.width, n.calculateAccumulatedFrame.size.height)]
    
    0 讨论(0)
  • 2021-02-20 03:38

    I came here after seeing the message use of undeclared identifier 'gl_FragCoord' but eventually I could solve my problem by replacing

    gl_FragCoord.xy / u_sprite_size.xy

    with

    v_tex_coord

    0 讨论(0)
  • 2021-02-20 03:40

    I had this problem too with iOS9. gl_FragCoord stopped working on real devices, but works in the iOS simulator.

    Work around.

    Create a node with shader

    let shader = SKShader(fileNamed: "polka.fsh")
    let uniform = SKUniform(name: "u_spriteSize", floatVector2: GLKVector2Make(Float(200), Float(200)))
    shader.uniforms.append(uniform)
    

    Update the uniform

    if let uniform = shader.uniformNamed("u_spriteSize") {
        let size = frame.size
        uniform.floatVector2Value = GLKVector2Make(Float(size.width * screenScale), Float(size.height * screenScale))
    }
    

    Shader

    vec2 xy = v_tex_coord * u_spriteSize - u_polkaCenter; // new code
    //vec2 xy = gl_FragCoord.xy - u_polkaCenter;  // old code that worked before iOS9
    
    0 讨论(0)
提交回复
热议问题