diff --git a/gl-dri-natives/pom.xml b/gl-dri-natives/pom.xml
new file mode 100644
index 0000000000..d7488926a9
--- /dev/null
+++ b/gl-dri-natives/pom.xml
@@ -0,0 +1,15 @@
+
+
+ 4.0.0
+
+
+ dev.openrs2
+ openrs2
+ 1.0.0-SNAPSHOT
+
+
+ openrs2-gl-dri-natives
+ jar
+
+ OpenRS2 GL DRI Natives
+
diff --git a/gl-dri-natives/src/main/c/jaggl_X11_dri.h b/gl-dri-natives/src/main/c/jaggl_X11_dri.h
new file mode 100644
index 0000000000..d378cc1495
--- /dev/null
+++ b/gl-dri-natives/src/main/c/jaggl_X11_dri.h
@@ -0,0 +1,29 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include
+/* Header for class jaggl_X11_dri */
+
+#ifndef _Included_jaggl_X11_dri
+#define _Included_jaggl_X11_dri
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: jaggl_X11_dri
+ * Method: open
+ * Signature: (Ljava/lang/String;)Z
+ */
+JNIEXPORT jboolean JNICALL Java_jaggl_X11_dri_open
+ (JNIEnv *, jclass, jstring);
+
+/*
+ * Class: jaggl_X11_dri
+ * Method: close
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_jaggl_X11_dri_close
+ (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/gl-natives/pom.xml b/gl-natives/pom.xml
new file mode 100644
index 0000000000..eee915c5d2
--- /dev/null
+++ b/gl-natives/pom.xml
@@ -0,0 +1,15 @@
+
+
+ 4.0.0
+
+
+ dev.openrs2
+ openrs2
+ 1.0.0-SNAPSHOT
+
+
+ openrs2-gl-natives
+ jar
+
+ OpenRS2 GL Natives
+
diff --git a/gl-natives/src/main/c/jaggl_context.h b/gl-natives/src/main/c/jaggl_context.h
new file mode 100644
index 0000000000..802b764d25
--- /dev/null
+++ b/gl-natives/src/main/c/jaggl_context.h
@@ -0,0 +1,93 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include
+/* Header for class jaggl_context */
+
+#ifndef _Included_jaggl_context
+#define _Included_jaggl_context
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: jaggl_context
+ * Method: createContext
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_jaggl_context_createContext
+ (JNIEnv *, jclass);
+
+/*
+ * Class: jaggl_context
+ * Method: releaseContext
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_jaggl_context_releaseContext
+ (JNIEnv *, jclass);
+
+/*
+ * Class: jaggl_context
+ * Method: destroy
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_jaggl_context_destroy
+ (JNIEnv *, jclass);
+
+/*
+ * Class: jaggl_context
+ * Method: swapBuffers
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_jaggl_context_swapBuffers
+ (JNIEnv *, jclass);
+
+/*
+ * Class: jaggl_context
+ * Method: getLastError
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_jaggl_context_getLastError
+ (JNIEnv *, jclass);
+
+/*
+ * Class: jaggl_context
+ * Method: setSwapInterval
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_context_setSwapInterval
+ (JNIEnv *, jclass, jint);
+
+/*
+ * Class: jaggl_context
+ * Method: getExtensionsString
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_jaggl_context_getExtensionsString
+ (JNIEnv *, jclass);
+
+/*
+ * Class: jaggl_context
+ * Method: getAlphaBits
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_jaggl_context_getAlphaBits
+ (JNIEnv *, jclass);
+
+/*
+ * Class: jaggl_context
+ * Method: choosePixelFormat1
+ * Signature: (Ljava/awt/Component;II)Z
+ */
+JNIEXPORT jboolean JNICALL Java_jaggl_context_choosePixelFormat1
+ (JNIEnv *, jclass, jobject, jint, jint);
+
+/*
+ * Class: jaggl_context
+ * Method: makeCurrent1
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_jaggl_context_makeCurrent1
+ (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/gl-natives/src/main/c/jaggl_opengl.h b/gl-natives/src/main/c/jaggl_opengl.h
new file mode 100644
index 0000000000..4b3a39e86e
--- /dev/null
+++ b/gl-natives/src/main/c/jaggl_opengl.h
@@ -0,0 +1,1157 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include
+/* Header for class jaggl_opengl */
+
+#ifndef _Included_jaggl_opengl
+#define _Included_jaggl_opengl
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: jaggl_opengl
+ * Method: glShaderSourceARB0
+ * Signature: (IILjava/lang/Object;[II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glShaderSourceARB0
+ (JNIEnv *, jobject, jint, jint, jobject, jintArray, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glBindProgramARB
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glBindProgramARB
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glGenProgramsARB1
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glGenProgramsARB1
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glActiveTexture
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glActiveTexture
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glMultiTexCoord2i
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glMultiTexCoord2i
+ (JNIEnv *, jobject, jint, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glAttachObjectARB
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glAttachObjectARB
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glCheckFramebufferStatusEXT
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_jaggl_opengl_glCheckFramebufferStatusEXT
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glClientActiveTexture
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glClientActiveTexture
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glGenFramebuffersEXT1
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glGenFramebuffersEXT1
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDeleteFramebuffersEXT1
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDeleteFramebuffersEXT1
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glBindBufferARB
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glBindBufferARB
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glBufferDataARB1
+ * Signature: (IILjava/lang/Object;II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glBufferDataARB1
+ (JNIEnv *, jobject, jint, jint, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glBufferDataARB0
+ * Signature: (IILjava/lang/Object;II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glBufferDataARB0
+ (JNIEnv *, jobject, jint, jint, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glBufferSubDataARB0
+ * Signature: (IIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glBufferSubDataARB0
+ (JNIEnv *, jobject, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glBufferSubDataARB1
+ * Signature: (IIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glBufferSubDataARB1
+ (JNIEnv *, jobject, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glBindFramebufferEXT
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glBindFramebufferEXT
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glCompileShaderARB
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glCompileShaderARB
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glCreateProgramObjectARB
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_jaggl_opengl_glCreateProgramObjectARB
+ (JNIEnv *, jobject);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glCreateShaderObjectARB
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_jaggl_opengl_glCreateShaderObjectARB
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDeleteBuffersARB1
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDeleteBuffersARB1
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDeleteObjectARB
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDeleteObjectARB
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDetachObjectARB
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDetachObjectARB
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glFramebufferTexture2DEXT
+ * Signature: (IIIII)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glFramebufferTexture2DEXT
+ (JNIEnv *, jobject, jint, jint, jint, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glGenBuffersARB1
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glGenBuffersARB1
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glGetObjectParameterivARB1
+ * Signature: (IILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glGetObjectParameterivARB1
+ (JNIEnv *, jobject, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glGetUniformLocation
+ * Signature: (ILjava/lang/String;)I
+ */
+JNIEXPORT jint JNICALL Java_jaggl_opengl_glGetUniformLocation
+ (JNIEnv *, jobject, jint, jstring);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glLinkProgramARB
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glLinkProgramARB
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glMultiTexCoord2f
+ * Signature: (IFF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glMultiTexCoord2f
+ (JNIEnv *, jobject, jint, jfloat, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glProgramLocalParameter4fARB
+ * Signature: (IIFFFF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glProgramLocalParameter4fARB
+ (JNIEnv *, jobject, jint, jint, jfloat, jfloat, jfloat, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glProgramStringARB
+ * Signature: (IIILjava/lang/String;)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glProgramStringARB
+ (JNIEnv *, jobject, jint, jint, jint, jstring);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glProgramLocalParameter4fvARB1
+ * Signature: (IILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glProgramLocalParameter4fvARB1
+ (JNIEnv *, jobject, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glProgramLocalParameter4fvARB0
+ * Signature: (IILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glProgramLocalParameter4fvARB0
+ (JNIEnv *, jobject, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glPointParameterfARB
+ * Signature: (IF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glPointParameterfARB
+ (JNIEnv *, jobject, jint, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexImage3D1
+ * Signature: (IIIIIIIIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexImage3D1
+ (JNIEnv *, jobject, jint, jint, jint, jint, jint, jint, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexImage3D0
+ * Signature: (IIIIIIIIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexImage3D0
+ (JNIEnv *, jobject, jint, jint, jint, jint, jint, jint, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glUniform1iARB
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glUniform1iARB
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glUniform3fARB
+ * Signature: (IFFF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glUniform3fARB
+ (JNIEnv *, jobject, jint, jfloat, jfloat, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glUseProgramObjectARB
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glUseProgramObjectARB
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glGetInfoLogARB1
+ * Signature: (IILjava/lang/Object;I[BI)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glGetInfoLogARB1
+ (JNIEnv *, jobject, jint, jint, jobject, jint, jbyteArray, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glPointParameterfvARB1
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glPointParameterfvARB1
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glGetString
+ * Signature: (I)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_jaggl_opengl_glGetString
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glLightfv1
+ * Signature: (IILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glLightfv1
+ (JNIEnv *, jobject, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glBegin
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glBegin
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glEnd
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glEnd
+ (JNIEnv *, jobject);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glClear
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glClear
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glEnable
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glEnable
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glLoadIdentity
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glLoadIdentity
+ (JNIEnv *, jobject);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glMatrixMode
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glMatrixMode
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTranslatef
+ * Signature: (FFF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTranslatef
+ (JNIEnv *, jobject, jfloat, jfloat, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glRotatef
+ * Signature: (FFFF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glRotatef
+ (JNIEnv *, jobject, jfloat, jfloat, jfloat, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexCoord2f
+ * Signature: (FF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexCoord2f
+ (JNIEnv *, jobject, jfloat, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glAlphaFunc
+ * Signature: (IF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glAlphaFunc
+ (JNIEnv *, jobject, jint, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glBlendFunc
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glBlendFunc
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glCallList
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glCallList
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glClearDepth
+ * Signature: (F)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glClearDepth
+ (JNIEnv *, jobject, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glClearColor
+ * Signature: (FFFF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glClearColor
+ (JNIEnv *, jobject, jfloat, jfloat, jfloat, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glBindTexture
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glBindTexture
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glColor3ub
+ * Signature: (BBB)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glColor3ub
+ (JNIEnv *, jobject, jbyte, jbyte, jbyte);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glColor4f
+ * Signature: (FFFF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glColor4f
+ (JNIEnv *, jobject, jfloat, jfloat, jfloat, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glColor4fv1
+ * Signature: (Ljava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glColor4fv1
+ (JNIEnv *, jobject, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glColor4ub
+ * Signature: (BBBB)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glColor4ub
+ (JNIEnv *, jobject, jbyte, jbyte, jbyte, jbyte);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glColorMaterial
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glColorMaterial
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glColorPointer0
+ * Signature: (IIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glColorPointer0
+ (JNIEnv *, jobject, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glColorPointer1
+ * Signature: (IIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glColorPointer1
+ (JNIEnv *, jobject, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glColorPointer
+ * Signature: (IIIJ)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glColorPointer
+ (JNIEnv *, jobject, jint, jint, jint, jlong);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glCopyPixels
+ * Signature: (IIIII)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glCopyPixels
+ (JNIEnv *, jobject, jint, jint, jint, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glCopyTexImage2D
+ * Signature: (IIIIIIII)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glCopyTexImage2D
+ (JNIEnv *, jobject, jint, jint, jint, jint, jint, jint, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glCullFace
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glCullFace
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDeleteLists
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDeleteLists
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDeleteTextures1
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDeleteTextures1
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDepthFunc
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDepthFunc
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDepthMask
+ * Signature: (Z)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDepthMask
+ (JNIEnv *, jobject, jboolean);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDisable
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDisable
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDisableClientState
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDisableClientState
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDrawBuffer
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDrawBuffer
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDrawElements
+ * Signature: (IIIJ)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDrawElements
+ (JNIEnv *, jobject, jint, jint, jint, jlong);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDrawElements0
+ * Signature: (IIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDrawElements0
+ (JNIEnv *, jobject, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDrawElements1
+ * Signature: (IIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDrawElements1
+ (JNIEnv *, jobject, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDrawPixels0
+ * Signature: (IIIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDrawPixels0
+ (JNIEnv *, jobject, jint, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDrawPixels1
+ * Signature: (IIIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDrawPixels1
+ (JNIEnv *, jobject, jint, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glEnableClientState
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glEnableClientState
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glEndList
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glEndList
+ (JNIEnv *, jobject);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glFogf
+ * Signature: (IF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glFogf
+ (JNIEnv *, jobject, jint, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glFogfv1
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glFogfv1
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glFogi
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glFogi
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glGenLists
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_jaggl_opengl_glGenLists
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glGenTextures1
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glGenTextures1
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glGetFloatv0
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glGetFloatv0
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glGetFloatv1
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glGetFloatv1
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glGetIntegerv1
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glGetIntegerv1
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glHint
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glHint
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glInterleavedArrays
+ * Signature: (IIJ)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glInterleavedArrays
+ (JNIEnv *, jobject, jint, jint, jlong);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glInterleavedArrays1
+ * Signature: (IILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glInterleavedArrays1
+ (JNIEnv *, jobject, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glInterleavedArrays0
+ * Signature: (IILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glInterleavedArrays0
+ (JNIEnv *, jobject, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glLightModelfv1
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glLightModelfv1
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glLightf
+ * Signature: (IIF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glLightf
+ (JNIEnv *, jobject, jint, jint, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glLoadMatrixf1
+ * Signature: (Ljava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glLoadMatrixf1
+ (JNIEnv *, jobject, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glMaterialfv1
+ * Signature: (IILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glMaterialfv1
+ (JNIEnv *, jobject, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glNewList
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glNewList
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glNormal3f
+ * Signature: (FFF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glNormal3f
+ (JNIEnv *, jobject, jfloat, jfloat, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glNormalPointer0
+ * Signature: (IILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glNormalPointer0
+ (JNIEnv *, jobject, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glNormalPointer1
+ * Signature: (IILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glNormalPointer1
+ (JNIEnv *, jobject, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glNormalPointer
+ * Signature: (IIJ)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glNormalPointer
+ (JNIEnv *, jobject, jint, jint, jlong);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glOrtho
+ * Signature: (DDDDDD)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glOrtho
+ (JNIEnv *, jobject, jdouble, jdouble, jdouble, jdouble, jdouble, jdouble);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glPointSize
+ * Signature: (F)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glPointSize
+ (JNIEnv *, jobject, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glPolygonMode
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glPolygonMode
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glPopAttrib
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glPopAttrib
+ (JNIEnv *, jobject);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glPopMatrix
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glPopMatrix
+ (JNIEnv *, jobject);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glPushAttrib
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glPushAttrib
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glPushMatrix
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glPushMatrix
+ (JNIEnv *, jobject);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glRasterPos2i
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glRasterPos2i
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glReadBuffer
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glReadBuffer
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glScalef
+ * Signature: (FFF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glScalef
+ (JNIEnv *, jobject, jfloat, jfloat, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glScissor
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glScissor
+ (JNIEnv *, jobject, jint, jint, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glShadeModel
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glShadeModel
+ (JNIEnv *, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexCoord2i
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexCoord2i
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexCoordPointer1
+ * Signature: (IIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexCoordPointer1
+ (JNIEnv *, jobject, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexCoordPointer
+ * Signature: (IIIJ)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexCoordPointer
+ (JNIEnv *, jobject, jint, jint, jint, jlong);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexCoordPointer0
+ * Signature: (IIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexCoordPointer0
+ (JNIEnv *, jobject, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexEnvf
+ * Signature: (IIF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexEnvf
+ (JNIEnv *, jobject, jint, jint, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexEnvfv1
+ * Signature: (IILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexEnvfv1
+ (JNIEnv *, jobject, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexEnvi
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexEnvi
+ (JNIEnv *, jobject, jint, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexGenfv1
+ * Signature: (IILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexGenfv1
+ (JNIEnv *, jobject, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexGeni
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexGeni
+ (JNIEnv *, jobject, jint, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexImage1D1
+ * Signature: (IIIIIIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexImage1D1
+ (JNIEnv *, jobject, jint, jint, jint, jint, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexImage1D0
+ * Signature: (IIIIIIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexImage1D0
+ (JNIEnv *, jobject, jint, jint, jint, jint, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexImage2D1
+ * Signature: (IIIIIIIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexImage2D1
+ (JNIEnv *, jobject, jint, jint, jint, jint, jint, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexImage2D0
+ * Signature: (IIIIIIIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexImage2D0
+ (JNIEnv *, jobject, jint, jint, jint, jint, jint, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glTexParameteri
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glTexParameteri
+ (JNIEnv *, jobject, jint, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glVertex2f
+ * Signature: (FF)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glVertex2f
+ (JNIEnv *, jobject, jfloat, jfloat);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glVertex2i
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glVertex2i
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glVertexPointer0
+ * Signature: (IIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glVertexPointer0
+ (JNIEnv *, jobject, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glVertexPointer
+ * Signature: (IIIJ)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glVertexPointer
+ (JNIEnv *, jobject, jint, jint, jint, jlong);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glVertexPointer1
+ * Signature: (IIILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glVertexPointer1
+ (JNIEnv *, jobject, jint, jint, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glViewport
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glViewport
+ (JNIEnv *, jobject, jint, jint, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glColorMask
+ * Signature: (ZZZZ)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glColorMask
+ (JNIEnv *, jobject, jboolean, jboolean, jboolean, jboolean);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glGenRenderbuffersEXT1
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glGenRenderbuffersEXT1
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDeleteRenderbuffersEXT1
+ * Signature: (ILjava/lang/Object;I)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDeleteRenderbuffersEXT1
+ (JNIEnv *, jobject, jint, jobject, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glBindRenderbufferEXT
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glBindRenderbufferEXT
+ (JNIEnv *, jobject, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glFramebufferRenderbufferEXT
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glFramebufferRenderbufferEXT
+ (JNIEnv *, jobject, jint, jint, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glRenderbufferStorageEXT
+ * Signature: (IIII)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glRenderbufferStorageEXT
+ (JNIEnv *, jobject, jint, jint, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glDrawArrays
+ * Signature: (III)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glDrawArrays
+ (JNIEnv *, jobject, jint, jint, jint);
+
+/*
+ * Class: jaggl_opengl
+ * Method: glLineWidth
+ * Signature: (F)V
+ */
+JNIEXPORT void JNICALL Java_jaggl_opengl_glLineWidth
+ (JNIEnv *, jobject, jfloat);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/misc-natives/pom.xml b/misc-natives/pom.xml
new file mode 100644
index 0000000000..f124d0d8b7
--- /dev/null
+++ b/misc-natives/pom.xml
@@ -0,0 +1,15 @@
+
+
+ 4.0.0
+
+
+ dev.openrs2
+ openrs2
+ 1.0.0-SNAPSHOT
+
+
+ openrs2-misc-natives
+ jar
+
+ OpenRS2 Misc Natives
+
diff --git a/misc-natives/src/main/c/jagex3_jagmisc_jagmisc.h b/misc-natives/src/main/c/jagex3_jagmisc_jagmisc.h
new file mode 100644
index 0000000000..aa3e9c4b89
--- /dev/null
+++ b/misc-natives/src/main/c/jagex3_jagmisc_jagmisc.h
@@ -0,0 +1,37 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include
+/* Header for class jagex3_jagmisc_jagmisc */
+
+#ifndef _Included_jagex3_jagmisc_jagmisc
+#define _Included_jagex3_jagmisc_jagmisc
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: jagex3_jagmisc_jagmisc
+ * Method: nanoTime
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_jagex3_jagmisc_jagmisc_nanoTime
+ (JNIEnv *, jclass);
+
+/*
+ * Class: jagex3_jagmisc_jagmisc
+ * Method: Quit0
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL Java_jagex3_jagmisc_jagmisc_Quit0
+ (JNIEnv *, jclass);
+
+/*
+ * Class: jagex3_jagmisc_jagmisc
+ * Method: init
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_jagex3_jagmisc_jagmisc_init
+ (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/pom.xml b/pom.xml
index 2c0ec105bc..086e699a91 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,6 +16,9 @@
deob-annotations
fernflower
game
+ gl-dri-natives
+ gl-natives
+ misc-natives
util