summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/main/context.c50
-rw-r--r--src/mesa/main/dlist.c23
2 files changed, 42 insertions, 31 deletions
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 329cb336476..f227c9f4324 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -1,4 +1,4 @@
-/* $Id: context.c,v 1.4 1999/09/02 13:16:17 keithw Exp $ */
+/* $Id: context.c,v 1.5 1999/09/04 14:40:49 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -1293,6 +1293,15 @@ GLcontext *gl_create_context( GLvisual *visual,
ctx->Pixel.DriverReadBuffer = GL_FRONT_LEFT;
}
+
+ /* Fill in some driver defaults now.
+ */
+ ctx->Driver.AllocDepthBuffer = gl_alloc_depth_buffer;
+ ctx->Driver.ReadDepthSpanFloat = gl_read_depth_span_float;
+ ctx->Driver.ReadDepthSpanInt = gl_read_depth_span_int;
+
+
+
#ifdef PROFILE
init_timings( ctx );
#endif
@@ -2173,31 +2182,30 @@ void gl_update_state( GLcontext *ctx )
}
}
- /*
- * Update Device Driver interface
+ /* The driver isn't managing the depth buffer.
*/
- ctx->Driver.AllocDepthBuffer = gl_alloc_depth_buffer;
- if (ctx->Depth.Mask) {
- switch (ctx->Depth.Func) {
- case GL_LESS:
- ctx->Driver.DepthTestSpan = gl_depth_test_span_less;
- ctx->Driver.DepthTestPixels = gl_depth_test_pixels_less;
- break;
- case GL_GREATER:
- ctx->Driver.DepthTestSpan = gl_depth_test_span_greater;
- ctx->Driver.DepthTestPixels = gl_depth_test_pixels_greater;
- break;
- default:
+ if (ctx->Driver.AllocDepthBuffer == gl_alloc_depth_buffer)
+ {
+ if (ctx->Depth.Mask) {
+ switch (ctx->Depth.Func) {
+ case GL_LESS:
+ ctx->Driver.DepthTestSpan = gl_depth_test_span_less;
+ ctx->Driver.DepthTestPixels = gl_depth_test_pixels_less;
+ break;
+ case GL_GREATER:
+ ctx->Driver.DepthTestSpan = gl_depth_test_span_greater;
+ ctx->Driver.DepthTestPixels = gl_depth_test_pixels_greater;
+ break;
+ default:
+ ctx->Driver.DepthTestSpan = gl_depth_test_span_generic;
+ ctx->Driver.DepthTestPixels = gl_depth_test_pixels_generic;
+ }
+ }
+ else {
ctx->Driver.DepthTestSpan = gl_depth_test_span_generic;
ctx->Driver.DepthTestPixels = gl_depth_test_pixels_generic;
}
}
- else {
- ctx->Driver.DepthTestSpan = gl_depth_test_span_generic;
- ctx->Driver.DepthTestPixels = gl_depth_test_pixels_generic;
- }
- ctx->Driver.ReadDepthSpanFloat = gl_read_depth_span_float;
- ctx->Driver.ReadDepthSpanInt = gl_read_depth_span_int;
}
if (ctx->NewState & NEW_LIGHTING) {
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 24266e3e424..f08b3b7fecc 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -1,4 +1,4 @@
-/* $Id: dlist.c,v 1.2 1999/08/26 14:50:49 keithw Exp $ */
+/* $Id: dlist.c,v 1.3 1999/09/04 14:40:49 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -271,6 +271,7 @@ union node {
/* Number of nodes of storage needed for each instruction: */
static GLuint InstSize[ OPCODE_END_OF_LIST+1 ];
+void mesa_print_display_list( GLuint list );
/**********************************************************************/
@@ -2382,14 +2383,9 @@ void gl_compile_cassette( GLcontext *ctx )
return;
}
- /* Do some easy optimizations of the cassette. If current value of
- * clip volume hint is GL_FASTEST, we are not clipping anyway, so
- * don't calculate the bounds. But - they will not be calculated
- * later even if the hint is changed, so this is a slightly odd
- * behaviour.
+ /* Do some easy optimizations of the cassette.
*/
- if (ctx->Hint.ClipVolumeClipping != GL_FASTEST &&
- im->v.Obj.size < 4 &&
+ if (im->v.Obj.size < 4 &&
im->Count > 15)
{
im->Bounds = (GLfloat (*)[3]) malloc(6 * sizeof(GLfloat));
@@ -3063,13 +3059,15 @@ void gl_EndList( GLcontext *ctx )
(void) alloc_instruction( ctx, OPCODE_END_OF_LIST, 0 );
-
-
/* Destroy old list, if any */
gl_destroy_list(ctx, ctx->CurrentListNum);
/* Install the list */
HashInsert(ctx->Shared->DisplayList, ctx->CurrentListNum, ctx->CurrentListPtr);
+
+ if (MESA_VERBOSE & VERBOSE_DISPLAY_LIST)
+ mesa_print_display_list(ctx->CurrentListNum);
+
ctx->CurrentListNum = 0;
ctx->CurrentListPtr = NULL;
ctx->ExecuteFlag = GL_TRUE;
@@ -3080,6 +3078,11 @@ void gl_EndList( GLcontext *ctx )
*/
free( ctx->input );
SET_IMMEDIATE( ctx, ctx->VB->IM );
+ gl_reset_input( ctx );
+
+ /* Haven't tracked down why this is needed.
+ */
+ ctx->NewState = ~0;
ctx->API = ctx->Exec; /* Switch the API function pointers */
}