All Downloads are FREE. Search and download functionalities are using the official Maven repository.

darwin.resourcehandling.texture.TextureUtil Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2012 daniel
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see .
 */
package darwin.resourcehandling.texture;

import java.io.*;

import darwin.renderer.GraphicContext;
import darwin.util.logging.InjectLogger;

import com.google.inject.Inject;
import com.jogamp.opengl.util.texture.*;
import javax.media.opengl.*;
import org.slf4j.Logger;
import org.slf4j.helpers.NOPLogger;

/**
 *
 * @author dheinrich
 */
public class TextureUtil
{

    @InjectLogger
    private Logger logger = NOPLogger.NOP_LOGGER;
//    private static final String[] postfixes = new String[]{"_RT", "_LT", "_UP", "_DN", "_FT", "_BK"};
    private final GraphicContext gc;

    @Inject
    public TextureUtil(GraphicContext gc)
    {
        this.gc = gc;
    }

    /**
     * Eine Factory methode um schnell eine leere 2D Textur im Graphic Speicher
     * zu allocieren.
     * 

* @param internalFormat
eine der folgenden symbolischen Konstanten : *
GL_ALPHA, GL_ALPHA4, GL_ALPHA8, GL_ALPHA12, * GL_ALPHA16, GL_COMPRESSED_ALPHA, * GL_COMPRESSED_LUMINANCE, * GL_COMPRESSED_LUMINANCE_ALPHA, * GL_COMPRESSED_INTENSITY, GL_COMPRESSED_RGB, * GL_COMPRESSED_RGBA, GL_DEPTH_COMPONENT, * GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, * GL_DEPTH_COMPONENT32, GL_LUMINANCE, GL_LUMINANCE4, * GL_LUMINANCE8, GL_LUMINANCE12, GL_LUMINANCE16, * GL_LUMINANCE_ALPHA, GL_LUMINANCE4_ALPHA4, * GL_LUMINANCE6_ALPHA2, GL_LUMINANCE8_ALPHA8, * GL_LUMINANCE12_ALPHA4, GL_LUMINANCE12_ALPHA12, * GL_LUMINANCE16_ALPHA16, GL_INTENSITY, GL_INTENSITY4, * GL_INTENSITY8, GL_INTENSITY12, GL_INTENSITY16, * GL_R3_G3_B2, GL_RGB, GL_RGB4, GL_RGB5, GL_RGB8, * GL_RGB10, GL_RGB12, GL_RGB16, GL_RGBA, GL_RGBA2, * GL_RGBA4, GL_RGB5_A1, GL_RGBA8, GL_RGB10_A2, * GL_RGBA12, GL_RGBA16, GL_SLUMINANCE, GL_SLUMINANCE8, * GL_SLUMINANCE_ALPHA, GL_SLUMINANCE8_ALPHA8, GL_SRGB, * GL_SRGB8, GL_SRGB_ALPHA oder GL_SRGB8_ALPHA8.
* @param width
Breite = Anzahl der Pixel pro Zeile
muss * als Wert 2^n + 2 * border f�r n Integerwerte haben. *
* @param height
H�he = Anzahl der Zeilen
muss als Wert * 2^n + 2 * border f�r n Integerwerte haben
* @param border
Breite des Rahmens || 0 oder 1
* @param pixelFormat
Bestimmt das Format der Pixeldaten.
* Folgende symbolische Werte werden akzeptiert:
* GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, * GL_RGB, GL_BGR, GL_RGBA, GL_BGRA, GL_LUMINANCE, und * GL_LUMINANCE_ALPHA
* @param pixelType
Bestimmt den Pixeltyp f�r den Inhalt von * pixels.
Folgende Typen werden unterst�tzt:
* GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, * GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, * GL_INT, GL_FLOAT, GL_UNSIGNED_BYTE_3_3_2, * GL_UNSIGNED_BYTE_2_3_3_REV, GL_UNSIGNED_SHORT_5_6_5, * GL_UNSIGNED_SHORT_5_6_5_REV, * GL_UNSIGNED_SHORT_4_4_4_4, * GL_UNSIGNED_SHORT_4_4_4_4_REV, * GL_UNSIGNED_SHORT_5_5_5_1, * GL_UNSIGNED_SHORT_1_5_5_5_REV, * GL_UNSIGNED_INT_8_8_8_8, * GL_UNSIGNED_INT_8_8_8_8_REV, * GL_UNSIGNED_INT_10_10_10_2 und * GL_UNSIGNED_INT_2_10_10_10_REV.
* @param mipmap
Boolischer Wert ob Mipmaps der Textur mittel * GLU erstellt werden sollen.
*

* @return Die erstellte Textur wird zur�ckgegeben. */ public Texture newTexture(int internalFormat, int width, int height, int border, int pixelFormat, int pixelType, boolean mipmap) { GL gl = gc.getGL(); TextureData a = new TextureData(gl.getGLProfile(), internalFormat, width, height, border, pixelFormat, pixelType, mipmap, false, false, null, null); Texture tex = TextureIO.newTexture(GL.GL_TEXTURE_2D); tex.updateImage(gl, a); return tex; } /** * Setzt die MIN und MAG Filterung der Textur sowie wie sie gewrapt werden * soll. *

* @param tex
Die Texture die bearbeitet werden soll.
* @param filtering
Es k�nnen nur folgende werte genutzt werden: *

GL_NEAREST
Liefert den Wert des * Texturelements, welches am n�chsten (in Manhattandistanz) * zum Zentrum des zu texturierenden Pixels liegt.

* GL_LINEAR
Liefert den gewichteten Mittelwert der * vier Teexturenelemente zur�ck, die dem Zentrum des zu * texturierenden Pixels am n�chsten sind. Dies kann * Randpixel-Elemente einschliessen, je nachdem wie * GL_TEXTURE_WRAP_S und GL_TEXTURE_WRAP_T eingestellt sind. *
* @param wrapstyle
Setzt die wrap funktion die f�r die Texture * Coordinaten S und T genutzt werden. Es k�nnen folgende * Symbole genutzt werden:

GL_CLAMP, * GL_CLAMP_TO_BORDER, GL_CLAMP_TO_EDGE, GL_REPEAT, * GL_MIRRORED_REPEAT */ public void setTexturePara(Texture tex, int filtering, int wrapstyle) { GL gl = gc.getGL(); tex.setTexParameteri(gl, GL.GL_TEXTURE_MIN_FILTER, filtering); tex.setTexParameteri(gl, GL.GL_TEXTURE_MAG_FILTER, filtering); tex.setTexParameteri(gl, GL.GL_TEXTURE_WRAP_S, wrapstyle); tex.setTexParameteri(gl, GL.GL_TEXTURE_WRAP_T, wrapstyle); } /** * L�d eine Texture mit angegebener Filterung und Warp Funktion. */ // public Texture loadTexture(String path, int filtering, int wrapstyle) throws IOException // { // Texture tex = loadTexture(path); // setTexturePara(tex, filtering, wrapstyle); // return tex; // } /** * Laed eine Textur ohne eine Filterung oder Warp Funktion zu setzten */ // public Texture loadTexture(String path) throws IOException // { // try (InputStream is = loader.getRessource(path)) { // if (is == null) { // logger.warn( // "Ressource \"" + path + "\" konnte nicht gefunden werden."); // throw new IOException("Error loading file " + path); // } // String[] suffix = path.split("\\."); // Texture tex = TextureIO.newTexture(is, true, // suffix[suffix.length - 1]); // logger.info("Texture: " + path + " ...loaded!"); // return tex; // } catch (GLException ex) { // logger.error("GL Fehler beim laden der Texture " + path + "\n(" + ex.getLocalizedMessage() + ")"); // throw new IOException("Error loading file " + path); // } // } // public Texture loadCubeMap(String path) throws IOException // { // GL gl = gc.getGL(); // Texture cubemap = TextureIO.newTexture(GL.GL_TEXTURE_CUBE_MAP); // cubemap.bind(gl); // // for (int i = 0; i < 6; ++i) { // InputStream is = loader.getRessource(path + postfixes[i] + ".dds"); // TextureData data = TextureIO.newTextureData(gl.getGLProfile(), is, // false, "dds"); // cubemap.updateImage(gl, data, GL.GL_TEXTURE_CUBE_MAP + 2 + i); // } // setTexturePara(cubemap, GL.GL_LINEAR, GL.GL_CLAMP_TO_EDGE); // return cubemap; // } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy