If you really want to get the best performance from your c++ coding adventures, you’re gonna have to really get deep into the low-level experience. That means learning how to use pointers and directly accessing memory and data, which is always risky, but with care and proper practices, it shouldn’t even make you flinch. So here are some tips on how to master even c++ pointers and operators.
Usually when you’re accessing a pointer to a member of a class or object, you can do so in c++ like this:
//accessing member of object 10 in the someObject array/list
When you’re programming graphics, you’ll be dealing with color blending and pixels and bitmaps and images and pointers and scanlines and compression, alladat jazz. If you’re not fully trained, it could get quite overwhelming. If you want a super simplified explanation of graphics, it’s just a HUGE array of numbers. And an array itself is like a container, a piece of memory in your computer that stores all those numbers. Continue reading “32-bit Color Blending Hints”
If you’re into modern Windows API c++ programming, it seems things have gotten just slightly easier. Naming conventions for classes, functions, structs, enums, etc. just aren’t as confusing anymore. I’m sure technical experts know how to move virtual memory around, which is essentially what programming and problem solving is, but if you’re just sitting down for some casual tinkering, it’s going to be a nightmare. You’re relying on the developers before you to name things intuitively.
So now Windows API documentation has been trying to promote using their generic PVOID struct more. It’s safer, maybe. It’s nothing special. It’s a generic struct to get a pointer to some data, any data. But you have to cast the data type yourself.
Knowing when to use [ ] vs .at( ) in Qt to read vs write data to objects
In Qt c++, you can directly access members of an object, whether it’s a class or struct, by using the square brackets [ and ] after the name of the object. For example:
Using square brackets [ and ] on an object allows you to directly READ AND WRITE to the member. However, knowing the difference between WHEN to use it could help increase the performance of the data handling cycles. In order to directly access that member data, and to allow read AND write access, Qt has to create a new pointer to the object itself in memory to do so. And creating pointers costs a lot of memory. And if you’re dealing with hundreds of thousands of objects and their hundreds of members, then things can get sluggish. Continue reading “Knowing when to use [ ] vs .at( ) in Qt to read vs write data to objects”
Draw only what needs to be drawn, so culling and z-ordering can only help more
The ideal is to get a higher framerate which is perceivably better experience for the user. For 2D graphics, 16 frames per second is satisfactory. But for 3D graphics, 30 frames per second seems to be tolerable, but 60 frames per second is the minimal. But if you’re just learning 3D graphics programming, don’t worry about frames per second, just worry about the geometry and math to make sure it is correct. Then you can optimize it when you’re confident you understand how it all works.
The main reason I had to rollback to using Qt 4.8.5 since I was developing on Qt 4.8.7 on a Windows 7 machine was because after upgrading to Windows 10, my 4.8.7 apps failed in so many levels. Something as simple as loading an image was completely broken. I did a little digging and it turns out since Qt 4.8.6, support for versions of Windows before version 10 was dropped. So instead of gambling with newer versions of Qt that just won’t work on my “old” development Windows machine, I have to count on the versions of Qt that will. And Qt 4.8.5 was the last functioning version that seemed to be supported by most Windows versions.
I had to abandon Qt 4.8.7 because it just doesn’t work on Windows 8 and later versions. So I reverted back to Qt 4.8.5 and had to rewrite EVERYTHING. But it works now and maybe even better. Shorter code and faster runtime. Might have to do with learning better tricks. But check it out!
For many Qt lovers out there who might want to use third-party EXIF parsing library with their Qt apps, it may prove difficult unless you know what you’re doing. If you’re a hobbyist like me, man, it’s just tough. But there are free EXIF parsers out there, and it might take a little elbow grease to make it work with Qt. In my case, I put together a very simple and basic image viewer that I thought users might appreciate if it auto-rotated any images that contained EXIF metadata such as orientation. In smartphones and DSLRs, there is usually a sensor that records which orientation the picture was taken in. So when you view the photo without orientation applied, it might be a minor nuisance having to manually rotate it. That’s where you come in as software developer and take care of it for the end-user. Continue reading “How To Read EXIF Orientation From JPEG in Qt 4.8.5”