Aurora Graphics Library Initial Design Discussion

Elvis Zhou elvis.x.zhou at gmail.com
Sat Jan 18 21:23:23 PST 2014


On Sunday, 19 January 2014 at 04:45:30 UTC, Adam Wilson wrote:
> 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.
https://github.com/Zoadian/aurora
Oops, I thought this is the official repo!! It's a new package 
added to code.dlang.org yesterday.


More information about the Digitalmars-d mailing list