Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Possible CLS improvement
#9
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
There are two ways to write error-free programs; only the third one works.
QB64 Tutorial
Reply


Messages In This Thread
Possible CLS improvement - by TerryRitchie - 10-09-2023, 04:35 PM
RE: Possible CLS improvement - by SMcNeill - 10-09-2023, 04:51 PM
RE: Possible CLS improvement - by TerryRitchie - 10-09-2023, 04:56 PM
RE: Possible CLS improvement - by James D Jarvis - 10-09-2023, 05:36 PM
RE: Possible CLS improvement - by TerryRitchie - 10-09-2023, 06:23 PM
RE: Possible CLS improvement - by SMcNeill - 10-09-2023, 06:36 PM
RE: Possible CLS improvement - by TerryRitchie - 10-09-2023, 09:33 PM
RE: Possible CLS improvement - by mnrvovrfc - 10-10-2023, 02:53 PM
RE: Possible CLS improvement - by TerryRitchie - 10-10-2023, 05:03 PM
RE: Possible CLS improvement - by Jack - 10-10-2023, 05:30 PM
RE: Possible CLS improvement - by TerryRitchie - 10-10-2023, 06:10 PM
RE: Possible CLS improvement - by TerryRitchie - 10-10-2023, 07:30 PM
RE: Possible CLS improvement - by SMcNeill - 10-11-2023, 12:18 AM
RE: Possible CLS improvement - by SMcNeill - 10-11-2023, 02:20 AM
RE: Possible CLS improvement - by mnrvovrfc - 10-11-2023, 03:33 AM



Users browsing this thread: 11 Guest(s)