コード例 #1
0
ファイル: vbo_exec.c プロジェクト: CSRedRat/mesa-1
/**
 * Really want to install these callbacks to a central facility to be
 * invoked according to the state flags.  That will have to wait for a
 * mesa rework:
 */ 
void vbo_exec_invalidate_state( struct gl_context *ctx, GLuint new_state )
{
   struct vbo_context *vbo = vbo_context(ctx);
   struct vbo_exec_context *exec = &vbo->exec;

   if (!exec->validating && new_state & (_NEW_PROGRAM|_NEW_ARRAY)) {
      exec->array.recalculate_inputs = GL_TRUE;

      /* If we ended up here because a VAO was deleted, the _DrawArrays
       * pointer which pointed to the VAO might be invalid now, so set it
       * to NULL.  This prevents crashes in driver functions like Clear
       * where driver state validation might occur, but the vbo module is
       * still in an invalid state.
       *
       * Drivers should skip vertex array state validation if _DrawArrays
       * is NULL.  It also has no effect on performance, because attrib
       * bindings will be recalculated anyway.
       */
      if (vbo->last_draw_method == DRAW_ARRAYS) {
         ctx->Array._DrawArrays = NULL;
         vbo->last_draw_method = DRAW_NONE;
      }
   }

   if (new_state & _NEW_EVAL)
      exec->eval.recalculate_maps = 1;

   _ae_invalidate_state(ctx, new_state);
}
コード例 #2
0
ファイル: vbo_exec.c プロジェクト: Starlink/mesa
/* Really want to install these callbacks to a central facility to be
 * invoked according to the state flags.  That will have to wait for a
 * mesa rework:
 */ 
void vbo_exec_invalidate_state( GLcontext *ctx, GLuint new_state )
{
   struct vbo_exec_context *exec = &vbo_context(ctx)->exec;

   if (new_state & (_NEW_PROGRAM|_NEW_EVAL))
      exec->eval.recalculate_maps = 1;

   _ae_invalidate_state(ctx, new_state);
}
コード例 #3
0
ファイル: vbo_context.c プロジェクト: jvesely/mesa
void
vbo_exec_invalidate_state(struct gl_context *ctx)
{
   struct vbo_context *vbo = vbo_context(ctx);
   struct vbo_exec_context *exec = &vbo->exec;

   if (ctx->NewState & _NEW_ARRAY) {
      _ae_invalidate_state(ctx);
   }
   if (ctx->NewState & _NEW_EVAL)
      exec->eval.recalculate_maps = GL_TRUE;
}
コード例 #4
0
ファイル: vbo_exec.c プロジェクト: venkatarajasekhar/Qt
/**
 * Really want to install these callbacks to a central facility to be
 * invoked according to the state flags.  That will have to wait for a
 * mesa rework:
 */ 
