The actual WebGL 2 distinction was done as a part of previous WebGL
cleanup. It compiles, but is completely broken, as Emscripten has some
missing bits to go through at least Context class creation.
This was the actual problem. Most of ES extensions are not available in
WebGL, thus the GL headers and the code was far more bloated than it
needed to be. The GL header is now reduced and the previous 13 commits
were disabling features that aren't actually available in WebGL.
The final executable size is reduced by ~50 kB, which actually isn't
much, but still something.
Some ES extensions (ANGLE_depth_texture and ANGLE_instanced_arrays) have
now WEBGL_* prefix. I'm still using the original prefix in the
implementation because there are headers for these, but in public docs
and elsewhere they are exposed with WEBGL_*.
Actually properly supporting ANGLE_instanced_arrays. Emscripten
currently has the functions without the ANGLE suffix. Only causes linker
warnings when not used, need to fill a bugreport and fix properly.
In OpenGL ES 2.0 there is EXT_draw_buffers, which I overlooked somehow,
so I added it to extension list and included in the implementation. It
combines NV_draw_buffers and NV_fbo_color_attachments, so the
implementation now selects one of the two based on which extension is
supported, preferring the EXT one. Updated the documentation to be
less confusing, fixed extension links. Also the single-output
mapForDraw() is not handled separately on ES anymore and just calls
DrawBuffers implementation with single parameter, resulting in less
generated code.
EXT_draw_buffers can also be called on default framebuffer and
apparently in ES there is no way to map front framebuffer for drawing,
so I removed it from the DefaultFramebuffer::DrawAttachment enum.
Swizzle to RGB/RGBA on all platforms. Usability over (minor) performance
benefits. Otherwise we would be like the ugly mess called QImage (in
Qt4 at least).
Each class/function that needs to access the resources first checks
whether the group exists and the group is registered if not. Thus there
is now no difference and annoying special cases when using static build.