ByteBuffer colorTableBuf = LUT.createLUT(lutType); //Creates the bytebuffer
if (gl.isExtensionAvailable("GL_ARB_imaging")) {
if (gl.isFunctionAvailable("glColorTable")) {
gl.glColorTable(GL.GL_COLOR_TABLE, GL.GL_RGB, 256, GL.GL_RGB,
GL.GL_UNSIGNED_BYTE, colorTableBuf);
} else {
gl.glColorTableEXT(GL.GL_COLOR_TABLE, GL.GL_RGB, 256,
GL.GL_RGB, GL.GL_UNSIGNED_BYTE, colorTableBuf);
}
gl.glEnable(GL.GL_COLOR_TABLE);
}
The code to load the texture is as follows:
FloatBuffer sizes = BufferUtil.newFloatBuffer(3);
gl.glGetFloatv(GL.GL_ALIASED_POINT_SIZE_RANGE, sizes);
gl.glEnable(GL.GL_POINT_SPRITE_ARB);
gl.glPointParameterfARB(GL.GL_POINT_SIZE_MAX_ARB, sizes.get(1));
gl.glPointParameterfARB(GL.GL_POINT_SIZE_MIN_ARB, sizes.get(0));
gl.glTexEnvi(GL.GL_POINT_SPRITE_ARB, GL.GL_COORD_REPLACE_ARB,
GL.GL_TRUE);
gl.glEnable(GL.GL_TEXTURE_2D);
int[] textureId = new int[1];
// create the texture
gl.glGenTextures(1, textureId, 0);
gl.glBindTexture(GL.GL_TEXTURE_2D, textureId[0]);
gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1);
gl.glTexParameterf(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER,
GL.GL_LINEAR_MIPMAP_LINEAR);
gl.glTexParameterf(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER,
GL.GL_LINEAR_MIPMAP_LINEAR);
new GLU().gluBuild2DMipmaps(GL.GL_TEXTURE_2D, GL.GL_RGB,
particleTexture.getWidth(), particleTexture.getHeight(),
GL.GL_RGB, GL.GL_UNSIGNED_BYTE, particleTexture.getBuffer());
// enable blending to remove black edge around particle texture
gl.glEnable(GL.GL_BLEND);
gl.glDisable(GL.GL_DEPTH_TEST);
gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_CONSTANT_COLOR);
gl.glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_MODULATE);
gl.glDepthMask(false);
gl.glPointSize(7f);