create Texture
This commit is contained in:
120
src/java/ru/dmitriymx/lwjgl/tools/Texture.java
Normal file
120
src/java/ru/dmitriymx/lwjgl/tools/Texture.java
Normal file
@@ -0,0 +1,120 @@
|
||||
package ru.dmitriymx.lwjgl.tools;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.nio.IntBuffer;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.*;
|
||||
import static org.lwjgl.opengl.GL12.*;
|
||||
|
||||
public class Texture {
|
||||
private static boolean set_blend = false;
|
||||
private int bind_id;
|
||||
private BufferedImage image;
|
||||
private float one_pixel_w, one_pixel_h;
|
||||
|
||||
public Texture(BufferedImage bufferedImage) {
|
||||
bind_id = glGenTextures();
|
||||
this.image = bufferedImage;
|
||||
prepare_opengl(bind_id);
|
||||
prepare_image(image);
|
||||
prepare_onePixel();
|
||||
}
|
||||
|
||||
public BufferedImage getImage() {
|
||||
return image;
|
||||
}
|
||||
|
||||
public void setImage(BufferedImage image) {
|
||||
this.image = image;
|
||||
}
|
||||
|
||||
public void bind() {
|
||||
Texture.bindTexture(bind_id);
|
||||
}
|
||||
|
||||
public static void bindTexture(int texture_id) {
|
||||
glBindTexture(GL_TEXTURE_2D, texture_id);
|
||||
}
|
||||
|
||||
public int getBindId() {
|
||||
return bind_id;
|
||||
}
|
||||
|
||||
public float floatX(int x) {
|
||||
return x * one_pixel_w;
|
||||
}
|
||||
|
||||
public float floatY(int y) {
|
||||
return y * one_pixel_h;
|
||||
}
|
||||
|
||||
public void updateTexture() {
|
||||
bind();
|
||||
prepare_image(image);
|
||||
prepare_onePixel();
|
||||
}
|
||||
|
||||
public int getWidth() {
|
||||
return getImage().getWidth();
|
||||
}
|
||||
|
||||
public int getHeight() {
|
||||
return getImage().getHeight();
|
||||
}
|
||||
|
||||
public static int singleTexture(BufferedImage bufferedImage) {
|
||||
int bindId = glGenTextures();
|
||||
prepare_opengl(bindId);
|
||||
prepare_image(bufferedImage);
|
||||
return bindId;
|
||||
}
|
||||
|
||||
public static void Enable() {
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
}
|
||||
|
||||
public static void Disable() {
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
}
|
||||
|
||||
public static void setAlpha(boolean alpha) {
|
||||
if (alpha) {
|
||||
glEnable(GL_BLEND);
|
||||
if (!set_blend){
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
set_blend = true;
|
||||
}
|
||||
} else {
|
||||
glDisable(GL_BLEND);
|
||||
}
|
||||
}
|
||||
|
||||
private static void prepare_opengl(int bindId) {
|
||||
glBindTexture(GL_TEXTURE_2D, bindId);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||
}
|
||||
|
||||
private static void prepare_image(BufferedImage image) {
|
||||
int width = image.getWidth();
|
||||
int height = image.getHeight();
|
||||
int rgb_array_size = width * height;
|
||||
IntBuffer imageData = ByteBuffer.allocateDirect(rgb_array_size * 4).order(ByteOrder.nativeOrder()).asIntBuffer();
|
||||
|
||||
int[] rgb_array = new int[rgb_array_size];
|
||||
image.getRGB(0, 0, width, height, rgb_array, 0, width);
|
||||
imageData.put(rgb_array);
|
||||
imageData.position(0).limit(rgb_array_size);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_BGRA,
|
||||
GL_UNSIGNED_INT_8_8_8_8_REV, imageData);
|
||||
}
|
||||
|
||||
private void prepare_onePixel() {
|
||||
one_pixel_w = (100F / image.getWidth()) / 100F;
|
||||
one_pixel_h = (100F / image.getHeight()) / 100F;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user