I am 19 and a sophomore at NC State University, double majoring in computer science and computer engineering. I am currently three weeks away from completing a six-month intership at Cisco Systems, where I work in the Cisco TAC (Technical Assistance Center) labs. As you may have already guessed, my interests include, but are not limited to, computer graphics and networking, specifically network security.
And that's quite enough about me.
I am currently working on a (perhaps frivolous) project involving writing a software implementation of some of the more common games-relevant aspects of the GDI+ graphics library.
I think it's referred to as a library...?
Anyhow, the project spawned from an earlier project in which I attempted to build a sprite-based game engine, first using DirectX 9 sprite functions and then, after realizing that I really had no idea what was going on with DirectX, with GDI+.
I quickly realized that GDI+ was somewhat less than adequate for the implementation that I had in my head (involving full alpha blending, dynamic scaling of images, etc.), and I found myself in a bit of a rut. I didn't really understand DirectX as much as I would like, but GDI+ couldn't do what I wanted. So what was I to do?
At that point, I'm sure many of you would just have sucked it up and delved into DirectX, but I didn't (and still don't) care to attempt to tackle wrapping my mind around a 3D API until I have a solid understanding of the more basic 2D concepts.
And so, my project began.
Six months later, and after many periods of little to no actual development, I have a basic graphics engine working, at relatively acceptable frame rates (the definition of which, I have learned, is somewhat subjective) - a steady 30 FPS. Nonetheless, I am pleased with the project thus far, and am planning to expand it into a full-blown engine, with several tools (i.e. image loading and sound libraries, etc.) that I can utilize in any further engines I may develop later on.
While I am new to large projects, I'm not so new as to be unaware of the fact that my goals are lofty, and that many projects such as this have been started and never finished, for various reasons. I've learned enough from the small amount that I have actually accomplished, however, that regardless of how far I actually get, what I do manage to accomplish will be well worth the experience and knowledge gained.
So without further ado, screenies!
The first image simply shows some of my programmer art (yay!) while the second demonstrates the ability to alpha blend literally any and every image. The alpha blend is a true "divide by 255" blend, so it is slow, though the "bitwise shift 8" trick only improves the performance by a frame or two on most computers. Go figure.
The entire project is being written in pure C++, the only exception being a three-line "Present()" function in the CBackbuffer class which grabs the window handle and makes a call to std::BitBlt() in order to display the backbuffer's contents to the screen.
I'm sure there are other technical details that I should cover, but at this point I think I have far exceeded the acceptable "initial post" size limit, so I will leave you with a link to the executable and hope that I have somehow managed to pique someone's interest.
Controls for the demo are as follows:
Arrow Keys :: Movement
Shift :: Toggle Alpha Blending/Speed Mode
F12 :: Toggle FPS Counter
F11 :: Toggle FPS Limit
Until next time, I bid you farewell.