static inline void dumpArbProgramUniforms(JSONWriter &json, GLenum target, const char *prefix) { if (!glIsEnabled(target)) { return; } GLint program_parameters = 0; glGetProgramivARB(target, GL_PROGRAM_PARAMETERS_ARB, &program_parameters); if (!program_parameters) { return; } GLint max_program_local_parameters = 0; glGetProgramivARB(target, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, &max_program_local_parameters); for (GLint index = 0; index < max_program_local_parameters; ++index) { GLdouble params[4] = {0, 0, 0, 0}; glGetProgramLocalParameterdvARB(target, index, params); if (!params[0] && !params[1] && !params[2] && !params[3]) { continue; } char name[256]; snprintf(name, sizeof name, "%sprogram.local[%i]", prefix, index); json.beginMember(name); json.beginArray(); json.writeFloat(params[0]); json.writeFloat(params[1]); json.writeFloat(params[2]); json.writeFloat(params[3]); json.endArray(); json.endMember(); } GLint max_program_env_parameters = 0; glGetProgramivARB(target, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &max_program_env_parameters); for (GLint index = 0; index < max_program_env_parameters; ++index) { GLdouble params[4] = {0, 0, 0, 0}; glGetProgramEnvParameterdvARB(target, index, params); if (!params[0] && !params[1] && !params[2] && !params[3]) { continue; } char name[256]; snprintf(name, sizeof name, "%sprogram.env[%i]", prefix, index); json.beginMember(name); json.beginArray(); json.writeFloat(params[0]); json.writeFloat(params[1]); json.writeFloat(params[2]); json.writeFloat(params[3]); json.endArray(); json.endMember(); } }
PIGLIT_GL_TEST_CONFIG_END void piglit_init(int argc, char **argv) { bool pass = true; double test_data[4] = { 0.1, 0.2, 0.3, 0.4 }; double result_data[4]; float epsilon = .00001; piglit_require_extension("GL_ARB_vertex_program"); glProgramLocalParameter4dARB(GL_VERTEX_PROGRAM_ARB, 0, test_data[0], test_data[1], test_data[2], test_data[3]); /* Produce a GL error to trick Mesa's * glGetProgramLocalParameter4dvARB code. */ glDepthFunc(0xd0d0d0d0); glGetProgramLocalParameterdvARB(GL_VERTEX_PROGRAM_ARB, 0, result_data); if (fabs(test_data[0] - result_data[0]) > epsilon || fabs(test_data[1] - result_data[1]) > epsilon || fabs(test_data[2] - result_data[2]) > epsilon || fabs(test_data[3] - result_data[3]) > epsilon) { fprintf(stderr, "glProgramLocalParamter4dvARB failed:\n"); fprintf(stderr, " Expected: (%f %f %f %f)\n", test_data[0], test_data[1], test_data[2], test_data[3]); fprintf(stderr, " Observed: (%f %f %f %f)\n", result_data[0], result_data[1], result_data[2], result_data[3]); pass = false; } /* Clear our error. */ (void)glGetError(); piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL); }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBProgram_nglGetProgramLocalParameterdvARB(JNIEnv *env, jclass clazz, jint target, jint index, jlong params, jlong function_pointer) { GLdouble *params_address = (GLdouble *)(intptr_t)params; glGetProgramLocalParameterdvARBPROC glGetProgramLocalParameterdvARB = (glGetProgramLocalParameterdvARBPROC)((intptr_t)function_pointer); glGetProgramLocalParameterdvARB(target, index, params_address); }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBVertexProgram_nglGetProgramLocalParameterdvARB__IIJ(JNIEnv *__env, jclass clazz, jint target, jint index, jlong paramsAddress) { glGetProgramLocalParameterdvARBPROC glGetProgramLocalParameterdvARB = (glGetProgramLocalParameterdvARBPROC)tlsGetFunction(1391); intptr_t params = (intptr_t)paramsAddress; UNUSED_PARAM(clazz) glGetProgramLocalParameterdvARB(target, index, params); }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBProgram_nglGetProgramLocalParameterdvARB(JNIEnv *env, jclass clazz, jint target, jint index, jobject params, jint params_position, jlong function_pointer) { GLdouble *params_address = ((GLdouble *)(*env)->GetDirectBufferAddress(env, params)) + params_position; glGetProgramLocalParameterdvARBPROC glGetProgramLocalParameterdvARB = (glGetProgramLocalParameterdvARBPROC)((intptr_t)function_pointer); glGetProgramLocalParameterdvARB(target, index, params_address); }