Glsl OpenFL-为着色器提供时间

Glsl OpenFL-为着色器提供时间,glsl,shader,haxe,openfl,Glsl,Shader,Haxe,Openfl,我只是创建了一个着色器,它取决于当前时间。我的片段是这样的: 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;

我只是创建了一个着色器,它取决于当前时间。我的片段是这样的:

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;
var-param:ShaderParameter=new ShaderParameter();
param.value=[getTimer()];
this.data.time=param;
但它只会在我失去并再次获得焦点时更新。你知道如何正确地更新时间吗


这是你的电话号码

我将您的
WaveShader
添加到openfl示例的DisplayABitmap项目中的位图中,没有发现您的代码有任何错误。事实上,只要改变位图的
x
每一帧就可以“修复”这个问题。在内部,这会将
\uu renderParty
和一些其他标志设置为true,从而强制重新渲染

Lib.current.stage.addEventListener(Event.ENTER_FRAME, function(e:Event) {
   bitmap.x += 0.0001;
});

这表明OpenFL在检测着色器参数的更改时存在一些问题。考虑创建一个问题。

顺便说一句,着色器似乎期望的是几秒钟,而不是几毫秒(这将
getTimer()
返回)。您只需除以1000即可得到一个好看的结果:

this.data.time.value = [ getTimer() / 1000 ];

杰出的非常感谢。我花了一整天的时间和这个。。。我将创建问题