From 5e92a7c7457f53fed576b65105a7a996a6044f55 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Thu, 17 Apr 2003 23:14:30 +0000 Subject: fix some glBindProgramNV/ARB details --- src/mesa/main/arbprogram.c | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) (limited to 'src/mesa/main/arbprogram.c') diff --git a/src/mesa/main/arbprogram.c b/src/mesa/main/arbprogram.c index eeac11bd98..639a4d33a3 100644 --- a/src/mesa/main/arbprogram.c +++ b/src/mesa/main/arbprogram.c @@ -463,19 +463,30 @@ _mesa_BindProgramARB(GLenum target, GLuint program) } else { prog = (struct program *) _mesa_HashLookup(ctx->Shared->Programs, program); - } - if (!prog && program > 0){ - /* allocate new program */ - prog = _mesa_alloc_program(ctx, target, program); - if (!prog) { - _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBindProgramARB"); - return; + if (prog) { + if (prog->Target == 0) { + /* prog was allocated with glGenProgramsARB */ + prog->Target = target; + } + else if (prog->Target != target) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBindProgramARB(target mismatch)"); + return; + } + } + else { + /* allocate a new program now */ + prog = _mesa_alloc_program(ctx, target, program); + if (!prog) { + _mesa_error(ctx, GL_OUT_OF_MEMORY, "glBindProgramARB"); + return; + } + prog->Id = program; + prog->Target = target; + prog->Resident = GL_TRUE; + prog->RefCount = 1; + _mesa_HashInsert(ctx->Shared->Programs, program, prog); } - prog->Id = program; - prog->Target = target; - prog->Resident = GL_TRUE; - prog->RefCount = 1; - _mesa_HashInsert(ctx->Shared->Programs, program, prog); } /* bind now */ -- cgit v1.2.3