示例#1
0
文件: Mipmap.java 项目: rothwell/jogl
  public static int gluBuild1DMipmaps(
      GL gl, int target, int internalFormat, int width, int format, int type, ByteBuffer data) {
    int dataPos = data.position();

    try {
      int[] widthPowerOf2 = new int[1];
      int levels;
      int[] dummy = new int[1];

      int rc = checkMipmapArgs(internalFormat, format, type);
      if (rc != 0) {
        return (rc);
      }

      if (width < 1) {
        return (GLU.GLU_INVALID_VALUE);
      }

      closestFit(gl, target, width, 1, internalFormat, format, type, widthPowerOf2, dummy);
      levels = computeLog(widthPowerOf2[0]);

      return (BuildMipmap.gluBuild1DMipmapLevelsCore(
          gl, target, internalFormat, width, widthPowerOf2[0], format, type, 0, 0, levels, data));
    } finally {
      data.position(dataPos);
    }
  }
示例#2
0
文件: Mipmap.java 项目: rothwell/jogl
  public static int gluBuild1DMipmapLevels(
      GL gl,
      int target,
      int internalFormat,
      int width,
      int format,
      int type,
      int userLevel,
      int baseLevel,
      int maxLevel,
      ByteBuffer data) {
    int dataPos = data.position();
    try {

      int levels;

      int rc = checkMipmapArgs(internalFormat, format, type);
      if (rc != 0) {
        return (rc);
      }

      if (width < 1) {
        return (GLU.GLU_INVALID_VALUE);
      }

      levels = computeLog(width);

      levels += userLevel;
      if (!isLegalLevels(userLevel, baseLevel, maxLevel, levels)) {
        return (GLU.GLU_INVALID_VALUE);
      }

      return (BuildMipmap.gluBuild1DMipmapLevelsCore(
          gl,
          target,
          internalFormat,
          width,
          width,
          format,
          type,
          userLevel,
          baseLevel,
          maxLevel,
          data));
    } finally {
      data.position(dataPos);
    }
  }
示例#3
0
文件: Mipmap.java 项目: rothwell/jogl
  public static int gluBuild3DMipmaps(
      GL gl,
      int target,
      int internalFormat,
      int width,
      int height,
      int depth,
      int format,
      int type,
      ByteBuffer data) {
    int dataPos = data.position();
    try {

      int[] widthPowerOf2 = new int[1];
      int[] heightPowerOf2 = new int[1];
      int[] depthPowerOf2 = new int[1];
      int level, levels;

      int rc = checkMipmapArgs(internalFormat, format, type);
      if (rc != 0) {
        return (rc);
      }

      if (width < 1 || height < 1 || depth < 1) {
        return (GLU.GLU_INVALID_VALUE);
      }

      if (type == GL2.GL_BITMAP) {
        return (GLU.GLU_INVALID_ENUM);
      }

      closestFit3D(
          gl,
          target,
          width,
          height,
          depth,
          internalFormat,
          format,
          type,
          widthPowerOf2,
          heightPowerOf2,
          depthPowerOf2);

      levels = computeLog(widthPowerOf2[0]);
      level = computeLog(heightPowerOf2[0]);
      if (level > levels) {
        levels = level;
      }
      level = computeLog(depthPowerOf2[0]);
      if (level > levels) {
        levels = level;
      }

      return (BuildMipmap.gluBuild3DMipmapLevelsCore(
          gl,
          target,
          internalFormat,
          width,
          height,
          depth,
          widthPowerOf2[0],
          heightPowerOf2[0],
          depthPowerOf2[0],
          format,
          type,
          0,
          0,
          levels,
          data));
    } finally {
      data.position(dataPos);
    }
  }
示例#4
0
文件: Mipmap.java 项目: rothwell/jogl
  public static int gluBuild2DMipmaps(
      GL gl,
      int target,
      int internalFormat,
      int width,
      int height,
      int format,
      int type,
      Object data) {
    int dataPos = 0;

    int[] widthPowerOf2 = new int[1];
    int[] heightPowerOf2 = new int[1];
    int level, levels;

    int rc = checkMipmapArgs(internalFormat, format, type);
    if (rc != 0) {
      return (rc);
    }

    if (width < 1 || height < 1) {
      return (GLU.GLU_INVALID_VALUE);
    }

    closestFit(
        gl, target, width, height, internalFormat, format, type, widthPowerOf2, heightPowerOf2);

    levels = computeLog(widthPowerOf2[0]);
    level = computeLog(heightPowerOf2[0]);
    if (level > levels) {
      levels = level;
    }

    // PointerWrapper pointer = PointerWrapperFactory.getPointerWrapper( data );
    ByteBuffer buffer = null;
    if (data instanceof ByteBuffer) {
      buffer = (ByteBuffer) data;
      dataPos = buffer.position();
    } else if (data instanceof byte[]) {
      byte[] array = (byte[]) data;
      buffer = ByteBuffer.allocateDirect(array.length);
      buffer.put(array);
    } else if (data instanceof short[]) {
      short[] array = (short[]) data;
      buffer = ByteBuffer.allocateDirect(array.length * 2);
      ShortBuffer sb = buffer.asShortBuffer();
      sb.put(array);
    } else if (data instanceof int[]) {
      int[] array = (int[]) data;
      buffer = ByteBuffer.allocateDirect(array.length * 4);
      IntBuffer ib = buffer.asIntBuffer();
      ib.put(array);
    } else if (data instanceof float[]) {
      float[] array = (float[]) data;
      buffer = ByteBuffer.allocateDirect(array.length * 4);
      FloatBuffer fb = buffer.asFloatBuffer();
      fb.put(array);
    }

    try {
      return (BuildMipmap.gluBuild2DMipmapLevelsCore(
          gl,
          target,
          internalFormat,
          width,
          height,
          widthPowerOf2[0],
          heightPowerOf2[0],
          format,
          type,
          0,
          0,
          levels,
          buffer));
    } finally {
      buffer.position(dataPos);
    }
  }