« GtkRadiant 1.6.3 released: Urban Terror support improved, QuakeLive support added | Main | GtkRadiant 1.6.4 released: MacOS X, Quake 2 and improved 4-view layout »



Harley Davidson

Checkout these two involved blog posts by John Carmack and Michael Abrash on the importance on reducing latency in games for VR headsets like the Oculus Rift:




I read the article of Pieter Hintjens and if I understood it correctly he basically said that the actor model superior because it scales and it is easy to manage.

Now why are you using ZeroMQ over Theron/libcppa which are out of the box actor libraries for c++?

Also I saw that you are using sdl2 for window management. I also know valve is using sdl for their linux port. I never really understood why someone would choose sdl over glfw? I hope you could share some insights of why you chose sdl.

By the way, this is a very interesting project.


Harley: yes! I should have mentioned those articles. Carmack's piece in particular is very thorough. es_core puts 'I', 'S' and 'RGV' respectively each in their own threads, input is sampled right at the beginning of RGV.

"Late frame schedule time warp" would be a great addition, or even the "Continuous time warp" (which Abrash refers to as "racing the beam"). Those would need to be worked out at Ogre level though (e.g. inside the 'RGV' part). I've left the renderer as is for now, having plenty to do outside of that.

Kantalol: I didn't know about Theron and libcppa. Those are definitely worth considering. I like that ZeroMQ offers bindings for a lot of languages though, and that it is supported by an active community.

Far as SDL2, I picked what I'm familiar with really. I've used SDL and known the core developers for years. GLFW is a compelling alternative, it would be very easy to switch out.


TTimo: I haven't tested libcppa and Theron much myself and both seem a little bit immature, but I will research them further.

"ZeroMQ offers bindings for a lot of languages though" that is true but you probably won't use other languages in your project right?
I have the same goal as you where responsive gaming comes first. By using another language you probably also get a garbage collection which is a little bit unpredictable. So in theory it will add some delay. Okay the delay is probably very low but might be recognized from professional players.

Also by using actors you might get your networking code for free. Because as far as I know is that actors don't care if they are on your computer or on another computer.

Thank you for reminding me of actors they might be a perfect fit for my project. Also cap'n proto seems to be really interesting.


TTimo, nice job!

Digging in the code, I am seeing that you initialize Ogre in the main thread and later continue using it from the render thread, so, no problems with concurrency issues because of this?


Yes, that's working fine. You have a good eye, it's an important piece of the design.

The SDL input logic needs to happen in the thread that created the window, but the GL context can be accessed from another thread.

There isn't really concurrency, it's just a shared context passed over from the main thread after initialization to the render thread.

The comments to this entry are closed.