62 lines
1.7 KiB
Java
62 lines
1.7 KiB
Java
package engine;
|
|
|
|
import java.awt.image.BufferedImage;
|
|
import java.io.FileInputStream;
|
|
import java.io.IOException;
|
|
|
|
import javax.imageio.ImageIO;
|
|
|
|
import static org.lwjgl.opengl.GL11.*;
|
|
import static org.lwjgl.opengl.GL30.*;
|
|
|
|
public class Texture {
|
|
|
|
private int width, height;
|
|
private int texture;
|
|
|
|
public Texture(String path) {
|
|
texture = load(path);
|
|
}
|
|
|
|
private int load(String path) {
|
|
int[] pixels = null;
|
|
try {
|
|
BufferedImage image = ImageIO.read(new FileInputStream(path));
|
|
width = image.getWidth();
|
|
height = image.getHeight();
|
|
pixels = new int[width * height];
|
|
image.getRGB(0, 0, width, height, pixels, 0, width);
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
int[] data = new int[width * height];
|
|
for (int i = 0; i < width * height; i++) {
|
|
int a = (pixels[i] & 0xff000000) >> 24;
|
|
int r = (pixels[i] & 0xff0000) >> 16;
|
|
int g = (pixels[i] & 0xff00) >> 8;
|
|
int b = (pixels[i] & 0xff);
|
|
|
|
data[i] = a << 24 | b << 16 | g << 8 | r;
|
|
}
|
|
|
|
int result = glGenTextures();
|
|
glBindTexture(GL_TEXTURE_2D, result);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, BufferUtils.createIntBuffer(data));
|
|
glGenerateMipmap(GL_TEXTURE_2D);
|
|
glBindTexture(GL_TEXTURE_2D, 0);
|
|
return result;
|
|
}
|
|
|
|
public void bind() {
|
|
glBindTexture(GL_TEXTURE_2D, texture);
|
|
}
|
|
|
|
public void unbind() {
|
|
glBindTexture(GL_TEXTURE_2D, 0);
|
|
}
|
|
|
|
}
|