Check out the new projects site for A-i-S www.adventuresinsilicon.com

Friday, April 22, 2011

BeagleBoard & PandaBoard: How to natively compile ioQuake3

This post assumes you are running Ubuntu on your BeagleBoard/PandaBoard. It also assumes you have Quake3 installed somewhere where you can copy files from.

Quake3 is a graphically intensive 3D game released by id software in 1999. The game engine id tech 3 was originally closed source but was opened up in 2005.

The GPL'd source has been improve by many and the best derivative repository is ioQuake3 (http://ioquake3.org/).

It is possible to compile the Quake3 game natively on the BeagleBoard/Pandaboard.



It is worth noting that because the BeagleBoard/PandaBoard does not implement Open GL in hardware, Quake 3 will default to software rendering and this will result in about 9 fps without modifications. In the future it is hoped the ioQuake3 engine is ported to use OpenGL ES 2.0 which the BeagleBoard/PandaBoard does implement in hardware. This would dramatically improve the framerate.

http://wiki.ioquake3.org/Building_ioquake3_on_Linux

0. Install the dependencies:
sudo apt-get install libcurl4-openssl-dev libopenal-dev libsdl1.2-dev bison

1. Change into a directory that you want Quake3 to live in.
2. Use subversion to check out the source tree:
svn co svn://svn.icculus.org/quake3/trunk ioquake3 

 If you need to install subversion try "sudo apt-get install subversion"

3. Change into the directory created with cd ioquake3

4. If you want to build the with the default settings you can now run make (with one variable being set) and compile the game binaries. To do this you run:


 make USE_LOCAL_HEADERS=0

If you are on the PandaBoard or some other multi core system you should use the "-j" option with make, this allows multiple threads to execute at the same time.

he Pandaboard has 2 cores so lets set the threads to 3 to ensure each core is kept busy:
make -j 3 USE_LOCAL_HEADERS=0
5. If you want to see the load your board is under whilst ioQuake3 compiles, open another window and run "htop".  You may need to install it first with "sudo apt-get install htop"

Here is a screenshot showing the PandaBoard compiling ioQuake3.  On the left is htop showing both cores are at 100% and on the right are the files being built for ioQuake3.


You should now have "ioQuake3.armv7l" inside a newly created "build" folder.

6. Now we need to copy the files so the game can run.

7. Under the "build" directory you should have "release-linux-armv7l" at this location you need to copy the "baseq3" folder from the original Quake3 installation as well as the 1.3 Point Release files from here: updated pk3 files

8. You should now be able to run the executable:
/ioquake3/build/release-linux-armv7l/ioquake3.armv7l

I get about 10fps when setting the graphics to "fastest"

Whilst this is not playable the BeagleBoard/Pandaboard are capable of fast 3D graphics if the OpenGL display system is re-written to work with Open GL ES 2.0 hardware.

3 comments:

Gašper said...

Hi!

Is there any game on OpenGL ES? KDE 4.7 is supposed to run on GL ES 2.0.
Or any other 3D app that uses GL ES 2.0?

Dingo_aus said...

Not that I am aware of just yet. I know that Quake3 was ported to GLES for the Raspberry Pi demos. That was a local port and I'm not aware of it having been released.

Laeeq said...

HI,
I actually followed the above steps for my laptop , x86 , compiled it and while running got stuck on this error
linuxusers@laeeq:~/Documents/easyarm/ioquake_work/ioquake3/build/release-linux-i386$ ./ioquake3.i386
ioq3 1.36_SVN2322 linux-i386 Oct 1 2012
Have SSE support
----- FS_Startup -----
Current search path:
/home/linuxusers/.q3a/baseq3
./baseq3

----------------------
0 files in pk3 files
"pak0.pk3" is missing. Please copy it from your legitimate Q3 CDROM. Point Release files are missing. Please re-install the 1.32 point release. Also check that your ioq3 executable is in the correct place and that every file in the "baseq3" directory is present and readable


-- PS let me know how should i proceed, later on i wish to do this on beaglebone or other board. Thanks a lot,