コード例 #1
0
  /**
   * Load a texture into OpenGL from a BufferedImage
   *
   * @param resourceName The location of the resource to load
   * @param resourceimage The BufferedImage we are converting
   * @param target The GL target to load the texture against
   * @param dstPixelFormat The pixel format of the screen
   * @param minFilter The minimising filter
   * @param magFilter The magnification filter
   * @return The loaded texture
   * @throws IOException Indicates a failure to access the resource
   */
  public static Texture getTexture(
      String resourceName,
      BufferedImage resourceimage,
      int target,
      int dstPixelFormat,
      int minFilter,
      int magFilter)
      throws IOException {
    ImageIOImageData data = new ImageIOImageData();
    int srcPixelFormat = 0;

    // create the texture ID for this texture
    int textureID = InternalTextureLoader.createTextureID();
    TextureImpl texture = new TextureImpl(resourceName, target, textureID);

    // Enable texturing
    Renderer.get().glEnable(SGL.GL_TEXTURE_2D);

    // bind this texture
    Renderer.get().glBindTexture(target, textureID);

    BufferedImage bufferedImage = resourceimage;
    texture.setWidth(bufferedImage.getWidth());
    texture.setHeight(bufferedImage.getHeight());

    if (bufferedImage.getColorModel().hasAlpha()) {
      srcPixelFormat = SGL.GL_RGBA;
    } else {
      srcPixelFormat = SGL.GL_RGB;
    }

    // convert that image into a byte buffer of texture data
    ByteBuffer textureBuffer = data.imageToByteBuffer(bufferedImage, false, false, null);
    texture.setTextureHeight(data.getTexHeight());
    texture.setTextureWidth(data.getTexWidth());
    texture.setAlpha(data.getDepth() == 32);

    if (target == SGL.GL_TEXTURE_2D) {
      Renderer.get().glTexParameteri(target, SGL.GL_TEXTURE_MIN_FILTER, minFilter);
      Renderer.get().glTexParameteri(target, SGL.GL_TEXTURE_MAG_FILTER, magFilter);

      if (Renderer.get().canTextureMirrorClamp()) {
        Renderer.get()
            .glTexParameteri(
                SGL.GL_TEXTURE_2D, SGL.GL_TEXTURE_WRAP_S, SGL.GL_MIRROR_CLAMP_TO_EDGE_EXT);
        Renderer.get()
            .glTexParameteri(
                SGL.GL_TEXTURE_2D, SGL.GL_TEXTURE_WRAP_T, SGL.GL_MIRROR_CLAMP_TO_EDGE_EXT);
      } else {
        Renderer.get().glTexParameteri(SGL.GL_TEXTURE_2D, SGL.GL_TEXTURE_WRAP_S, SGL.GL_CLAMP);
        Renderer.get().glTexParameteri(SGL.GL_TEXTURE_2D, SGL.GL_TEXTURE_WRAP_T, SGL.GL_CLAMP);
      }
    }

    Renderer.get()
        .glTexImage2D(
            target,
            0,
            dstPixelFormat,
            texture.getTextureWidth(),
            texture.getTextureHeight(),
            0,
            srcPixelFormat,
            SGL.GL_UNSIGNED_BYTE,
            textureBuffer);

    return texture;
  }