mesa: Update _Current ptr along Current when a new vertex program is bind.
authorJerome Glisse <glisse@freedesktop.org>
Sun, 14 Jan 2007 13:49:36 +0000 (14:49 +0100)
committerJerome Glisse <glisse@freedesktop.org>
Sun, 14 Jan 2007 13:49:36 +0000 (14:49 +0100)
On new vertex program bind only the Current ptr where updated to
point to the new program; this could lead to _Current pointing to
and out of date or even a no more existing program which in turn
could lead to a segfault in some driver. To avoid this _Current
ptr is updated along Current if _Current where previously pointing
to the same program.

src/mesa/shader/program.c

index ddfad47b8949e2e1a3581348920943c6f5c294c7..6db62f591c8b56130861af8896c20473d00ca62f 100644 (file)
@@ -1947,6 +1947,8 @@ _mesa_BindProgram(GLenum target, GLuint id)
 
    /* bind newProg */
    if (target == GL_VERTEX_PROGRAM_ARB) { /* == GL_VERTEX_PROGRAM_NV */
+      if (ctx->VertexProgram._Current == ctx->VertexProgram.Current)
+         ctx->VertexProgram._Current = (struct gl_vertex_program *) newProg;
       ctx->VertexProgram.Current = (struct gl_vertex_program *) newProg;
    }
    else if (target == GL_FRAGMENT_PROGRAM_NV ||
@@ -1969,7 +1971,7 @@ _mesa_BindProgram(GLenum target, GLuint id)
  * \note Not compiled into display lists.
  * \note Called by both glDeleteProgramsNV and glDeleteProgramsARB.
  */
-void GLAPIENTRY 
+void GLAPIENTRY
 _mesa_DeletePrograms(GLsizei n, const GLuint *ids)
 {
    GLint i;