Problems with openfl_TextureCoordv in shader
-
Hey everyone,
I'm having a problem with the openfl_TextureCoordv call on a Shader in HaxeFlixel 4.5.1 (OpenFL 8.5.0 and Lime 7.1.1). I know I had this same problem in 4.4.1 also. I'm not sure if it is a bug or if I'm just not understanding something. This happens in HTML5 and CPP targets.I have a simple shader that I'm trying to get to work:
import flixel.system.FlxAssets.FlxShader;class TestShader extends FlxShader { @:glFragmentSource(' #pragma header void main() { if (openfl_TextureCoordv.y > 0.5) gl_FragColor = vec4(1.0,0.0,0.0,1.0); else gl_FragColor =vec4(0.0,0.0,1.0,1.0); }' ) public function new() { super(); } }
Here's my simple PlayState:
import flixel.FlxG; import flixel.FlxSprite; import flixel.FlxState; import openfl.filters.ShaderFilter; class PlayState extends FlxState { override public function create():Void { super.create(); var filter = new ShaderFilter(new TestShader()); FlxG.game.setFilters([filter]); } override public function update(elapsed:Float):Void { super.update(elapsed); } }
I set the window size in the Project.xml to 128 x 128 to get the screenshots.
I would expect the shader to color the bottom of my game screen red (after flipping the Y) and the top half blue. Instead, I get this:Then I wait about 7 seconds, and it suddenly turns to this all by itself:
Now it is slightly less than half the screen.If I use the same shader on a sprite it works correctly.
Am I just missing something about how the ShaderFilters work? If this is an actual problem I'm happy to raise an issue on GitHub but I wanted to make sure I'm not just being dense before I did that.
-
Did you figure it out?