DAY 009:_PutImage - Printable Version +- QB64 Phoenix Edition (https://staging.qb64phoenix.com) +-- Forum: Official Links (https://staging.qb64phoenix.com/forumdisplay.php?fid=16) +--- Forum: Learning Resources and Archives (https://staging.qb64phoenix.com/forumdisplay.php?fid=13) +---- Forum: Keyword of the Day! (https://staging.qb64phoenix.com/forumdisplay.php?fid=49) +---- Thread: DAY 009:_PutImage (/showthread.php?tid=1119) |
RE: DAY 009:_PutImage - bplus - 11-15-2022 (11-15-2022, 04:43 PM)Pete Wrote: Thanks for _SMOOTHing things over. Yes thankyou, Steve for checking into Smooth. I now have foggy memory or notion of trying out Smooth long ago and not getting anything noticeable happening. RE: DAY 009:_PutImage - james2464 - 11-15-2022 Trying to understand from the wiki about how _CopyImage somehow makes software images into hardware images if using mode 33. Quote:newhandle& = _COPYIMAGE(imageHandle&[, mode%]) Mode 32 is fine, but 33 doesn't seem to be doing anything. Code: (Select All) 'mode 33 copyimage test Maybe a certain variable type will work? No idea RE: DAY 009:_PutImage - SMcNeill - 11-15-2022 Try this for your first demo into hardware images: Code: (Select All) 'mode 33 copyimage test RE: DAY 009:_PutImage - james2464 - 11-15-2022 Thanks, I added the _Display and it works fine! RE: DAY 009:_PutImage - james2464 - 11-15-2022 _Smooth works! I attached the small image file used for this. Code: (Select All) 'Smooth image test RE: DAY 009:_PutImage - bplus - 11-15-2022 Oh that's how that's supposed to work, thanks guys! I tried it on our Logo: Sure it's blurry but it's not pixelated square tiles! So this is hardware images only. RE: DAY 009:_PutImage - SMcNeill - 11-15-2022 SMcNeill And, let me share an example here, for WHY one might want to use hardware images. Code: (Select All) 'mode 33 copyimage test 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. 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! RE: DAY 009:_PutImage - james2464 - 11-16-2022 This is really interesting. (And all news to me, really). So I realize I need to not just use _PUTIMAGE as a powerful image command, but I need to consider software vs hardware images. And so this topic has been enlightening. I just read this : https://staging.qb64phoenix.com/showthread.php?tid=226&highlight=hardware+images And now I'm wondering how this all works...what exactly are hardware images and software images? Why are they so different? I mean what is the reason for such different speeds and performance? Is this something that has been discussed or documented already so I can just find this info and start reading? Or would anyone like to explain it in a simple way? A couple of other related questions: How exactly does _Display work? I mean this as it relates to CLS, _DisplayOrder, and the which should go first in order to not cover or block the others? And finally: _FreeImage....is this something to be keeping close by in terms of not abusing memory or cpu usage? Sorry for so many questions RE: DAY 009:_PutImage - SMcNeill - 11-16-2022 @james2464 Lots of questions which are bleeding off into a lot of other keywords and all! Let me cover them here briefly, and if you have further questions, let's move the discussion for those other keywords elsewhere so as to not completely overwhelm this poor topic which should just be for _PUTIMAGE. Hardware images are basically completed screens that you send to your GPU to draw and render for you. They display for a single frame when _DISPLAY is called, and then they're gone. You can't edit them, change them, or do anything else with them, except just display them -- which is why they're so fast compared to software images. There's no such thing as PRINT displaying text on your hardware image. Hardware images are set in stone -- when you copy them, that's what they are! Forever and ever more!! Software images are the screens that you're working on in the CPU. They're easy to manipulate and change. Print to them. Draw on them. Use Circle, Line, and PSET on them. These are the screens that you've always used, so you should be used to using them. They're malleable and easy to work with. One important thing to keep in mind -- THE TWO SCREENS ARE COMPLETELY UNRELATED!! What you do with one has zero bearing with what happens to the other. In fact.... dun dun de dun... You can use hardware images with SCREEN 0 software screens! Overlay graphics over text screens! Who'da thunk it? Since we now know a little about the screens, let's briefly hit on _DISPLAYORDER. _DISPLAYORDER simply sets the order in which we layer our screens. Take a RED software screen, and a BLUE hardware screen. If both are solid colors, and they perfectly overlap each other, which one are we going to see displayed on our monitor? To make this easy to understand and visualize, get two pieces of paper and write RED on one and BLUE on the other. Put the RED (software) paper on the bottom, and the BLUE (hardware) page on top of it. Which can you see? The BLUE page! This is _DISPLAYORDER _SOFTWARE, _HARDWARE. Now, pick those pieces of paper back up and put the BLUE (hardware) page down first, and then lay the RED (software) page on top of it. What can you see? The RED page! That's basically _DISPLAYORDER _HARDWARE, _SOFTWARE. Now, pick those pages up once more, and this time you're going to toss the RED page completely away. Put the BLUE page down and what do you see? GASP!! The BLUE page!! That's what you get with just _DISPLAYORDER _HARDWARE. _DISPLAYORDER basically just sets the order with which you stack those independent pages/screens on top of each other. As for _DISPLAY, it basically just tells your program to sync up all your available pages and draw them all together, layered in the order you specified with _DISPLAYORDER. And _FREEIMAGE, like always, should be used once you're finished with *any* image, to keep it from using up precious memory on your PC. (And maybe eventually leading to a program crash for "out of memory" glitches.) RE: DAY 009:_PutImage - james2464 - 11-16-2022 Brilliant...Thank you very much for this. Sometimes new info leads to a bunch of questions so I appreciate you addressing them all. |