A few weeks ago I created a survey for AmigaOS developers. The goal was to gauge developer interest in Warp3D Nova, and the OpenGL ES 2 wrapper. I want to get more developers using these new capabilities. Well, the results are in. Drum roll!
First up, game development is the big winner (see the graph below). People were more interested in learning game development (although you're not going to get far without graphics...). Interestingly, 2D and 3D game interest was split 50-50. More people wanted to learn OpenGL ES 2 (GLES2) than using Warp3D Nova (W3DN) directly. That's to be expected given that many would also like to write games for multiple platforms.
Of course, if graphics/game programming was easy then everyone would do it. The biggest challenges that people gave were:
- Lack of graphics programming skills
- Lack of programming skills in general
- Lack of time
- Lacking the right hardware (i.e., an AmigaOS machine + W3DN compatible graphics card)
Programming skills (graphics & general) was the most mentioned issue by far, and that's reflected in the next question's results (plotted below).
There's a reasonable level of C programming ability, less so of C++, and a clear shortcoming in OpenGL expertise. We'll have to work on that.
Finally, Android was the clear winner in the other platform stakes, as is shown in the graph below.
I got some interesting questions via the survey, so here are a few quick answers:
- Does this give any capability toward VR, such as Oculus Rift?
The barrel distortion shaders should work already, but I still need to add render-to-texture support to the driver. After that, it should be possible. Also, someone needs to port the Oculus Rift SDK.
NOTE: I have an early Oculus Rift dev-kit that I'd be happy to send to a developer who is able and willing to port the SDK. Contact me if this is you.
- What about GPU for general purpose computations (e.g., OpenCL)?
OpenCL and OpenGL Compute shader's aren't supported. That said, it is possible to pack arbitrary data into textures and perform non-graphics computations on them with shaders. However, missing features such as render-to-texture, texture readback, etc. features limit what you can do at present. Warp3D Nova is still a work-in-progress.
NOTE: You can pack float data into a 32-bit RGBA bitmap for readback as shown here: http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/
- What should i do to achieve maximum speed, and what slows things down?
A few quick tips:
- Render as much as possible in as few draw calls as possible - the biggest bottleneck is draw-calls/s
- Upload data to the GPU in bulk where possible (easier to do in Warp3D Nova) - uploading data frequently between draw calls requires CPU-GPU synchronization which is expensive
Where to From Here?
With the interest in cross-platform development I see a definite need for GLES2 support in the AmigaOS SDL2 port. Simple Directmedia Layer (SDL) is a great library for creating cross-platform games. There's also an EGL implementation in the works, which should come in handy (thank's HunoPPC).
I'll continue the Warp3D Nova tutorial series and will look into creating material for GLES2 with an accent on cross-platform gaming. This will also help those without the right hardware for W3DN/GLES2 to get started. Creating GLES2 material will take time (I'm pretty busy), so please be patient.
If you've got any suggestions or comments, I'd love to hear them. Enter them in the comments section below.