我只是创建一个着色器,它取决于当前时间。我的片段是这样的:
varying vec2 vTexCoord;
varying float vAlpha;
uniform sampler2D uImage0;
varying float time;
void main(void)
{
vec4 color = texture2D(uImage0, SomethingTimeDependant(vTexCoord, time);
gl_FragColor = color;
gl_FragColor.rgb *= gl_FragColor.a;
}
所以提供我用的时间
var param: ShaderParameter<Float> = new ShaderParameter<Float>();
param.value = [ getTimer() ];
this.data.time = param;
但它只会在我迷路并且再次获得焦点时更新。任何想法如何正确更新时间?
答案 0 :(得分:3)
我将您的WaveShader
添加到openfl-samples的DisplayABitmap项目中的位图中,并且找不到您的代码有任何问题。事实上,只需更改位图的x
每帧“修复”问题。在内部,这会将__renderDirty
和其他一些标志设置为true,从而强制重新渲染。
Lib.current.stage.addEventListener(Event.ENTER_FRAME, function(e:Event) {
bitmap.x += 0.0001;
});
这表明OpenFL在检测着色器参数更改时存在一些问题。考虑在OpenFL's issue tracker上创建问题。
顺便说一句,着色器似乎期望秒,而不是毫秒(getTimer()
返回)。您可以简单地除以1000以获得漂亮的结果:
this.data.time.value = [ getTimer() / 1000 ];