| @@ -43,7 +43,6 @@ | |||
| #include "main/macros.h" | |||
| #include "vbo/vbo.h" | |||
| #include "vbo/vbo_context.h" | |||
| #include "st_context.h" | |||
| #include "st_atom.h" | |||
| @@ -281,26 +280,25 @@ static void | |||
| st_RenderMode(GLcontext *ctx, GLenum newMode ) | |||
| { | |||
| struct st_context *st = ctx->st; | |||
| struct vbo_context *vbo = (struct vbo_context *) ctx->swtnl_im; | |||
| struct draw_context *draw = st->draw; | |||
| if (newMode == GL_RENDER) { | |||
| /* restore normal VBO draw function */ | |||
| vbo->draw_prims = st_draw_vbo; | |||
| vbo_set_draw_func(ctx, st_draw_vbo); | |||
| } | |||
| else if (newMode == GL_SELECT) { | |||
| if (!st->selection_stage) | |||
| st->selection_stage = draw_glselect_stage(ctx, draw); | |||
| draw_set_rasterize_stage(draw, st->selection_stage); | |||
| /* Plug in new vbo draw function */ | |||
| vbo->draw_prims = st_feedback_draw_vbo; | |||
| vbo_set_draw_func(ctx, st_feedback_draw_vbo); | |||
| } | |||
| else { | |||
| if (!st->feedback_stage) | |||
| st->feedback_stage = draw_glfeedback_stage(ctx, draw); | |||
| draw_set_rasterize_stage(draw, st->feedback_stage); | |||
| /* Plug in new vbo draw function */ | |||
| vbo->draw_prims = st_feedback_draw_vbo; | |||
| vbo_set_draw_func(ctx, st_feedback_draw_vbo); | |||
| /* need to generate/use a vertex program that emits pos/color/tex */ | |||
| st->dirty.st |= ST_NEW_VERTEX_PROGRAM; | |||
| } | |||
| @@ -34,7 +34,6 @@ | |||
| #include "main/image.h" | |||
| #include "vbo/vbo.h" | |||
| #include "vbo/vbo_context.h" | |||
| #include "st_atom.h" | |||
| #include "st_cache.h" | |||
| @@ -519,14 +518,11 @@ st_feedback_draw_vbo(GLcontext *ctx, | |||
| void st_init_draw( struct st_context *st ) | |||
| { | |||
| GLcontext *ctx = st->ctx; | |||
| struct vbo_context *vbo = (struct vbo_context *) ctx->swtnl_im; | |||
| /* actually, not used here, but elsewhere */ | |||
| create_default_attribs_buffer(st); | |||
| assert(vbo); | |||
| assert(vbo->draw_prims); | |||
| vbo->draw_prims = st_draw_vbo; | |||
| vbo_set_draw_func(ctx, st_draw_vbo); | |||
| } | |||
| @@ -78,6 +78,9 @@ _tnl_CreateContext( GLcontext *ctx ) | |||
| tnl->nr_blocks = 0; | |||
| /* plug in the VBO drawing function */ | |||
| vbo_set_draw_func(ctx, _tnl_draw_prims); | |||
| return GL_TRUE; | |||
| } | |||
| @@ -117,4 +117,7 @@ void vbo_rebase_prims( GLcontext *ctx, | |||
| void vbo_use_buffer_objects(GLcontext *ctx); | |||
| void vbo_set_draw_func(GLcontext *ctx, vbo_draw_func func); | |||
| #endif | |||
| @@ -31,6 +31,7 @@ | |||
| #include "vbo.h" | |||
| #include "vbo_context.h" | |||
| #if 0 | |||
| /* Reach out and grab this to use as the default: | |||
| */ | |||
| extern void _tnl_draw_prims( GLcontext *ctx, | |||
| @@ -40,6 +41,7 @@ extern void _tnl_draw_prims( GLcontext *ctx, | |||
| const struct _mesa_index_buffer *ib, | |||
| GLuint min_index, | |||
| GLuint max_index ); | |||
| #endif | |||
| @@ -214,7 +216,9 @@ GLboolean _vbo_CreateContext( GLcontext *ctx ) | |||
| /* By default: | |||
| */ | |||
| #if 0 /* dead - see vbo_set_draw_func() */ | |||
| vbo->draw_prims = _tnl_draw_prims; | |||
| #endif | |||
| /* Hook our functions into exec and compile dispatch tables. These | |||
| * will pretty much be permanently installed, which means that the | |||
| @@ -245,3 +249,11 @@ void _vbo_DestroyContext( GLcontext *ctx ) | |||
| FREE(vbo_context(ctx)); | |||
| ctx->swtnl_im = NULL; | |||
| } | |||
| void vbo_set_draw_func(GLcontext *ctx, vbo_draw_func func) | |||
| { | |||
| struct vbo_context *vbo = vbo_context(ctx); | |||
| vbo->draw_prims = func; | |||
| } | |||