Had some free time today, so just for fun I did a bit of a rewrite of Handoko's Slideshow project (using BGRABitmap like I had suggested, along with some other changes to the rendering code). Obviously this isn't a contest entry or anything, moreso just something I did as an example/learning template for others. I've attached a zip file that includes the changed files/forms. You'll need to add BGRABitmap to the projects requirements in order to use them, of course.
EDIT: Forgot to change the OpenDialog to be able to recognize non-JPEG images. Ended up just making it an OpenPictureDialog so I wouldn't have to type out every file extension manually, and re-uploaded the zip file.
EDIT (again): Realized I had broken the timing code. Fixed it. Re-uploaded. Everything should work as intended now. Don't drink and code, kids!
EDIT, Part III (Bigger And Editier): posted this below but will post it up here as well. If you're on Windows neither of the following two things are necessary, but if you're on Linux, change line 30 of "uniGraphics.pas" to look like this:
{$IFDEF WINDOWS}
TexCoords: array[0..7] of SmallInt = (0, -1, 1, -1, 1, 0, 0, 0);
{$ELSE}
TexCoords: array[0..7] of SmallInt = (0, 1, 1, 1, 1, 0, 0, 0);
{$ENDIF}
And at around line 415 of same unit, in the "CreateOpenGLTexture" function, change it to look like:
{$IFDEF WINDOWS}
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, TempBitmap.Width, TempBitmap.Height, 0, GL_BGRA, GL_UNSIGNED_BYTE, TempBitmap.Data);
{$ELSE}
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, TempBitmap.Width, TempBitmap.Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, TempBitmap.Data);
{$ENDIF}
Edit 4/Update: Added the above defines directly to the source. Also completely did away with the use of the fixed-function OpenGL matrix transformation API, replacing it with two "advanced record" types: TMatrix, which can Scale/Rotate/Translate/Multiply itself, and TCamera, which uses a TMatrix internally and uploads the final transformed data from it directly with glLoadMatrixF. Lastly, I changed the array of TBGRABitmaps to simply be an array of filename strings, so that they're only in memory temporarily when being loaded into OpenGL and assigned to the TBitButton glyphs. I've re-attached an updated version of the zip file with all of these changes, of course. Probably done playing around with the source for now, although I might re-visit it later.
Edit 5: Made a few more refinements/fixes/changes... All of the rendering functionality is now wrapped in advanced records (TSlideShowRenderer and TSlideShowConstants, as well as the previously mentioned TMatrix and TCamera) to allow for a nice object-oriented user/programmer experience. I also added RibbonRight and RibbonDown transitions, as it seemed like something was missing with only RibbonLeft and RibbonUp. Re-uploaded the zip file. Really done now!
Edit 6: Finished up a rough/naive take at merging the features from Handoko's latest version with my modified one. It includes all of the transition types as well as the same ability to load an infinite number of slides. I didn't get around to adapting the more extraneous features such as the slide re-ordering yet, though. Also, the TOpenGLControl now has a TSplitter on both the side and bottom, so you can resize it freely within the form. New zip file is attached.
Edit 7: My version now has all of the same right-click popup-menu-based slide reordering and removal functionality that Handoko's last update did. More interestingly/importantly, I also implemented the ability to save and load your slide/transition lineups to and from file, which Handoko had said was an intended feature. This is accessed through a standard "File" menu at the top of the form. Apart from that, I reworked the way I implemented some of the transitions a little bit as I realized I had caused weird scaling problems in certain edge cases. Again, I've attached a new zip file.