diff --git a/src/flixel/FlxSprite.hx b/src/flixel/FlxSprite.hx index dac3af5..9180dbd 100644 --- a/src/flixel/FlxSprite.hx +++ b/src/flixel/FlxSprite.hx @@ -1,5 +1,6 @@ package flixel; +import raylib.TextureFilter; import raylib.Color; import raylib.Colors; import raylib.Image; @@ -8,12 +9,18 @@ import raylib.Vector2; import raylib.Texture; class FlxSprite extends FlxObject { + public static var defaultAntialiasing:Bool = false; + private var texture(default, set):Texture; public var color:Color = Colors.WHITE; public var alpha(default, set):Float = 1.0; + public var antialiasing(default, set):Bool = defaultAntialiasing; + + public var antialiasingLevel(default, set):TextureFilter = TEXTURE_FILTER_BILINEAR; + public function new(x:Float = 0, y:Float = 0, ?graphic:String) { super(x, y); if (graphic != null) { @@ -37,7 +44,7 @@ class FlxSprite extends FlxObject { override public function draw() { super.draw(); - if (!visible || alpha < 0.001 || !camera.visible || !isOnScreen()){ + if (!visible || alpha < 0.001 || !camera.visible || !isOnScreen()) { return; } drawTexturePro(texture, Rectangle.create(0, 0, texture.width, texture.height), @@ -72,4 +79,22 @@ class FlxSprite extends FlxObject { inline function set_alpha(value:Float):Float { return alpha = value = color.a = Std.int(value * 255); } + + @:noCompletion + function set_antialiasing(value:Bool):Bool { + if (value) { + setTextureFilter(texture, antialiasingLevel); + } else { + setTextureFilter(texture, TEXTURE_FILTER_POINT); + } + return antialiasing = value; + } + + @:noCompletion + function set_antialiasingLevel(value:TextureFilter):TextureFilter { + if(antialiasing){ + setTextureFilter(texture, value); + } + return antialiasingLevel = value; + } } diff --git a/src/flixel/text/FlxText.hx b/src/flixel/text/FlxText.hx index 174c491..65854c6 100644 --- a/src/flixel/text/FlxText.hx +++ b/src/flixel/text/FlxText.hx @@ -1,5 +1,6 @@ package flixel.text; +import raylib.TextureFilter; import flixel.FlxSprite; import raylib.Font; import raylib.Vector2; @@ -34,14 +35,38 @@ class FlxText extends FlxSprite { @:noCompletion function set_font(font:String):String { unloadFont(_font); _font = loadFont(font); + // reapply antialiasing after generating a new font. + set_antialiasing(antialiasing); + set_antialiasingLevel(antialiasingLevel); return this.font = font; } - @:noCompletion override function get_width():Float { + @:noCompletion + override function get_width():Float { return measureTextEx(_font, text, size, letterSpacing).x; } - @:noCompletion override function get_height():Float { + @:noCompletion + override function get_height():Float { return measureTextEx(_font, text, size, letterSpacing).y; } + + @:noCompletion + override function set_antialiasing(value:Bool):Bool { + if (value) { + setTextureFilter(_font.texture, antialiasingLevel); + } else { + setTextureFilter(_font.texture, TEXTURE_FILTER_POINT); + } + setTextureFilter(getFontDefault().texture, TEXTURE_FILTER_POINT); // reset default font + return antialiasing = value; + } + + @:noCompletion + override function set_antialiasingLevel(value:TextureFilter):TextureFilter { + if(antialiasing){ + setTextureFilter(_font.texture, value); + } + return antialiasingLevel = value; + } } diff --git a/src/raylib/Font.hx b/src/raylib/Font.hx index fbe5035..f1ef6df 100644 --- a/src/raylib/Font.hx +++ b/src/raylib/Font.hx @@ -8,7 +8,7 @@ extern class Font { public var glyphCount:Int; public var glyphPadding:Int; - public var texure:Texture2D; + public var texture:Texture2D; public var recs:Star; diff --git a/src/raylib/Raylib.hx b/src/raylib/Raylib.hx index 9301d83..b867de3 100644 --- a/src/raylib/Raylib.hx +++ b/src/raylib/Raylib.hx @@ -701,6 +701,9 @@ extern class Raylib { @:native("UnloadTexture") public static function unloadTexture(texture:Texture2D):Void; + @:native("SetTextureFilter") + public static function setTextureFilter(texture:Texture2D, filter:TextureFilter):Void; + @:native("LoadRenderTexture") public static function loadRenderTexture(width:Int, height:Int):RenderTexture2D; diff --git a/src/raylib/TextureFilter.hx b/src/raylib/TextureFilter.hx new file mode 100644 index 0000000..07f81e1 --- /dev/null +++ b/src/raylib/TextureFilter.hx @@ -0,0 +1,10 @@ +package raylib; + +enum abstract TextureFilter(Int) to Int from Int { + var TEXTURE_FILTER_POINT = 0; + var TEXTURE_FILTER_BILINEAR; + var TEXTURE_FILTER_TRILINEAR; + var TEXTURE_FILTER_ANISOTROPIC_4X; + var TEXTURE_FILTER_ANISOTROPIC_8X; + var TEXTURE_FILTER_ANISOTROPIC_16X; +} \ No newline at end of file diff --git a/test/src/OtherState.hx b/test/src/OtherState.hx index bf744e4..edf8a41 100644 --- a/test/src/OtherState.hx +++ b/test/src/OtherState.hx @@ -13,6 +13,7 @@ class OtherState extends FlxState { maurice = new FlxSprite(); maurice.loadGraphic("images/maurice.png"); maurice.screenCenter(); + maurice.antialiasing = true; add(maurice); } override public function update(elapsed:Float) { diff --git a/test/src/PlayState.hx b/test/src/PlayState.hx index db40351..36f51d3 100644 --- a/test/src/PlayState.hx +++ b/test/src/PlayState.hx @@ -1,9 +1,7 @@ package; -import flixel.FlxCamera; import flixel.FlxG; import flixel.FlxState; -import flixel.FlxObject; import flixel.FlxSprite; import raylib.RayMath; import raylib.Raylib; @@ -24,6 +22,7 @@ class PlayState extends FlxState { scythe.loadGraphic("images/scythe.png"); scythe.width *= 0.25; scythe.height *= 0.25; + scythe.antialiasing = true; add(scythe); } diff --git a/test/src/TextState.hx b/test/src/TextState.hx index 3fc7db4..08e0cb0 100644 --- a/test/src/TextState.hx +++ b/test/src/TextState.hx @@ -12,11 +12,17 @@ class TextState extends FlxState { text = new FlxText(0, 0, "This is FlxText!", 32); text.screenCenter(); + text.antialiasing = true; + text.font = "dumbnerd.ttf"; add(text); } override public function update(elapsed:Float) { super.update(elapsed); text.size = Math.sin(Raylib.getTime()) * 10 + 32; + + if(Raylib.isKeyPressed(32)) { + text.antialiasingLevel = TEXTURE_FILTER_ANISOTROPIC_16X; + } } } \ No newline at end of file