package javaforce.gl;
/**
* OpenGL binding for Java
*
* @author pquiring
*
* Created : Sept 16, 2013
*
* Notes:
* - only supports OpenGL 2.0 or better (1.x not supported)
* - only call GL functions from the EDT (event dispatching thread)
* - Supports Windows, Linux and MacOSX.VI or better (aka SnowLeopard)
* - if there are functions or constants missing feel free to add them
* - add constants to end of "GL Constants" list
* - open a bug report and I will add it
*/
import javaforce.*;
import javaforce.jni.*;
public class GL {
static {
JFNative.load();
if (JF.isWindows()) {
os = OS.WINDOWS;
WinNative.load();
} else if (JF.isMac()) {
os = OS.MAC;
MacNative.load();
} else {
os = OS.LINUX;
LnxNative.load();
}
}
/** Loads native code. */
public static void load() {}
/** Loads OpenGL functions.
*
* Windows : must call only when a valid OpenGL Context is set
* Linux : not sure?
* Mac : Call anytime.
*
*/
public static native boolean glInit();
private static final boolean debug = false;
//common data
private enum OS {WINDOWS, LINUX, MAC};
private static OS os;
//GL constants
public static final int GL_VERSION = 0x1F02;
public static final int GL_MAX_TEXTURE_SIZE = 0x0D33;
public static final int GL_MAX_VERTEX_ATTRIBS = 0x8869;
public static final int GL_MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A;
public static final int GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D;
public static final int GL_CW = 0x900;
public static final int GL_CCW = 0x0901;
public static final int GL_CULL_FACE = 0x0b44;
public static final int GL_BLEND = 0x0be2;
public static final int GL_DEPTH_TEST = 0x0b71;
public static final int GL_NEVER = 0x0200;
public static final int GL_LESS = 0x0201;
public static final int GL_EQUAL = 0x0202;
public static final int GL_LEQUAL = 0x0203;
public static final int GL_GREATER = 0x0204;
public static final int GL_NOTEQUAL = 0x0205;
public static final int GL_GEQUAL = 0x0206;
public static final int GL_ALWAYS = 0x0207;
public static final int GL_SRC_COLOR = 0x0300;
public static final int GL_ONE_MINUS_SRC_COLOR = 0x0301;
public static final int GL_SRC_ALPHA = 0x0302;
public static final int GL_ONE_MINUS_SRC_ALPHA = 0x0303;
public static final int GL_DST_ALPHA = 0x0304;
public static final int GL_ONE_MINUS_DST_ALPHA = 0x0305;
public static final int GL_DST_COLOR = 0x0306;
public static final int GL_ONE_MINUS_DST_COLOR = 0x0307;
public static final int GL_SRC_ALPHA_SATURATE = 0x0308;
public static final int GL_UNPACK_ALIGNMENT = 0x0cf5;
public static final int GL_TEXTURE_2D = 0x0de1;
public static final int GL_TEXTURE_WRAP_S = 0x2802;
public static final int GL_TEXTURE_WRAP_T = 0x2803;
public static final int GL_REPEAT = 0x2901;
public static final int GL_TEXTURE_MAG_FILTER = 0x2800;
public static final int GL_TEXTURE_MIN_FILTER = 0x2801;
public static final int GL_NEAREST_MIPMAP_NEAREST = 0x2700;
public static final int GL_NEAREST = 0x2600;
public static final int GL_TEXTURE_ENV = 0x2300;
public static final int GL_TEXTURE_ENV_MODE = 0x2200;
public static final int GL_MODULATE = 0x2100;
public static final int GL_RGBA = 0x1908;
public static final int GL_BGRA = 0x80e1;
public static final int GL_COLOR_BUFFER_BIT = 0x4000;
public static final int GL_DEPTH_BUFFER_BIT= 0x0100;
public static final int GL_STENCIL_BUFFER_BIT = 0x0400;
public static final int GL_STENCIL_TEST = 0x0B90;
public static final int GL_ARRAY_BUFFER = 0x8892;
public static final int GL_STATIC_DRAW = 0x88e4;
public static final int GL_STREAM_DRAW = 0x88e0;
public static final int GL_ELEMENT_ARRAY_BUFFER = 0x8893;
public static final int GL_FLOAT = 0x1406;
public static final int GL_FALSE = 0;
public static final int GL_TRUE = 1;
public static final int GL_ZERO = 0;
public static final int GL_ONE = 1;
public static final int GL_UNSIGNED_BYTE = 0x1401;
public static final int GL_UNSIGNED_SHORT = 0x1403;
public static final int GL_UNSIGNED_INT = 0x1405;
public static final int GL_POINTS = 0x0000;
public static final int GL_LINES = 0x0001;
public static final int GL_LINE_LOOP = 0x0002;
public static final int GL_LINE_STRIP = 0x0003;
public static final int GL_TRIANGLES = 0x0004;
public static final int GL_TRIANGLE_STRIP = 0x0005;
public static final int GL_TRIANGLE_FAN = 0x0006;
public static final int GL_QUADS = 0x0007;
public static final int GL_QUAD_STRIP = 0x0008;
public static final int GL_POLYGON = 0x0009;
public static final int GL_FRAGMENT_SHADER = 0x8b30;
public static final int GL_VERTEX_SHADER = 0x8b31;
public static final int GL_TEXTURE0 = 0x84c0;
public static final int GL_FRAMEBUFFER = 0x8d40;
public static final int GL_READ_FRAMEBUFFER = 0x8ca8;
public static final int GL_DRAW_FRAMEBUFFER = 0x8ca9;
public static final int GL_COLOR_ATTACHMENT0 = 0x8ce0;
public static final int GL_DEPTH_COMPONENT16 = 0x81a5;
public static final int GL_DEPTH_COMPONENT24 = 0x81a6;
public static final int GL_DEPTH_COMPONENT32 = 0x81a7;
public static final int GL_DEPTH_ATTACHMENT = 0x8d00;
public static final int GL_RENDERBUFFER = 0x8d41;
//glCullFace constants
public static final int GL_FRONT = 0x0404;
public static final int GL_BACK = 0x0405;
public static final int GL_FRONT_AND_BACK = 0x0408;
/** Returns OpenGL version. ie: {3,3,0} */
public static int[] getVersion() {
String str = glGetString(GL_VERSION);
if (str == null) {
JFLog.log("Error:glGetString returned NULL");
return new int[] {0,0};
}
int idx = str.indexOf(" ");
if (idx != -1) str = str.substring(0, idx);
String parts[] = str.split("[.]");
int ret[] = new int[parts.length];
for(int a=0;a<parts.length;a++) {
ret[a] = Integer.valueOf(parts[a]);
}
return ret;
}
public static void printError(String msg) {
int err;
do {
err = glGetError();
System.out.println(msg + "=" + String.format("%x", err));
} while (err != 0);
}
public static void printError() {
printError("err");
}
/** Clears viewport */
public static void clear(int clr, int width, int height) {
float r = (clr & 0xff0000) >> 16;
r /= 256.0f;
float g = (clr & 0xff00) >> 8;
g /= 256.0f;
float b = (clr & 0xff);
b /= 256.0f;
glViewport(0, 0, width, height);
glClearColor(r, g, b, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
}
public static native void glActiveTexture(int i1);
public static native void glAttachShader(int i1, int i2);
public static native void glBindBuffer(int i1, int i2);
public static native void glBindFramebuffer(int i1, int i2);
public static native void glBindRenderbuffer(int i1, int i2);
public static native void glBindTexture(int i1, int i2);
public static native void glBlendFunc(int i1, int i2);
public static native void glBufferData(int i1, int i2, float i3[], int i4);
public static native void glBufferData(int i1, int i2, short i3[], int i4);
public static native void glBufferData(int i1, int i2, int i3[], int i4);
public static native void glBufferData(int i1, int i2, byte i3[], int i4);
public static native void glClear(int flags);
public static native void glClearColor(float r, float g, float b, float a);
public static native void glColorMask(boolean r, boolean g, boolean b, boolean a);
public static native void glCompileShader(int id);
public static native int glCreateProgram();
public static native int glCreateShader(int type);
public static native void glCullFace(int id);
public static native void glDeleteBuffers(int i1, int i2[]);
public static native void glDeleteFramebuffers(int i1, int i2[]);
public static native void glDeleteRenderbuffers(int i1, int i2[]);
public static native void glDeleteTextures(int i1, int i2[]);
public static native void glDrawElements(int i1, int i2, int i3, int i4);
public static native void glDepthFunc(int i1);
public static native void glDisable(int id);
public static native void glDisableVertexAttribArray(int id);
public static native void glDepthMask(boolean state);
public static native void glEnable(int id);
public static native void glEnableVertexAttribArray(int id);
public static native void glFlush();
public static native void glFramebufferTexture2D(int i1, int i2, int i3, int i4, int i5);
public static native void glFramebufferRenderbuffer(int i1, int i2, int i3, int i4);
public static native void glFrontFace(int id);
public static native int glGetAttribLocation(int i1, String str);
public static native int glGetError();
public static native String glGetProgramInfoLog(int id);
public static native String glGetShaderInfoLog(int id);
public static native String glGetString(int type);
public static native void glGetIntegerv(int type, int i[]);
public static native void glGenBuffers(int i1, int i2[]);
public static native void glGenFramebuffers(int i1, int i2[]);
public static native void glGenRenderbuffers(int i1, int i2[]);
public static native void glGenTextures(int i1, int i2[]);
public static native int glGetUniformLocation(int i1, String str);
public static native void glLinkProgram(int id);
public static native void glPixelStorei(int i1, int i2);
public static native void glReadPixels(int i1, int i2, int i3, int i4, int i5, int i6, int px[]);
public static native void glRenderbufferStorage(int i1, int i2, int i3, int i4);
public static native int glShaderSource(int type, int count, String src[], int src_lengths[]);
public static native int glStencilFunc(int func, int ref, int mask);
public static native int glStencilMask(int mask);
public static native int glStencilOp(int sfail, int dpfail, int dppass);
public static native void glTexImage2D(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int px[]);
public static native void glTexSubImage2D(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int px[]);
public static native void glTexParameteri(int i1, int i2, int i3);
public static native void glUseProgram(int id);
public static native void glUniformMatrix4fv(int i1, int i2, int i3, float m[]);
public static native void glUniform4fv(int i1, int i2, float f[]);
public static native void glUniform3fv(int i1, int i2, float f[]);
public static native void glUniform2fv(int i1, int i2, float f[]);
public static native void glUniform1f(int i1, float f);
public static native void glUniform4iv(int i1, int i2, int v[]);
public static native void glUniform3iv(int i1, int i2, int v[]);
public static native void glUniform2iv(int i1, int i2, int v[]);
public static native void glUniform1i(int i1, int i2);
public static native void glVertexAttribPointer(int i1, int i2, int i3, int i4, int i5, int i6);
public static native void glViewport(int x,int y,int w,int h);
}