1. Anders Ruud
  2. love
  3. Issues

Issues

Issue #480 resolved

Extending Canvas support to cards without packed depth stencil

Boolsheet
created an issue

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.

Comments (5)

  1. Boolsheet reporter

    A list of graphics cards that have GL_EXT_framebuffer_object but not GL_EXT_packed_depth_stencil on Windows. The data is from Wildfire Games' OpenGL capabilities database.

    The format is:
    
    Vendor
    Renderer (Driver) with OpenGL Version
    Renderer (Driver) with OpenGL Version
    ...
    
    ATI Technologies Inc.
    256MB ATI Radeon X1300PRO x86/SSE2 (6.14.10.5885) with OpenGL 2.0
    ASUS X1300 Series x86/MMX/3DNow!/SSE2 (6.14.10.6120) with OpenGL 2.0
    ASUS X1300 Series x86/SSE2 (6.14.10.6120) with OpenGL 2.0
    ASUS X1550 Series x86/SSE2 (6.14.10.6287) with OpenGL 2.0
    ASUS X1600Pro x86/MMX/3DNow!/SSE2 (6.14.10.5756) with OpenGL 2.0
    ASUS X1650 Series x86/MMX/3DNow!/SSE2 (6.14.10.6230) with OpenGL 2.0
    ATI MOBILITY FireGL V5250 Pentium 4 (SSE2) (Atioglgl.dll (6.14.10.6471)) with OpenGL 2.0
    ATI Mobility Radeon X1300 x86/SSE2 (6.14.10.5883) with OpenGL 2.0
    ATI Mobility Radeon X1350 x86/SSE2 (6.14.10.6746) with OpenGL 2.0
    ATI Mobility Radeon X1400 x86/SSE2 (6.14.10.5527) with OpenGL 2.0
    ATI Mobility Radeon X1400 x86/SSE2 (6.14.10.5529) with OpenGL 2.0
    ATI Mobility Radeon X1400 x86/SSE2 (6.14.10.5883) with OpenGL 2.0
    ATI Mobility Radeon X1400 x86/SSE2 (6.14.10.6067) with OpenGL 2.0
    ATI Mobility Radeon X1600 x86/SSE2 (6.14.10.5648) with OpenGL 2.0
    ATI RADEON XPRESS 1100 x86/SSE2 (6.14.10.6645) with OpenGL 2.0
    ATI RADEON XPRESS 200 Series x86/SSE2 (6.14.10.7058) with OpenGL 2.0
    ATI Radeon 9550 / X1050 Series x86/SSE2 (6.14.10.7058) with OpenGL 2.0
    ATI Radeon X1200 Series x86/MMX/3DNow!/SSE2 (6.14.10.6388) with OpenGL 2.0
    ATI Radeon X300/X550/X1050 Series x86/MMX/3DNow!/SSE2 (6.14.10.6956) with OpenGL 2.0
    ATI Radeon Xpress 1200 Series x86/MMX/3DNow!/SSE2 (6.14.10.6287) with OpenGL 2.0
    ATI Radeon Xpress 1250 x86/MMX/3DNow!/SSE2 (6.14.10.6288) with OpenGL 2.0
    ATI Radeon Xpress 1250 x86/MMX/3DNow!/SSE2 (6.14.10.6347) with OpenGL 2.0
    HIGHTECH EXCALIBUR RADEON 9550SE Series (Omeg x86/SSE2 (6.14.10.6956) with OpenGL 2.0
    MOBILITY FireGL V5000 Pentium 4 (SSE2) (6.14.10.5288) with OpenGL 2.0
    MOBILITY RADEON 9600 x86/SSE2 (6.14.10.5279) with OpenGL 2.0
    MOBILITY RADEON 9600 x86/SSE2 (6.14.10.5523) with OpenGL 2.0
    MOBILITY RADEON 9600 x86/SSE2 (6.14.10.6287) with OpenGL 2.0
    MOBILITY RADEON X300 x86/SSE2 (6.14.10.5279) with OpenGL 2.0
    MOBILITY RADEON X300 x86/SSE2 (6.14.10.5819) with OpenGL 2.0
    MOBILITY RADEON X600 SE x86/SSE2 (6.14.10.5279) with OpenGL 2.0
    MOBILITY RADEON X700 x86/MMX/3DNow!/SSE2 (6.14.10.5396) with OpenGL 2.0
    RADEON 9550 x86/MMX/3DNow!/SSE2 (6.14.10.5525) with OpenGL 2.0
    RADEON 9550 x86/SSE2 (6.14.10.5279) with OpenGL 2.0
    RADEON 9550 x86/SSE2 (6.14.10.5646) with OpenGL 2.0
    RADEON 9550 x86/SSE2 (6.14.10.6232) with OpenGL 2.0
    RADEON 9600 SERIES x86/SSE2 (6.14.10.6847) with OpenGL 2.0
    RADEON 9600 Series x86/MMX/3DNow!/SSE (6.14.10.6458) with OpenGL 2.0
    RADEON 9600 x86/MMX/3DNow!/SSE (6.14.10.5696) with OpenGL 2.0
    RADEON 9600 x86/SSE2 (6.14.10.5220) with OpenGL 2.0
    RADEON 9600SE x86/MMX/3DNow!/SSE (6.14.10.6287) with OpenGL 2.0
    RADEON X1600 Series x86/SSE2 (6.14.10.5757) with OpenGL 2.0
    RADEON X300/X550 Series x86/MMX/3DNow!/SSE2 (6.14.10.5757) with OpenGL 2.0
    RADEON X300/X550 Series x86/SSE2 (6.14.10.5525) with OpenGL 2.0
    RADEON X300/X550 Series x86/SSE2 (6.14.10.5695) with OpenGL 2.0
    RADEON X300/X550 Series x86/SSE2 (6.14.10.5696) with OpenGL 2.0
    RADEON X300/X550 Series x86/SSE2 (6.14.10.6232) with OpenGL 2.0
    RADEON X550 x86/MMX/3DNow!/SSE2 (6.14.10.6287) with OpenGL 2.0
    RADEON X550 x86/SSE2 (6.14.10.5220) with OpenGL 2.0
    RADEON X550 x86/SSE2 (6.14.10.5279) with OpenGL 2.0
    RADEON X550 x86/SSE2 (6.14.10.6012) with OpenGL 2.0
    RADEON X550 x86/SSE2 (6.14.10.6287) with OpenGL 2.0
    RADEON X600 PRO x86/MMX/3DNow!/SSE2 (6.14.10.5529) with OpenGL 2.0
    RADEON X600 x86/MMX/3DNow!/SSE2 (6.14.10.6011) with OpenGL 2.0
    RADEON X600 x86/SSE2 (6.14.10.5279) with OpenGL 2.0
    RADEON X600/X550 Series x86/MMX/3DNow!/SSE2 (6.14.10.6012) with OpenGL 2.0
    RADEON X800 GTO x86/MMX/3DNow!/SSE2 (6.14.10.6012) with OpenGL 2.0
    RADEON X800 PRO x86/SSE2 (6.14.10.6012) with OpenGL 2.0
    RADEON XPRESS 200 Series SW TCL x86/MMX/3DNow!/SSE2 (6.14.10.5336) with OpenGL 1.4
    RADEON XPRESS 200 Series SW TCL x86/MMX/3DNow!/SSE2 (6.14.10.5757) with OpenGL 2.0
    RADEON XPRESS 200 Series SW TCL x86/SSE2 (6.14.10.5337) with OpenGL 1.4
    RADEON XPRESS 200 Series SW TCL x86/SSE2 (6.14.10.5523) with OpenGL 1.4
    RADEON XPRESS 200 Series SW TCL x86/SSE2 (6.14.10.5645) with OpenGL 1.4
    RADEON XPRESS 200 Series SW TCL x86/SSE2 (6.14.10.5648) with OpenGL 1.4
    RADEON XPRESS 200 Series x86/SSE2 (6.14.10.5815) with OpenGL 2.0
    RADEON XPRESS 200 Series x86/SSE2 (6.14.10.5947) with OpenGL 2.0
    RADEON XPRESS 200M Series SW TCL x86/MMX/3DNow!/SSE2 (6.14.10.5276) with OpenGL 1.4
    RADEON XPRESS 200M Series SW TCL x86/MMX/3DNow!/SSE2 (6.14.10.5471) with OpenGL 1.4
    RADEON XPRESS 200M Series SW TCL x86/SSE2 (6.14.10.5220) with OpenGL 1.4
    RADEON XPRESS 200M Series SW TCL x86/SSE2 (6.14.10.5279) with OpenGL 1.4
    RADEON XPRESS 200M Series SW TCL x86/SSE2 (6.14.10.5525) with OpenGL 1.4
    RADEON XPRESS 200M Series SW TCL x86/SSE2 (6.14.10.5757) with OpenGL 2.0
    RADEON XPRESS 200M Series x86/MMX/3DNow!/SSE2 (6.14.10.5817) with OpenGL 2.0
    RADEON XPRESS Series x86/MMX/3DNow!/SSE2 (6.14.10.5949) with OpenGL 2.0
    RADEON XPRESS Series x86/MMX/3DNow!/SSE2 (6.14.10.6174) with OpenGL 2.0
    RADEON XPRESS Series x86/SSE2 (6.14.10.5949) with OpenGL 2.0
    RADEON XPRESS Series x86/SSE2 (6.14.10.6012) with OpenGL 2.0
    RADEON XPRESS Series x86/SSE2 (6.14.10.6119) with OpenGL 2.0
    RV530 XT x86/MMX/3DNow!/SSE2 (6.14.10.5339) with OpenGL 2.0
    Radeon X1300 Series x86/MMX/3DNow!/SSE2 (6.14.10.5524) with OpenGL 2.0
    Radeon X1300 Series x86/SSE2 (6.14.10.5529) with OpenGL 2.0
    Radeon X1300 Series x86/SSE2 (6.14.10.5819) with OpenGL 2.0
    Radeon X1300 Series x86/SSE2 (6.14.10.5883) with OpenGL 2.0
    Radeon X1600 Series x86/SSE2 (6.14.10.5647) with OpenGL 2.0
    Radeon X1600 Series x86/SSE2 (6.14.10.6011) with OpenGL 2.0
    Radeon X1600 Series x86/SSE2 (6.14.10.6120) with OpenGL 2.0
    Radeon X1600/1650 Series x86/SSE2 (6.14.10.6347) with OpenGL 2.0
    Radeon X1650 Series x86/MMX/3DNow!/SSE2 (6.14.10.6458) with OpenGL 2.0
    Radeon X1650 Series x86/SSE2 (6.14.10.6233) with OpenGL 2.0
    Radeon X1650 Series x86/SSE2 (6.14.10.6347) with OpenGL 2.0
    Radeon X1950 Pro x86/MMX/3DNow!/SSE (6.14.10.6645) with OpenGL 2.0
    SAPPHIRE RADEON X300SE x86/MMX/3DNow!/SSE2 (6.14.10.6847) with OpenGL 2.0
    VisionTek Radeon X1300 x86/SSE2 (6.14.10.5523) with OpenGL 2.0
    
    Apple Computer, Inc.
    Apple Software Renderer (OpenGL 2.1 APPLE) with OpenGL 2.1
    
    Intel
    Intel 965/963 Graphics Media Accelerator (6.14.10.5009) with OpenGL 2.0
    Intel 965/963 Graphics Media Accelerator (6.14.10.5016) with OpenGL 2.0
    Intel 965/963 Graphics Media Accelerator (6.14.10.5029) with OpenGL 2.0
    Intel 965/963 Graphics Media Accelerator (6.14.10.5218) with OpenGL 2.0
    Intel 965/963 Graphics Media Accelerator (7.15.10.1576) with OpenGL 2.0
    Intel 965/963 Graphics Media Accelerator (7.15.10.1666) with OpenGL 2.0
    Intel 965/963 Graphics Media Accelerator (7.15.10.1839) with OpenGL 2.0
    Intel 965/963 Graphics Media Accelerator (8.14.10.1930) with OpenGL 2.0
    Intel 965/963 Graphics Media Accelerator (8.15.10.1825) with OpenGL 2.0
    Intel 965/963 Graphics Media Accelerator (8.15.10.1867) with OpenGL 2.0
    Intel Cantiga (6.14.10.4958) with OpenGL 2.0
    Intel Cantiga (6.14.10.4969) with OpenGL 2.0
    Intel Cantiga (6.14.10.4977) with OpenGL 2.0
    Intel Cantiga (6.14.10.4980) with OpenGL 2.0
    Intel Cantiga (6.14.10.4990) with OpenGL 2.0
    Intel Cantiga (6.14.10.5002) with OpenGL 2.0
    Intel Cantiga (6.14.10.5009) with OpenGL 2.0
    Intel Cantiga (6.14.10.5016) with OpenGL 2.0
    Intel Cantiga (6.14.10.5029) with OpenGL 2.0
    Intel Cantiga (6.14.10.5042) with OpenGL 2.0
    Intel Cantiga (6.14.10.5043) with OpenGL 2.0
    Intel Cantiga (6.14.10.5047) with OpenGL 2.0
    Intel Cantiga (6.14.10.5060) with OpenGL 2.0
    Intel Cantiga (6.14.10.5068) with OpenGL 2.0
    Intel Cantiga (6.14.10.5082) with OpenGL 2.0
    Intel Cantiga (6.14.10.5186) with OpenGL 2.0
    Intel Cantiga (6.14.10.5218) with OpenGL 2.0
    Intel Cantiga (7.15.10.1554) with OpenGL 2.0
    Intel Cantiga (7.15.10.1576) with OpenGL 2.0
    Intel Cantiga (7.15.10.1591) with OpenGL 2.0
    Intel Cantiga (7.15.10.1599) with OpenGL 2.0
    Intel Cantiga (7.15.10.1637) with OpenGL 2.0
    Intel Cantiga (7.15.10.1670) with OpenGL 2.0
    Intel Cantiga (7.15.10.1752) with OpenGL 2.0
    Intel Cantiga (7.15.10.1861) with OpenGL 2.0
    Intel Eaglelake (6.14.10.4977) with OpenGL 2.0
    Intel Eaglelake (6.14.10.4990) with OpenGL 2.0
    Intel Eaglelake (6.14.10.5002) with OpenGL 2.0
    Intel Eaglelake (6.14.10.5009) with OpenGL 2.0
    Intel Eaglelake (6.14.10.5016) with OpenGL 2.0
    Intel Eaglelake (6.14.10.5029) with OpenGL 2.0
    Intel Eaglelake (6.14.10.5039) with OpenGL 2.0
    Intel Eaglelake (6.14.10.5043) with OpenGL 2.0
    Intel Eaglelake (6.14.10.5047) with OpenGL 2.0
    Intel Eaglelake (6.14.10.5068) with OpenGL 2.0
    Intel Eaglelake (6.14.10.5082) with OpenGL 2.0
    Intel Eaglelake (6.14.10.5102) with OpenGL 2.0
    Intel Eaglelake (6.14.10.5157) with OpenGL 2.0
    Intel Eaglelake (6.14.10.5215) with OpenGL 2.0
    Intel Eaglelake (7.15.10.1637) with OpenGL 2.0
    Intel(R) G41 Express Chipset (6.14.10.5160) with OpenGL 2.1
    Intel(R) G41 Express Chipset (6.14.10.5179) with OpenGL 2.1
    Intel(R) G41 Express Chipset (6.14.10.5189) with OpenGL 2.1
    Intel(R) G41 Express Chipset (6.14.10.5241) with OpenGL 2.1
    Intel(R) G41 Express Chipset (6.14.10.5259) with OpenGL 2.1
    Intel(R) G41 Express Chipset (8.15.10.1851) with OpenGL 2.1
    Intel(R) G41 Express Chipset (8.15.10.1872) with OpenGL 2.1
    Intel(R) G41 Express Chipset (8.15.10.1968) with OpenGL 2.1
    Intel(R) G41 Express Chipset (8.15.10.1986) with OpenGL 2.1
    Intel(R) G41 Express Chipset (8.15.10.1995) with OpenGL 2.1
    Intel(R) G41 Express Chipset (8.15.10.2008) with OpenGL 2.1
    Intel(R) G45/G43 Express Chipset (8.15.10.1855) with OpenGL 2.1
    Intel(R) Graphics Media Accelerator HD (6.14.10.5179) with OpenGL 2.1
    Intel(R) Graphics Media Accelerator HD (6.14.10.5220) with OpenGL 2.1
    Intel(R) Graphics Media Accelerator HD (6.14.10.5225) with OpenGL 2.1
    Intel(R) Graphics Media Accelerator HD (8.15.10.1968) with OpenGL 2.1
    Intel(R) Graphics Media Accelerator HD (8.15.10.1986) with OpenGL 2.1
    Intel(R) Graphics Media Accelerator HD (8.15.10.1995) with OpenGL 2.1
    Intel(R) Graphics Media Accelerator HD (8.15.10.2008) with OpenGL 2.1
    Intel(R) Graphics Media Accelerator HD (8.15.10.2021) with OpenGL 2.1
    Intel(R) Graphics Media Accelerator HD (8.15.10.2025) with OpenGL 2.1
    Intel(R) Graphics Media Accelerator HD (8.15.10.2040) with OpenGL 2.1
    Intel(R) Graphics Media Accelerator HD (8.15.10.2057) with OpenGL 2.1
    Intel(R) Graphics Media Accelerator HD (8.15.10.2082) with OpenGL 2.1
    Intel(R) Graphics Media Accelerator HD (8.15.10.2097) with OpenGL 2.1
    Intel(R) Graphics Media Accelerator HD (OpenGL 2.1.0 - Build 8.15.10.2008) with OpenGL 2.1
    Intel(R) Q45/Q43 Express Chipset (8.15.10.1855) with OpenGL 2.1
    Intel(R) Q45/Q43 Express Chipset (8.15.10.1995) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (6.14.10.4764) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (6.14.10.5160) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (6.14.10.5225) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (8.15.10.1808) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (8.15.10.1840) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (8.15.10.1851) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (8.15.10.1855) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (8.15.10.1872) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (8.15.10.1883) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (8.15.10.1892) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (8.15.10.1968) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (8.15.10.1994) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (8.15.10.2021) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (8.15.10.2057) with OpenGL 2.1
    Mobile Intel(R) 4 Series Express Chipset Family (OpenGL 2.1.0 - Build 8.15.10.1892) with OpenGL 2.1
    
    NVIDIA Corporation
    GeForce 6200/AGP/SSE2/3DNOW! (6.14.10.7645) with OpenGL 2.0
    GeForce 6200/PCI/SSE2 (6.14.10.7645) with OpenGL 2.0
    GeForce 6600 GT/PCI/SSE2/3DNOW! (6.14.10.7772) with OpenGL 2.0
    GeForce 6600 LE/PCI/SSE2 (6.14.10.7774) with OpenGL 2.0
    GeForce 6600/PCI/SSE2 (6.14.10.7750) with OpenGL 2.0
    GeForce 6600/PCI/SSE2/3DNOW! (6.14.10.7772) with OpenGL 2.0
    GeForce FX 5100/AGP/SSE2 (6.14.10.7730) with OpenGL 2.0
    GeForce FX 5200/AGP/SSE2 (6.14.10.7777) with OpenGL 2.0
    GeForce FX 5200/PCI/SSE2 (6.14.10.7777) with OpenGL 2.0
    GeForce FX 5500/PCI/SSE2 (6.14.10.7801) with OpenGL 2.0
    GeForce Go 6400/PCI/SSE2 (6.14.10.7742) with OpenGL 2.0
    
  2. Anonymous

    I lost Canvas support from 0.7.2 to 0.8.0, and I use one of the aforementioned graphics cards. I'd also like to see this issue addressed.

  3. Log in to comment