New vbo_set_draw_func() to keep vbo context opaque to state tracker and tnl module.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user