Thx both for the suggestions, but they are not working for me at the moment.
To Dave:
Settings explicit width doesn’t fix the problem, and I tried to move my text object x,y to other integer position, they render the same.
However, setting different text object width does affect which glyphs gets more “blurred”, it seems. Here is two examples where I attempt to render at 12 fontSize with 200 or 50 as width, both using a custom simulator device where contentScaleX will be 1 instead of iphone device’s 0.5.
self.stats = display.newText({ text = 'loading' -- placeholder , font = 'fonts/zpix.ttf' , fontSize = 12 , width = 200 , align = 'left' , x = 20 , y = 20 })


To Joshua:
I tried yours too, but as you can see from my above code and comment, textObject.x is 20, and contentScaleX is 1, there isn’t something to be “floored”, so the translate offset is 0,0.
I actually prefer working with top-left anchor too, so this is my default.
display.setDefault('minTextureFilter', 'nearest') display.setDefault('magTextureFilter', 'nearest') display.setDefault('anchorX', 0) display.setDefault('anchorY', 0)
Also I find a font designed specifically to be pixel-crisp at multiple of 12 appear on subpixel region unlikely.
For reference, here is one where I put text object on (20.5, 20.5) to explicitly trigger anti-aliasing, adding your code works for this scenario, but not the one I mentioned above, they are not the same thing:

