Example #1
0
/**
 * 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);
}
Example #2
0
/*
 * 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;
   }

}
Example #3
0
/*
 * 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 );
}
Example #4
0
/**
 * 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);
}