我在我的項目中添加了兩個着色器,其中一個來自WWDC 2014示例的着色器,另一個具有相同的代碼,但添加了自定義制服。問題在於,自定義制服的精靈在應用運行時呈現爲靜態,而在Xcode的SpriteKit編輯器中呈現黑色。爲什麼SpriteKit不更新着色器的制服?
與自定義統一着色器低於,u_speed
用於控制海浪移動的速度。
void main()
{
float currTime = u_time * u_speed;
vec2 uv = v_tex_coord;
vec2 circleCenter = vec2(0.5, 0.5);
vec3 circleColor = vec3(0.8, 0.5, 0.7);
vec3 posColor = vec3(uv, 0.5 + 0.5 * sin(currTime)) * circleColor;
float illu = pow(1. - distance(uv, circleCenter), 4.) * 1.2;
illu *= (2. + abs(0.4 + cos(currTime * -20. + 50. * distance(uv, circleCenter))/1.5));
gl_FragColor = vec4(posColor * illu * 2., illu * 2.) * v_color_mix.a;
}
This是一個項目,我只用了着色器和兩個精靈顯示問題放在一起。
我發現另一個線程提到了類似的問題,並解釋了這個問題。你不能直接在着色器中使用傳遞的制服,你必須先將它們分配給一個變量。在您的制服內,只需添加:float userSpeed = u_speed;然後將u_time乘以userSpeed而不是u_speed。這應該使它與Interface Builder定義的統一一起工作。在這裏有一些討論的線程在這裏:http://stackoverflow.com/questions/25824414/skshader-performance-slowdown/31196711#31196711 – itnAAnti
我認爲這是rraallvv正在下面工作,在獲取實際統一值。 – itnAAnti