First post, by rkk
Hi everyone. Just sharing my project (RetroBridge) here in case there it is useful for someone. RetroBridge is a SGL (PowerVR), Glide (3DFX), DDRAW, WinMM and DSound wrapper with extra compatibility hooks and virtual FS emulation system (Feature creep deluxe edition), mainly targeted at getting Ultim@te Race (The 1-track and 3 track version) and the Ultim@te Race Pro (Currently only the 1.50 version) to run.
For context and side story: I grew up with a Voodoo 2 that shipped with a copy of Ultim@te Race Pro.. and was part of my childhood. My father bought that Voodoo 2 for no apparent reason (I had not clue about those things back in those times), but the games definitely stuck to me. Funnily enough, nobody noticed that we were playing the game in Software Mode for several years. At some point I grew up, and learned about computers, and I found out that the Voodoo 2 card we had was never used, and that the short VGA cable that was supposed to be connected to the VGA card to route to the Voodoo and then to have the Voodoo connected to the monitor.. My father connected the short VGA cable to the input and output of the Voodoo card itself, and had the monitor connected to the VGA card to the display.. (He apparently never bothered to read the manual! 🤣). And despite the couple of years of delay, I remember like it's yesterday, the first time I saw the glory of full on Voodoo 2 hardware acceleration. Time passed, and with the introduction of Glide wrappers like nGlide, I could play URP at full HD glory. But there was one version I was extremely curious about.. and that is the 1-Track version of Ultim@te Race (The non PRO version), but that one only works on a PowerVR GPU.. that was already hard to find at the time. Anyway, that brings me to a message of Tuxality somewhere around 10 years ago (I was still in university), who claimed that he built a SGL wrapper similar to Glide, but he never released the DLLs to try it out. I remember the frustration, and I told myself that the day I find some spare time, I will try to build a SGL wrapper myself to play this game and I will share it with people like me. But given the amount of moving parts (Learn a Graphics API + the PowerVR hardware + having the actual spare time to plan and implement it all) and my rather busy life, my best estimate was that I'll start doing it once I retire, just for the pure joy of learning and doing it. But with the advent of AI and my own experience, things have sped up considerably, making learning, solving and prototyping so much faster, that I decided to try to do what I thought I wouldn't be able to do in the next 20 years. And from there RetroBridge was born. And in case it is important to you, RetroBridge has been developed making heavy use of AI tools.
Please note that RetroBridge is not aimed at competing with established solutions like nGlide, dgVoodoo and similar, and is merely a personal project for learning and growth that I want to share with people who might find it useful.
For those who are curious, the system is using a unified and abstract Virtual GPU / Audio / Joystick and Network device that is used by all the "shims/wrappers" that then output to it's respective swappable backend (For now for everything graphic it's Vulkan, for audio it's WASAPI and for Joystick it's XInput). It also hooks into filesystem methods, so you can make the game think that you have a CD inserted or any other virtual drive layouts needed to run the game, and define its content from within the retrobridge.config.yml file. I also added a WINMM shim that allows playing of FLAC/OGG audio files instead of CDAUDIO, heavily inspired by ogg-winmm (Where I also contributed many years ago). Texture dumping and HD texture replacement is also working, yielding interesting results.
Glide is pretty well documented and understood and operates much closer to how our GPUs work now a days. With SGL and it's tile based rendering and quirks, I made a lot of assumptions approximating the look of the games and SGL demos to based on screenshots I found online. I'd highly appreciate if people with real PowerVR (SGL) hardware could share their side by side screenshots, on how things look like on the real hardware. Fog is heavily aproximated to what I've seen in in-game screenshots, and in some games like in Ultim@te Race (The 1 and 3 track version), shadows do not work correctly (The shadow volume is coming out weird and I'm still figuring out how to build it correctly, or if the game is just buggy). The results I'm getting are somewhat similar to what is seen on a Neon250 (From Videos and Screnshots that I've seen). The mini-map seems also buggy in the 1 track version of Ultim@te Race. SGL Direct is the one working the best, Power SGL is still pretty much work in progress, with early successes.
Other tested games:
- Sub Culture: Seems to work fine in Glide mode, SGL mode works but the fog seems wrong (But I have no SGL/PowerVR reference image), and the DDRAW version does not seem to work correctly yet.
- POD: I only tested the Glide version with the GOG version (That needs the POD patches), but there it seems to work fine, in exception of the car selection menu, where the vertex order is reversed.
Here are some screenshots:
Here is the 1-track version of Ultim@te Race in 4k (SGL)
The Pro version in Glide looks pretty accurate to me:
But running in SGL mode on the PRO version, It yields a similar output like the PowerVR Neon250 (From what I can tell from the screenshots), with the buggy sky and fog.
That would be all for now, I'd love to hear your feedback and I'd appreciate people sharing screenshots of the 1-Track and Pro version of Ultim@te Race on PowerVS (SGL) hardware.