Extending Canvas support to cards without packed depth stencil
The current Canvas implementation has code paths for framebuffer creation with OpenGL 3 and higher, the ARB, and the EXT framebuffer object extension. In case of EXT, the packed depth and stencil extension is also required. The packed depth and stencil was added to LÖVE because OpenGL implementations are not required to implement the separate GL_STENCIL_INDEX format and that broke the stencil on the Canvas for some people. However, there are some cards and drivers that only have the framebuffer extension without the packed depth and stencil. These cards don't get Canvases even though they have a chance of implementing GL_STENCIL_INDEX. One example is the Intel GMA x3100 with the Windows XP driver.
I propose an new framebuffer strategy that comes after the EXT/packed combination. It creates the stencil renderbuffer with GL_STENCIL_INDEX. The depth buffer can be omitted as LÖVE does not use it.
[[https://bitbucket.org/bartbes/love-experiments/changesets/tip/branch(%22fbo-ext%22)|Here]] is my implementation attempt.
The EXT framebuffer object extension reads as if the implementations don't need to support GL_STENCIL_INDEX. It would be kind of stupid to not have it because then there's no stencils for framebuffers. The OpenGL wiki warns about GL_STENCIL_INDEX and states that nobody supports it, which is clearly wrong, but we should tread carefully anyway. The check that decides if this strategy gets used should take framebuffer completeness into account by creating a framebuffer with the GL_STENCIL_INDEX format.
The testing of this new strategy may be a problem. There are few cards that fall into this category and their drivers are probably several years old. Besides actual bugs in them, I'm worried that this new strategy may fail without giving clear error messages to the lover.
A list of potential cards that have GL_EXT_framebuffer_object but not GL_EXT_packed_depth_stencil follows in a comment.