package tools.gl;
import javax.media.opengl.*;
import com.sun.opengl.util.texture.*;
import java.nio.ByteBuffer;
import java.nio.IntBuffer;
import java.io.*;
public class Cubemap {
private GL gl;
private int tid;
public Cubemap(GL gl) {
this.gl = gl;
}
public void bind() {
gl.glBindTexture(GL.GL_TEXTURE_CUBE_MAP, tid);
gl.glTexGeni(GL.GL_S, GL.GL_TEXTURE_GEN_MODE, GL.GL_NORMAL_MAP);
gl.glTexGeni(GL.GL_T, GL.GL_TEXTURE_GEN_MODE, GL.GL_NORMAL_MAP);
gl.glTexGeni(GL.GL_R, GL.GL_TEXTURE_GEN_MODE, GL.GL_NORMAL_MAP);
gl.glEnable(GL.GL_TEXTURE_GEN_S);
gl.glEnable(GL.GL_TEXTURE_GEN_T);
gl.glEnable(GL.GL_TEXTURE_GEN_R);
gl.glEnable(GL.GL_TEXTURE_CUBE_MAP);
}
public boolean loadFromFile(String[] filenames) {
if (filenames.length < 6)
return false;
try {
IntBuffer idBuffer = IntBuffer.allocate(1);
gl.glGenTextures(1, idBuffer);
tid = idBuffer.get();
gl.glBindTexture(GL.GL_TEXTURE_CUBE_MAP, tid);
for (int i = 0; i < 6; i++) {
File tmpFile = new File(filenames[i]);
if (!tmpFile.exists())
return false;
TextureData td = TextureIO.newTextureData(tmpFile, false, null);
ByteBuffer buffer = (ByteBuffer) td.getBuffer();
gl.glTexImage2D(GL.GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0,
GL.GL_RGB8, td.getWidth(), td.getHeight(), 0,
GL.GL_RGB, GL.GL_UNSIGNED_BYTE, buffer);
}
} catch (Exception e) {
System.out.println(e.getMessage());
return false;
}
return true;
}
}