intel: use default array/element buffers in intel_generate_mipmap()
If there happened to be a bound VBO when intel_generate_mipmap() was called we blew up because of a bad vertex array pointer. Fixes regnumonline, bug 23859.
This commit is contained in:
parent
f0339f502c
commit
b849c6f1b3
|
@ -125,6 +125,8 @@ intel_generate_mipmap_2d(GLcontext *ctx,
|
|||
GLuint fb_name;
|
||||
GLboolean success = GL_FALSE;
|
||||
struct gl_framebuffer *saved_fbo = NULL;
|
||||
struct gl_buffer_object *saved_array_buffer = NULL;
|
||||
struct gl_buffer_object *saved_element_buffer = NULL;
|
||||
|
||||
_mesa_PushAttrib(GL_ENABLE_BIT | GL_TEXTURE_BIT |
|
||||
GL_CURRENT_BIT | GL_COLOR_BUFFER_BIT |
|
||||
|
@ -133,6 +135,16 @@ intel_generate_mipmap_2d(GLcontext *ctx,
|
|||
old_active_texture = ctx->Texture.CurrentUnit;
|
||||
_mesa_reference_framebuffer(&saved_fbo, ctx->DrawBuffer);
|
||||
|
||||
/* use default array/index buffers */
|
||||
_mesa_reference_buffer_object(ctx, &saved_array_buffer,
|
||||
ctx->Array.ArrayBufferObj);
|
||||
_mesa_reference_buffer_object(ctx, &ctx->Array.ArrayBufferObj,
|
||||
ctx->Shared->NullBufferObj);
|
||||
_mesa_reference_buffer_object(ctx, &saved_element_buffer,
|
||||
ctx->Array.ElementArrayBufferObj);
|
||||
_mesa_reference_buffer_object(ctx, &ctx->Array.ElementArrayBufferObj,
|
||||
ctx->Shared->NullBufferObj);
|
||||
|
||||
_mesa_Disable(GL_POLYGON_STIPPLE);
|
||||
_mesa_Disable(GL_DEPTH_TEST);
|
||||
_mesa_Disable(GL_STENCIL_TEST);
|
||||
|
@ -205,6 +217,15 @@ fail:
|
|||
meta_restore_fragment_program(&intel->meta);
|
||||
meta_restore_vertex_program(&intel->meta);
|
||||
|
||||
/* restore array/index buffers */
|
||||
_mesa_reference_buffer_object(ctx, &ctx->Array.ArrayBufferObj,
|
||||
saved_array_buffer);
|
||||
_mesa_reference_buffer_object(ctx, &saved_array_buffer, NULL);
|
||||
_mesa_reference_buffer_object(ctx, &ctx->Array.ElementArrayBufferObj,
|
||||
saved_element_buffer);
|
||||
_mesa_reference_buffer_object(ctx, &saved_element_buffer, NULL);
|
||||
|
||||
|
||||
_mesa_DeleteFramebuffersEXT(1, &fb_name);
|
||||
_mesa_ActiveTextureARB(GL_TEXTURE0_ARB + old_active_texture);
|
||||
if (saved_fbo)
|
||||
|
|
Loading…
Reference in New Issue