Ok my informal tests are in (clearly avoiding actual work) and the results are clear:
You can't tell its not butter! No
dif-france!I got zero difference by scaling first and then using drawRotatedobject or rotating first and using drawscaledobject.
On the test below ( scale first) i get 3333 or 3334 milliseconds every time on a roku3, same results with rotate first.
I will say rotating first is more complicated and needs an extra region and more complex math, at least how i did it.
All in all I'd definitely say scale first and draw rotated.
Sub Main()
screen=CreateObject("roScreen", true, 1280, 720)
msgport=CreateObject("roMessagePort")
screen.SetPort(msgport)
fontreg = createobject("rofontregistry")
font = fontreg.GetDefaultFont(50, false, false)
elapsedtime = CreateObject("roTimespan")
scale = 400
scaledirection=true
theta = 0
testresult = "0"
regLoc = 0
bitscale = 1.0
bitloc = 0
bitty = CreateObject("roBitmap", {width:scale, height:scale, AlphaEnable:True})
bitty2 = CreateObject("roBitmap", {width:scale, height:scale, AlphaEnable:True})
bitty3 = CreateObject("roBitmap", {width:scale, height:scale, AlphaEnable:True})
bitty2.Clear(&hFF0000FF)
bitty3.Clear(&h0000FFFF)
bitty2.drawScaledobject( 100, 100, .5, .5, bitty3, &h0000FFFF)
bitty.drawobject( 0,0, bitty2)
reggie = CreateObject( "roRegion",bitty, regLoc, regLoc, scale, scale )
reggie.SetPretranslation( -scale/2, -scale/2)
while true
screen.Clear(&hebebebFF)
screen.SetAlphaEnable(true)
screen.drawtext( testresult, 50 , 50 , &h0000FFFF, font)
screen.drawRotatedobject( 640, 360, theta, reggie)
screen.swapbuffers()
theta = theta + 3.6
if theta > 360
theta= 0
end if
if scaledirection
scale = scale -4 : regLoc = regLoc+1: bitscale = bitscale -.01: bitloc = bitloc +1
else
scale = scale +4 : regLoc = regLoc-1 : bitscale = bitscale +.01 : bitloc = bitloc -1
end if
if scale = 0
scaledirection = false
else if scale >= 400
scaledirection = true
testresult = elapsedtime.Totalmilliseconds().toStr()
elapsedtime.Mark()
end if
bitty.Clear(&hFFFFFF00)
bitty.drawScaledobject( bitloc, bitloc, bitscale, bitscale, bitty2)
reggie = CreateObject( "roRegion",bitty, regLoc, regLoc, scale, scale )
reggie.SetPretranslation( -scale/2, -scale/2)
end while
End Sub