Aurora Graphics Library Initial Design Discussion

Adam Wilson flyboynw at gmail.com
Sat Jan 18 20:45:30 PST 2014


On Sat, 18 Jan 2014 20:26:47 -0800, Kiith-Sa <kiithsacmp at gmail.com> wrote:

> On Sunday, 19 January 2014 at 03:38:30 UTC, Adam Wilson wrote:
>> 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!
>
>
> GL ES 3.0 is a subset of some 4.x version AFAIK, so it may be enough to  
> only target that instead of separately targeting GL 4.3 .
>

It may well be, but I don't want to rule out the possibility that  
something may be easy under OpenGL 4.3 and slightly more difficult but not  
impossible under OpenGL ES 3.0. In that case you could make a case for  
supporting different backends. One of the main goals of Aurora, is to make  
the backend produce the results Aurora demands, not the other way around,  
so letting the backend API dictate the front-end runs against that goal.

> Also, why not OpenGL for 2D on Linux (and possibly elsewhere) ?
>

In general, it's preferable to use 2D API's for 2D graphics. Yes, you can  
do 2D with OpenGL but it's significantly harder to get it right. The most  
obvious example is that in 2D we use pixels as coordinates and have no  
perspective to worry about, with 3D the your coordinates have to be  
carefully calculated every time the window or perspective changes.

> Also - I think there should be a possibility to switch between e.g. GL  
> and D3D on Windows (I assume that's intended?)

Yes, you would just have to specify the OpenGL backend. Aurora will  
default to the best backend for the platform, but if you know that  
something else is available you are welcome to use it. For all practical  
purposes though the system default will be the best. The only reason to  
use OpenGL on Windows is ideology, Aurora will render the scene graph  
identically to DirectX.

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


More information about the Digitalmars-d mailing list