diff options
Diffstat (limited to 'mesalib/src/mesa/drivers/common/meta.c')
-rw-r--r-- | mesalib/src/mesa/drivers/common/meta.c | 43 |
1 files changed, 14 insertions, 29 deletions
diff --git a/mesalib/src/mesa/drivers/common/meta.c b/mesalib/src/mesa/drivers/common/meta.c index 8d589e4c3..259041f67 100644 --- a/mesalib/src/mesa/drivers/common/meta.c +++ b/mesalib/src/mesa/drivers/common/meta.c @@ -879,40 +879,25 @@ _mesa_meta_end(struct gl_context *ctx) /* restore texture objects for unit[0] only */ for (tgt = 0; tgt < NUM_TEXTURE_TARGETS; tgt++) { - _mesa_reference_texobj(&ctx->Texture.Unit[0].CurrentTex[tgt], - save->CurrentTexture[tgt]); + if (ctx->Texture.Unit[0].CurrentTex[tgt] != save->CurrentTexture[tgt]) { + FLUSH_VERTICES(ctx, _NEW_TEXTURE); + _mesa_reference_texobj(&ctx->Texture.Unit[0].CurrentTex[tgt], + save->CurrentTexture[tgt]); + } _mesa_reference_texobj(&save->CurrentTexture[tgt], NULL); } - /* Re-enable textures, texgen */ + /* Restore fixed function texture enables, texgen */ for (u = 0; u < ctx->Const.MaxTextureUnits; u++) { - if (save->TexEnabled[u]) { - _mesa_ActiveTextureARB(GL_TEXTURE0 + u); - - if (save->TexEnabled[u] & TEXTURE_1D_BIT) - _mesa_set_enable(ctx, GL_TEXTURE_1D, GL_TRUE); - if (save->TexEnabled[u] & TEXTURE_2D_BIT) - _mesa_set_enable(ctx, GL_TEXTURE_2D, GL_TRUE); - if (save->TexEnabled[u] & TEXTURE_3D_BIT) - _mesa_set_enable(ctx, GL_TEXTURE_3D, GL_TRUE); - if (save->TexEnabled[u] & TEXTURE_CUBE_BIT) - _mesa_set_enable(ctx, GL_TEXTURE_CUBE_MAP, GL_TRUE); - if (save->TexEnabled[u] & TEXTURE_RECT_BIT) - _mesa_set_enable(ctx, GL_TEXTURE_RECTANGLE, GL_TRUE); - } - - if (save->TexGenEnabled[u]) { - _mesa_ActiveTextureARB(GL_TEXTURE0 + u); + if (ctx->Texture.Unit[u].Enabled != save->TexEnabled[u]) { + FLUSH_VERTICES(ctx, _NEW_TEXTURE); + ctx->Texture.Unit[u].Enabled = save->TexEnabled[u]; + } - if (save->TexGenEnabled[u] & S_BIT) - _mesa_set_enable(ctx, GL_TEXTURE_GEN_S, GL_TRUE); - if (save->TexGenEnabled[u] & T_BIT) - _mesa_set_enable(ctx, GL_TEXTURE_GEN_T, GL_TRUE); - if (save->TexGenEnabled[u] & R_BIT) - _mesa_set_enable(ctx, GL_TEXTURE_GEN_R, GL_TRUE); - if (save->TexGenEnabled[u] & Q_BIT) - _mesa_set_enable(ctx, GL_TEXTURE_GEN_Q, GL_TRUE); - } + if (ctx->Texture.Unit[u].TexGenEnabled != save->TexGenEnabled[u]) { + FLUSH_VERTICES(ctx, _NEW_TEXTURE); + ctx->Texture.Unit[u].TexGenEnabled = save->TexGenEnabled[u]; + } } /* restore current unit state */ |