Graphics Library for D

Adam Wilson flyboynw at gmail.com
Sun Jan 5 20:10:06 PST 2014


Hello Fellow D Heads,

Recently, I've been working to evaluate the feasibility and reasonability  
of building out a binding to Cinder in D. And while it is certainly  
feasible to wrap Cinder, that a binding would be necessarily complex and  
feel very unnatural in D.

So after talking it over with Walter and Andrei, we feel that, while we  
like how Cinder is designed and would very much like to have something  
like it available in D, wrapping Cinder is not the best approach in the  
long-term.

With that in mind, we would like to start a discussion with interested  
parties about building a graphics library in the same concept as Cinder,  
but using an idiomatic D implementation from the ground up. Walter has  
suggested that we call it Aurora, and given the visual connotations  
associated with that name, I think it is most appropriate for this project.

I know that the community has worked through a few of the problems  
involved. For example, I can't remember who wrote it, but I've seen a  
module floating around that can create a window in a cross-platform  
manner, and I know Mike Parker has been heavily involved in graphics for  
D. And no discussion of graphics would be complete without Manu, whose  
input Walter, Andrei, and I would greatly appreciate.

I want to point out that while Cinder will be the design template, the  
goal here is to use D to it's maximum potential. I fully expect that what  
we end up with will be quite different than Cinder.

Due to the scope of the project I think it would be best to execute the  
project in stages. This will allow us to deliver useful chunks of working  
code to the community. Although I haven't yet heard anything on the  
subject, I would assume that once Aurora reaches an acceptable quality bar  
it would be a candidate for inclusion in Phobos, as such I would like to  
approach the design as if that were the end goal.

The logical phases as I can see them are as follows, but please suggest  
changes:

- Windowing and System Interaction (Including Keyboard/Mouse/Touch Input)
- Basic Drawing (2D Shapes, Lines, Gradients, etc)
- Image Rendering (Image Loading, Rendering, Modification, Saving, etc.)
- 3D Drawing (By far the most complex stage, so we'll leave it for last)

Here are a couple of things that Aurora is not intended to be:
- Aurora is not a high-performance game engine. The focus is on making a  
general purpose API  that is accessible to non-graphics programmers. That  
said, we don't want to purposely ruin performance and any work and  
guidance on that aspect will be warmly welcomed.
- Aurora is not a GUI library. Aurora is intended as a creative graphics  
programming library in the same concept as Cinder. This means that it will  
be much closer to game's graphics engine, in terms of design and  
capability, than a UI library; therefore we should approach the design  
 from that standpoint.

My personal experience in graphics programming is almost completely with  
DirectX and Windows so I would be happy to work on support for that  
platform. However, we need to support many other platforms, and I know  
that there are others in the community have the skills needed, your help  
would be invaluable.

If you are interested in helping with a Cinder like library for D and/or  
have code you'd like to contribute, let's start talking and see what  
happens.

While I do have some ideas about how to design the library, I would rather  
open the floor to the community first to see what our combined intellect  
has to offer as I don't want to unduly influence the ideas generated here.  
The idea is to build the best technical graphics library that we can, not  
measure egos.

So with the above framework in mind, let's talk!

-- 
Adam Wilson
IRC: LightBender
Aurora Project Coordinator


More information about the Digitalmars-d mailing list