gallium: check ctx->DrawBuffer before flushing bitmap cache.
authorBrian Paul <brian.paul@tungstengraphics.com>
Mon, 7 Apr 2008 22:45:17 +0000 (16:45 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Mon, 7 Apr 2008 22:45:17 +0000 (16:45 -0600)
During context unbind, we may not have a draw buffer.
This fixes demos/tunnel2.c

src/mesa/state_tracker/st_cb_bitmap.c

index 59f3c385df3a6940e08db8adfc0980e252e9cb1e..505a13cc2b36cdeae2bfb7e78f47f9f5733f97c1 100644 (file)
@@ -547,36 +547,38 @@ void
 st_flush_bitmap_cache(struct st_context *st)
 {
    if (!st->bitmap.cache->empty) {
-      struct bitmap_cache *cache = st->bitmap.cache;
-      struct pipe_context *pipe = st->pipe;
-      struct pipe_screen *screen = pipe->screen;
-      struct pipe_surface *surf;
-      void *dest;
-
-      assert(cache->xmin <= cache->xmax);
-      /*
-      printf("flush size %d x %d  at %d, %d\n",
-             cache->xmax - cache->xmin,
-             cache->ymax - cache->ymin,
-             cache->xpos, cache->ypos);
-      */
-
-      /* update the texture map image */
-      surf = screen->get_tex_surface(screen, cache->texture, 0, 0, 0);
-      dest = pipe_surface_map(surf);
-      memcpy(dest, cache->buffer, sizeof(cache->buffer));
-      pipe_surface_unmap(surf);
-      pipe_surface_reference(&surf, NULL);
-
-      pipe->texture_update(pipe, cache->texture, 0, 0x1);
-
-      draw_bitmap_quad(st->ctx,
-                       cache->xpos,
-                       cache->ypos,
-                       st->ctx->Current.RasterPos[2],
-                       BITMAP_CACHE_WIDTH, BITMAP_CACHE_HEIGHT,
-                       cache->texture);
+      if (st->ctx->DrawBuffer) {
+         struct bitmap_cache *cache = st->bitmap.cache;
+         struct pipe_context *pipe = st->pipe;
+         struct pipe_screen *screen = pipe->screen;
+         struct pipe_surface *surf;
+         void *dest;
+
+         assert(cache->xmin <= cache->xmax);
+         /*
+         printf("flush size %d x %d  at %d, %d\n",
+                cache->xmax - cache->xmin,
+                cache->ymax - cache->ymin,
+                cache->xpos, cache->ypos);
+         */
+
+         /* update the texture map image */
+         surf = screen->get_tex_surface(screen, cache->texture, 0, 0, 0);
+         dest = pipe_surface_map(surf);
+         memcpy(dest, cache->buffer, sizeof(cache->buffer));
+         pipe_surface_unmap(surf);
+         pipe_surface_reference(&surf, NULL);
+
+         pipe->texture_update(pipe, cache->texture, 0, 0x1);
+
+         draw_bitmap_quad(st->ctx,
+                          cache->xpos,
+                          cache->ypos,
+                          st->ctx->Current.RasterPos[2],
+                          BITMAP_CACHE_WIDTH, BITMAP_CACHE_HEIGHT,
+                          cache->texture);
 
+      }
       reset_cache(st);
    }
 }