On Wednesday, 8 January 2014 at 13:09:39 UTC, Mike Parker wrote:
I could have sworn I read somewhere in this thread that there was talk of including it in Phobos at some point. That's the perspective I've been arguing from. If it's fully intended to be separate from Phobos, then there's no need for any of this and the feature list could certainly be more specific.

Well, the goals are very unclear to me, but I guess this discussion and the friction between differing assumptions will sort out what belongs in a standard library :-)

From my perspective Phobos should only provide building blocks that are generally useful for many different applications. I don't think a real time graphics engine belongs in the standard distribution. Real time engines tend to be short lived.

I think the basic setup for each platform belongs there. The same tedious stuff that most apps on a platform have to deal with in order to get started with real time stuff. Once you have a GL/DX context on your hands you can get application stuff going in D with C bindings and a sample application (graphical hello world) would probably be better than a complete framework.

I wouldn't expect any implementation, generic or otherwise, to assume mostly static geometry. You could bet that a simple graphics API in Phobos would be used for games by some and for generating pie charts by others. It's still possible to get a generic rendering system to handle that with decent performance. Yes, it makes for compromises in the backend that a more targeted renderer wouldn't need to make, but that's the price of genericity.

2D games, web browsers etc use geometry that is mostly static between frames (although it can be hidden). So you can cache and have a dirty-flag on each surface (if the path-data change you set the dirty flag and the engine recreates the cached surface). 3D is different because of the perspective effect which force you to a complete redraw every frame.

This is true. But assuming a) the library is going to be in Phobos and therefore b) there is going to be a software backend, and c) there's a desire for feature parity between the software renderer and any hardware-accelerated backends, then custom shaders increase the complexity of the software implementation quite a bit. There are so many rules needed to guide the implementation in terms of render quality. Ugh!

That's a lot of assumptions, I know. If this is not going to be in Phobos and there's no pressing need for a software renderer then it's moot. In that case, the sky's the limit.

I think you can have the building blocks in Phobos:

1. A path datastructure that can be used for vector path manipulation (fully SVG/postscript/PDF compatible). Useful both for rendering and if you want to do editing/transforms of file formats etc.

2. A simple D-compatible shader language with parser and ability to generate common shader languages (also the the non GL/DX ones used by various multimedia applications for movie effects). The shader language could be this simple:

"r=src1*0.4; g=src1*0.2; b=src1*0.8; a=1.0;"

It could be so simple that you could embed it in your D rendering loop verbatim, as D code.

3. A software path based renderer in D that generate image masks that use (1++) as input.

4. A software compositor that can generate PNG and PDF based on (1) and (2), and SVG if you only use builtin shaders (the fill types supported by SVG).

5. A portable 2D compositor framework, that basically takes byte-masks from any source (could be a vector renderer) and images and compose them using very simple shaders.

Creating a compositor that performs well with many small objects is work though, because you need to maintain a texture atlas and heuristics for how to group etc…

You could probably configure a D-based compositor using templates, so I guess the hard part is figuring out what you need on the platform specific level to support a compositor written fully in D.

If you go the compositor route nothing prevents you from giving access to the GL/DX context, before/after the compositor is done rendering for those with advanced needs.

It is possible to implement 1,2 and 3 before designing 4 and 5. And at the end of the day 4 and 5 probably does not belong in the distribution, while 1,2,3 might.

Reply via email to