void vbo_exec_invalidate_state( struct gl_context *ctx, GLuint new_state )
{
   struct vbo_exec_context *exec = &vbo_context(ctx)->exec;

   if (new_state & (_NEW_PROGRAM|_NEW_ARRAY)) {
      exec->array.recalculate_inputs = GL_TRUE;
   }

   if (new_state & (_NEW_PROGRAM|_NEW_EVAL))
      exec->eval.recalculate_maps = 1;

   _ae_invalidate_state(ctx, new_state);
}
コード例 #5
0
void
_tnl_InvalidateState( GLcontext *ctx, GLuint new_state )
{
   TNLcontext *tnl = TNL_CONTEXT(ctx);

   if (new_state & (_NEW_HINT)) {
      ASSERT(tnl->AllowVertexFog || tnl->AllowPixelFog);
      tnl->_DoVertexFog = (tnl->AllowVertexFog && (ctx->Hint.Fog != GL_NICEST))
         || !tnl->AllowPixelFog;
   }

   if (new_state & _NEW_ARRAY) {
      tnl->pipeline.run_input_changes |= ctx->Array.NewState; /* overkill */
   }

   _ae_invalidate_state(ctx, new_state);

   tnl->pipeline.run_state_changes |= new_state;
   tnl->pipeline.build_state_changes |= (new_state &
					 tnl->pipeline.build_state_trigger);

   tnl->vtx.eval.new_state |= new_state;

   /* Calculate tnl->render_inputs:
    */
   if (ctx->Visual.rgbMode) {
      tnl->render_inputs = (_TNL_BIT_POS|
			    _TNL_BIT_COLOR0|
			    (ctx->Texture._EnabledCoordUnits << _TNL_ATTRIB_TEX0));

      if (NEED_SECONDARY_COLOR(ctx))
	 tnl->render_inputs |= _TNL_BIT_COLOR1;
   }
   else {
      tnl->render_inputs |= (_TNL_BIT_POS|_TNL_BIT_INDEX);
   }
    
   if (ctx->Fog.Enabled)
      tnl->render_inputs |= _TNL_BIT_FOG;

   if (ctx->Polygon.FrontMode != GL_FILL || 
       ctx->Polygon.BackMode != GL_FILL)
      tnl->render_inputs |= _TNL_BIT_EDGEFLAG;

   if (ctx->RenderMode == GL_FEEDBACK)
      tnl->render_inputs |= _TNL_BIT_TEX0;

   if (ctx->Point._Attenuated ||
       (ctx->VertexProgram._Enabled && ctx->VertexProgram.PointSizeEnabled))
      tnl->render_inputs |= _TNL_BIT_POINTSIZE;
}
コード例 #6
0
ファイル: vbo_context.c プロジェクト: daniel-schuermann/mesa
void
vbo_exec_invalidate_state(struct gl_context *ctx)
{
   struct vbo_context *vbo = vbo_context(ctx);
   struct vbo_exec_context *exec = &vbo->exec;

   if (ctx->NewState & (_NEW_PROGRAM | _NEW_ARRAY)) {
      exec->array.recalculate_inputs = GL_TRUE;

      _ae_invalidate_state(ctx);
   }
   /* If _mesa_update_state is called in a non draw code path,
    * changes in the VAO need to be captured.
    */
   if (ctx->Array.VAO->NewArrays)
      exec->array.recalculate_inputs = GL_TRUE;

   if (ctx->NewState & _NEW_EVAL)
      exec->eval.recalculate_maps = GL_TRUE;
}
コード例 #7
0
ファイル: enable.c プロジェクト: toastpp/toastpp
/**
 * Helper to enable/disable client-side state.
 */
static void
client_state(GLcontext *ctx, GLenum cap, GLboolean state)
{
   GLuint flag;
   GLboolean *var;

   switch (cap) {
      case GL_VERTEX_ARRAY:
         var = &ctx->Array.ArrayObj->Vertex.Enabled;
         flag = _NEW_ARRAY_VERTEX;
         break;
      case GL_NORMAL_ARRAY:
         var = &ctx->Array.ArrayObj->Normal.Enabled;
         flag = _NEW_ARRAY_NORMAL;
         break;
      case GL_COLOR_ARRAY:
         var = &ctx->Array.ArrayObj->Color.Enabled;
         flag = _NEW_ARRAY_COLOR0;
         break;
      case GL_INDEX_ARRAY:
         var = &ctx->Array.ArrayObj->Index.Enabled;
         flag = _NEW_ARRAY_INDEX;
         break;
      case GL_TEXTURE_COORD_ARRAY:
         var = &ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled;
         flag = _NEW_ARRAY_TEXCOORD(ctx->Array.ActiveTexture);
         break;
      case GL_EDGE_FLAG_ARRAY:
         var = &ctx->Array.ArrayObj->EdgeFlag.Enabled;
         flag = _NEW_ARRAY_EDGEFLAG;
         break;
      case GL_FOG_COORDINATE_ARRAY_EXT:
         var = &ctx->Array.ArrayObj->FogCoord.Enabled;
         flag = _NEW_ARRAY_FOGCOORD;
         break;
      case GL_SECONDARY_COLOR_ARRAY_EXT:
         var = &ctx->Array.ArrayObj->SecondaryColor.Enabled;
         flag = _NEW_ARRAY_COLOR1;
         break;

#if FEATURE_point_size_array
      case GL_POINT_SIZE_ARRAY_OES:
         var = &ctx->Array.ArrayObj->PointSize.Enabled;
         flag = _NEW_ARRAY_POINT_SIZE;
         break;
#endif

#if FEATURE_NV_vertex_program
      case GL_VERTEX_ATTRIB_ARRAY0_NV:
      case GL_VERTEX_ATTRIB_ARRAY1_NV:
      case GL_VERTEX_ATTRIB_ARRAY2_NV:
      case GL_VERTEX_ATTRIB_ARRAY3_NV:
      case GL_VERTEX_ATTRIB_ARRAY4_NV:
      case GL_VERTEX_ATTRIB_ARRAY5_NV:
      case GL_VERTEX_ATTRIB_ARRAY6_NV:
      case GL_VERTEX_ATTRIB_ARRAY7_NV:
      case GL_VERTEX_ATTRIB_ARRAY8_NV:
      case GL_VERTEX_ATTRIB_ARRAY9_NV:
      case GL_VERTEX_ATTRIB_ARRAY10_NV:
      case GL_VERTEX_ATTRIB_ARRAY11_NV:
      case GL_VERTEX_ATTRIB_ARRAY12_NV:
      case GL_VERTEX_ATTRIB_ARRAY13_NV:
      case GL_VERTEX_ATTRIB_ARRAY14_NV:
      case GL_VERTEX_ATTRIB_ARRAY15_NV:
         CHECK_EXTENSION(NV_vertex_program, cap);
         {
            GLint n = (GLint) cap - GL_VERTEX_ATTRIB_ARRAY0_NV;
            var = &ctx->Array.ArrayObj->VertexAttrib[n].Enabled;
            flag = _NEW_ARRAY_ATTRIB(n);
         }
         break;
#endif /* FEATURE_NV_vertex_program */

      default:
         _mesa_error( ctx, GL_INVALID_ENUM,
                      "glEnable/DisableClientState(0x%x)", cap);
         return;
   }

   if (*var == state)
      return;

   FLUSH_VERTICES(ctx, _NEW_ARRAY);
   ctx->Array.NewState |= flag;

   _ae_invalidate_state(ctx, _NEW_ARRAY);

   *var = state;

   if (state)
      ctx->Array.ArrayObj->_Enabled |= flag;
   else
      ctx->Array.ArrayObj->_Enabled &= ~flag;

   if (ctx->Driver.Enable) {
      ctx->Driver.Enable( ctx, cap, state );
   }
}
コード例 #8
0
ファイル: vbo_context.c プロジェクト: MttDs/new-rexeno-tindpe
void _vbo_InvalidateState( GLcontext *ctx, GLuint new_state )
{
   _ae_invalidate_state(ctx, new_state);
   vbo_exec_invalidate_state(ctx, new_state);
}
コード例 #9
0
ファイル: enable.c プロジェクト: GYGit/reactos
/**
 * Helper to enable/disable client-side state.
 */
