GL_SELECT mode works now
authorBrian <brian.paul@tungstengraphics.com>
Mon, 15 Oct 2007 19:25:13 +0000 (13:25 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Mon, 15 Oct 2007 19:25:13 +0000 (13:25 -0600)
src/mesa/state_tracker/st_cb_feedback.c
src/mesa/state_tracker/st_draw.c

index 537a58f..f0c6bf6 100644 (file)
@@ -293,6 +293,13 @@ st_RenderMode(GLcontext *ctx, GLenum newMode )
       draw_set_rasterize_stage(draw, st->selection_stage);
       /* Plug in new vbo draw function */
       vbo->draw_prims = st_feedback_draw_vbo;
+      /* setup post-transform vertex attribs */
+      {
+         /* just emit pos as GLfloat[4] */
+         static const uint attrs[1] = { FORMAT_4F };
+         const interp_mode *interp = NULL;
+         draw_set_vertex_attributes(draw, attrs, interp, 1);
+      }
    }
    else {
       if (!st->feedback_stage)
index 640fa82..7fcc4d8 100644 (file)
@@ -336,6 +336,7 @@ st_feedback_draw_vbo(GLcontext *ctx,
    struct pipe_buffer_handle *index_buffer_handle = 0;
    struct pipe_vertex_buffer vbuffer[PIPE_MAX_SHADER_INPUTS];
    GLuint attr, i;
+   ubyte *mapped_constants;
 
    assert(ctx->RenderMode == GL_SELECT ||
           ctx->RenderMode == GL_FEEDBACK);
@@ -439,6 +440,17 @@ st_feedback_draw_vbo(GLcontext *ctx,
                                      PIPE_BUFFER_FLAG_READ);
       draw_set_mapped_element_buffer(draw, indexSize, map);
    }
+   else {
+      /* no index/element buffer */
+      draw_set_mapped_element_buffer(draw, 0, NULL);
+   }
+
+
+   /* map constant buffers */
+   mapped_constants = winsys->buffer_map(winsys,
+                               st->state.constants[PIPE_SHADER_VERTEX].buffer,
+                               PIPE_BUFFER_FLAG_READ);
+   draw_set_mapped_constant_buffer(st->draw, mapped_constants);
 
 
    /* draw here */
@@ -447,6 +459,9 @@ st_feedback_draw_vbo(GLcontext *ctx,
    }
 
 
+   /* unmap constant buffers */
+   winsys->buffer_unmap(winsys, st->state.constants[PIPE_SHADER_VERTEX].buffer);
+
    /*
     * unmap vertex/index buffers
     */