On Sun, 05 Jan 2014 21:32:54 -0800, Mike <n...@none.com> wrote:

I'm sure you'll receive no shortage of opinions with such an open invitation, so here's mine:

* Please don't make a graphics library that is useful only on PCs.


That's the plan. However at this point D only works on x86 so it's a moot point. But if we built a pluggable rendering backend that would allow us to swap the rendering that should be sufficient.

* Please consider more than mouse and keypboard as input devices (e.g. multitouch)


Definitely. I included touch on my list because even outside the phone/tablet market it can be useful. All my desktops have a touch monitor.

* Today is the first I've heard of Cinder, but if you really want to see an extremely well-written graphics library, take a look at AGG (Anti-Grain Geometry). It's is a superior example of elegantly employed templates for a real practical problem (lot of different platforms). As an example illustrating its reach, I ported it to an ARM Cortex-M4 MCU at 168MHz with 2MB of RAM trivial modification. It powers an 800x480 7" TFT LCD with 16-bit color and is damn fast. For a quick intro, go here (http://www.antigrain.com/doc/introduction/introduction.agdoc.html#toc0006). It is superior design model for anyone wishing to develop a graphics library.


I've heard of it, and we are definitely open to stealing the best of any library, so I/we take a look at it.

* Break the library into loosely coupled pieces that can be used individually or aggregated by other projects to build things that we haven't even thought of
   *  Geometric primitives should be their own library/package
* Vector graphics (paths, line caps, etc...) should be their own library/package
   *  Raster graphics should be their own library/package
   *  Window management should be its own library/package
* Font's are just data. Don't couple them to the rendering engine. (e.g Convert them to a vector/raster representation and then let those libraries handle the rest.

This is a good idea, I like it.

* The rendering engine should be its own library/package, that should be easily replaced with whatever is suitable for the given platform.


As in pluggable backend? That should be easy enough to do.

I think Aurora should be a library of libraries that can be used individually or aggregated to build new and exciting projects that you and I haven't yet even thought of. Think std.algorithm.


Combined with the above idea this would be an excellent demonstration of D's capabilities. And it would definitely improve the design of the library.

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

Start with the most primitive and move up from there (If loosely coupled, the could be developed in parallel)
1. Geometric primitives
2. Vector graphics
3. Fonts (just a special case of vector graphics)
4. Rasterization
5. Backend (Direct2D/3D, OpenGL, OpenVG, whatever)


The problem I can see here is that if you want to test the first four, number five has to be built out to some degree.

Once that is done, Widget libraries, Windowing, Input Device handling, etc... can all be built on top of that.

A graphics library is something I will need in my future D plans, so I look forward to seeing where this goes, and I hope I'll be able to make a positive contribution or two myself.


Indeed, a graphics library is required for my future plans as well. Which is why I am speadheading this project. :-)

But, please play a little with AGG before you begin your design. I think you'll be glad you did. (http://www.antigrain.com/)


--
Adam Wilson
IRC: LightBender
Aurora Project Coordinator

Reply via email to