Writeup: The Great(?) OpenGL Wrapper Race
Somehow, I always find myself gravitating back to the S3 ViRGE/DX.
This time around, rather than placing total focus on the ViRGE itself, we'll be taking a look at some OpenGL wrappers!
This writeup will be updated along the way as more videos release.
The setup is as follows:
Matsonic MS7102C
Windows 98SE RTM with the following patches/update: KernelEX 4.5.2, NUSB v3.3e, Windows Installer 2.0, DirectX 9.0c
Intel Pentium III (Coppermine) @ 750MHz
S3 ViRGE/DX @50MHz w/4MB EDO DRAM (using the S3 Virge "SuperUni" drivers)
256MB PC-133 SDRAM (Kingston KVR133X64C3/512) (System can only handle 256MB per DIMM)
Sound Blaster AWE32 CT2760
Some random 5GB Hitachi 2.5" HDD that I "borrowed" from a very dead laptop
Java 6 (1.6.0) build 105/Java 6u0
Wrappers to be tested:
S3Mesa - a wrapper based on the Mesa project. It's a full OpenGL implementation sitting on top of S3D and Direct3D, but from the available source code appears to be missing some functionality and is quite unstable.
AltOGL - also a wrapper based on the Mesa project, but relies solely on Direct3D. It is similarly missing some functionality, but is much more widely compatible with cards beyond the Virge thanks to its lack of reliance on S3's proprietary API.
Techland S3D - one of the many wrappers made by Techland for their Quake II engine-based "Crime Cities" game. Although it like S3's own GLQuake wrappers only implements as much of the API as is needed by the engine, it still implements far more features than S3's DX5 and DX6-based wrappers, of which are not tested in this wrapper race.
Techland D3D - like AltOGL, Techland's D3D counterpart to their S3D wrapper implements a subset of the OpenGL spec, but still enough to be compatible with a number of titles beyond Quake II engine games.
GLDirect 1.x - A very early version of GLDirect. There exists a license code for this version floating around on the internet that appears to have been used for internal testing by Shuttle, a PC manufacturer that's largely fallen out of relevance and mainly does industrial PCs nowadays.
GLDirect 3.0.0 - One of the last versions of GLDirect to support hardware acceleration on DX6-class graphics cards.
Things tested
WGLGears
ClassiCube 1.3.5 and 1.3.6
Minecraft: Indev in-20091223-1459, Alpha 1.0.4, Beta 1.7.3 (with and without Optifine), Release 1.5.2
Tux Racer
GL Excess benchmark
Half Life 1 v1.1.1.1 KingSoft NoSteam edition
Findings
GLDirect 1.01
OpenGL Version String
Vendor: SciTech Software, Inc.
Renderer: GLDirect S3 Inc. ViRGE/DX/GX
Version: 1.2 Mesa 3.1
Textures do not work at all in every test case besides Half Life.
ClassiCube 1.3.5 and 1.3.6 both fail to render any terrain beyond a greyish horizon and the outlines of blocks. All blocks, items, and text that are able to be rendered are pure white in color and have no textures applied.
Minecraft Indev in-20091223-1459 and Beta 1.7.3 with Optifine crash upon world-load
Minecraft Alpha 1.0.4, Beta 1.7.3, and Release 1.5.2 all crash upon launch.
Tux Racer is able to render 2D textures such as text and graphics, but flickers INTENSELY and is a seizure risk. Beyond this, however, the game will only render a solid white screen.
Half Life launches and runs, but at a terrible 4 FPS. The game lags hard enough that the tram in the opening area of the game is frozen where it is, preventing the player from accessing anything beyond the intro cutscene.
GL Excess crashes instantly.
Performance
GLGears: ~76 FPS
ClassiCube 1.3.5/1.3.6: Unknown; game fails to render
Minecraft in-20091223-1459: Unknown; world crash
Minecraft Alpha 1.0.4: Unknown; crash on game launch
Minecraft Beta 1.7.3: Unknown; crash on game launch
Minecraft Beta 1.7.3 w/Optifine: Unknown; world crash
Minecraft Release 1.5.2: Unknown; crash on game launch
Tux Racer: Unknown; game fails to render in a VERY seizure-inducing way
Half Life: ~4 FPS; gameplay outside of training room is broken
GL Excess: Unknown; instant crash
GLDirect 2.00
From here on, GLDirect is split between "Game" and "CAD" wrappers, denoted by either a "G" or a "C" after the version number where written in this writeup.
OpenGL Version String (2.00C)
Vendor: SciTech Software, Inc.
Renderer: GLDirect S3 Inc. ViRGE/DX/GX
Version: 1.2 Mesa 3.1
OpenGL Version String (2.00G)
Vendor: SciTech Software, Inc.
Renderer: GLDirect
Version: 1.1
GLDirect 2.00C likes to complain about insufficient color precision.
Changing the color precision from 24-bit up to the maximum 32-bit color does absolutely nothing.
The CAD wrapper very clearly is intended for non-gaming workloads given how easily it crashes things. However, it is strange that it is labeled as a "maximum compatibility" wrapper/driver.
I am not using the SciTech GLDirect 3.0 driver beta seen in the video because it requires a card capable of higher DirectX versions than 6, which is what the S3 ViRGE supports. I may revisit this video idea with a later graphics card in a future video for more thorough testing.
Using the 2.00G wrapper, Minecraft Alpha and Beta have many visual bugs. Text is not rendered at all, for example, and the world selection screen is eerily dim compared to what it should be. Beta in particular extends this darkness to the title screen as well.
Under 2.00G, Minecraft Beta 1.7.3 with Optifine no longer has this darkness.
Under 2.00G, Minecraft Release 1.5.2... inverts the colors of the Mojang logo?
Did you know that if you fall out of the Half Life intro tram in just the right place, you get to see the multiverse?
The framerate starts to rise when this happens, as it appears that the tram after becoming unstuck will trigger the next loading screen. Unfortunately, this loading screen appears to be what seals your fate. Once the tram stops though you at least get to meet biblically-accurate Half Life rendering in a smooth double-digit framerate!
Performance (2.00C)
GLGears: 63 FPS
ClassiCube 1.3.5/1.3.6: Unknown; game fails to render
Minecraft in-20091223-1459: Unknown; crash on game launch
Minecraft Alpha 1.0.4: Unknown; crash on game launch
Minecraft Beta 1.7.3: Unknown; crash on game launch
Minecraft Beta 1.7.3 w/Optifine: Unknown; crash on game launch
Minecraft Release 1.5.2: Unknown; assumed crash on game launch based on previous versions' behavior
Tux Racer: Unknown; game fails to render (no longer seizure inducing at least)
Half Life: Unknown; crash on game launch
GL Excess: Unknown; instant crash
Performance (2.00G)
GLGears: 390 FPS; only a black screen was rendered.
ClassiCube 1.3.5/1.3.6: 10-30 FPS range, ~12-15 FPS on average; most of the game still does not render, but text, the hotbar, hand items, and very occasional flickers of geometry do render. Seizure warning.
Minecraft in-20091223-1459: Unknown; crash on world load
Minecraft Alpha 1.0.4: Unknown; crash on world load
Minecraft Beta 1.7.3: Unknown; crash on world load
Minecraft Beta 1.7.3 w/Optifine: Unknown; crash on world load
Minecraft Release 1.5.2: Unknown; crash on game launch
Tux Racer: Unknown; crash on game launch
Half Life: 4-5 FPS; game physics are almost entirely broken down and I'm pretty sure you end up phasing into a higher plane of existence along the way. Trying to enter the training room crashed the entire PC afterwards.
GL Excess: Unknown; instant crash
GLDirect 3.00
OpenGL Version String (3.00G)
Vendor: SciTech Software, Inc.
Renderer: GLDirect
Version: 1.1
OpenGL Version String (3.00C)
Vendor: SciTech Software, Inc.
Renderer: GLDirect S3 Inc. ViRGE/DX/GX
Version: 1.2 Mesa 3.1
GLDirect 3.00, both the CAD and Game versions, appears to behave identically to GLDirect 2.00 in almost all cases unless stated otherwise.
Performance (3.00G)
GLGears: 249 FPS; gears are rendered completely incorrectly
ClassiCube 1.3.5: 15-20 FPS on average; most of the game fails to render and the system hard-crashes after a few seconds.
ClassiCube 1.3.6: Insta-crash.
Minecraft: Crash on world load across all versions. Didn't bother testing Release 1.5.2.
Tux Racer: Unknown; crash on game launch
Half Life: ~4 FPS; extremely choppy audio in tutorial level.
GL Excess: Unknown; instant crash
Performance (3.00C)
GLGears: 80 FPS; Perfectly rendered
ClassiCube 1.3.5/1.3.6: Unknown; renders a white screen
Minecraft: Crashes on game launch. The game may also complain about color depth here.
Tux Racer: Unknown; renders a white screen
Half Life: Unknown; renders a white screen and then crashes on game launch
GL Excess: Unknown; instant crash
Techland S3D
We've now moved on from GLDirect! From here on out, each wrapper is instead a discrete opengl32.dll file that must be dropped into the folder of whatever program you'd like to run it with.
OpenGL Version String
Vendor: Techland
Renderer: S3 Virge 3093KB texmem KNI
Version: 1.1 beta 6
Right off the bat, things appear to be taking a turn for the interesting as GLGears fails to render anything.
Performance
GLGears: 60 FPS, but only because a black screen is rendered.
ClassiCube 1.3.5/1.3.6: Crashes on game launch but renders a solid blue screen.
Minecraft in-20091223-1459: We load into a world! Have fun trying to play it though. Rendering is very flickery and broken. It may be possible that there's an issue of some kind with z-buffering. 12-15 fps if that matters at all in this case.
Minecraft Alpha 1.0.4: Crashes on game launch.
Minecraft Beta 1.7.3: Renders an inverted vignette that slowly grows darker.
Minecraft Beta 1.7.3 w/Optifine: Crashes on world load.
Minecraft Release 1.5.2: Rendered the title screen with many errors for a brief moment before turning to a black screen and crashing.
Tux Racer: Unknown; renders mostly a white screen. The game does respond to user inputs, and the rendered scene changes based on those inputs, but no textures or complex objects are ever rendered. Instead, you only get the white "floor" plane, a solid blue skybox, and translucent boxes where text, objects, and particles should've been.
Half Life: Crash on game launch; absolutely RAVAGES the title screen in ways I thought only the Alliance AT3D could.
GL Excess: Actually loads! But renders only solid black or white screens after the initial loading screen.
Techland D3D
Two more wrappers left after this one! This wrapper and the Techland S3D wrapper that came before it were both created by Techland originally for their "Crime Cities" game, which, being an OpenGL title during an era where support was spotty at best across the dozens of vendors that existed at the time, necessitated the creation of a set of OpenGL wrappers that could translate calls to other APIs.
Anyway, I originally thought that there wasn't going to be much that'd be interesting about this wrapper based on how Minecraft (didn't) work, but I was quickly proven wrong in the things I tested afterwards!
Vendor: Techland
Renderer: Direct3D (display, Primary Display Driver) KNI
Version: 1.1 beta 6
Performance
GLGears: ~290 FPS, but only because a black screen is rendered.
ClassiCube 1.3.5/1.3.6: 2-5 FPS. Runs with z-buffering issues. Faster than software rendering, but not by much (SW rendering was roughly 1-3 FPS)
Minecraft: Renders only a black screen and (usually) crashes.
Tux Racer: Unknown; renders a mostly-white screen. However, shading works well enough that you can just barely distinguish what is what.
Half Life: Crash on game loading after the title screen; absolutely RAVAGES the title screen in ways I thought only the Alliance AT3D could.
GL Excess: Actually runs! Performance is alright in some parts but generally remains low. Also, it erroneously uses the exact same texture for every single rendered object.
Misc Notes
Running HWinfo32 crashes the system regardless of if KernelEX is enabled or not.
GLDirect 5 refuses to do anything other than software rendering due to the lack of higher DirectX support by the Virge.
GLDirect 3 can "run", but crashes the entire system after a few seconds in Classicube using the "game" wrapper.
GLDirect 3, unlike 5, has no license code available for free use.
I didn't have the opportunity to record during the time GLDirect 3's trial was active, and it expired already so to avoid having to reinstall everything to get a new trial (I've already tried to roll back the system calendar), I will instead be using GLDirect 2, which I have in fact found a license code for.
GLDirect 2 has a fourth option for OpenGL acceleration beyond the CAD/Game DirectX hardware acceleration and the CPU software acceleration, which is a DX8-based wrapper that appears to have later debuted fully in GLDirect 3.x and up. I think it's safe to assume that the CAD/Game DX6-based wrappers were then deprecated and received no further development after GLDirect 2.x given the pivot to a newer DirectX API.
There are a number of other wrappers available for the S3 ViRGE, and even an OpenGL MCD for Windows 2000. However, I'm sticking with the five that were listed here as they implement enough of the OpenGL spec to be (more) widely compatible with a number of games. The S3Quake wrapper, for example, implements only enough of the spec to run GLQuake, and I have never gotten it to even launch any other titles.
I really, sincerely didn't expect MC Beta 1.7.3 to launch at all even with Optifine, given how from prior testing I found that the game would instantly crash on anything higher than Classi--nevermind, it just crashed on world-load. (S3Mesa, AltOGL, TechlandD3D, TechlandS3D, GLDirect 1.x)
Non-Optifine Beta 1.7.3 crashes before even hitting the Mojang splash screen. (S3Mesa, AltOGL, TechlandD3D, GLDirect 1.x)
Non-Optifine Beta 1.7.3 gets into a world! All text is missing though as are the blocks. Performance is expectedly horrendous. (TechlandS3D)
Making batch files to handle version-switching instead of doing it by hand is nice.
0 notes