Example #1
0
static void Test3( void )
{
    static const GLfloat p[4] = {0, 0, 0, 0};
    GLfloat q[4];
    /* normalize vector */
    static const char *prog =
        "!!VSP1.0\n"
        "# c[0] = (nx,ny,nz)\n"
        "# R0.xyz = normalize(R1)\n"
        "# R0.w   = 1/sqrt(nx*nx + ny*ny + nz*nz)\n"
        "# c[2] = R0\n"
        "DP3 R0.w, c[0], c[0];\n"
        "RSQ R0.w, R0.w;\n"
        "MUL R0.xyz, c[0], R0.w;\n"
        "MOV c[2], R0;\n"
        "END\n";

    glLoadProgramNV(GL_VERTEX_STATE_PROGRAM_NV, 1,
                    strlen(prog),
                    (const GLubyte *) prog);
    assert(glIsProgramNV(1));

    glProgramParameter4fNV(GL_VERTEX_PROGRAM_NV, 0, 0, 10, 0, 0);

    glExecuteProgramNV(GL_VERTEX_STATE_PROGRAM_NV, 1, p);

    glGetProgramParameterfvNV(GL_VERTEX_PROGRAM_NV, 2, GL_PROGRAM_PARAMETER_NV, q);
    printf("Result c[2] = %g %g %g %g  (should be 0, 1, 0, 0.1)\n",
           q[0], q[1], q[2], q[3]);
}
Example #2
0
static void Test2( void )
{
    static const GLfloat p[4] = {9, 8, 7, 6};
    GLfloat q[4];
    /* test swizzling */
    static const char *prog =
        "!!VSP1.0\n"
        "MOV R0, c[0].wzyx;\n"
        "MOV R1, c[1].wzyx;\n"
        "ADD c[2], R0, R1;\n"
        "END\n";

    glLoadProgramNV(GL_VERTEX_STATE_PROGRAM_NV, 1,
                    strlen(prog),
                    (const GLubyte *) prog);
    assert(glIsProgramNV(1));

    glProgramParameter4fNV(GL_VERTEX_PROGRAM_NV, 0, 1, 2, 3, 4);
    glProgramParameter4fNV(GL_VERTEX_PROGRAM_NV, 1, 10, 20, 30, 40);

    glExecuteProgramNV(GL_VERTEX_STATE_PROGRAM_NV, 1, p);

    glGetProgramParameterfvNV(GL_VERTEX_PROGRAM_NV, 2, GL_PROGRAM_PARAMETER_NV, q);
    printf("Result c[2] = %g %g %g %g  (should be 44 33 22 11)\n",
           q[0], q[1], q[2], q[3]);
}
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_NVVertexProgram_nglGetProgramParameterfvNV(JNIEnv *env, jclass clazz, jint target, jint index, jint parameterName, jobject params, jint params_position, jlong function_pointer) {
	GLfloat *params_address = ((GLfloat *)(*env)->GetDirectBufferAddress(env, params)) + params_position;
	glGetProgramParameterfvNVPROC glGetProgramParameterfvNV = (glGetProgramParameterfvNVPROC)((intptr_t)function_pointer);
	glGetProgramParameterfvNV(target, index, parameterName, params_address);
}