【问题标题】:OpenFL - Provide time to shaderOpenFL - 为着色器提供时间
【发布时间】:2017-12-12 13:45:26
【问题描述】:

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

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;

但它只会在我失去并再次获得焦点时更新。任何想法如何正确更新时间?

这里是code of the shader class

【问题讨论】:

    标签: glsl shader haxe openfl


    【解决方案1】:

    我将您的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 ];
    

    【讨论】:

    • 太好了...谢谢!我花了一整天的时间......我会创建这个问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2018-11-30
    • 1970-01-01
    相关资源
    最近更新 更多