 <p>Writing portable OpenGL code isn't as straightforward as you might like.</p> <ol> <li><p><strong>nVidia drivers are permissive.</strong> You can get away with a lot of things on nVidia drivers that you can't get away with on other systems.</p></li> <li><p><strong>It's easy to accidentally use extra features.</strong> For example, I wrote a program targeting the 3.2 core profile, but used <code>GL_INT_2_10_10_10_REV</code> as a vertex format. The <code>GL_INT_2_10_10_10_REV</code> symbol is defined in 3.2, but it's not allowed as a vertex format until 3.3, and you won't get any error messages for using it by accident.</p></li> <li><p><strong>Lots of people run old drivers.</strong> According to the Steam survey, in 2013, 38% of customers with OpenGL 3.x drivers didn't have 3.3 support, even though hardware which supports 3.0 should support 3.3.</p></li> <li><p><strong>You will always have to test.</strong> This is the unfortunate reality.</p></li> </ol> <p>My recommendations are:</p> <ul> <li><p>Always target the core profile.</p></li> <li><p>Always specify shader language version.</p></li> <li><p>Check the driver version and abort if it is too old.</p></li> <li><p>If you can, use OpenGL headers/bindings that only expose symbols in the version you are targeting.</p></li> <li><p>Get a copy of the spec for the target version, and use that as a reference instead of the OpenGL man pages.</p></li> <li><p>Write your code so that it can also run on OpenGL ES, if that's feasible.</p></li> <li><p><strong>Test on different systems.</strong> One PC is probably not going to cut it. If you can dig up a second PC with a graphics card from a different vendor (don't forget Intel's integrated graphics), that would be better. You can probably get an OpenGL 3.x desktop for a couple hundred dollars, or if you want to save the money, ask to use a friend's computer for some quick testing. You could also buy a second video card (think under $40 for a low-end card with OpenGL 4.x support), just be careful when swapping them out.</p></li> </ul> <p>The main reason that commercial games run on a variety of systems is that they have a QA budget. If you can afford a QA team, do it! If you don't have a QA team, then you're going to have to do both QA and development -- two jobs is more work, but that's the price you pay for quashing bugs.</p>