mesa: Handle clip control in meta operations.
authorMathias Fröhlich <Mathias.Froehlich@gmx.net>
Thu, 25 Sep 2014 17:39:31 +0000 (19:39 +0200)
committerMathias Fröhlich <Mathias.Froehlich@gmx.net>
Fri, 24 Oct 2014 17:21:21 +0000 (19:21 +0200)
Restore clip control to the default state if MESA_META_VIEWPORT
or MESA_META_DEPTH_TEST is requested.

v3:
Handle clip control state with MESA_META_TRANSFORM.

Reviewed-by: Brian Paul <brianp@vmware.com>
Signed-off-by: Mathias Froehlich <Mathias.Froehlich@web.de>
src/mesa/drivers/common/meta.c
src/mesa/drivers/common/meta.h

index 7a8e627ba94d5895eea4ac69219bb2bb4013f15e..45c50fd5d8f0714d6e894a85b30c3f6008f7a0cf 100644 (file)
@@ -680,6 +680,10 @@ _mesa_meta_begin(struct gl_context *ctx, GLbitfield state)
          _mesa_Ortho(0.0, ctx->DrawBuffer->Width,
                      0.0, ctx->DrawBuffer->Height,
                      -1.0, 1.0);
+
+      save->ClipOrigin = ctx->Transform.ClipOrigin;
+      save->ClipDepthMode = ctx->Transform.ClipDepthMode;
+      _mesa_ClipControl(GL_LOWER_LEFT, GL_NEGATIVE_ONE_TO_ONE);
    }
 
    if (state & MESA_META_CLIP) {
@@ -1081,6 +1085,8 @@ _mesa_meta_end(struct gl_context *ctx)
       _mesa_LoadMatrixf(save->ProjectionMatrix);
 
       _mesa_MatrixMode(save->MatrixMode);
+
+      _mesa_ClipControl(save->ClipOrigin, save->ClipDepthMode);
    }
 
    if (state & MESA_META_CLIP) {
index 2c9517b146447c5b67e166c678ca1670a8fc7f8d..6ecf3c00597be2ee2cc55010be514e5b2d13ba0d 100644 (file)
@@ -136,6 +136,9 @@ struct save_state
    GLfloat ModelviewMatrix[16];
    GLfloat ProjectionMatrix[16];
    GLfloat TextureMatrix[16];
+   /** GL_ARB_clip_control */
+   GLenum ClipOrigin;     /**< GL_LOWER_LEFT or GL_UPPER_LEFT */
+   GLenum ClipDepthMode;  /**< GL_NEGATIVE_ONE_TO_ONE or GL_ZERO_TO_ONE */
 
    /** MESA_META_CLIP */
    GLbitfield ClipPlanesEnabled;