/** * Prepare to render a vertex buffer. * Called via tnl->Driver.Render.Start. */ static void _swsetup_RenderStart( struct gl_context *ctx ) { SScontext *swsetup = SWSETUP_CONTEXT(ctx); TNLcontext *tnl = TNL_CONTEXT(ctx); struct vertex_buffer *VB = &tnl->vb; if (swsetup->NewState & _SWSETUP_NEW_RENDERINDEX) { _swsetup_choose_trifuncs(ctx); } if (swsetup->NewState & _NEW_PROGRAM) { swsetup->last_index_bitset = 0; } swsetup->NewState = 0; /* This will change if drawing unfilled tris */ _swrast_SetFacing(ctx, 0); _swrast_render_start(ctx); /* Important */ VB->AttribPtr[VERT_ATTRIB_POS] = VB->NdcPtr; setup_vertex_format(ctx); }
/* * We patch this function into tnl->Driver.Render.Start. * It's called when we start rendering a vertex buffer. */ static void _swsetup_RenderStart( GLcontext *ctx ) { SScontext *swsetup = SWSETUP_CONTEXT(ctx); TNLcontext *tnl = TNL_CONTEXT(ctx); struct vertex_buffer *VB = &tnl->vb; GLuint new_state = swsetup->NewState; if (new_state & _SWSETUP_NEW_RENDERINDEX) { _swsetup_choose_trifuncs( ctx ); } swsetup->NewState = 0; _swrast_render_start( ctx ); /* Important: */ VB->AttribPtr[VERT_ATTRIB_POS] = VB->NdcPtr; if (tnl->render_inputs != swsetup->last_index) { GLuint index = tnl->render_inputs; struct tnl_attr_map map[_TNL_ATTRIB_MAX]; int i, e = 0; EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_4F_VIEWPORT, win ); if (index & _TNL_BIT_COLOR0) EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4CHAN_4F_RGBA, color ); if (index & _TNL_BIT_COLOR1) EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_4CHAN_4F_RGBA, specular); if (index & _TNL_BIT_FOG) EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1F, fog); if (index & _TNL_BITS_TEX_ANY) { for (i = 0; i < MAX_TEXTURE_COORD_UNITS; i++) { if (index & _TNL_BIT_TEX(i)) { EMIT_ATTR( _TNL_ATTRIB_TEX0+i, EMIT_4F, texcoord[i] ); } } } if (index & _TNL_BIT_INDEX) EMIT_ATTR( _TNL_ATTRIB_INDEX, EMIT_1F, index ); if (index & _TNL_BIT_POINTSIZE) EMIT_ATTR( _TNL_ATTRIB_POINTSIZE, EMIT_1F, pointSize ); _tnl_install_attrs( ctx, map, e, ctx->Viewport._WindowMap.m, sizeof(SWvertex) ); swsetup->last_index = index; } }
/* * We patch this function into tnl->Driver.Render.Start. * It's called when we start rendering a vertex buffer. */ static void _swsetup_RenderStart( GLcontext *ctx ) { SScontext *swsetup = SWSETUP_CONTEXT(ctx); GLuint new_state = swsetup->NewState; if (new_state & _SWSETUP_NEW_RENDERINDEX) { _swsetup_choose_trifuncs( ctx ); } if (new_state & _SWSETUP_NEW_VERTS) { _swsetup_choose_rastersetup_func( ctx ); } swsetup->NewState = 0; _swrast_render_start( ctx ); }
/** * Prepare to render a vertex buffer. * Called via tnl->Driver.Render.Start. */ static void _swsetup_RenderStart( struct gl_context *ctx ) { SScontext *swsetup = SWSETUP_CONTEXT(ctx); TNLcontext *tnl = TNL_CONTEXT(ctx); struct vertex_buffer *VB = &tnl->vb; if (swsetup->NewState & _SWSETUP_NEW_RENDERINDEX) { _swsetup_choose_trifuncs(ctx); } swsetup->NewState = 0; _swrast_render_start(ctx); /* Important */ VB->AttribPtr[VERT_ATTRIB_POS] = VB->NdcPtr; setup_vertex_format(ctx); }