Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
DAY 009:_PutImage
#27
SMcNeill
And, let me share an example here, for WHY one might want to use hardware images.

Code: (Select All)
'mode 33 copyimage test

SCREEN _NEWIMAGE(800, 600, 32)
RANDOMIZE TIMER

FOR i = 1 TO 100

    LINE (RND * 800, RND * 600)-(RND * 800, RND * 600), _RGB32(RND * 256, RND * 256, RND * 256), BF
    CircleFill RND * 800, RND * 600, RND * 200, _RGB32(RND * 256, RND * 256, RND * 256)
    LINE (100, 100)-(200, 200), -1, BF 'white box to keep things simple
NEXT
PRINT "Let's take a moment and showcase WHY we might want to use hardware images."
PRINT
PRINT "First, let's start with an simple image, and let's copy it to hardware."

h2& = _COPYIMAGE(0)
h2hw& = _COPYIMAGE(0, 33) '<------    make a copy of the screen and make it a hardware copy
changedirection = -1
x = 400: y = 300
xchange = -1: ychange = 1
SLEEP
_DELAY .25
_KEYCLEAR

t# = TIMER
DO
    fps = fps + 1
    CLS
    IF changedirection THEN xchange = -1 * xchange: ychange = -1 * ychange: changedirection = 0
    x = x + xchange: y = y + ychange
    IF x < 0 OR x > _WIDTH OR y < 0 OR y > _HEIGHT THEN changedirection = -1
    _PUTIMAGE (x, y)-STEP(200, 200), h2& 'put the software image on the screen
    IF TIMER > t# + 1 THEN out1$ = STR$(fps): t# = TIMER: fps = 0
    PRINT "FPS:"; out1$; " with use of _PUTIMAGE with software screens and software "
    _DISPLAY 'hardware images require a DISPLAY statement to render
LOOP UNTIL _KEYHIT

_DELAY .25
_KEYCLEAR
t# = TIMER: fps = 0
DO
    fps = fps + 1
    CLS
    IF changedirection THEN xchange = -1 * xchange: ychange = -1 * ychange: changedirection = 0
    x = x + xchange: y = y + ychange
    IF x < 0 OR x > _WIDTH OR y < 0 OR y > _HEIGHT THEN changedirection = -1
    _PUTIMAGE (x, y)-STEP(200, 200), h2hw& 'put the hardware image over the screen  (they're separate layers, so you can overlap them)
    IF TIMER > t# + 1 THEN out2$ = STR$(fps): t# = TIMER: fps = 0
    PRINT "FPS:"; out1$; " with use of _PUTIMAGE with software screens and software images"
    PRINT "FPS:"; out2$; " with use of _PUTIMAGE with software screens and hardware images"
    _DISPLAY 'hardware images require a DISPLAY statement to render
LOOP UNTIL _KEYHIT

_DELAY .25
_KEYCLEAR

_DISPLAYORDER _HARDWARE 'notice I'm not using a software screen at all now.  The PRINT Statements below will NOT show.

t# = TIMER: fps = 0
DO
    fps = fps + 1
    CLS
    IF changedirection THEN xchange = -1 * xchange: ychange = -1 * ychange: changedirection = 0
    x = x + xchange: y = y + ychange
    IF x < 0 OR x > _WIDTH OR y < 0 OR y > _HEIGHT THEN changedirection = -1
    _PUTIMAGE (x, y)-STEP(200, 200), h2hw& 'put the hardware image over the screen  (they're separate layers, so you can overlap them)
    IF TIMER > t# + 1 THEN out3$ = STR$(fps): t# = TIMER: fps = 0
    PRINT "FPS:"; out1$; " with use of _PUTIMAGE with software screens and software images"
    PRINT "FPS:"; out2$; " with use of _PUTIMAGE with software screens and hardware images"
    _DISPLAY 'hardware images require a DISPLAY statement to render
LOOP UNTIL _KEYHIT

_DISPLAYORDER _SOFTWARE , _HARDWARE 'lets put the software screens back into our display
CLS

PRINT "FPS:"; out1$; " with use of _PUTIMAGE with software screens and software images"
PRINT "FPS:"; out2$; " with use of _PUTIMAGE with software screens and hardware images"
PRINT "FPS:"; out3$; " with use of _PUTIMAGE with hardware ONLY images and screens"





SUB CircleFill (CX AS LONG, CY AS LONG, R AS LONG, C AS LONG)
    DIM Radius AS LONG, RadiusError AS LONG
    DIM X AS LONG, Y AS LONG

    Radius = ABS(R)
    RadiusError = -Radius
    X = Radius
    Y = 0

    IF Radius = 0 THEN PSET (CX, CY), C: EXIT SUB

    ' Draw the middle span here so we don't draw it twice in the main loop,
    ' which would be a problem with blending turned on.
    LINE (CX - X, CY)-(CX + X, CY), C, BF

    WHILE X > Y
        RadiusError = RadiusError + Y * 2 + 1
        IF RadiusError >= 0 THEN
            IF X <> Y + 1 THEN
                LINE (CX - Y, CY - X)-(CX + Y, CY - X), C, BF
                LINE (CX - Y, CY + X)-(CX + Y, CY + X), C, BF
            END IF
            X = X - 1
            RadiusError = RadiusError - X * 2
        END IF
        Y = Y + 1
        LINE (CX - X, CY - Y)-(CX + X, CY - Y), C, BF
        LINE (CX - X, CY + Y)-(CX + X, CY + Y), C, BF
    WEND

