Aurora Graphics Library Initial Design Discussion

Adam Wilson flyboynw at gmail.com
Sat Jan 18 19:38:29 PST 2014


Hello Everyone,

Based on the previous thread I think we have enough to start laying out  
the design and writing code for Aurora.

The choice that I would like to clarify is that Aurora will be a retained  
mode API. I understand that this is not the best choice for speed and that  
not everyone will be happy with this choice. However, retained mode API's  
are typically much higher-level, which will make it easier for developers  
that are unfamiliar with writing graphics code to express their intent.  
Given the stated goal of Aurora I feel that this is the best choice.

The next is that Aurora will have a pluggable backend rendering system.  
This will allow us to support any rendering system capable of meeting the  
requirements of Aurora's frontend. And when combined with the retained  
mode API you could, in theory, swap renders on the fly. Although I  
wouldn't want to be the first one try it!

Since Aurora has a pluggable backend for rendering I feel that it will be  
prudent to use the low-level API's that are best suited to each platform.  
This will Aurora to support each platform as best as possible. As I  
currently can tell the following list represents

System		 2D API   / 3D API
Linux		  X11      / OpenGL 4.3
Android		Canvas	 / OpenGL ES 3.0
OSX		    Quartz2D / OpenGL 4.3
iOS		    Quartz2D / OpenGL ES 3.0
Windows		Direct2D / Direct3D 11
Windows	RT     Direct2D / Direct3D 11

The reason for targeting relatively new low-level API versions is that by  
the time we actually complete the bulk of the work, they won't be new  
anymore. If anyone has a suggestion for a 2D API on Linux that has the  
ubiquity of the X11 but is easier to use, please mention it! I would like  
to have a Wayland backend but that API is still very new and not widely  
adopted. I've noticed that Android and iOS seem to have many options for  
2D graphics, none of which I've had a chance to evaluate rigorously, any  
recommendations would be appreciated.

As has been widely suggested, Aurora will be split into a number of  
packages that are loosely coupled. In theory this would allow us to pull  
the more broadly applicable packages in to Phobos as they mature and then  
depend on those in Aurora. The tentative list of packages is as follows:

aurora.application
aurora.primitives
aurora.graphics2d
aurora.graphics3d
aurora.text
aurora.image
aurora.math
aurora.animation

Hopefully, this break down will allow the user to pull in only what they  
need for their project, without confusing them with choice. Naming  
suggestions are welcomed!

Finally, I've have set up a GitHub organization for Aurora, which can be  
accessed at: https://github.com/auroragraphics I haven't posted any code  
yet, but I am working on aurora.application for Windows. The aurora repo  
is the master repo and all other package repo's are submodules of it. The  
aurora repo will consist primarily of the scripts required to build  
Aurora. This is to make it easier for the newbies to get started while  
enabling maximum flexibility for the development team.

In the famous words on Andrei ... Destroy!

-- 
Adam Wilson
GitHub/IRC: LightBender
Aurora Project Coordinator


More information about the Digitalmars-d mailing list