static void
client_state(struct gl_context *ctx, GLenum cap, GLboolean state)
{
   GLbitfield64 flag;
   GLboolean *var;

   switch (cap) {
      case GL_VERTEX_ARRAY:
         var = &ctx->Array.VertexAttrib[VERT_ATTRIB_POS].Enabled;
         flag = VERT_BIT_POS;
         break;
      case GL_NORMAL_ARRAY:
         var = &ctx->Array.VertexAttrib[VERT_ATTRIB_NORMAL].Enabled;
         flag = VERT_BIT_NORMAL;
         break;
      case GL_COLOR_ARRAY:
         var = &ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR].Enabled;
         flag = VERT_BIT_COLOR;
         break;
      case GL_INDEX_ARRAY:
         var = &ctx->Array.VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled;
         flag = VERT_BIT_COLOR_INDEX;
         break;
      case GL_TEXTURE_COORD_ARRAY:
         var = &ctx->Array.VertexAttrib[VERT_ATTRIB_TEX].Enabled;
         flag = VERT_BIT_TEX;
         break;
      case GL_EDGE_FLAG_ARRAY:
         var = &ctx->Array.VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled;
         flag = VERT_BIT_EDGEFLAG;
         break;
      case GL_FOG_COORDINATE_ARRAY_EXT:
         var = &ctx->Array.VertexAttrib[VERT_ATTRIB_FOG].Enabled;
         flag = VERT_BIT_FOG;
         break;

      default:
         goto invalid_enum_error;
   }

   if (*var == state)
      return;

   FLUSH_VERTICES(ctx, _NEW_ARRAY);
   ctx->Array.NewState |= flag;

   _ae_invalidate_state(ctx, _NEW_ARRAY);

   *var = state;

   if (state)
      ctx->Array._Enabled |= flag;
   else
      ctx->Array._Enabled &= ~flag;

   if (ctx->Driver.Enable) {
      ctx->Driver.Enable( ctx, cap, state );
   }

   return;

invalid_enum_error:
   _mesa_error(ctx, GL_INVALID_ENUM, "gl%sClientState(0x%x)",
               state ? "Enable" : "Disable", cap);
}
コード例 #10
0
ファイル: enable.c プロジェクト: darkvaderXD2014/reactos
/**
 * Helper to enable/disable client-side state.
 */
