@Override
  protected final Buffer getGammaRamp(final NativeSurface surface) {
    final long display = surface.getDisplayHandle();
    if (0 == display) {
      return null;
    }
    final int screenIdx = surface.getScreenIndex();

    final int size = getGammaRampLength(surface);

    final ShortBuffer rampData = Buffers.newDirectShortBuffer(3 * size);
    final ShortBuffer redRampData = Buffers.slice(rampData, 0 * size, size);
    final ShortBuffer greenRampData = Buffers.slice(rampData, 1 * size, size);
    final ShortBuffer blueRampData = Buffers.slice(rampData, 2 * size, size);

    final boolean res =
        X11Lib.XF86VidModeGetGammaRamp(
            display, screenIdx, size, redRampData, greenRampData, blueRampData);
    if (!res) {
      return null;
    }
    if (DEBUG) {
      dumpRamp("GET__", size, redRampData, greenRampData, blueRampData);
    }
    return rampData;
  }