OpenFL - 为着色器提供时间
OpenFL - Provide time to shader
我只是创建一个着色器,它取决于当前时间。我的片段是这样的:
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;
但只有当我失去并再次获得焦点时它才会更新。任何想法如何正确更新时间?
我已将您的 WaveShader
添加到 openfl-samples 的 DisplayABitmap 项目中的位图中,但没有发现您的代码有任何问题。事实上,只需更改位图的 x
每帧 "fixes" 问题。在内部,这会将 __renderDirty
和其他一些标志设置为 true,强制重新渲染。
Lib.current.stage.addEventListener(Event.ENTER_FRAME, function(e:Event) {
bitmap.x += 0.0001;
});
这表明 OpenFL 在检测着色器参数更改方面存在一些问题。考虑在 OpenFL's issue tracker.
上创建问题
顺便说一句,着色器似乎需要几秒,而不是几毫秒(getTimer()
returns)。您可以简单地除以 1000 以获得漂亮的结果:
this.data.time.value = [ getTimer() / 1000 ];
我只是创建一个着色器,它取决于当前时间。我的片段是这样的:
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;
但只有当我失去并再次获得焦点时它才会更新。任何想法如何正确更新时间?
我已将您的 WaveShader
添加到 openfl-samples 的 DisplayABitmap 项目中的位图中,但没有发现您的代码有任何问题。事实上,只需更改位图的 x
每帧 "fixes" 问题。在内部,这会将 __renderDirty
和其他一些标志设置为 true,强制重新渲染。
Lib.current.stage.addEventListener(Event.ENTER_FRAME, function(e:Event) {
bitmap.x += 0.0001;
});
这表明 OpenFL 在检测着色器参数更改方面存在一些问题。考虑在 OpenFL's issue tracker.
上创建问题顺便说一句,着色器似乎需要几秒,而不是几毫秒(getTimer()
returns)。您可以简单地除以 1000 以获得漂亮的结果:
this.data.time.value = [ getTimer() / 1000 ];