GLboolean SERVER_DISPATCH_APIENTRY crServerDispatchAreProgramsResidentNV(GLsizei n, const GLuint *programs, GLboolean *residences) { GLboolean retval; GLboolean *res = (GLboolean *) crAlloc(n * sizeof(GLboolean)); GLsizei i; (void) residences; if (!cr_server.sharedTextureObjects) { GLuint *programs2 = (GLuint *) crAlloc(n * sizeof(GLuint)); for (i = 0; i < n; i++) programs2[i] = crServerTranslateProgramID(programs[i]); retval = cr_server.head_spu->dispatch_table.AreProgramsResidentNV(n, programs2, res); crFree(programs2); } else { retval = cr_server.head_spu->dispatch_table.AreProgramsResidentNV(n, programs, res); } crServerReturnValue(res, n * sizeof(GLboolean)); crFree(res); return retval; /* WILL PROBABLY BE IGNORED */ }
/*@todo will fail for progs loaded from snapshot */ GLboolean SERVER_DISPATCH_APIENTRY crServerDispatchIsProgramARB( GLuint program ) { GLboolean retval; program = crServerTranslateProgramID(program); retval = cr_server.head_spu->dispatch_table.IsProgramARB( program ); crServerReturnValue( &retval, sizeof(retval) ); return retval; /* WILL PROBABLY BE IGNORED */ }
void SERVER_DISPATCH_APIENTRY crServerDispatchBindProgramARB(GLenum target, GLuint id) { id = crServerTranslateProgramID(id); if (target == GL_VERTEX_PROGRAM_ARB) { CRServerProgram *prog = LookupProgram(id); (void) prog; cr_server.currentProgram = id; } /* pass through */ crStateBindProgramARB(&cr_server.StateTracker, target, id); cr_server.head_spu->dispatch_table.BindProgramARB(target, id); }
void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteProgramsARB(GLsizei n, const GLuint * programs) { GLuint *pLocalProgs = (GLuint *) crAlloc(n * sizeof(GLuint)); GLint i; if (!pLocalProgs) { crError("crServerDispatchDeleteProgramsARB: out of memory"); return; } for (i = 0; i < n; i++) { pLocalProgs[i] = crServerTranslateProgramID(programs[i]); } crStateDeleteProgramsARB(n, pLocalProgs); cr_server.head_spu->dispatch_table.DeleteProgramsARB(n, pLocalProgs); crFree(pLocalProgs); }