static void r300DeleteProgram(GLcontext * ctx, struct gl_program *prog) { struct r300_vertex_program_cont *vp = (struct r300_vertex_program_cont *)prog; struct r300_fragment_program_cont *fp = (struct r300_fragment_program_cont *)prog; switch (prog->Target) { case GL_VERTEX_PROGRAM_ARB: freeVertProgCache(ctx, vp); break; case GL_FRAGMENT_PROGRAM_ARB: freeFragProgCache(ctx, fp); break; } _mesa_delete_program(ctx, prog); }
static void r300ProgramStringNotify(GLcontext * ctx, GLenum target, struct gl_program *prog) { struct r300_vertex_program_cont *vp = (struct r300_vertex_program_cont *)prog; struct r300_fragment_program_cont *fp = (struct r300_fragment_program_cont *)prog; switch (target) { case GL_VERTEX_PROGRAM_ARB: freeVertProgCache(ctx, vp); vp->progs = NULL; break; case GL_FRAGMENT_PROGRAM_ARB: freeFragProgCache(ctx, fp); fp->progs = NULL; break; } /* need this for tcl fallbacks */ _tnl_program_string(ctx, target, prog); }
static GLboolean r300ProgramStringNotify(struct gl_context * ctx, GLenum target, struct gl_program *prog) { struct r300_vertex_program_cont *vp = (struct r300_vertex_program_cont *)prog; struct r300_fragment_program_cont *fp = (struct r300_fragment_program_cont *)prog; switch (target) { case GL_VERTEX_PROGRAM_ARB: freeVertProgCache(ctx, vp); vp->progs = NULL; break; case GL_FRAGMENT_PROGRAM_ARB: freeFragProgCache(ctx, fp); fp->progs = NULL; break; } /* need this for tcl fallbacks */ (void) _tnl_program_string(ctx, target, prog); /* XXX check if program is legal, within limits */ return GL_TRUE; }