/* * Copyright (c) 2002 Lightweight Java Game Library Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of 'Light Weight Java Game Library' nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // ---------------------------------- // IMPLEMENTATION OF NATIVE METHODS FOR CLASS: org.lwjgl.opengl.ARBShaderObjects // ---------------------------------- #include "extgl.h" #include "checkGLerror.h" typedef unsigned char GLcharARB; typedef unsigned int GLhandleARB; typedef void (APIENTRY * glDeleteObjectARBPROC) (GLhandleARB obj); typedef GLhandleARB (APIENTRY * glGetHandleARBPROC) (GLenum pname); typedef void (APIENTRY * glDetachObjectARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); typedef GLhandleARB (APIENTRY * glCreateShaderObjectARBPROC) (GLenum shaderType); typedef void (APIENTRY * glShaderSourceARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); typedef void (APIENTRY * glCompileShaderARBPROC) (GLhandleARB shaderObj); typedef GLhandleARB (APIENTRY * glCreateProgramObjectARBPROC) (GLvoid); typedef void (APIENTRY * glAttachObjectARBPROC) (GLhandleARB containerObj, GLhandleARB obj); typedef void (APIENTRY * glLinkProgramARBPROC) (GLhandleARB programObj); typedef void (APIENTRY * glUseProgramObjectARBPROC) (GLhandleARB programObj); typedef void (APIENTRY * glValidateProgramARBPROC) (GLhandleARB programObj); typedef void (APIENTRY * glUniform1fARBPROC) (GLint location, GLfloat v0); typedef void (APIENTRY * glUniform2fARBPROC) (GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRY * glUniform3fARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRY * glUniform4fARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRY * glUniform1iARBPROC) (GLint location, GLint v0); typedef void (APIENTRY * glUniform2iARBPROC) (GLint location, GLint v0, GLint v1); typedef void (APIENTRY * glUniform3iARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRY * glUniform4iARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRY * glUniform1fvARBPROC) (GLint location, GLsizei count, GLfloat *value); typedef void (APIENTRY * glUniform2fvARBPROC) (GLint location, GLsizei count, GLfloat *value); typedef void (APIENTRY * glUniform3fvARBPROC) (GLint location, GLsizei count, GLfloat *value); typedef void (APIENTRY * glUniform4fvARBPROC) (GLint location, GLsizei count, GLfloat *value); typedef void (APIENTRY * glUniform1ivARBPROC) (GLint location, GLsizei count, GLint *value); typedef void (APIENTRY * glUniform2ivARBPROC) (GLint location, GLsizei count, GLint *value); typedef void (APIENTRY * glUniform3ivARBPROC) (GLint location, GLsizei count, GLint *value); typedef void (APIENTRY * glUniform4ivARBPROC) (GLint location, GLsizei count, GLint *value); typedef void (APIENTRY * glUniformMatrix2fvARBPROC) (GLint location, GLsizei count, GLboolean transpose, GLfloat *value); typedef void (APIENTRY * glUniformMatrix3fvARBPROC) (GLint location, GLsizei count, GLboolean transpose, GLfloat *value); typedef void (APIENTRY * glUniformMatrix4fvARBPROC) (GLint location, GLsizei count, GLboolean transpose, GLfloat *value); typedef void (APIENTRY * glGetObjectParameterfvARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); typedef void (APIENTRY * glGetObjectParameterivARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); typedef void (APIENTRY * glGetInfoLogARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); typedef void (APIENTRY * glGetAttachedObjectsARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); typedef GLint (APIENTRY * glGetUniformLocationARBPROC) (GLhandleARB programObj, const GLcharARB *name); typedef void (APIENTRY * glGetActiveUniformARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); typedef void (APIENTRY * glGetUniformfvARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); typedef void (APIENTRY * glGetUniformivARBPROC) (GLhandleARB programObj, GLint location, GLint *params); typedef void (APIENTRY * glGetShaderSourceARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); static glDeleteObjectARBPROC glDeleteObjectARB; static glGetHandleARBPROC glGetHandleARB; static glDetachObjectARBPROC glDetachObjectARB; static glCreateShaderObjectARBPROC glCreateShaderObjectARB; static glShaderSourceARBPROC glShaderSourceARB; static glCompileShaderARBPROC glCompileShaderARB; static glCreateProgramObjectARBPROC glCreateProgramObjectARB; static glAttachObjectARBPROC glAttachObjectARB; static glLinkProgramARBPROC glLinkProgramARB; static glUseProgramObjectARBPROC glUseProgramObjectARB; static glValidateProgramARBPROC glValidateProgramARB; static glUniform1fARBPROC glUniform1fARB; static glUniform2fARBPROC glUniform2fARB; static glUniform3fARBPROC glUniform3fARB; static glUniform4fARBPROC glUniform4fARB; static glUniform1iARBPROC glUniform1iARB; static glUniform2iARBPROC glUniform2iARB; static glUniform3iARBPROC glUniform3iARB; static glUniform4iARBPROC glUniform4iARB; static glUniform1fvARBPROC glUniform1fvARB; static glUniform2fvARBPROC glUniform2fvARB; static glUniform3fvARBPROC glUniform3fvARB; static glUniform4fvARBPROC glUniform4fvARB; static glUniform1ivARBPROC glUniform1ivARB; static glUniform2ivARBPROC glUniform2ivARB; static glUniform3ivARBPROC glUniform3ivARB; static glUniform4ivARBPROC glUniform4ivARB; static glUniformMatrix2fvARBPROC glUniformMatrix2fvARB; static glUniformMatrix3fvARBPROC glUniformMatrix3fvARB; static glUniformMatrix4fvARBPROC glUniformMatrix4fvARB; static glGetObjectParameterfvARBPROC glGetObjectParameterfvARB; static glGetObjectParameterivARBPROC glGetObjectParameterivARB; static glGetInfoLogARBPROC glGetInfoLogARB; static glGetAttachedObjectsARBPROC glGetAttachedObjectsARB; static glGetUniformLocationARBPROC glGetUniformLocationARB; static glGetActiveUniformARBPROC glGetActiveUniformARB; static glGetUniformfvARBPROC glGetUniformfvARB; static glGetUniformivARBPROC glGetUniformivARB; static glGetShaderSourceARBPROC glGetShaderSourceARB; static const int initialSourcesSize = 8; static int sourcesSize = initialSourcesSize; static int sourceCount; static GLcharARB** sources = new GLcharARB*[initialSourcesSize]; static GLint* sourcesLengths = new GLint[initialSourcesSize]; /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glDeleteObjectARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glDeleteObjectARB (JNIEnv * env, jclass clazz, jint obj) { glDeleteObjectARB(obj); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glGetHandleARB */ static JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glGetHandleARB (JNIEnv * env, jclass clazz, jint pname) { GLhandleARB result = glGetHandleARB(pname); CHECK_GL_ERROR return result; } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glDetachObjectARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glDetachObjectARB (JNIEnv * env, jclass clazz, jint containerObj, jint attachedObj) { glDetachObjectARB(containerObj, attachedObj); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glCreateShaderObjectARB */ static JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glCreateShaderObjectARB (JNIEnv * env, jclass clazz, jint shaderType) { GLhandleARB result = glCreateShaderObjectARB(shaderType); CHECK_GL_ERROR return result; } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: initShaderSource */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_initShaderSource (JNIEnv * env, jclass clazz, jint count) { sourceCount = count; if ( sourceCount > sourcesSize ) { sourcesSize = sourceCount * 2; delete sources; delete sourcesLengths; sources = new GLcharARB*[sourcesSize]; sourcesLengths = new GLint[sourcesSize]; } } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: setShaderString */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_setShaderString (JNIEnv * env, jclass clazz, jint index, jobject string, jint stringOffset, jint stringLength) { GLcharARB *string_ptr = (GLcharARB *)((GLubyte *)env->GetDirectBufferAddress(string) + stringOffset); sources[index] = string_ptr; sourcesLengths[index] = stringLength; } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglShaderSourceARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglShaderSourceARB (JNIEnv * env, jclass clazz, jint shaderObj) { glShaderSourceARB(shaderObj, sourceCount, (const GLcharARB **)sources, (const GLint *)sourcesLengths); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glCompileShaderARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glCompileShaderARB (JNIEnv * env, jclass clazz, jint shaderObj) { glCompileShaderARB(shaderObj); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glCreateProgramObjectARB */ static JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glCreateProgramObjectARB (JNIEnv * env, jclass clazz) { GLuint result = glCreateProgramObjectARB(); CHECK_GL_ERROR return result; } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glAttachObjectARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glAttachObjectARB (JNIEnv * env, jclass clazz, jint containerObj, jint obj) { glAttachObjectARB(containerObj, obj); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glLinkProgramARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glLinkProgramARB (JNIEnv * env, jclass clazz, jint programObj) { glLinkProgramARB(programObj); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glUseProgramObjectARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glUseProgramObjectARB (JNIEnv * env, jclass clazz, jint programObj) { glUseProgramObjectARB(programObj); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glValidateProgramARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glValidateProgramARB (JNIEnv * env, jclass clazz, jint programObj) { glValidateProgramARB(programObj); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glUniform1fARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glUniform1fARB (JNIEnv * env, jclass clazz, jint location, jfloat v0) { glUniform1fARB(location, v0); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glUniform2fARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glUniform2fARB (JNIEnv * env, jclass clazz, jint location, jfloat v0, jfloat v1) { glUniform2fARB(location, v0, v1); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glUniform3fARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glUniform3fARB (JNIEnv * env, jclass clazz, jint location, jfloat v0, jfloat v1, jfloat v2) { glUniform3fARB(location, v0, v1, v2); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glUniform4fARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glUniform4fARB (JNIEnv * env, jclass clazz, jint location, jfloat v0, jfloat v1, jfloat v2, jfloat v3) { glUniform4fARB(location, v0, v1, v2, v3); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glUniform1iARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glUniform1iARB (JNIEnv * env, jclass clazz, jint location, jint v0) { glUniform1iARB(location, v0); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glUniform2iARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glUniform2iARB (JNIEnv * env, jclass clazz, jint location, jint v0, jint v1) { glUniform2iARB(location, v0, v1); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glUniform3iARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glUniform3iARB (JNIEnv * env, jclass clazz, jint location, jint v0, jint v1, jint v2) { glUniform3iARB(location, v0, v1, v2); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: glUniform4iARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_glUniform4iARB (JNIEnv * env, jclass clazz, jint location, jint v0, jint v1, jint v2, jint v3) { glUniform4iARB(location, v0, v1, v2, v3); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglUniform1fvARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform1fvARB (JNIEnv * env, jclass clazz, jint location, jint count, jobject values, jint valuesOffset) { GLfloat *values_ptr = (GLfloat *)env->GetDirectBufferAddress(values) + valuesOffset; glUniform1fvARB(location, count, values_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglUniform2fvARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform2fvARB (JNIEnv * env, jclass clazz, jint location, jint count, jobject values, jint valuesOffset) { GLfloat *values_ptr = (GLfloat *)env->GetDirectBufferAddress(values) + valuesOffset; glUniform2fvARB(location, count, values_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglUniform3fvARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform3fvARB (JNIEnv * env, jclass clazz, jint location, jint count, jobject values, jint valuesOffset) { GLfloat *values_ptr = (GLfloat *)env->GetDirectBufferAddress(values) + valuesOffset; glUniform3fvARB(location, count, values_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglUniform4fvARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform4fvARB (JNIEnv * env, jclass clazz, jint location, jint count, jobject values, jint valuesOffset) { GLfloat *values_ptr = (GLfloat *)env->GetDirectBufferAddress(values) + valuesOffset; glUniform4fvARB(location, count, values_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglUniform1ivARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform1ivARB (JNIEnv * env, jclass clazz, jint location, jint count, jobject values, jint valuesOffset) { GLint *values_ptr = (GLint *)env->GetDirectBufferAddress(values) + valuesOffset; glUniform1ivARB(location, count, values_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglUniform2ivARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform2ivARB (JNIEnv * env, jclass clazz, jint location, jint count, jobject values, jint valuesOffset) { GLint *values_ptr = (GLint *)env->GetDirectBufferAddress(values) + valuesOffset; glUniform2ivARB(location, count, values_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglUniform3ivARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform3ivARB (JNIEnv * env, jclass clazz, jint location, jint count, jobject values, jint valuesOffset) { GLint *values_ptr = (GLint *)env->GetDirectBufferAddress(values) + valuesOffset; glUniform3ivARB(location, count, values_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglUniform4ivARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform4ivARB (JNIEnv * env, jclass clazz, jint location, jint count, jobject values, jint valuesOffset) { GLint *values_ptr = (GLint *)env->GetDirectBufferAddress(values) + valuesOffset; glUniform4ivARB(location, count, values_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglUniformMatrix2fvARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglUniformMatrix2fvARB (JNIEnv * env, jclass clazz, jint location, jint count, jboolean transpose, jobject matrices, jint matricesOffset) { GLfloat *matrices_ptr = (GLfloat *)env->GetDirectBufferAddress(matrices) + matricesOffset; glUniformMatrix2fvARB(location, count, transpose, matrices_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglUniformMatrix3fvARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglUniformMatrix3fvARB (JNIEnv * env, jclass clazz, jint location, jint count, jboolean transpose, jobject matrices, jint matricesOffset) { GLfloat *matrices_ptr = (GLfloat *)env->GetDirectBufferAddress(matrices) + matricesOffset; glUniformMatrix3fvARB(location, count, transpose, matrices_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglUniformMatrix4fvARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglUniformMatrix4fvARB (JNIEnv * env, jclass clazz, jint location, jint count, jboolean transpose, jobject matrices, jint matricesOffset) { GLfloat *matrices_ptr = (GLfloat *)env->GetDirectBufferAddress(matrices) + matricesOffset; glUniformMatrix4fvARB(location, count, transpose, matrices_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglGetObjectParameterfvARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglGetObjectParameterfvARB (JNIEnv * env, jclass clazz, jint obj, jint pname, jobject params, jint paramsOffset) { GLfloat *params_ptr = (GLfloat *)env->GetDirectBufferAddress(params) + paramsOffset; glGetObjectParameterfvARB(obj, pname, params_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglGetObjectParameterivARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglGetObjectParameterivARB (JNIEnv * env, jclass clazz, jint obj, jint pname, jobject params, jint paramsOffset) { GLint *params_ptr = (GLint *)env->GetDirectBufferAddress(params) + paramsOffset; glGetObjectParameterivARB(obj, pname, params_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglGetInfoLogARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglGetInfoLogARB (JNIEnv * env, jclass clazz, jint obj, jint maxLength, jobject length, jint lengthOffset, jobject infoLog, jint infoLogOffset) { GLubyte *infoLog_ptr = (GLubyte *)env->GetDirectBufferAddress(infoLog) + infoLogOffset; if ( length == NULL ) { glGetInfoLogARB(obj, maxLength, NULL, infoLog_ptr); } else { GLsizei *length_ptr = (GLsizei *)env->GetDirectBufferAddress(length) + lengthOffset; glGetInfoLogARB(obj, maxLength, length_ptr, infoLog_ptr); } CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglGetAttachedObjectsARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglGetAttachedObjectsARB (JNIEnv * env, jclass clazz, jint containerObj, jint maxCount, jobject count, jint countOffset, jobject obj, jint objOffset) { GLuint *obj_ptr = (GLuint *)env->GetDirectBufferAddress(obj) + objOffset; if ( count == NULL ) { glGetAttachedObjectsARB(containerObj, maxCount, NULL, obj_ptr); } else { GLsizei *count_ptr = (GLsizei *)env->GetDirectBufferAddress(count) + countOffset; glGetAttachedObjectsARB(containerObj, maxCount, count_ptr, obj_ptr); } CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglGetUniformLocationARB */ static JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglGetUniformLocationARB (JNIEnv * env, jclass clazz, jint programObj, jobject name, jint nameOffset) { GLubyte *name_ptr = (GLubyte *)env->GetDirectBufferAddress(name) + nameOffset; GLuint result = glGetUniformLocationARB(programObj, name_ptr); CHECK_GL_ERROR return result; } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglGetActiveUniformARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglGetActiveUniformARB (JNIEnv * env, jclass clazz, jint programObj, jint index, jint maxLength, jobject length, jint lengthOffset, jobject size, jint sizeOffset, jobject type, jint typeOffset, jobject name, jint nameOffset) { GLint *size_ptr = (GLint *)env->GetDirectBufferAddress(size) + sizeOffset; GLenum *type_ptr = (GLenum *)env->GetDirectBufferAddress(type) + typeOffset; GLcharARB *name_ptr = (GLcharARB *)env->GetDirectBufferAddress(name) + nameOffset; if ( length == NULL ) { glGetActiveUniformARB(programObj, index, maxLength, (GLsizei *)NULL, size_ptr, type_ptr, name_ptr); } else { GLsizei *length_ptr = (GLsizei *)env->GetDirectBufferAddress(length) + lengthOffset; glGetActiveUniformARB(programObj, index, maxLength, length_ptr, size_ptr, type_ptr, name_ptr); } CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglGetUniformfvARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglGetUniformfvARB (JNIEnv * env, jclass clazz, jint programObj, jint location, jobject params, jint paramsOffset) { GLfloat *params_ptr = (GLfloat *)env->GetDirectBufferAddress(params) + paramsOffset; glGetUniformfvARB(programObj, location, params_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglGetUniformivARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglGetUniformivARB (JNIEnv * env, jclass clazz, jint programObj, jint location, jobject params, jint paramsOffset) { GLint *params_ptr = (GLint *)env->GetDirectBufferAddress(params) + paramsOffset; glGetUniformivARB(programObj, location, params_ptr); CHECK_GL_ERROR } /* * Class: org.lwjgl.opengl.ARBShaderObjects * Method: nglGetShaderSourceARB */ static JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglGetShaderSourceARB (JNIEnv * env, jclass clazz, jint obj, jint maxLength, jobject length, jint lengthOffset, jobject source, jint sourceOffset) { GLubyte *source_ptr = (GLubyte *)env->GetDirectBufferAddress(source) + sourceOffset; if ( length == NULL ) { glGetShaderSourceARB(obj, maxLength, NULL, source_ptr); } else { GLint *length_ptr = (GLint *)env->GetDirectBufferAddress(length) + lengthOffset; glGetShaderSourceARB(obj, maxLength, length_ptr, source_ptr); } CHECK_GL_ERROR } void extgl_InitARBShaderObjects(JNIEnv *env, jobject ext_set) { JavaMethodAndGLFunction functions[] = { {"glDeleteObjectARB", "(I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glDeleteObjectARB, "glDeleteObjectARB", (void**)&glDeleteObjectARB}, {"glGetHandleARB", "(I)I", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glGetHandleARB, "glGetHandleARB", (void**)&glGetHandleARB}, {"glDetachObjectARB", "(II)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glDetachObjectARB, "glDetachObjectARB", (void**)&glDetachObjectARB}, {"glCreateShaderObjectARB", "(I)I", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glCreateShaderObjectARB, "glCreateShaderObjectARB", (void**)&glCreateShaderObjectARB}, {"initShaderSource", "(I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_initShaderSource, NULL, NULL}, {"setShaderString", "(ILjava/nio/ByteBuffer;II)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_setShaderString, NULL, NULL}, {"nglShaderSourceARB", "(I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglShaderSourceARB, "glShaderSourceARB", (void**)&glShaderSourceARB}, {"glCompileShaderARB", "(I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glCompileShaderARB, "glCompileShaderARB", (void**)&glCompileShaderARB}, {"glCreateProgramObjectARB", "()I", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glCreateProgramObjectARB, "glCreateProgramObjectARB", (void**)&glCreateProgramObjectARB}, {"glAttachObjectARB", "(II)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glAttachObjectARB, "glAttachObjectARB", (void**)&glAttachObjectARB}, {"glLinkProgramARB", "(I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glLinkProgramARB, "glLinkProgramARB", (void**)&glLinkProgramARB}, {"glUseProgramObjectARB", "(I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glUseProgramObjectARB, "glUseProgramObjectARB", (void**)&glUseProgramObjectARB}, {"glValidateProgramARB", "(I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glValidateProgramARB, "glValidateProgramARB", (void**)&glValidateProgramARB}, {"glUniform1fARB", "(IF)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glUniform1fARB, "glUniform1fARB", (void**)&glUniform1fARB}, {"glUniform2fARB", "(IFF)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glUniform2fARB, "glUniform2fARB", (void**)&glUniform2fARB}, {"glUniform3fARB", "(IFFF)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glUniform3fARB, "glUniform3fARB", (void**)&glUniform3fARB}, {"glUniform4fARB", "(IFFFF)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glUniform4fARB, "glUniform4fARB", (void**)&glUniform4fARB}, {"glUniform1iARB", "(II)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glUniform1iARB, "glUniform1iARB", (void**)&glUniform1iARB}, {"glUniform2iARB", "(III)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glUniform2iARB, "glUniform2iARB", (void**)&glUniform2iARB}, {"glUniform3iARB", "(IIII)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glUniform3iARB, "glUniform3iARB", (void**)&glUniform3iARB}, {"glUniform4iARB", "(IIIII)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_glUniform4iARB, "glUniform4iARB", (void**)&glUniform4iARB}, {"nglUniform1fvARB", "(IILjava/nio/FloatBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform1fvARB, "glUniform1fvARB", (void**)&glUniform1fvARB}, {"nglUniform2fvARB", "(IILjava/nio/FloatBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform2fvARB, "glUniform2fvARB", (void**)&glUniform2fvARB}, {"nglUniform3fvARB", "(IILjava/nio/FloatBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform3fvARB, "glUniform3fvARB", (void**)&glUniform3fvARB}, {"nglUniform4fvARB", "(IILjava/nio/FloatBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform4fvARB, "glUniform4fvARB", (void**)&glUniform4fvARB}, {"nglUniform1ivARB", "(IILjava/nio/IntBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform1ivARB, "glUniform1ivARB", (void**)&glUniform1ivARB}, {"nglUniform2ivARB", "(IILjava/nio/IntBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform2ivARB, "glUniform2ivARB", (void**)&glUniform2ivARB}, {"nglUniform3ivARB", "(IILjava/nio/IntBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform3ivARB, "glUniform3ivARB", (void**)&glUniform3ivARB}, {"nglUniform4ivARB", "(IILjava/nio/IntBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform4ivARB, "glUniform4ivARB", (void**)&glUniform4ivARB}, {"nglUniformMatrix2fvARB", "(IIZLjava/nio/FloatBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglUniformMatrix2fvARB, "glUniformMatrix2fvARB", (void**)&glUniformMatrix2fvARB}, {"nglUniformMatrix3fvARB", "(IIZLjava/nio/FloatBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglUniformMatrix3fvARB, "glUniformMatrix3fvARB", (void**)&glUniformMatrix3fvARB}, {"nglUniformMatrix4fvARB", "(IIZLjava/nio/FloatBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglUniformMatrix4fvARB, "glUniformMatrix4fvARB", (void**)&glUniformMatrix4fvARB}, {"nglGetObjectParameterfvARB", "(IILjava/nio/FloatBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglGetObjectParameterfvARB, "glGetObjectParameterfvARB", (void**)&glGetObjectParameterfvARB}, {"nglGetObjectParameterivARB", "(IILjava/nio/IntBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglGetObjectParameterivARB, "glGetObjectParameterivARB", (void**)&glGetObjectParameterivARB}, {"nglGetInfoLogARB", "(IILjava/nio/IntBuffer;ILjava/nio/ByteBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglGetInfoLogARB, "glGetInfoLogARB", (void**)&glGetInfoLogARB}, {"nglGetAttachedObjectsARB", "(IILjava/nio/IntBuffer;ILjava/nio/IntBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglGetAttachedObjectsARB, "glGetAttachedObjectsARB", (void**)&glGetAttachedObjectsARB}, {"nglGetUniformLocationARB", "(ILjava/nio/ByteBuffer;I)I", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglGetUniformLocationARB, "glGetUniformLocationARB", (void**)&glGetUniformLocationARB}, {"nglGetActiveUniformARB", "(IIILjava/nio/IntBuffer;ILjava/nio/IntBuffer;ILjava/nio/IntBuffer;ILjava/nio/ByteBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglGetActiveUniformARB, "glGetActiveUniformARB", (void**)&glGetActiveUniformARB}, {"nglGetUniformfvARB", "(IILjava/nio/FloatBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglGetUniformfvARB, "glGetUniformfvARB", (void**)&glGetUniformfvARB}, {"nglGetUniformivARB", "(IILjava/nio/IntBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglGetUniformivARB, "glGetUniformivARB", (void**)&glGetUniformivARB}, {"nglGetShaderSourceARB", "(IILjava/nio/IntBuffer;ILjava/nio/ByteBuffer;I)V", (void*)&Java_org_lwjgl_opengl_ARBShaderObjects_nglGetShaderSourceARB, "glGetShaderSourceARB", (void**)&glGetShaderSourceARB} }; int num_functions = NUMFUNCTIONS(functions); jclass clazz = extgl_ResetClass(env, "org/lwjgl/opengl/ARBShaderObjects"); if (extgl_Extensions.GL_ARB_shader_objects) extgl_InitializeClass(env, clazz, ext_set, "GL_ARB_shader_objects", num_functions, functions); }