diff options
Diffstat (limited to 'src/mesa/main')
-rw-r--r-- | src/mesa/main/context.c | 3 | ||||
-rw-r--r-- | src/mesa/main/enable.c | 6 | ||||
-rw-r--r-- | src/mesa/main/get.c | 38 |
3 files changed, 36 insertions, 11 deletions
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c index 9207753312..ca95e430c0 100644 --- a/src/mesa/main/context.c +++ b/src/mesa/main/context.c @@ -1,4 +1,4 @@ -/* $Id: context.c,v 1.52 2000/03/31 01:05:51 brianp Exp $ */ +/* $Id: context.c,v 1.53 2000/04/04 15:14:10 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -1276,6 +1276,7 @@ static void init_attrib_groups( GLcontext *ctx ) ctx->CatchSignals = GL_TRUE; ctx->OcclusionResult = GL_FALSE; + ctx->OcclusionResultSaved = GL_FALSE; /* For debug/development only */ ctx->NoRaster = getenv("MESA_NO_RASTER") ? GL_TRUE : GL_FALSE; diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c index 0e1a5781bd..fa0c84f173 100644 --- a/src/mesa/main/enable.c +++ b/src/mesa/main/enable.c @@ -1,4 +1,4 @@ -/* $Id: enable.c,v 1.12 2000/03/11 23:23:26 brianp Exp $ */ +/* $Id: enable.c,v 1.13 2000/04/04 15:14:10 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -455,6 +455,10 @@ void _mesa_set_enable( GLcontext *ctx, GLenum cap, GLboolean state ) case GL_OCCLUSION_TEST_HP: if (ctx->Extensions.HaveHpOcclusionTest) { ctx->Depth.OcclusionTest = state; + if (state) + ctx->OcclusionResult = ctx->OcclusionResultSaved; + else + ctx->OcclusionResultSaved = ctx->OcclusionResult; ctx->NewState |= NEW_RASTER_OPS; } else { diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c index 136d89689a..2552f30519 100644 --- a/src/mesa/main/get.c +++ b/src/mesa/main/get.c @@ -1,4 +1,4 @@ -/* $Id: get.c,v 1.16 2000/03/31 01:04:52 brianp Exp $ */ +/* $Id: get.c,v 1.17 2000/04/04 15:14:10 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -1029,8 +1029,13 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params ) return; case GL_OCCLUSION_TEST_RESULT_HP: if (ctx->Extensions.HaveHpOcclusionTest) { - *params = ctx->OcclusionResult; - ctx->OcclusionResult = GL_FALSE; /* reset now */ + if (ctx->Depth.OcclusionTest) + *params = ctx->OcclusionResult; + else + *params = ctx->OcclusionResultSaved; + /* reset flag now */ + ctx->OcclusionResult = GL_FALSE; + ctx->OcclusionResultSaved = GL_FALSE; } else { gl_error( ctx, GL_INVALID_ENUM, "glGetBooleanv" ); @@ -2016,8 +2021,13 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params ) return; case GL_OCCLUSION_TEST_RESULT_HP: if (ctx->Extensions.HaveHpOcclusionTest) { - *params = (GLdouble) ctx->OcclusionResult; - ctx->OcclusionResult = GL_FALSE; /* reset now */ + if (ctx->Depth.OcclusionTest) + *params = (GLdouble) ctx->OcclusionResult; + else + *params = (GLdouble) ctx->OcclusionResultSaved; + /* reset flag now */ + ctx->OcclusionResult = GL_FALSE; + ctx->OcclusionResultSaved = GL_FALSE; } else { gl_error( ctx, GL_INVALID_ENUM, "glGetDoublev" ); @@ -2980,8 +2990,13 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params ) return; case GL_OCCLUSION_TEST_RESULT_HP: if (ctx->Extensions.HaveHpOcclusionTest) { - *params = (GLfloat) ctx->OcclusionResult; - ctx->OcclusionResult = GL_FALSE; /* reset now */ + if (ctx->Depth.OcclusionTest) + *params = (GLfloat) ctx->OcclusionResult; + else + *params = (GLfloat) ctx->OcclusionResultSaved; + /* reset flag now */ + ctx->OcclusionResult = GL_FALSE; + ctx->OcclusionResultSaved = GL_FALSE; } else { gl_error( ctx, GL_INVALID_ENUM, "glGetFloatv" ); @@ -3967,8 +3982,13 @@ _mesa_GetIntegerv( GLenum pname, GLint *params ) return; case GL_OCCLUSION_TEST_RESULT_HP: if (ctx->Extensions.HaveHpOcclusionTest) { - *params = (GLint) ctx->OcclusionResult; - ctx->OcclusionResult = GL_FALSE; /* reset now */ + if (ctx->Depth.OcclusionTest) + *params = (GLint) ctx->OcclusionResult; + else + *params = (GLint) ctx->OcclusionResultSaved; + /* reset flag now */ + ctx->OcclusionResult = GL_FALSE; + ctx->OcclusionResultSaved = GL_FALSE; } else { gl_error( ctx, GL_INVALID_ENUM, "glGetIntegerv" ); |