AOgpu2::AOgpu2( Point3f dir, Mol &m, int ndir){ shadowmap.computeAsTexture(dir, true, shadowAOCanvas ); glFinish(); moltextureCanvas.SetAsOutput(); glDisable(GL_VERTEX_PROGRAM_ARB); glEnable(GL_FRAGMENT_PROGRAM_ARB); aogpu_settings.BindDrawAOShader(); for (int i=0; i<3; i++) { glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, i, matSM[0][i],matSM[1][i],matSM[2][i],matSM[3][i] ); //printf("Sending %d (%f %f %f %f)\n", i, mat[0][i],mat[1][i],mat[2][i],mat[3][i]); } glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 3, dir[0],dir[1],dir[2], 4.0/ndir ); glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 4, 0,stick_radius,0,0 ); m.DrawOnTexture(); glDisable(GL_BLEND); glEnable(GL_VERTEX_PROGRAM_ARB); };