Example #1
0
  void GetAttachedShaders(GLuint program, GLsizei mx, GLsizei* count,
                          GLuint* objs) {
    
    // workaround for broken GL implementations
    // some implementations crash if count is a NULL pointer
    // althougth this is perfectly valid according to the spec
    GLsizei dummyCount;   
    if (count == NULL) count = &dummyCount;

    if(arb) {
      glGetAttachedObjectsARB(static_cast<GLhandleARB>(program), mx, count,
                              reinterpret_cast<GLhandleARB*>(objs));
    } else {
      glGetAttachedShaders(program, mx, count, objs);
    }
  }
Example #2
0
static inline void
dumpCurrentProgramObj(JSONWriter &json)
{
    GLhandleARB programObj = glGetHandleARB(GL_PROGRAM_OBJECT_ARB);
    if (!programObj) {
        return;
    }

    GLint attached_shaders = 0;
    glGetProgramivARB(programObj, GL_OBJECT_ATTACHED_OBJECTS_ARB, &attached_shaders);
    if (!attached_shaders) {
        return;
    }

    GLhandleARB *shaderObjs = new GLhandleARB[attached_shaders];
    GLsizei count = 0;
    glGetAttachedObjectsARB(programObj, attached_shaders, &count, shaderObjs);
    for (GLsizei i = 0; i < count; ++ i) {
       dumpShaderObj(json, shaderObjs[i]);
    }
    delete [] shaderObjs;
}
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglGetAttachedObjectsARB(JNIEnv *env, jclass clazz, jint containerObj, jint maxCount, jobject count, jint count_position, jobject obj, jint obj_position, jlong function_pointer) {
	GLsizei *count_address = ((GLsizei *)safeGetBufferAddress(env, count)) + count_position;
	GLhandleARB *obj_address = ((GLhandleARB *)(*env)->GetDirectBufferAddress(env, obj)) + obj_position;
	glGetAttachedObjectsARBPROC glGetAttachedObjectsARB = (glGetAttachedObjectsARBPROC)((intptr_t)function_pointer);
	glGetAttachedObjectsARB(containerObj, maxCount, count_address, obj_address);
}