Files
Angelica/java/shadersmodcore/client/HFNoiseTexture.java
T

81 lines
2.5 KiB
Java

package shadersmodcore.client;
import java.nio.ByteBuffer;
import org.lwjgl.BufferUtils;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL13;
import org.lwjgl.opengl.GL30;
/**
*
* @author Nathanael Lane
*/
public class HFNoiseTexture {
public int texID;
public int textureUnit;
public HFNoiseTexture(int width, int height){
texID = GL11.glGenTextures();
textureUnit = 15;
byte[] image = genHFNoiseImage(width, height);
ByteBuffer data = BufferUtils.createByteBuffer(image.length);
data.put(image);
data.flip();
//GL13.glActiveTexture(GL13.GL_TEXTURE0 + this.textureUnit);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texID);
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB, width, height, 0,
GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, data);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
//GL30.glGenerateMipmap(GL11.GL_TEXTURE_2D);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);
}
public int getID(){
return texID;
}
public void destroy(){
GL11.glDeleteTextures(texID);
texID = 0;
}
//from George Marsaglia's paper on XORshift PRNGs
private int random(int seed){
seed ^= (seed << 13);
seed ^= (seed >> 17);
seed ^= (seed << 5);
return seed;
}
private byte random(int x, int y, int z){
int seed = (random(x) + random(y * 19)) * random(z * 23) - z;
return (byte) (random(seed) % 128);
}
/*
* Just a random value for each pixel to get maximum frequency
*/
private byte[] genHFNoiseImage(int width, int height){
byte[] image = new byte[width * height * 3];
int index = 0;
for(int y = 0; y < height; y++){
for(int x = 0; x < width; x++){
for(int z = 1; z < 4; z++){
image[index++] = random(x, y, z);
}
}
}
return image;
}
}