private void loadCapabilitiesGL2() {
        int oglVer = extractVersion(gl.glGetString(GL.GL_VERSION));

        if (oglVer >= 200) {
            caps.add(Caps.OpenGL20);
            if (oglVer >= 210) {
                caps.add(Caps.OpenGL21);
            }
            if (oglVer >= 300) {
                caps.add(Caps.OpenGL30);
            }
            if (oglVer >= 310) {
                caps.add(Caps.OpenGL31);
            }
            if (oglVer >= 320) {
                caps.add(Caps.OpenGL32);
            }
            if (oglVer >= 330) {
                caps.add(Caps.OpenGL33);
                caps.add(Caps.GeometryShader);
            }
            if (oglVer >= 400) {
                caps.add(Caps.OpenGL40);
                caps.add(Caps.TesselationShader);
            }
            if (oglVer >= 410) {
                caps.add(Caps.OpenGL41);
            }
            if (oglVer >= 420) {
                caps.add(Caps.OpenGL42);
            }
            if (oglVer >= 430) {
                caps.add(Caps.OpenGL43);
            }
            if (oglVer >= 440) {
                caps.add(Caps.OpenGL44);
            }
            if (oglVer >= 450) {
                caps.add(Caps.OpenGL45);
            }
        }

        int glslVer = extractVersion(gl.glGetString(GL.GL_SHADING_LANGUAGE_VERSION));

        switch (glslVer) {
            default:
                if (glslVer < 400) {
                    break;
                }
                // so that future OpenGL revisions won't break jme3
                // fall through intentional
            case 450:
                caps.add(Caps.GLSL450);
            case 440:
                caps.add(Caps.GLSL440);
            case 430:
                caps.add(Caps.GLSL430);
            case 420:
                caps.add(Caps.GLSL420);
            case 410:
                caps.add(Caps.GLSL410);
            case 400:
                caps.add(Caps.GLSL400);
            case 330:
                caps.add(Caps.GLSL330);
            case 150:
                caps.add(Caps.GLSL150);
            case 140:
                caps.add(Caps.GLSL140);
            case 130:
                caps.add(Caps.GLSL130);
            case 120:
                caps.add(Caps.GLSL120);
            case 110:
                caps.add(Caps.GLSL110);
            case 100:
                caps.add(Caps.GLSL100);
                break;
        }

        // Workaround, always assume we support GLSL100 & GLSL110
        // Supporting OpenGL 2.0 means supporting GLSL 1.10.
        caps.add(Caps.GLSL110);
        caps.add(Caps.GLSL100);

        // Fix issue in TestRenderToMemory when GL.GL_FRONT is the main
        // buffer being used.
        context.initialDrawBuf = getInteger(GL2.GL_DRAW_BUFFER);
        context.initialReadBuf = getInteger(GL2.GL_READ_BUFFER);

        // XXX: This has to be GL.GL_BACK for canvas on Mac
        // Since initialDrawBuf is GL.GL_FRONT for pbuffer, gotta
        // change this value later on ...
//        initialDrawBuf = GL.GL_BACK;
//        initialReadBuf = GL.GL_BACK;
    }
Enable/Disable default automatic generation of mipmaps for framebuffers
@param v  Default is true
jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java