######## # Do this in your app's init proc my($VertexProgID,$FragProgID) = glGenProgramsARB_p(2); # NOP Vertex shader my $VertexProg = qq {!!ARBvp1.0 TEMP vertexClip; DP4 vertexClip.x, state.matrix.mvp.row[0], vertex.position; DP4 vertexClip.y, state.matrix.mvp.row[1], vertex.position; DP4 vertexClip.z, state.matrix.mvp.row[2], vertex.position; DP4 vertexClip.w, state.matrix.mvp.row[3], vertex.position; MOV result.position, vertexClip; MOV result.color, vertex.color; MOV result.texcoord[0], vertex.texcoord; END }; glBindProgramARB(GL_VERTEX_PROGRAM_ARB, $VertexProgID); glProgramStringARB_p(GL_VERTEX_PROGRAM_ARB, $VertexProg); #my $vprog = glGetProgramStringARB_p(GL_VERTEX_PROGRAM_ARB); #print "Vertex Prog: '$vprog'\n"; # Lazy Metallic Fragment shader my $FragProg = qq {!!ARBfp1.0 TEMP color; MUL color, fragment.texcoord[0].y, 2; ADD color, 1, -color; ABS color, color; ADD result.color, 1.01, -color; MOV result.color.a, 1; END }; glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, $FragProgID); glProgramStringARB_p(GL_FRAGMENT_PROGRAM_ARB, $FragProg); #my $fprog = glGetProgramStringARB_p(GL_FRAGMENT_PROGRAM_ARB); #print "Fragment Prog: '$fprog'\n"; ######## # Do this in your app's draw proc glEnable(GL_VERTEX_PROGRAM_ARB); glEnable(GL_FRAGMENT_PROGRAM_ARB); glColor3f(1.0, 1.0, 1.0); glutSolidTeapot(0.125); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); glDisable(GL_FRAGMENT_PROGRAM_ARB); glDisable(GL_VERTEX_PROGRAM_ARB); ######## # Do this in your app's termination proc glBindProgramARB(GL_VERTEX_PROGRAM_ARB, 0); glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, 0); glDeleteProgramsARB_p($VertexProgID,$FragProgID);