Package com.badlogic.gdx.graphics.glutils

Source Code of com.badlogic.gdx.graphics.glutils.FileTextureData

/*******************************************************************************
* Copyright 2011 See AUTHORS file.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/

package com.badlogic.gdx.graphics.glutils;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Pixmap.Format;
import com.badlogic.gdx.graphics.TextureData;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.utils.GdxRuntimeException;

public class FileTextureData implements TextureData {
  static public boolean copyToPOT;

  final FileHandle file;
  int width = 0;
  int height = 0;
  Format format;
  Pixmap pixmap;
  boolean useMipMaps;
  boolean isPrepared = false;

  public FileTextureData (FileHandle file, Pixmap preloadedPixmap, Format format, boolean useMipMaps) {
    this.file = file;
    this.pixmap = preloadedPixmap;
    this.format = format;
    this.useMipMaps = useMipMaps;
    if (pixmap != null) {
      pixmap = ensurePot(pixmap);
      width = pixmap.getWidth();
      height = pixmap.getHeight();
      if (format == null) this.format = pixmap.getFormat();
    }
  }

  @Override
  public boolean isPrepared () {
    return isPrepared;
  }

  @Override
  public void prepare () {
    if (isPrepared) throw new GdxRuntimeException("Already prepared");
    if (pixmap == null) {
      pixmap = ensurePot(new Pixmap(file));
      width = pixmap.getWidth();
      height = pixmap.getHeight();
      if (format == null) format = pixmap.getFormat();
    }
    isPrepared = true;
  }

  private Pixmap ensurePot (Pixmap pixmap) {
    if (Gdx.gl20 == null && copyToPOT) {
      int pixmapWidth = pixmap.getWidth();
      int pixmapHeight = pixmap.getHeight();
      int potWidth = MathUtils.nextPowerOfTwo(pixmapWidth);
      int potHeight = MathUtils.nextPowerOfTwo(pixmapHeight);
      if (pixmapWidth != potWidth || pixmapHeight != potHeight) {
        Pixmap tmp = new Pixmap(potWidth, potHeight, pixmap.getFormat());
        tmp.drawPixmap(pixmap, 0, 0, 0, 0, pixmapWidth, pixmapHeight);
        pixmap.dispose();
        return tmp;
      }
    }
    return pixmap;
  }

  @Override
  public Pixmap consumePixmap () {
    if (!isPrepared) throw new GdxRuntimeException("Call prepare() before calling getPixmap()");
    isPrepared = false;
    Pixmap pixmap = this.pixmap;
    this.pixmap = null;
    return pixmap;
  }

  @Override
  public boolean disposePixmap () {
    return true;
  }

  @Override
  public int getWidth () {
    return width;
  }

  @Override
  public int getHeight () {
    return height;
  }

  @Override
  public Format getFormat () {
    return format;
  }

  @Override
  public boolean useMipMaps () {
    return useMipMaps;
  }

  @Override
  public boolean isManaged () {
    return true;
  }

  public FileHandle getFileHandle () {
    return file;
  }

  @Override
  public TextureDataType getType () {
    return TextureDataType.Pixmap;
  }

  @Override
  public void consumeCustomData (int target) {
    throw new GdxRuntimeException("This TextureData implementation does not upload data itself");
  }
}
TOP

Related Classes of com.badlogic.gdx.graphics.glutils.FileTextureData

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.