/** Check which datatypes are accepted by glVertexAttribIPointer() */ static GLboolean test_attrib_array(void) { static const GLenum goodTypes[] = { GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT }; static const GLenum badTypes[] = { GL_FLOAT, GL_DOUBLE, GL_HALF_FLOAT_ARB, GL_BGRA }; GLint i; GLubyte data[100]; GLuint index = 1; GLint size = 4; GLsizei stride = 0; GLenum err; /* clear any prev errors */ while (glGetError() != GL_NO_ERROR) ; /* These should not generate a GL error */ for (i = 0; i < ARRAY_SIZE(goodTypes); i++) { glVertexAttribIPointerEXT(index, size, goodTypes[i], stride, data); err = glGetError(); if (err != GL_NO_ERROR) { fprintf(stderr, "%s: glVertexAttribIPointer(type=0x%x) generated error 0x%x\n", TestName, goodTypes[i], err); return GL_FALSE; } } for (i = 0; i < ARRAY_SIZE(badTypes); i++) { glVertexAttribIPointerEXT(index, size, badTypes[i], stride, data); err = glGetError(); if (err != GL_INVALID_ENUM) { fprintf(stderr, "%s: glVertexAttribIPointer(type=0x%x) failed to generate " "GL_INVALID_ENUM\n", TestName, badTypes[i]); return GL_FALSE; } } return GL_TRUE; }
inline void VL_glVertexAttribIPointer(GLuint name, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer) { if(glVertexAttribIPointer) glVertexAttribIPointer(name, size, type, stride, pointer); else if (glVertexAttribIPointerEXT) glVertexAttribIPointerEXT(name, size, type, stride, pointer); else VL_UNSUPPORTED_FUNC(); }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_EXTGpuShader4_nglVertexAttribIPointerEXTBO(JNIEnv *env, jclass clazz, jint index, jint size, jint type, jint stride, jlong buffer_buffer_offset, jlong function_pointer) { const GLvoid *buffer_address = ((const GLvoid *)offsetToPointer(buffer_buffer_offset)); glVertexAttribIPointerEXTPROC glVertexAttribIPointerEXT = (glVertexAttribIPointerEXTPROC)((intptr_t)function_pointer); glVertexAttribIPointerEXT(index, size, type, stride, buffer_address); }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_EXTGPUShader4_nglVertexAttribIPointerEXT__IIIIJ(JNIEnv *__env, jclass clazz, jint index, jint size, jint type, jint stride, jlong pointerAddress) { glVertexAttribIPointerEXTPROC glVertexAttribIPointerEXT = (glVertexAttribIPointerEXTPROC)tlsGetFunction(1740); intptr_t pointer = (intptr_t)pointerAddress; UNUSED_PARAM(clazz) glVertexAttribIPointerEXT(index, size, type, stride, pointer); }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_EXTGpuShader4_nglVertexAttribIPointerEXT(JNIEnv *env, jclass clazz, jint index, jint size, jint type, jint stride, jobject buffer, jint buffer_position, jlong function_pointer) { const GLvoid *buffer_address = ((const GLvoid *)(((char *)(*env)->GetDirectBufferAddress(env, buffer)) + buffer_position)); glVertexAttribIPointerEXTPROC glVertexAttribIPointerEXT = (glVertexAttribIPointerEXTPROC)((intptr_t)function_pointer); glVertexAttribIPointerEXT(index, size, type, stride, buffer_address); }