/**
* Copyright 2012 Jason Sorensen (sorensenj@smert.net)
*
* 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 net.smert.frameworkgl.opengl.helpers;
import java.nio.ByteBuffer;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.nio.ShortBuffer;
import net.smert.frameworkgl.opengl.constants.TextureTargets;
import net.smert.frameworkgl.opengl.constants.TextureTypes;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import org.lwjgl.opengl.GL13;
import org.lwjgl.opengl.GL14;
import org.lwjgl.opengl.GL30;
/**
*
* @author Jason Sorensen <sorensenj@smert.net>
*/
public class TextureHelper {
private int textureTarget = TextureTargets.TEXTURE_2D;
public void activeTexture(int textureunit) {
GL13.glActiveTexture(textureunit);
}
public void bind(int textureID) {
GL11.glBindTexture(textureTarget, textureID);
}
public int create() {
return GL11.glGenTextures();
}
public void create(IntBuffer textureIDs) {
GL11.glGenTextures(textureIDs);
}
public void delete(int textureID) {
GL11.glDeleteTextures(textureID);
}
public void generateMipmap() {
GL30.glGenerateMipmap(textureTarget);
}
public void setClamping(int wrapR, int wrapS, int wrapT) {
GL11.glTexParameteri(textureTarget, GL12.GL_TEXTURE_WRAP_R, wrapR);
GL11.glTexParameteri(textureTarget, GL11.GL_TEXTURE_WRAP_S, wrapS);
GL11.glTexParameteri(textureTarget, GL11.GL_TEXTURE_WRAP_T, wrapT);
}
public void setCompareFunction(int compareFunc) {
GL11.glTexParameteri(textureTarget, GL14.GL_TEXTURE_COMPARE_FUNC, compareFunc);
}
public void setCompareMode(int compareMode) {
GL11.glTexParameteri(textureTarget, GL14.GL_TEXTURE_COMPARE_MODE, compareMode);
}
public void setFilters(int magFilter, int minFilter) {
GL11.glTexParameteri(textureTarget, GL11.GL_TEXTURE_MAG_FILTER, magFilter);
GL11.glTexParameteri(textureTarget, GL11.GL_TEXTURE_MIN_FILTER, minFilter);
}
public void setImage2DBytePixelData(int internalFormat, int width, int height, int format, ByteBuffer pixelData) {
GL11.glTexImage2D(textureTarget, 0, internalFormat, width, height, 0, format, TextureTypes.UNSIGNED_BYTE, pixelData);
}
public void setImage2DFloatPixelData(int internalFormat, int width, int height, int format, FloatBuffer pixelData) {
GL11.glTexImage2D(textureTarget, 0, internalFormat, width, height, 0, format, TextureTypes.FLOAT, pixelData);
}
public void setImage2DInt1010102PixelData(int internalFormat, int width, int height, int format, IntBuffer pixelData) {
GL11.glTexImage2D(textureTarget, 0, internalFormat, width, height, 0, format, TextureTypes.UNSIGNED_INT_10_10_10_2, pixelData);
}
public void setImage2DIntPixelData(int internalFormat, int width, int height, int format, IntBuffer pixelData) {
GL11.glTexImage2D(textureTarget, 0, internalFormat, width, height, 0, format, TextureTypes.UNSIGNED_INT, pixelData);
}
public void setImage2DShortPixelData(int internalFormat, int width, int height, int format, ShortBuffer pixelData) {
GL11.glTexImage2D(textureTarget, 0, internalFormat, width, height, 0, format, TextureTypes.UNSIGNED_SHORT, pixelData);
}
public void setImage2DStencilPixelData(int internalFormat, int width, int height, int format, IntBuffer pixelData) {
GL11.glTexImage2D(textureTarget, 0, internalFormat, width, height, 0, format, TextureTypes.UNSIGNED_INT_24_8, pixelData);
}
public void setImage3DBytePixelData(int internalFormat, int width, int height, int depth, int format, ByteBuffer pixelData) {
GL12.glTexImage3D(textureTarget, 0, internalFormat, width, height, depth, 0, format, TextureTypes.UNSIGNED_BYTE, pixelData);
}
public void setImage3DFloatPixelData(int internalFormat, int width, int height, int depth, int format, FloatBuffer pixelData) {
GL12.glTexImage3D(textureTarget, 0, internalFormat, width, height, depth, 0, format, TextureTypes.FLOAT, pixelData);
}
public void setImage3DInt1010102PixelData(int internalFormat, int width, int height, int depth, int format, IntBuffer pixelData) {
GL12.glTexImage3D(textureTarget, 0, internalFormat, width, height, depth, 0, format, TextureTypes.UNSIGNED_INT_10_10_10_2, pixelData);
}
public void setImage3DIntPixelData(int internalFormat, int width, int height, int depth, int format, IntBuffer pixelData) {
GL12.glTexImage3D(textureTarget, 0, internalFormat, width, height, depth, 0, format, TextureTypes.UNSIGNED_INT, pixelData);
}
public void setImage3DShortPixelData(int internalFormat, int width, int height, int depth, int format, ShortBuffer pixelData) {
GL12.glTexImage3D(textureTarget, 0, internalFormat, width, height, depth, 0, format, TextureTypes.UNSIGNED_SHORT, pixelData);
}
public void setImage3DStencilPixelData(int internalFormat, int width, int height, int depth, int format, IntBuffer pixelData) {
GL12.glTexImage3D(textureTarget, 0, internalFormat, width, height, depth, 0, format, TextureTypes.UNSIGNED_INT_24_8, pixelData);
}
public void setLodBias(float lodBias) {
GL11.glTexParameterf(textureTarget, GL14.GL_TEXTURE_LOD_BIAS, lodBias);
}
public void setMaxLod(float maxLod) {
GL11.glTexParameterf(textureTarget, GL12.GL_TEXTURE_MAX_LOD, maxLod);
}
public void setMinLod(float minLod) {
GL11.glTexParameterf(textureTarget, GL12.GL_TEXTURE_MIN_LOD, minLod);
}
public void setTextureTarget2D() {
textureTarget = TextureTargets.TEXTURE_2D;
}
public void setTextureTarget3D() {
textureTarget = TextureTargets.TEXTURE_3D;
}
public void setTextureTargetCubeMap() {
textureTarget = TextureTargets.TEXTURE_CUBE_MAP;
}
public void setTextureTargetCubeMapNegativeX() {
textureTarget = TextureTargets.TEXTURE_CUBE_MAP_NEGATIVE_X;
}
public void setTextureTargetCubeMapPositiveX() {
textureTarget = TextureTargets.TEXTURE_CUBE_MAP_POSITIVE_X;
}
public void setTextureTargetCubeMapNegativeY() {
textureTarget = TextureTargets.TEXTURE_CUBE_MAP_NEGATIVE_Y;
}
public void setTextureTargetCubeMapPositiveY() {
textureTarget = TextureTargets.TEXTURE_CUBE_MAP_POSITIVE_Y;
}
public void setTextureTargetCubeMapNegativeZ() {
textureTarget = TextureTargets.TEXTURE_CUBE_MAP_NEGATIVE_Z;
}
public void setTextureTargetCubeMapPositiveZ() {
textureTarget = TextureTargets.TEXTURE_CUBE_MAP_POSITIVE_Z;
}
public void unbind() {
GL11.glBindTexture(textureTarget, 0);
}
}