I noticed the tilemap draw method has the option to provide a sourcerect to only draw parts of the tilemap. playdate.graphics.tilemap:draw(x, y, [sourceRect])

I was wondering if anyone knew what this did and had an example of it working. I was unsure if this was a rect relative to the screen or the tilemap itself (and then, in world coordinates or tile coordinates?), but every rect I passed it resulted in the tilemap not drawing at all. I have a large tilemap so I was looking for ways to improve performance.
Thanks!

EDIT: Unrelated, is there an ETA for the Sampler to come to the Windows SDK?

When you specify sourceRect all it’s doing under the hood is setting a clip rect on the current graphics context the size of sourceRect then translating the tilemap drawing to line up the sourceRect with the x,y arguments to tilemap:draw(). Coordinates are in pixel coordinates, not tile coordinates.

local gfx = playdate.graphics
local t = gfx.imagetable.new("slash")
local map = gfx.tilemap.new()
map:setImageTable(t)
map:setSize(10,6)
for n=0,60 do
map:setTileAtPosition(1+n%10,1+n/10,math.random(2))
end
local mapx, mapy = 30, 30
local dx,dy = 0, 0
function playdate.update()
local x = math.random(10)
local y = math.random(6)
local t = map:getTileAtPosition(x,y)
map:setTileAtPosition(x,y,3-t)
mapx += dx
mapy += dy
-- draw the tilemap's subrect (mapx,mapy,160,160) at screen coordinates (120,40)
map:draw(120,40, mapx,mapy,160,160)
end
function playdate.leftButtonDown() dx -= 1 end
function playdate.leftButtonUp() dx += 1 end
function playdate.rightButtonDown() dx += 1 end
function playdate.rightButtonUp() dx -= 1 end
function playdate.upButtonDown() dy -= 1 end
function playdate.upButtonUp() dy += 1 end
function playdate.downButtonDown() dy += 1 end
function playdate.downButtonUp() dy -= 1 end