The short answer
Put one explicit call at the very top of love.load, before any image is created:
function love.load()
love.graphics.setDefaultFilter("linear", "linear")
-- load images after this point
end
That single line makes rendering identical on 0.10 and 0.11. You do not need love.getVersion() branching, and yes, there is a runtime query: love.graphics.getDefaultFilter() returns the current default minification and magnification modes (plus anisotropy).
Why the sprites turned blocky
The likely explanation — which matches your symptom exactly — is that LÖVE 0.11 changed the default texture filter from linear to nearest. Under 0.10, scaled sprites were smoothed by default; under 0.11 they are magnified with hard pixel edges, which reads as "blocky" for art authored assuming smoothing. Tutorials that never called setDefaultFilter silently relied on the old default, so upgrading the runtime changed their output with no code change on your side.
On the backward-compatibility question: the library is not going to revert the default, and you should not wait for it to. Treat the runtime default as unspecified and always set the filter your art expects. That is the version-independent strategy — explicit beats conditional.
Why not branch on love.getVersion()
A version check adds fragility without adding correctness. An explicit setDefaultFilter overrides whatever default the runtime ships, so the same call works on 0.10, 0.11, and later releases by construction. Version branching only makes sense when an API itself changed signature — not when only a default value changed.
Two gotchas that survive the fix
- Ordering matters.
setDefaultFilter only affects images and canvases created after the call. Textures created earlier keep the filter they were born with. If one sprite still looks blocky, either it was loaded before the call or something set image:setFilter("nearest") on it directly — per-image filters override the default. - Pixel art is the exception. If your game is deliberately pixel-art and you want crisp edges, then
nearest is the correct choice and 0.11's new default is actually doing you a favor. The blocky look is only a bug when the art was designed for linear smoothing.
Verifying the fix
Add a temporary print at the top of love.load to confirm what the runtime gives you before your override:
print(love.graphics.getDefaultFilter()) -- expect: nearest nearest (on 0.11)
love.graphics.setDefaultFilter("linear", "linear")
print(love.graphics.getDefaultFilter()) -- expect: linear linear
Then run the game and confirm scaled sprites are smoothed. If you still have a 0.10.x runtime available, run the same build there — identical output proves the version independence. One unrelated note: if colors also look wrong after the upgrade, that is a separate 0.11 migration issue (color values moved from 0–255 to 0–1 floats), not the filter.