Graphics Library for D

Mike Parker aldacron at gmail.com
Wed Jan 8 00:32:48 PST 2014


On 1/8/2014 4:52 PM, Jacob Carlborg wrote:

>
> I would say that we should try and built the API in many different
> levels and layers. The top layer would be for ease of use to quickly get
> something to show on the display. If more performance is needed it
> should be possible to access the lower levels of the API to get more
> control of what you need to do.

It's only necessary to have an abstract renderer interface with concrete 
backend implementations at the lowest level. Then user-facing API 
(std.gfx.geometry, std.gfx.svg, or whatever) operates through the 
renderer interface. For this sort of package, I don't believe the 
renderer interface should be exposed to the user at all. Doing so would 
greatly inhibit the freedom to refactor it down the road. And that 
freedom, I think, is important for long-term maintenance.

>
>> Ideally, the default
>> backend should be software, so that the API can be used even when
>> graphics hardware is not available (though I'm not saying that's a
>> realistic target to start out with).
>
> Ideally the default backend should detect if graphics hardware is
> available or not at runtime and choose the best backend for that.

By "default", I mean "fallback", for cases when there's no, or 
problematic, hardware acceleration available. As to which and how many 
hardware-accelerated backends ship along with that, that's very much 
open to debate. Which versions of OpenGL to support out of the box, 
whether or not a D3D renderer should be included and, if so, which 
version, and so on.

Honestly, I'd prefer not to see this package in Phobos at all. That 
implies a number of constraints, both design time and run time, that 
would not be necessary if it were left as a third-party dub-enabled 
package. Anything in Phobos has to work where D works, be it on a 
headless server or a tweaked-out gaming rig, or on an old system or a 
future one. Maximum portability and maintainability need to take 
priority over performance. If the graphics API can't work in all of 
those possible environments, then it has no business being part of the 
standard library.



More information about the Digitalmars-d mailing list