diff options
Diffstat (limited to 'src/mesa/main')
-rw-r--r-- | src/mesa/main/context.c | 50 | ||||
-rw-r--r-- | src/mesa/main/dlist.c | 23 |
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 */ } |