swrast->choose_line = dmesa_choose_line;
swrast->choose_triangle = dmesa_choose_tri;
- swrast->invalidate_line |= DMESA_NEW_LINE;
- swrast->invalidate_triangle |= DMESA_NEW_TRIANGLE;
+ swrast->InvalidateLineMask |= DMESA_NEW_LINE;
+ swrast->InvalidateTriangleMask |= DMESA_NEW_TRIANGLE;
}
_SWRAST_NEW_RASTERMASK)
-/* Extend the software rasterizer with our line/point/triangle
+/**
+ * Extend the software rasterizer with our line/point/triangle
* functions.
+ * Called during context creation only.
*/
void xmesa_register_swrast_functions( GLcontext *ctx )
{
swrast->choose_line = xmesa_choose_line;
swrast->choose_triangle = xmesa_choose_triangle;
- swrast->invalidate_point |= XMESA_NEW_POINT;
- swrast->invalidate_line |= XMESA_NEW_LINE;
- swrast->invalidate_triangle |= XMESA_NEW_TRIANGLE;
+ /* XXX these lines have no net effect. Remove??? */
+ swrast->InvalidatePointMask |= XMESA_NEW_POINT;
+ swrast->InvalidateLineMask |= XMESA_NEW_LINE;
+ swrast->InvalidateTriangleMask |= XMESA_NEW_TRIANGLE;
}
new_state = ~0;
}
- if (new_state & swrast->invalidate_triangle)
+ if (new_state & swrast->InvalidateTriangleMask)
swrast->Triangle = _swrast_validate_triangle;
- if (new_state & swrast->invalidate_line)
+ if (new_state & swrast->InvalidateLineMask)
swrast->Line = _swrast_validate_line;
- if (new_state & swrast->invalidate_point)
+ if (new_state & swrast->InvalidatePointMask)
swrast->Point = _swrast_validate_point;
if (new_state & _SWRAST_NEW_BLEND_FUNC)
swrast->choose_line = _swrast_choose_line;
swrast->choose_triangle = _swrast_choose_triangle;
- swrast->invalidate_point = _SWRAST_NEW_POINT;
- swrast->invalidate_line = _SWRAST_NEW_LINE;
- swrast->invalidate_triangle = _SWRAST_NEW_TRIANGLE;
+ swrast->InvalidatePointMask = _SWRAST_NEW_POINT;
+ swrast->InvalidateLineMask = _SWRAST_NEW_LINE;
+ swrast->InvalidateTriangleMask = _SWRAST_NEW_TRIANGLE;
swrast->Point = _swrast_validate_point;
swrast->Line = _swrast_validate_line;
GLuint StateChanges;
GLenum Primitive; /* current primitive being drawn (ala glBegin) */
- /** Mechanism to allow driver (like X11) to register further
- * software rasterization routines.
+ void (*InvalidateState)( GLcontext *ctx, GLbitfield new_state );
+
+ /**
+ * When the NewState mask intersects these masks, we invalidate the
+ * Point/Line/Triangle function pointers below.
+ */
+ /*@{*/
+ GLbitfield InvalidatePointMask;
+ GLbitfield InvalidateLineMask;
+ GLbitfield InvalidateTriangleMask;
+ /*@}*/
+
+ /**
+ * Device drivers plug in functions for these callbacks.
+ * Will be called when the GL state change mask intersects the above masks.
*/
/*@{*/
void (*choose_point)( GLcontext * );
void (*choose_line)( GLcontext * );
void (*choose_triangle)( GLcontext * );
-
- GLbitfield invalidate_point;
- GLbitfield invalidate_line;
- GLbitfield invalidate_triangle;
/*@}*/
- /** Function pointers for dispatch behind public entrypoints. */
+ /**
+ * Current point, line and triangle drawing functions.
+ */
/*@{*/
- void (*InvalidateState)( GLcontext *ctx, GLbitfield new_state );
-
swrast_point_func Point;
swrast_line_func Line;
swrast_tri_func Triangle;