Hardware images: Difference between revisions
Jump to navigation
Jump to search
Hardware Images (QB64 version 1.000 and up)
Demonstration of the Advantages of Using Hardware Images
Examples by Johny B.
Examples by Johny B.
Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link
No edit summary |
No edit summary |
||
Line 34: | Line 34: | ||
k = {{Cl|_KEYHIT}} | k = {{Cl|_KEYHIT}} | ||
{{Cl|SELECT CASE}} k | {{Cl|SELECT CASE}} k | ||
{{Cl|CASE}} {{Cl|ASC}}("w"): y = y - 1 | {{Cl|CASE}} {{Cl|ASC (function)|ASC}}("w"): y = y - 1 | ||
{{Cl|CASE}} {{Cl|ASC}}("a"): x = x - 1 | {{Cl|CASE}} {{Cl|ASC (function)|ASC}}("a"): x = x - 1 | ||
{{Cl|CASE}} {{Cl|ASC}}("s"): y = y + 1 | {{Cl|CASE}} {{Cl|ASC (function)|ASC}}("s"): y = y + 1 | ||
{{Cl|CASE}} {{Cl|ASC}}("d"): x = x + 1 | {{Cl|CASE}} {{Cl|ASC (function)|ASC}}("d"): x = x + 1 | ||
{{Cl|END SELECT}} | {{Cl|END SELECT}} | ||
{{Cl|_DISPLAY}} 'render image after changes | {{Cl|_DISPLAY}} 'render image after changes | ||
Line 79: | Line 79: | ||
k = {{Cl|_KEYHIT}} | k = {{Cl|_KEYHIT}} | ||
{{Cl|SELECT CASE}} k | {{Cl|SELECT CASE}} k | ||
{{Cl|CASE}} {{Cl|ASC}}("w"): y = y - 1 | {{Cl|CASE}} {{Cl|ASC (function)|ASC}}("w"): y = y - 1 | ||
{{Cl|CASE}} {{Cl|ASC}}("a"): x = x - 1 | {{Cl|CASE}} {{Cl|ASC (function)|ASC}}("a"): x = x - 1 | ||
{{Cl|CASE}} {{Cl|ASC}}("s"): y = y + 1 | {{Cl|CASE}} {{Cl|ASC (function)|ASC}}("s"): y = y + 1 | ||
{{Cl|CASE}} {{Cl|ASC}}("d"): x = x + 1 | {{Cl|CASE}} {{Cl|ASC (function)|ASC}}("d"): x = x + 1 | ||
{{Cl|END SELECT}} | {{Cl|END SELECT}} | ||
{{Cl|_DISPLAY}} 'render image after changes | {{Cl|_DISPLAY}} 'render image after changes |
Revision as of 00:35, 26 February 2023
- QB64 can create hardware images using _LOADIMAGE files or _COPYIMAGE with mode 33 as the second parameter.
- Hardware images can be displayed using _PUTIMAGE or _MAPTRIANGLE with special texture properties.
- _COPYIMAGE mode 33 can convert images created by _NEWIMAGE, _LOADIMAGE or _SCREENIMAGE to hardware images.
- The first example uses software images while using between 20 - 30% processor power:
SCREEN _NEWIMAGE(640, 480, 32) 'create some software screens scr_bg = _NEWIMAGE(640, 480, 32) scr_fg = _NEWIMAGE(50, 50, 32) 'draw to the background one, and make a nice pattern _DEST scr_bg FOR i = 1 TO 100 LINE (RND * 640, RND * 480)-(RND * 640, RND * 480), _RGBA32(RND * 255, RND * 255, RND * 255, RND * 255), BF NEXT i 'then do the same thing for the foreground _DEST scr_fg LINE (0, 0)-(50, 50), _RGBA32(255, 255, 255, 200), BF 'set image destination to main screen _DEST 0 DO CLS _PUTIMAGE , scr_bg _PUTIMAGE (x, y), scr_fg k = _KEYHIT SELECT CASE k CASE ASC("w"): y = y - 1 CASE ASC("a"): x = x - 1 CASE ASC("s"): y = y + 1 CASE ASC("d"): x = x + 1 END SELECT _DISPLAY 'render image after changes _LIMIT 30 'we're doing all this at 30 cycles/second LOOP |
- The second example converts the foreground and background software screens to hardware using 6-7% processor power:
SCREEN _NEWIMAGE(640, 480, 32) 'create some software screens scr_bg = _NEWIMAGE(640, 480, 32) scr_fg = _NEWIMAGE(50, 50, 32) 'draw to the background one, and make a nice pattern _DEST scr_bg FOR i = 1 TO 100 LINE (RND * 640, RND * 480)-(RND * 640, RND * 480), _RGBA32(RND * 255, RND * 255, RND * 255, RND * 255), BF NEXT i 'create a hardware screen version of the background scrh_bg = _COPYIMAGE(scr_bg, 33) _FREEIMAGE scr_bg 'we no longer need the software version in memory 'then do the same thing for the foreground _DEST scr_fg LINE (0, 0)-(50, 50), _RGBA32(255, 255, 255, 200), BF 'copy to hardware screen scrh_fg = _COPYIMAGE(scr_fg, 33) _FREEIMAGE scr_fg 'and free software screen from memory 'set image destination to main screen _DEST 0 _DISPLAYORDER _HARDWARE 'do not even render the software layer, just the hardware one. DO 'main program loop '_putimage knows these are hardware screens, so destination of 0 is taken as hardware layer _PUTIMAGE , scrh_bg _PUTIMAGE (x, y), scrh_fg 'just some input processing k = _KEYHIT SELECT CASE k CASE ASC("w"): y = y - 1 CASE ASC("a"): x = x - 1 CASE ASC("s"): y = y + 1 CASE ASC("d"): x = x + 1 END SELECT _DISPLAY 'render image after changes _LIMIT 30 'we're doing all this at 30 cycles/second LOOP |
See also