I posted in the ISO C++ Standards group and am reposting it here since I wasn't aware that the graphics proposal fell under "I/O" (a recent change it looks like)
Regarding the 2D drawing API, I can't help but wonder if we're jumping ahead of ourselves. For the sake of discussion, I believe there are a number of details that need to established and standardized before this will be feasible or useful.
1. Creation of a window/display (resolution, fullscreen, etc)
2. Configuring the renderer (OpenGL, DirectX, software only)
3. Way to allow the enduser to detect input (if the 2D api lets us create a window, how useful can it be if the user can't interact with it?)
Currently, the options for doing this are very murky. For new developers, writing a cross platform graphical application is daunting without a framework in place, venturing far away from core or standard C++. SDL and Qt comes to mind as two frameworks that work with Windows, Linux, OSX, and mobile devices for game developers and application developers respectively. As a result, even getting a simple window to display backed by, say, an OpenGL context is somewhat a rite of passage and requires a lot of patience and trial and error with multiple dependencies. Traditionally, the competing operating systems focused on their own tools for doing this for obvious reasons but in the current software ecosystem, most developers will need to make their creations fully cross platform, so a common API is unlikely to foil any competitive advantage any more.
Before venturing into a 2D api, it seems to me like a lower level abstraction would set us up better in the long run. With lower level abstractions, this would greatly simplify existing user code in the wild (plagued by macros and foreign function calls) and 2D drawing frameworks would certainly crop up in the wild.
My rationale for why doing a low level window/graphics context abstraction first makes sense:
1. For performance, developers will expect hardware acceleration and so, the standard will need to be graphics context aware anyways
2. CAIRO is a multi-backend api for rendering to many targets (pdf, window, png, etc) and wasn't really designed to create interactive applications AFAIK.
3. Creation of a 2D drawing api runs the risk of being too specific to be widely useful (i.e. a person who just wants to make a chart already has easy options in the wild)
4. Historically, applications written using Java's 2D api needed to be rewritten because the api didn't give the user sufficient control. In graphics in particular, predicting what the user wants is challenging.
5. One stated application of the 2D api in the proposal is for games. But modern 2D games need much more than a simple fixed-function drawing calls. They may need hardware-accelerated particles, lighting, sprite sheet handling, texture mapping, etc.
In short, my primary concern is that this proposal will make something simple even simpler but won't make it any easier for the developer to create the difficult things. For games in particular, I can say that if N3888 was implemented verbatim, I probably would not use it in any of my personal projects and I would venture to claim that many other game developers would eschew it as well. There is a reason fixed-function pipelines were rendered obsolete. They simply do not afford the programmer enough flexibility and the programming model is "incorrect" in that it doesn't mirror well what is happening fundamentally in a rendering pipeline. The proposal *does* make an effort to consider the various platforms (see "GPU Resource Management in Various Technologies"), but it would appear that all of that work to unify the api across platforms would be opaque to the programmer. In contrast, if by some miracle, the first 3 points I mentioned above *were* standardized, it would be immediately useful to everybody and many different frameworks for a variety of uses would most certainly crop up immediately as a result. Perhaps those resultant projects would converge on a great API that could be standardized in the future.
Cheers,
Jeremy