1. Anders Ruud
  2. love
  3. Issues


Issue #779 resolved

Determine a minimum required OpenGL version

Alex Szpakowski
created an issue

Currently, LÖVE's code supports everything down to OpenGL 1.1 or so (mid-late 90's era graphics) at the expense of having conditional code throughout the graphics module for supporting ancient systems, and having some useful API features not work when LÖVE is run on old systems.

I don't think this is particularly good for LÖVE's codebase or for its API. Lovers shouldn't have to check love.graphics.isSupported at runtime for every small graphics feature they want to use.

Having a baseline minimum required version of OpenGL will help with that, especially in the future once it becomes more feasible to drop support of systems which don't have shader or canvas support.

Here are some stats on GPU/driver support for OpenGL versions: http://feedback.wildfiregames.com/report/opengl/feature/GL_VERSION

Here are some potential minimum versions:

  • OpenGL 1.3 or 1.4: supported by all nvidia and ATI/AMD video cards from the past decade+, and supported by nearly every integrated Intel GPU. I think a couple of the truly awful Intel GMAs don't support OpenGL 1.4 on Windows. This is probably a good baseline for right now, as it prevents almost no one from running LÖVE.

  • OpenGL 1.5: the same as above for nvidia and ATI/AMD, but a couple more truly awful Intel GMAs don't support this. The benefit of requiring OpenGL 1.5 is that Vertex Buffer Objects (which are very useful in LÖVE's codebase) have guaranteed support, so conditional fallback code doesn't need to be written for them.

  • OpenGL 2.1: This is the minimum version LÖVE currently requires for shader support. It also guarantees NPOT textures support. Guaranteeing shader support for every system which can run LÖVE would be nice eventually. It's supported by the nvidia GeForce 6xxx series (2004) and above, ATI Radeon 9xxx series or so, and Intel GMA X3xxx+ GPUs (or lower, depending on the OS) and newer.

  • OpenGL 2.1 plus Framebuffer Objects (canvases): Framebuffer Objects are just an extension in OpenGL 2.x, but they have nearly ubiquitous support on those systems, so it might be is reasonable to require them as well if GL 2.1 is required. [UPDATE: I did some digging and it does appear that all drivers which support GL 2.x also support FBOs.]

  • OpenGL 3.1 or 3.2+: Supported by nvidia GeForce 8xxx (2006) and newer, ATI/AMD HD 2xxx (2006) and newer, and Intel HD 2/3xxx (2011). This is impractical to require right now for a few reasons, one being that the shader language for Core Profile OpenGL 3.x+ is slightly different from the one used in OpenGL ES 2.0.

In terms of OpenGL ES (mobile) support, according to Google 99.8% of Android devices support OpenGL ES 2.0 or newer. It's safe to assume the number is higher on iOS devices. In terms of features, OpenGL ES 2.0 without extensions is roughly equivalent to OpenGL 2.1 plus Framebuffer Objects (canvases.)

Comments (16)

  1. Nicolás Pinochet

    So you want to limit the OpenGL version required to run LÖVE? Having a computer that doesn't support shaders or canvas, I think that is a bad idea since you can just limit the OpenGL version of the game you are making by not using love.graphics.isSupported. But if this decision benefits the engine in a performance way, then this could be a good idea. Sorry for my english.

  2. Alex Szpakowski reporter

    I don't think we're going to require shader support right now, but at the moment there is code in LÖVE's source for making sure it works on video cards created before this century, which just makes the code more difficult to maintain more than anything else. It'll be good to have official minimum requirements.

  3. Minh Ngo

    I think it's a good idea if it helps to reduce code complexity. I don't know enough to suggest a good baseline, but can say that sometimes you gotta drop legacy support to move forward.

  4. Antonio Moder

    To Alex Szpakowski

    This is good idea!

    I don't have "fully OpenGL 2.1" support on my "intel GMA 965/963 (x3100) Windows", but i have "fully OpenGL 1.1 - 2.0" support.

    I vote for "OpenGL 1.5" or "OpenGL 1.3 or 1.4", to your notice.

  5. muddmaker

    Screw compatibility, require OpenGL 4.4 /s

    Jokes aside, I feel that supporting hardware that does not support 2.1 might eventually become a hassle, and slow down development. Plus computers that have this old of software probably do not have enough processing or graphics power to run games correctly. You have already cut support for Mac OS X 10.5 because it is old, so cutting off old hardware shouldn't be that big of a deal.

    However, if there is enough demand for old hardware, we could always reverse this decision, but if no one bats an eye, it is probably safe to keep it this way.

  6. Landon Manning

    After reading only the title of this issue, I immediately thought "OpenGL 2.1". I think most people would probably agree that 2.1 is a pretty safe place at this point in time. That gives us a technology buffer of exactly one decade.

    If people in rural China are trying to play mari0 on some ancient Windows XP system, may God have mercy on their souls.

  7. Landon Manning

    Love having an established codebase shouldn't be grounds for holding back. Love is still beta software (more or less) and changes to the core are to be expected. OpenGL 2.1 seems like a very safe baseline for game development at this point in time. Virtually every video card within the last decade supports it, virtually every mobile device in use supports it (OpenGL ES 2.0), and any person with hardware that does not support it probably isn't going to be trying to play very many games anyway.

    The only reason to try and support hardware sub 2.1 is to maintain legacy support for systems not of this century. We obviously need to maintain a reasonable buffer between OpenGL requirements and hardware expectations (there is no reason someone developing for LOVE should need a TITAN), but we should also be reasonable with the size of that buffer. "Within this century" or "Within the last decade" seem like very reasonable buffers to me.

  8. Alex Szpakowski reporter

    OpenGL 2.1 is now required to use love.graphics (resolves issue #779.)

    Removed love.graphics.isSupported("canvas", "shader", "npot", "subtractive", and "mipmap"), since those features are all guaranteed by the minimum system requirements.

    → <<cset 43b3c57e46b4>>

    (since the automatic message here doesn't mention it, this is for LÖVE 0.10, not 0.9.x.)

  9. Log in to comment