summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian <brian.paul@tungstengraphics.com>2007-10-15 13:25:13 -0600
committerBrian <brian.paul@tungstengraphics.com>2007-10-15 13:25:13 -0600
commit520ad5f854723955c89584e4fa0bd172d0969e09 (patch)
treebc57abc23935be82bc20a7df1ef79e92aa1fec10
parent230225c5d746e4f62d71dda8c2832cc25eb28afe (diff)
GL_SELECT mode works now
-rw-r--r--src/mesa/state_tracker/st_cb_feedback.c7
-rw-r--r--src/mesa/state_tracker/st_draw.c15
2 files changed, 22 insertions, 0 deletions
diff --git a/src/mesa/state_tracker/st_cb_feedback.c b/src/mesa/state_tracker/st_cb_feedback.c
index 537a58f39dc..f0c6bf61858 100644
--- a/src/mesa/state_tracker/st_cb_feedback.c
+++ b/src/mesa/state_tracker/st_cb_feedback.c
@@ -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)
diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c
index 640fa8263e8..7fcc4d8e65f 100644
--- a/src/mesa/state_tracker/st_draw.c
+++ b/src/mesa/state_tracker/st_draw.c
@@ -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
*/