END SUB

Now this is about as simple as a demo as I can imagine writing to showcase what needs to be shown here.  All we're doing in this example is drawing a screen of simple lines and circles, and then we're saving that screen as an image.  (Two images actually -- one software, one hardware, for comparison.)

We then throw that image onto a clean screen and move it in an unlimited loop, and count how many times it moves in a second.  Once we know our FPS, the user can hit any key they want and see the *exact* same code and process, and how fast it'd run if we swapped in a hardware image instead of a software image.  Once happy with seeing those results, the user can then hit any key they want and see that *exact* same code run with ONLY hardware support, and see what the difference is in performance.

I think the results, printed as a nice summery on the last page, speak for themselves as to why someone might want to start using hardware images over software.  Wink



And somehow, I posted this entirely in the wrong topic.  There's a copy of this in my CircleFill topic now as well, as I just copied our circlefiller for here from there, and then somehow posted this there instead of here.  LOL!
Reply


Messages In This Thread
DAY 009:_PutImage - by bplus - 11-15-2022, 12:00 AM
RE: DAY 009:_PutImage - by bplus - 11-15-2022, 12:23 AM
RE: DAY 009:_PutImage - by bplus - 11-15-2022, 12:32 AM
RE: DAY 009:_PutImage - by PhilOfPerth - 11-15-2022, 01:25 AM
RE: DAY 009:_PutImage - by mnrvovrfc - 11-15-2022, 12:38 AM
RE: DAY 009:_PutImage - by james2464 - 11-15-2022, 01:09 AM
RE: DAY 009:_PutImage - by bplus - 11-15-2022, 01:22 AM
RE: DAY 009:_PutImage - by bplus - 11-15-2022, 01:49 AM
RE: DAY 009:_PutImage - by PhilOfPerth - 11-15-2022, 01:58 AM
RE: DAY 009:_PutImage - by bplus - 11-15-2022, 02:19 AM
RE: DAY 009:_PutImage - by SMcNeill - 11-15-2022, 02:33 AM
RE: DAY 009:_PutImage - by bplus - 11-15-2022, 03:18 AM
RE: DAY 009:_PutImage - by Pete - 11-15-2022, 03:25 AM
RE: DAY 009:_PutImage - by grymmjack - 08-27-2023, 10:32 PM
RE: DAY 009:_PutImage - by james2464 - 11-15-2022, 04:20 AM
RE: DAY 009:_PutImage - by SMcNeill - 11-15-2022, 11:23 AM
RE: DAY 009:_PutImage - by james2464 - 11-15-2022, 04:32 PM
RE: DAY 009:_PutImage - by madscijr - 11-15-2022, 03:54 PM
RE: DAY 009:_PutImage - by SMcNeill - 11-15-2022, 04:37 PM
RE: DAY 009:_PutImage - by james2464 - 11-15-2022, 04:43 PM
RE: DAY 009:_PutImage - by Pete - 11-15-2022, 04:43 PM
RE: DAY 009:_PutImage - by bplus - 11-15-2022, 04:52 PM
RE: DAY 009:_PutImage - by james2464 - 11-15-2022, 07:19 PM
RE: DAY 009:_PutImage - by SMcNeill - 11-15-2022, 07:33 PM
RE: DAY 009:_PutImage - by james2464 - 11-15-2022, 08:20 PM
RE: DAY 009:_PutImage - by james2464 - 11-15-2022, 08:49 PM
RE: DAY 009:_PutImage - by bplus - 11-15-2022, 11:22 PM
RE: DAY 009:_PutImage - by SMcNeill - 11-15-2022, 11:46 PM
RE: DAY 009:_PutImage - by james2464 - 11-16-2022, 12:10 AM
RE: DAY 009:_PutImage - by SMcNeill - 11-16-2022, 01:00 AM
RE: DAY 009:_PutImage - by james2464 - 11-16-2022, 01:27 AM
RE: DAY 009:_PutImage - by james2464 - 11-16-2022, 03:48 AM
RE: DAY 009:_PutImage - by SMcNeill - 11-16-2022, 03:55 AM
RE: DAY 009:_PutImage - by james2464 - 11-16-2022, 04:01 AM
RE: DAY 009:_PutImage - by bplus - 11-16-2022, 05:21 AM
RE: DAY 009:_PutImage - by SMcNeill - 11-16-2022, 04:07 AM
RE: DAY 009:_PutImage - by james2464 - 11-16-2022, 04:38 AM
RE: DAY 009:_PutImage - by grymmjack - 08-27-2023, 09:58 PM
RE: DAY 009:_PutImage - by bplus - 08-27-2023, 11:16 PM
RE: DAY 009:_PutImage - by grymmjack - 08-27-2023, 11:51 PM
RE: DAY 009:_PutImage - by grymmjack - 08-28-2023, 12:14 AM
RE: DAY 009:_PutImage - by a740g - 08-28-2023, 07:49 AM
RE: DAY 009:_PutImage - by grymmjack - 08-28-2023, 11:32 AM
RE: DAY 009:_PutImage - by grymmjack - 08-28-2023, 11:51 AM
RE: DAY 009:_PutImage - by bplus - 08-28-2023, 01:33 AM
RE: DAY 009:_PutImage - by bplus - 08-29-2023, 03:21 PM
RE: DAY 009:_PutImage - by grymmjack - 08-29-2023, 10:41 PM



Users browsing this thread: 3 Guest(s)