Category: SNES

While v0.028's release went a lot better than expected, there was one significant problem: it appears that the Linux OpenGL renderer did not work correctly on any of the four ATI graphics card drivers. It seems to be related to partial implementations of GLX v1.3 (you know, the ten year old Xlib interface for OpenGL?)

Rather than continue fighting these drivers, I instead opted to backport the driver to use GLX v1.2 instead. This seems to work on the fglrx, ati and radeon drivers. I don't know much of the radeonhd drivers, but I believe they lack 3D acceleration anyway.

sinamas also came up with an ingenius trick to work around the X Visual problem: that is to say, a GLX rendering context requires a window with the same X Visual as itself. But it's not possible to change the Visual of the existing window that is passed to the GLX driver. sinamas suggested creating this new window as a child window, and embedding that within the rendering window. This worked wonderfully, and eliminates the need for enumerating all available GLX contexts, which is why I needed the GLX 1.3 API in the first place. bsnes now uses the GLX-recommended Visual, which also eliminates a color problem that existed on the fglrx driver when using the default X11 visual.

I also removed the glClear command inside refresh(), as it was redundant and caused flickering on non-buffered visuals. It might even give a slight speed increase on some cards.

Lastly, [vEX] pointed out that I should use the -D flag for the install command in the Makefile. This has been fixed.

I'm not updating the Windows binary to v0.028.01, as absolutely nothing has changed in the Windows port yet. I'll update again when the Debian repository is synced with the new version.

:: bsnes Official Site