public static void apply(final JoglRenderer renderer, final VertexProgramState state) {
    final GL gl = GLU.getCurrentGL();
    final RenderContext context = ContextManager.getCurrentContext();
    final ContextCapabilities caps = context.getCapabilities();

    if (caps.isVertexProgramSupported()) {
      // ask for the current state record
      final VertexProgramStateRecord record =
          (VertexProgramStateRecord) context.getStateRecord(StateType.VertexProgram);
      context.setCurrentState(StateType.VertexProgram, state);

      if (!record.isValid() || record.getReference() != state) {
        record.setReference(state);
        if (state.isEnabled()) {
          // Vertex program not yet loaded
          if (state._getProgramID() == -1) {
            if (state.getProgramAsBuffer() != null) {
              final int id = create(state.getProgramAsBuffer());
              state._setProgramID(id);
            } else {
              return;
            }
          }

          gl.glEnable(GL.GL_VERTEX_PROGRAM_ARB);
          gl.glBindProgramARB(GL.GL_VERTEX_PROGRAM_ARB, state._getProgramID());

          // load environmental parameters...
          for (int i = 0; i < VertexProgramState._getEnvParameters().length; i++) {
            if (VertexProgramState._getEnvParameters()[i] != null) {
              gl.glProgramEnvParameter4fARB(
                  GL.GL_VERTEX_PROGRAM_ARB,
                  i,
                  VertexProgramState._getEnvParameters()[i][0],
                  VertexProgramState._getEnvParameters()[i][1],
                  VertexProgramState._getEnvParameters()[i][2],
                  VertexProgramState._getEnvParameters()[i][3]);
            }
          }

          // load local parameters...
          if (state.isUsingParameters()) {
            // no parameters are used
            for (int i = 0; i < state._getParameters().length; i++) {
              if (state._getParameters()[i] != null) {
                gl.glProgramLocalParameter4fARB(
                    GL.GL_VERTEX_PROGRAM_ARB,
                    i,
                    state._getParameters()[i][0],
                    state._getParameters()[i][1],
                    state._getParameters()[i][2],
                    state._getParameters()[i][3]);
              }
            }
          }

        } else {
          gl.glDisable(GL.GL_VERTEX_PROGRAM_ARB);
        }
      }

      if (!record.isValid()) {
        record.validate();
      }
    }
  }