2015-07-18 6 views
10

Просто установлен бета-версия iOS 9 (версия 3), и теперь у меня возникают проблемы с шейдерами SpriteKit. КСН 8 следующий код работал нормально:Скрипач Shader SpriteKit iOS 9: SKDefaultShading, gl_FragCoord

_fontShader = [SKShader shaderWithFileNamed:@"TheShader"]; // TODO: iOS9 compatibility issues here 
_fontUniform = [SKUniform uniformWithName:@"labelBase" float:0]; 
[self.fontShader addUniform:self.fontUniform]; // TODO: iOS9 compatibility issues here 

_fontEffects = [SKEffectNode node]; 
self.fontEffects.shader = self.fontShader; // TODO: iOS9 compatibility issues here 
self.fontEffects.shouldEnableEffects = YES; 
self.fontEffects.shouldCenterFilter = NO; 
self.fontEffects.shouldRasterize = YES; 
[self addChild:self.fontEffects]; 

Редактировать: файл «TheShader.fsh» выглядит следующим образом:

float yPos = gl_FragCoord.y - labelBase; // iOS 9 Compatibility issues here 
float gradient = 0.35*(yPos/u_sprite_size.y); // ranges from 0 at base to 0.35 at top 

vec4 color = SKDefaultShading(); // the current label color (iOS 9 Compatibility issues here) 
color = vec4(gradient + color.r, gradient + color.g, gradient + color.b, color.a); 
color.rgb *= color.a; // set background to alpha 0 

gl_FragColor = color; 

КСН 9 консоль извергает кучу предупреждений в этот формат:

2015-07-12 22:43:17.717 ReconInForce[599:110531] Jet: Error Domain=MTLLibraryErrorDomain Code=3 "Compilation failed: 

program_source:8:18: error: use of undeclared identifier 'gl_FragCoord' 
    float yPos = gl_FragCoord.y - labelBase[0]; 
       ^
program_source:11:18: error: use of undeclared identifier 'SKDefaultShading' 
    vec4 color = SKDefaultShading(); // the current label color 
      ^
" UserInfo=0x158c084b0 {NSLocalizedDescription=Compilation failed: 

program_source:8:18: error: use of undeclared identifier 'gl_FragCoord' 
    float yPos = gl_FragCoord.y - labelBase[0]; 
      ^
program_source:11:18: error: use of undeclared identifier 'SKDefaultShading' 
    vec4 color = SKDefaultShading(); // the current label color 
      ^
} 

Похоже iOS9 не поддерживает SKDefaultShading и gl_FragCoord. Как найти локальное измерение пикселей без использования gl_FragCoord?

Консоль продолжает повторять это навсегда, замедляя работу устройства. Вот скриншот: enter image description here

Если я прокомментирую строки выше, которые говорят «проблемы совместимости с iOS9 здесь», тогда проблема решает сам, но тогда у меня нет никаких шейдеров.

У кого-нибудь еще есть эта проблема? Значительная помощь будет оценена.

+0

Это более чем вероятно ошибка на их стороне.Сегодня я обновлял некоторые вещи и сталкивался с этими проблемами. – Tony

+0

Выяснил ли это? Запуск этой проблемы на Xcode 7.0 и iOS 9.1 публичной бета-версии 1. – CloakedEddy

+0

Пока нет, сообщите об ошибке, если сможете. Чем больше отчетов, тем быстрее они могут это исправить! – user2821647

ответ

2

Мой пользовательский SKShader также прекратил работу в ios9 на металлических устройствах.

я был в состоянии исправить это с помощью v_tex_coord получить позицию пикселя, и нестандартную форму для отправки в размере спрайтов (Там, кажется, ошибка, когда u_sprite_size это не передается в.)

[SKUniform uniformWithName:@"u_fixed_size" floatVector2:GLKVector2Make(n.calculateAccumulatedFrame.size.width, n.calculateAccumulatedFrame.size.height)] 
+0

Не могли бы вы добавить дополнительную информацию и код, как заменить/рассчитать gl_FragCoord на основании того, что вы упомянули в своем принятом ответе. Большое спасибо! – nzs

+0

Это не решает проблемы для меня. SKDefaultShading(), похоже, исчез. – Jonny

+0

BTW Я думаю, что 'u_sprite_size' устарел. – Jonny

6

Я пришел сюда после того, как видим использование необъявленной идентификатора «gl_FragCoord» сообщение , но в конце концов, я мог бы решить мою проблему, заменив

gl_FragCoord.xy/u_sprite_size.xy

с

v_tex_coord

+0

Хорошо, это помогло мне с аналогичной проблемой. Казалось, что «gl_FragCoord» тоже был плохим. – Jonny

1

У меня была эта проблема тоже с iOS9. gl_FragCoord прекратил работу на реальных устройствах, но работает в симуляторе iOS.

Работать вокруг.

Создать узел с шейдером

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

Update равномерной

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 
2

Попробуйте добавить параметр 'PrefersOpenGL' типа булева набора для 'ДА' в info.plist. Это отключит Metal

Смежные вопросы