static void
client_state(struct gl_context *ctx, GLenum cap, GLboolean state)
{
   struct gl_array_object *arrayObj = ctx->Array.ArrayObj;
   GLbitfield64 flag;
   GLboolean *var;

   switch (cap) {
      case GL_VERTEX_ARRAY:
         var = &arrayObj->VertexAttrib[VERT_ATTRIB_POS].Enabled;
         flag = VERT_BIT_POS;
         break;
      case GL_NORMAL_ARRAY:
         var = &arrayObj->VertexAttrib[VERT_ATTRIB_NORMAL].Enabled;
         flag = VERT_BIT_NORMAL;
         break;
      case GL_COLOR_ARRAY:
         var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR0].Enabled;
         flag = VERT_BIT_COLOR0;
         break;
      case GL_INDEX_ARRAY:
         var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR_INDEX].Enabled;
         flag = VERT_BIT_COLOR_INDEX;
         break;
      case GL_TEXTURE_COORD_ARRAY:
         var = &arrayObj->VertexAttrib[VERT_ATTRIB_TEX].Enabled;
         flag = VERT_BIT_TEX;
         break;
      case GL_EDGE_FLAG_ARRAY:
         var = &arrayObj->VertexAttrib[VERT_ATTRIB_EDGEFLAG].Enabled;
         flag = VERT_BIT_EDGEFLAG;
         break;
      case GL_FOG_COORDINATE_ARRAY_EXT:
         var = &arrayObj->VertexAttrib[VERT_ATTRIB_FOG].Enabled;
         flag = VERT_BIT_FOG;
         break;
      case GL_SECONDARY_COLOR_ARRAY_EXT:
         var = &arrayObj->VertexAttrib[VERT_ATTRIB_COLOR1].Enabled;
         flag = VERT_BIT_COLOR1;
         break;

#if FEATURE_point_size_array
      case GL_POINT_SIZE_ARRAY_OES:
         var = &arrayObj->VertexAttrib[VERT_ATTRIB_POINT_SIZE].Enabled;
         flag = VERT_BIT_POINT_SIZE;
         break;
#endif

#if FEATURE_NV_vertex_program
      case GL_VERTEX_ATTRIB_ARRAY0_NV:
      case GL_VERTEX_ATTRIB_ARRAY1_NV:
      case GL_VERTEX_ATTRIB_ARRAY2_NV:
      case GL_VERTEX_ATTRIB_ARRAY3_NV:
      case GL_VERTEX_ATTRIB_ARRAY4_NV:
      case GL_VERTEX_ATTRIB_ARRAY5_NV:
      case GL_VERTEX_ATTRIB_ARRAY6_NV:
      case GL_VERTEX_ATTRIB_ARRAY7_NV:
      case GL_VERTEX_ATTRIB_ARRAY8_NV:
      case GL_VERTEX_ATTRIB_ARRAY9_NV:
      case GL_VERTEX_ATTRIB_ARRAY10_NV:
      case GL_VERTEX_ATTRIB_ARRAY11_NV:
      case GL_VERTEX_ATTRIB_ARRAY12_NV:
      case GL_VERTEX_ATTRIB_ARRAY13_NV:
      case GL_VERTEX_ATTRIB_ARRAY14_NV:
      case GL_VERTEX_ATTRIB_ARRAY15_NV:
         CHECK_EXTENSION(NV_vertex_program, cap);
         {
            GLint n = (GLint) cap - GL_VERTEX_ATTRIB_ARRAY0_NV;
            ASSERT(VERT_ATTRIB_GENERIC(n) < Elements(ctx->Array.ArrayObj->VertexAttrib));
            var = &arrayObj->VertexAttrib[VERT_ATTRIB_GENERIC(n)].Enabled;
            flag = VERT_BIT_GENERIC(n);
         }
         break;
#endif /* FEATURE_NV_vertex_program */

      default:
         goto invalid_enum_error;
   }

   if (*var == state)
      return;

   FLUSH_VERTICES(ctx, _NEW_ARRAY);
   ctx->Array.NewState |= flag;

   _ae_invalidate_state(ctx, _NEW_ARRAY);

   *var = state;

   if (state)
      ctx->Array.ArrayObj->_Enabled |= flag;
   else
      ctx->Array.ArrayObj->_Enabled &= ~flag;

   if (ctx->Driver.Enable) {
      ctx->Driver.Enable( ctx, cap, state );
   }

   return;

invalid_enum_error:
   _mesa_error(ctx, GL_INVALID_ENUM, "gl%sClientState(0x%x)",
               state ? "Enable" : "Disable", cap);
}