10-10-2023, 05:03 PM
I tested all the various methods pointed out in this thread and by far LINE is faster than anything else. I created a subroutine called CLSI (CLS Image) that can be used for my intended purpose. The code is below with a speed tester to show the slight improvement over CLS.
Code: (Select All)
'
' CLS Image
'
' There is a very slight increase in performance using CLSI over CLS.
' The reason I wrote CLS Image was to avoid having to change the
' destination to the image and then back again to the original image.
' The subroutine now handles that cleanly.
'
' Note that CLSI does not support CLS' methods (0 through 2).
'
CONST RED~& = _RGB32(255, 0, 0) ' define a few colors
CONST CYAN~& = _RGB32(0, 255, 255)
DIM Image AS LONG ' test image
DIM c AS LONG ' counter
DIM t1 AS DOUBLE ' time start
DIM t2 AS DOUBLE ' time end
DIM CLSTime AS DOUBLE ' CLS total time
DIM CLSITime AS DOUBLE ' CLSI total time
Image = _NEWIMAGE(320, 200, 32) ' create test image
SCREEN _NEWIMAGE(640, 480, 32) ' create graphics screen
'+----------------------------------------+
'| CLS time test ~2 seconds on 6th gen i7 |
'+----------------------------------------+
t1 = TIMER(.001) ' start time
c = 0 ' reset counter
DO ' begin counted loop
CLS , RED ' clear main screen red
_DEST Image ' change write image to Image
CLS , CYAN ' clear image cyan
_DEST 0 ' change write image to SCREEN
c = c + 1 ' increment counter
LOOP UNTIL c = 32768 ' leave after 32K times
t2 = TIMER(.001) ' end time
CLSTime = t2 - t1 ' calculate total time
'+-----------------------------------------+
'| CLSI time test ~2 seconds on 6th gen i7 |
'+-----------------------------------------+
t1 = TIMER(.001) ' start time
c = 0 ' reset counter
DO ' begin counted loop
CLSI RED, _DEST ' clear main screen red
CLSI CYAN, Image ' clear image cyan
c = c + 1 ' increment counter
LOOP UNTIL c = 32768 ' leave after 32K times
t2 = TIMER(.001) ' end time
CLSITime = t2 - t1 ' calculate total time
'+-----------------+
'| Display results |
'+-----------------+
_PUTIMAGE (159, 139), Image ' place test image onto graphics screen
PRINT "CLS :"; USING "##.#############"; CLSTime ' total time for CLS
PRINT "CLSI :"; USING "##.#############"; CLSITime ' total time for CLSI
PRINT "Difference:"; USING "##.#############"; CLSTime - CLSITime ' difference
SLEEP ' wait for key press
SYSTEM ' return to OS
' _____________________________________________________________________________
'/ \
SUB CLSI (bgColor AS _UNSIGNED LONG, ImageHandle AS LONG) ' CLSI |
' _________________________________________________________________________|____
'/ \
'| CLS Image |
'| Note: does not support CLS methods |
'| |
'| bgColor : color used to clear the image |
'| ImageHandle: image to clear |
'\______________________________________________________________________________/
DIM oDest AS LONG ' calling destination
oDest = _DEST ' save calling destination
_DEST ImageHandle ' change write image
LINE (0, 0)-(_WIDTH - 1, _HEIGHT - 1), bgColor, BF ' draw a box filled line
_DEST oDest ' return to calling destination
END SUB