Hi,
I forked the ezQuake engine with the general intention to increase the Linux gaming experience because ezQuake doesn't play nicely along in a multimonitor setup, has sound issues, etc. I began by removing large amounts of code I do not need/like/want. Windows support and Software rendering, the particle stuff, etc fell into that category. I did this to make the project more manageable for me. I plan to contribute changes back to ezQuake when i feel the code works sufficiently well and the ezQuake team actually wants to have it
So far, I implemented the following:
- Fixing the gamma correction mess. ezQuake (and many other games) change gamma by altering the Xserver gamma curves. This is done by rendering everything by very simple shaders and applying the gamma curve in the shader. This is important if you wan't to play in window mode, or use multiple displays (in this case, you need to use the window mode and set the resolution accordingly). This change brings negligible costs in performance but allows for much larger flexibility. Two examples for what is possible now (the first one not being very useful...): pic1 pic2
- Proper mouse Input. The client uses exclusively XInput2 as input system. This allows for raw input, so no acceleration is applied to the input. ezQuake currently offers three different mouse input methods that all have different problems: The XLib input code is a horrible mess with hacks around bugs and strange timeout stuff; simply unusable. DGA input works, but DGA is deprecated for quite some time and therefore doesn't work on all systems. Evdev input opens /dev/input/eventX files. This is problematic though, as users normally don't have read permissions for those files. This is for a very good reason as users would be able to read other users input. To change the permissions you need to have root access which is not always the case. Furthermore you need to configure the deviceid which changes when you plug in additional mice, remove a keyboard, etc.
- Replacing the ezQuake sound engine by OpenAL. This reduces the code complexity, fixes the aliasing problems that exist in the current resampling code and thus increases the sound quality, reduces the sound latency and most important: PulseAudio support and ALSA support which doesn't exclusively access the sound device. Finally you can listen to some music while playing quake, yay!
Further goals:
- cleaning up the rendering code and make it use OpenGL in a more modern way. This should hopefully result in some performance improvements (VBOs for example)
- Figure out why ezQuake doesn't run with 21897391723fps on a Radeon 5770 and fix it. Drawing ~10000 triangles shouldn't be that hard
- Port the code to the Maemo/Meego platform
- Rewrite the particle system. The VX particle engine stuff is currently gone and needs to be replaced.
- more to come...
I don't consider the code to be ready, it is more like a prove of concept that works pretty well. I played quite some time using my XI2 and shader code and didn't have bigger issues. The OpenAL source still has a few minor issues which I'll fix eventually.
The code can be found here:
You need to check out the brechpunkt branch:
Required libraries (with the corresponding dev packages installed):
- glew
- alure
- OpenAL
- glew
- libPNG
- libJPG
- zlib
- OpenGL
- libXi
compile by typing
Afterwards, copy/symlink the qw binary into your quake folder and copy/symlink the shader directory into the ezquake subfolder in your quake folder.
I forked the ezQuake engine with the general intention to increase the Linux gaming experience because ezQuake doesn't play nicely along in a multimonitor setup, has sound issues, etc. I began by removing large amounts of code I do not need/like/want. Windows support and Software rendering, the particle stuff, etc fell into that category. I did this to make the project more manageable for me. I plan to contribute changes back to ezQuake when i feel the code works sufficiently well and the ezQuake team actually wants to have it
So far, I implemented the following:
- Fixing the gamma correction mess. ezQuake (and many other games) change gamma by altering the Xserver gamma curves. This is done by rendering everything by very simple shaders and applying the gamma curve in the shader. This is important if you wan't to play in window mode, or use multiple displays (in this case, you need to use the window mode and set the resolution accordingly). This change brings negligible costs in performance but allows for much larger flexibility. Two examples for what is possible now (the first one not being very useful...): pic1 pic2
- Proper mouse Input. The client uses exclusively XInput2 as input system. This allows for raw input, so no acceleration is applied to the input. ezQuake currently offers three different mouse input methods that all have different problems: The XLib input code is a horrible mess with hacks around bugs and strange timeout stuff; simply unusable. DGA input works, but DGA is deprecated for quite some time and therefore doesn't work on all systems. Evdev input opens /dev/input/eventX files. This is problematic though, as users normally don't have read permissions for those files. This is for a very good reason as users would be able to read other users input. To change the permissions you need to have root access which is not always the case. Furthermore you need to configure the deviceid which changes when you plug in additional mice, remove a keyboard, etc.
- Replacing the ezQuake sound engine by OpenAL. This reduces the code complexity, fixes the aliasing problems that exist in the current resampling code and thus increases the sound quality, reduces the sound latency and most important: PulseAudio support and ALSA support which doesn't exclusively access the sound device. Finally you can listen to some music while playing quake, yay!
Further goals:
- cleaning up the rendering code and make it use OpenGL in a more modern way. This should hopefully result in some performance improvements (VBOs for example)
- Figure out why ezQuake doesn't run with 21897391723fps on a Radeon 5770 and fix it. Drawing ~10000 triangles shouldn't be that hard
- Port the code to the Maemo/Meego platform
- Rewrite the particle system. The VX particle engine stuff is currently gone and needs to be replaced.
- more to come...
I don't consider the code to be ready, it is more like a prove of concept that works pretty well. I played quite some time using my XI2 and shader code and didn't have bigger issues. The OpenAL source still has a few minor issues which I'll fix eventually.
The code can be found here:
git clone git://brechpunkt.de/qw.git
You need to check out the brechpunkt branch:
git checkout -b brechpunkt origin/brechpunkt
Required libraries (with the corresponding dev packages installed):
- glew
- alure
- OpenAL
- glew
- libPNG
- libJPG
- zlib
- OpenGL
- libXi
compile by typing
make
Afterwards, copy/symlink the qw binary into your quake folder and copy/symlink the shader directory into the ezquake subfolder in your quake folder.