bring in changes from dri tcl branch
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* $Id: api_arrayelt.c,v 1.6 2002/01/14 16:06:35 brianp Exp $ */
|
||||
/* $Id: api_arrayelt.c,v 1.7 2002/04/09 16:56:50 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -63,7 +63,7 @@ typedef struct {
|
||||
|
||||
static void (*colorfuncs[2][8])( const void * ) = {
|
||||
{ (array_func)glColor3bv,
|
||||
(array_func)glColor3ub,
|
||||
(array_func)glColor3ubv,
|
||||
(array_func)glColor3sv,
|
||||
(array_func)glColor3usv,
|
||||
(array_func)glColor3iv,
|
||||
@@ -72,7 +72,7 @@ static void (*colorfuncs[2][8])( const void * ) = {
|
||||
(array_func)glColor3dv },
|
||||
|
||||
{ (array_func)glColor4bv,
|
||||
(array_func)glColor4ub,
|
||||
(array_func)glColor4ubv,
|
||||
(array_func)glColor4sv,
|
||||
(array_func)glColor4usv,
|
||||
(array_func)glColor4iv,
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: api_noop.c,v 1.9 2001/12/14 02:50:01 brianp Exp $ */
|
||||
/* $Id: api_noop.c,v 1.10 2002/04/09 16:56:50 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -249,7 +249,7 @@ void _mesa_noop_MultiTexCoord1fARB( GLenum target, GLfloat a )
|
||||
}
|
||||
}
|
||||
|
||||
void _mesa_noop_MultiTexCoord1fvARB( GLenum target, GLfloat *v )
|
||||
void _mesa_noop_MultiTexCoord1fvARB( GLenum target, const GLfloat *v )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
GLuint unit = target - GL_TEXTURE0_ARB;
|
||||
@@ -283,7 +283,7 @@ void _mesa_noop_MultiTexCoord2fARB( GLenum target, GLfloat a, GLfloat b )
|
||||
}
|
||||
}
|
||||
|
||||
void _mesa_noop_MultiTexCoord2fvARB( GLenum target, GLfloat *v )
|
||||
void _mesa_noop_MultiTexCoord2fvARB( GLenum target, const GLfloat *v )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
GLuint unit = target - GL_TEXTURE0_ARB;
|
||||
@@ -317,7 +317,7 @@ void _mesa_noop_MultiTexCoord3fARB( GLenum target, GLfloat a, GLfloat b, GLfloat
|
||||
}
|
||||
}
|
||||
|
||||
void _mesa_noop_MultiTexCoord3fvARB( GLenum target, GLfloat *v )
|
||||
void _mesa_noop_MultiTexCoord3fvARB( GLenum target, const GLfloat *v )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
GLuint unit = target - GL_TEXTURE0_ARB;
|
||||
@@ -352,7 +352,7 @@ void _mesa_noop_MultiTexCoord4fARB( GLenum target, GLfloat a, GLfloat b,
|
||||
}
|
||||
}
|
||||
|
||||
void _mesa_noop_MultiTexCoord4fvARB( GLenum target, GLfloat *v )
|
||||
void _mesa_noop_MultiTexCoord4fvARB( GLenum target, const GLfloat *v )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
GLuint unit = target - GL_TEXTURE0_ARB;
|
||||
@@ -419,7 +419,7 @@ void _mesa_noop_TexCoord1f( GLfloat a )
|
||||
dest[3] = 1;
|
||||
}
|
||||
|
||||
void _mesa_noop_TexCoord1fv( GLfloat *v )
|
||||
void _mesa_noop_TexCoord1fv( const GLfloat *v )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_TEX0];
|
||||
@@ -439,7 +439,7 @@ void _mesa_noop_TexCoord2f( GLfloat a, GLfloat b )
|
||||
dest[3] = 1;
|
||||
}
|
||||
|
||||
void _mesa_noop_TexCoord2fv( GLfloat *v )
|
||||
void _mesa_noop_TexCoord2fv( const GLfloat *v )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_TEX0];
|
||||
@@ -459,7 +459,7 @@ void _mesa_noop_TexCoord3f( GLfloat a, GLfloat b, GLfloat c )
|
||||
dest[3] = 1;
|
||||
}
|
||||
|
||||
void _mesa_noop_TexCoord3fv( GLfloat *v )
|
||||
void _mesa_noop_TexCoord3fv( const GLfloat *v )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_TEX0];
|
||||
@@ -479,7 +479,7 @@ void _mesa_noop_TexCoord4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d )
|
||||
COPY_FLOAT(dest[3], d);
|
||||
}
|
||||
|
||||
void _mesa_noop_TexCoord4fv( GLfloat *v )
|
||||
void _mesa_noop_TexCoord4fv( const GLfloat *v )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
GLfloat *dest = ctx->Current.Attrib[VERT_ATTRIB_TEX0];
|
||||
@@ -489,6 +489,40 @@ void _mesa_noop_TexCoord4fv( GLfloat *v )
|
||||
COPY_FLOAT(dest[3], v[3]);
|
||||
}
|
||||
|
||||
/* Useful outside begin/end?
|
||||
*/
|
||||
void _mesa_noop_Vertex2fv( const GLfloat *v )
|
||||
{
|
||||
(void) v;
|
||||
}
|
||||
|
||||
void _mesa_noop_Vertex3fv( const GLfloat *v )
|
||||
{
|
||||
(void) v;
|
||||
}
|
||||
|
||||
void _mesa_noop_Vertex4fv( const GLfloat *v )
|
||||
{
|
||||
(void) v;
|
||||
}
|
||||
|
||||
void _mesa_noop_Vertex2f( GLfloat a, GLfloat b )
|
||||
{
|
||||
(void) a; (void) b;
|
||||
}
|
||||
|
||||
void _mesa_noop_Vertex3f( GLfloat a, GLfloat b, GLfloat c )
|
||||
{
|
||||
(void) a; (void) b; (void) c;
|
||||
}
|
||||
|
||||
void _mesa_noop_Vertex4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d )
|
||||
{
|
||||
(void) a; (void) b; (void) c; (void) d;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _mesa_noop_VertexAttrib4fNV( GLuint index, GLfloat x,
|
||||
GLfloat y, GLfloat z, GLfloat w )
|
||||
{
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: api_noop.h,v 1.4 2001/12/14 02:50:01 brianp Exp $ */
|
||||
/* $Id: api_noop.h,v 1.5 2002/04/09 16:56:50 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -75,22 +75,22 @@ extern void _mesa_noop_Color3fv( const GLfloat *v );
|
||||
|
||||
extern void _mesa_noop_MultiTexCoord1fARB( GLenum target, GLfloat a );
|
||||
|
||||
extern void _mesa_noop_MultiTexCoord1fvARB( GLenum target, GLfloat *v );
|
||||
extern void _mesa_noop_MultiTexCoord1fvARB( GLenum target, const GLfloat *v );
|
||||
|
||||
extern void _mesa_noop_MultiTexCoord2fARB( GLenum target, GLfloat a,
|
||||
GLfloat b );
|
||||
|
||||
extern void _mesa_noop_MultiTexCoord2fvARB( GLenum target, GLfloat *v );
|
||||
extern void _mesa_noop_MultiTexCoord2fvARB( GLenum target, const GLfloat *v );
|
||||
|
||||
extern void _mesa_noop_MultiTexCoord3fARB( GLenum target, GLfloat a,
|
||||
GLfloat b, GLfloat c);
|
||||
|
||||
extern void _mesa_noop_MultiTexCoord3fvARB( GLenum target, GLfloat *v );
|
||||
extern void _mesa_noop_MultiTexCoord3fvARB( GLenum target, const GLfloat *v );
|
||||
|
||||
extern void _mesa_noop_MultiTexCoord4fARB( GLenum target, GLfloat a,
|
||||
GLfloat b, GLfloat c, GLfloat d );
|
||||
|
||||
extern void _mesa_noop_MultiTexCoord4fvARB( GLenum target, GLfloat *v );
|
||||
extern void _mesa_noop_MultiTexCoord4fvARB( GLenum target, const GLfloat *v );
|
||||
|
||||
extern void _mesa_noop_SecondaryColor3ubEXT( GLubyte a, GLubyte b, GLubyte c );
|
||||
|
||||
@@ -102,19 +102,31 @@ extern void _mesa_noop_SecondaryColor3fvEXT( const GLfloat *v );
|
||||
|
||||
extern void _mesa_noop_TexCoord1f( GLfloat a );
|
||||
|
||||
extern void _mesa_noop_TexCoord1fv( GLfloat *v );
|
||||
extern void _mesa_noop_TexCoord1fv( const GLfloat *v );
|
||||
|
||||
extern void _mesa_noop_TexCoord2f( GLfloat a, GLfloat b );
|
||||
|
||||
extern void _mesa_noop_TexCoord2fv( GLfloat *v );
|
||||
extern void _mesa_noop_TexCoord2fv( const GLfloat *v );
|
||||
|
||||
extern void _mesa_noop_TexCoord3f( GLfloat a, GLfloat b, GLfloat c );
|
||||
|
||||
extern void _mesa_noop_TexCoord3fv( GLfloat *v );
|
||||
extern void _mesa_noop_TexCoord3fv( const GLfloat *v );
|
||||
|
||||
extern void _mesa_noop_TexCoord4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d );
|
||||
|
||||
extern void _mesa_noop_TexCoord4fv( GLfloat *v );
|
||||
extern void _mesa_noop_TexCoord4fv( const GLfloat *v );
|
||||
|
||||
extern void _mesa_noop_Vertex2fv( const GLfloat *v );
|
||||
|
||||
extern void _mesa_noop_Vertex3fv( const GLfloat *v );
|
||||
|
||||
extern void _mesa_noop_Vertex4fv( const GLfloat *v );
|
||||
|
||||
extern void _mesa_noop_Vertex2f( GLfloat a, GLfloat b );
|
||||
|
||||
extern void _mesa_noop_Vertex3f( GLfloat a, GLfloat b, GLfloat c );
|
||||
|
||||
extern void _mesa_noop_Vertex4f( GLfloat a, GLfloat b, GLfloat c, GLfloat d );
|
||||
|
||||
extern void _mesa_noop_VertexAttrib4fNV( GLuint index, GLfloat x,
|
||||
GLfloat y, GLfloat z, GLfloat w );
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: context.c,v 1.159 2002/04/09 14:58:03 keithw Exp $ */
|
||||
/* $Id: context.c,v 1.160 2002/04/09 16:56:50 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -70,22 +70,11 @@
|
||||
#endif
|
||||
|
||||
#ifndef MESA_VERBOSE
|
||||
int MESA_VERBOSE = 0
|
||||
/* | VERBOSE_PIPELINE */
|
||||
/* | VERBOSE_IMMEDIATE */
|
||||
/* | VERBOSE_VARRAY */
|
||||
/* | VERBOSE_TEXTURE */
|
||||
/* | VERBOSE_API */
|
||||
/* | VERBOSE_DRIVER */
|
||||
/* | VERBOSE_STATE */
|
||||
/* | VERBOSE_DISPLAY_LIST */
|
||||
;
|
||||
int MESA_VERBOSE = 0;
|
||||
#endif
|
||||
|
||||
#ifndef MESA_DEBUG_FLAGS
|
||||
int MESA_DEBUG_FLAGS = 0
|
||||
/* | DEBUG_ALWAYS_FLUSH */
|
||||
;
|
||||
int MESA_DEBUG_FLAGS = 0;
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1434,6 +1423,44 @@ alloc_proxy_textures( GLcontext *ctx )
|
||||
}
|
||||
|
||||
|
||||
static void add_debug_flags( const char *debug )
|
||||
{
|
||||
#ifdef MESA_DEBUG
|
||||
if (strstr(debug, "varray"))
|
||||
MESA_VERBOSE |= VERBOSE_VARRAY;
|
||||
|
||||
if (strstr(debug, "tex"))
|
||||
MESA_VERBOSE |= VERBOSE_TEXTURE;
|
||||
|
||||
if (strstr(debug, "imm"))
|
||||
MESA_VERBOSE |= VERBOSE_IMMEDIATE;
|
||||
|
||||
if (strstr(debug, "pipe"))
|
||||
MESA_VERBOSE |= VERBOSE_PIPELINE;
|
||||
|
||||
if (strstr(debug, "driver"))
|
||||
MESA_VERBOSE |= VERBOSE_DRIVER;
|
||||
|
||||
if (strstr(debug, "state"))
|
||||
MESA_VERBOSE |= VERBOSE_STATE;
|
||||
|
||||
if (strstr(debug, "api"))
|
||||
MESA_VERBOSE |= VERBOSE_API;
|
||||
|
||||
if (strstr(debug, "list"))
|
||||
MESA_VERBOSE |= VERBOSE_DISPLAY_LIST;
|
||||
|
||||
if (strstr(debug, "lighting"))
|
||||
MESA_VERBOSE |= VERBOSE_LIGHTING;
|
||||
|
||||
/* Debug flag:
|
||||
*/
|
||||
if (strstr(debug, "flush"))
|
||||
MESA_DEBUG_FLAGS |= DEBUG_ALWAYS_FLUSH;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Initialize a GLcontext struct. This includes allocating all the
|
||||
* other structs and arrays which hang off of the context by pointers.
|
||||
@@ -1597,6 +1624,13 @@ _mesa_initialize_context( GLcontext *ctx,
|
||||
trInitDispatch(ctx->TraceDispatch);
|
||||
#endif
|
||||
|
||||
|
||||
if (getenv("MESA_DEBUG"))
|
||||
add_debug_flags(getenv("MESA_DEBUG"));
|
||||
|
||||
if (getenv("MESA_VERBOSE"))
|
||||
add_debug_flags(getenv("MESA_VERBOSE"));
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: dlist.c,v 1.85 2002/04/02 16:15:17 brianp Exp $ */
|
||||
/* $Id: dlist.c,v 1.86 2002/04/09 16:56:50 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -5065,12 +5065,11 @@ _mesa_EndList( void )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
FLUSH_CURRENT(ctx, 0); /* must be called before assert */
|
||||
ASSERT_OUTSIDE_BEGIN_END(ctx);
|
||||
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
|
||||
|
||||
if (MESA_VERBOSE&VERBOSE_API)
|
||||
fprintf(stderr, "glEndList\n");
|
||||
|
||||
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH( ctx ); /* ??? */
|
||||
|
||||
/* Check that a list is under construction */
|
||||
if (!ctx->CurrentListPtr) {
|
||||
_mesa_error( ctx, GL_INVALID_OPERATION, "glEndList" );
|
||||
@@ -5097,7 +5096,6 @@ _mesa_EndList( void )
|
||||
|
||||
ctx->CurrentDispatch = ctx->Exec;
|
||||
_glapi_set_dispatch( ctx->CurrentDispatch );
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -5111,6 +5109,10 @@ _mesa_CallList( GLuint list )
|
||||
/* VERY IMPORTANT: Save the CompileFlag status, turn it off, */
|
||||
/* execute the display list, and restore the CompileFlag. */
|
||||
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_API)
|
||||
fprintf(stderr, "_mesa_CallList %d\n", list);
|
||||
|
||||
/* mesa_print_display_list( list ); */
|
||||
|
||||
save_compile_flag = ctx->CompileFlag;
|
||||
@@ -5141,6 +5143,9 @@ _mesa_CallLists( GLsizei n, GLenum type, const GLvoid *lists )
|
||||
GLint i;
|
||||
GLboolean save_compile_flag;
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_API)
|
||||
fprintf(stderr, "_mesa_CallLists %d\n", n);
|
||||
|
||||
/* Save the CompileFlag status, turn it off, execute display list,
|
||||
* and restore the CompileFlag.
|
||||
*/
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: mtypes.h,v 1.69 2002/03/29 17:27:59 brianp Exp $ */
|
||||
/* $Id: mtypes.h,v 1.70 2002/04/09 16:56:50 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -1810,6 +1810,9 @@ struct __GLcontextRec {
|
||||
/* The string names for GL_POINT, GL_LINE_LOOP, etc */
|
||||
extern const char *_mesa_prim_name[GL_POLYGON+4];
|
||||
|
||||
#ifndef MESA_DEBUG
|
||||
#define MESA_DEBUG
|
||||
#endif
|
||||
|
||||
#ifdef MESA_DEBUG
|
||||
extern int MESA_VERBOSE;
|
||||
@@ -1831,8 +1834,10 @@ enum _verbose {
|
||||
VERBOSE_DRIVER = 0x0010,
|
||||
VERBOSE_STATE = 0x0020,
|
||||
VERBOSE_API = 0x0040,
|
||||
VERBOSE_DISPLAY_LIST = 0x0200,
|
||||
VERBOSE_LIGHTING = 0x0400
|
||||
VERBOSE_DISPLAY_LIST = 0x0100,
|
||||
VERBOSE_LIGHTING = 0x0200,
|
||||
VERBOSE_PRIMS = 0x0400,
|
||||
VERBOSE_VERTS = 0x0800
|
||||
};
|
||||
|
||||
|
||||
@@ -1848,18 +1853,22 @@ enum _debug {
|
||||
|
||||
/* Eventually let the driver specify what statechanges require a flush:
|
||||
*/
|
||||
#define FLUSH_VERTICES(ctx, newstate) \
|
||||
do { \
|
||||
if (ctx->Driver.NeedFlush & FLUSH_STORED_VERTICES) \
|
||||
ctx->Driver.FlushVertices(ctx, FLUSH_STORED_VERTICES); \
|
||||
ctx->NewState |= newstate; \
|
||||
#define FLUSH_VERTICES(ctx, newstate) \
|
||||
do { \
|
||||
if (MESA_VERBOSE & VERBOSE_STATE) \
|
||||
fprintf(stderr, "FLUSH_VERTICES in %s\n", __FUNCTION__); \
|
||||
if (ctx->Driver.NeedFlush & FLUSH_STORED_VERTICES) \
|
||||
ctx->Driver.FlushVertices(ctx, FLUSH_STORED_VERTICES); \
|
||||
ctx->NewState |= newstate; \
|
||||
} while (0)
|
||||
|
||||
#define FLUSH_CURRENT(ctx, newstate) \
|
||||
do { \
|
||||
if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) \
|
||||
ctx->Driver.FlushVertices(ctx, FLUSH_UPDATE_CURRENT); \
|
||||
ctx->NewState |= newstate; \
|
||||
#define FLUSH_CURRENT(ctx, newstate) \
|
||||
do { \
|
||||
if (MESA_VERBOSE & VERBOSE_STATE) \
|
||||
fprintf(stderr, "FLUSH_CURRENT in %s\n", __FUNCTION__); \
|
||||
if (ctx->Driver.NeedFlush & FLUSH_UPDATE_CURRENT) \
|
||||
ctx->Driver.FlushVertices(ctx, FLUSH_UPDATE_CURRENT); \
|
||||
ctx->NewState |= newstate; \
|
||||
} while (0)
|
||||
|
||||
#define ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, retval) \
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: state.c,v 1.80 2002/04/02 16:15:17 brianp Exp $ */
|
||||
/* $Id: state.c,v 1.81 2002/04/09 16:56:50 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -910,7 +910,7 @@ void _mesa_update_state( GLcontext *ctx )
|
||||
const GLuint oldneedeyecoords = ctx->_NeedEyeCoords;
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_STATE)
|
||||
_mesa_print_state("", new_state);
|
||||
_mesa_print_state("_mesa_update_state", new_state);
|
||||
|
||||
if (new_state & _NEW_MODELVIEW)
|
||||
_math_matrix_analyse( ctx->ModelviewMatrixStack.Top );
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: vtxfmt.c,v 1.10 2001/12/15 02:14:43 brianp Exp $ */
|
||||
/* $Id: vtxfmt.c,v 1.11 2002/04/09 16:56:50 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -50,14 +50,6 @@
|
||||
{ \
|
||||
GET_CURRENT_CONTEXT(ctx); \
|
||||
struct gl_tnl_module *tnl = &(ctx->TnlModule); \
|
||||
const GLuint new_state = ctx->NewState; \
|
||||
\
|
||||
if ( new_state ) \
|
||||
_mesa_update_state( ctx ); \
|
||||
\
|
||||
/* Validate the current tnl module. */ \
|
||||
if ( new_state & ctx->Driver.NeedValidate ) \
|
||||
ctx->Driver.ValidateTnlModule( ctx, new_state ); \
|
||||
\
|
||||
ASSERT( tnl->Current ); \
|
||||
ASSERT( tnl->SwapCount < NUM_VERTEX_FORMAT_ENTRIES ); \
|
||||
@@ -149,6 +141,7 @@ static void install_vtxfmt( struct _glapi_table *tab, GLvertexformat *vfmt )
|
||||
void _mesa_init_exec_vtxfmt( GLcontext *ctx )
|
||||
{
|
||||
install_vtxfmt( ctx->Exec, &neutral_vtxfmt );
|
||||
ctx->TnlModule.SwapCount = 0;
|
||||
}
|
||||
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: t_array_api.c,v 1.24 2002/01/22 14:35:16 brianp Exp $ */
|
||||
/* $Id: t_array_api.c,v 1.25 2002/04/09 16:56:50 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -53,10 +53,9 @@ static void fallback_drawarrays( GLcontext *ctx, GLenum mode, GLint start,
|
||||
{
|
||||
if (_tnl_hard_begin( ctx, mode )) {
|
||||
GLint i;
|
||||
for (i = start; i < count; i++) {
|
||||
_tnl_array_element( ctx, i );
|
||||
}
|
||||
_tnl_end( ctx );
|
||||
for (i = start; i < count; i++)
|
||||
glArrayElement( i );
|
||||
glEnd();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,13 +63,11 @@ static void fallback_drawarrays( GLcontext *ctx, GLenum mode, GLint start,
|
||||
static void fallback_drawelements( GLcontext *ctx, GLenum mode, GLsizei count,
|
||||
const GLuint *indices)
|
||||
{
|
||||
/* Simple version of the above code.
|
||||
*/
|
||||
if (_tnl_hard_begin(ctx, mode)) {
|
||||
GLint i;
|
||||
for (i = 0 ; i < count ; i++)
|
||||
_tnl_array_element( ctx, indices[i] );
|
||||
_tnl_end( ctx );
|
||||
glArrayElement( indices[i] );
|
||||
glEnd();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,6 +80,10 @@ static void _tnl_draw_range_elements( GLcontext *ctx, GLenum mode,
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
FLUSH_CURRENT( ctx, 0 );
|
||||
|
||||
/* fprintf(stderr, "%s\n", __FUNCTION__); */
|
||||
if (tnl->pipeline.build_state_changes)
|
||||
_tnl_validate_pipeline( ctx );
|
||||
|
||||
_tnl_vb_bind_arrays( ctx, start, end );
|
||||
|
||||
tnl->vb.FirstPrimitive = 0;
|
||||
@@ -112,8 +113,10 @@ _tnl_DrawArrays(GLenum mode, GLint start, GLsizei count)
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
struct vertex_buffer *VB = &tnl->vb;
|
||||
GLuint thresh = (ctx->Driver.NeedFlush & FLUSH_STORED_VERTICES) ? 30 : 10;
|
||||
|
||||
/* fprintf(stderr, "%s %d %d\n", __FUNCTION__, start, count); */
|
||||
if (MESA_VERBOSE & VERBOSE_API)
|
||||
fprintf(stderr, "_tnl_DrawArrays %d %d\n", start, count);
|
||||
|
||||
/* Check arguments, etc.
|
||||
*/
|
||||
@@ -126,10 +129,16 @@ _tnl_DrawArrays(GLenum mode, GLint start, GLsizei count)
|
||||
if (ctx->CompileFlag) {
|
||||
fallback_drawarrays( ctx, mode, start, start + count );
|
||||
}
|
||||
else if (!ctx->Array.LockCount && count < thresh) {
|
||||
/* Small primitives: attempt to share a vb (at the expense of
|
||||
* using the immediate interface).
|
||||
*/
|
||||
fallback_drawarrays( ctx, mode, start, start + count );
|
||||
}
|
||||
else if (ctx->Array.LockCount &&
|
||||
count < (GLint) ctx->Const.MaxArrayLockSize) {
|
||||
|
||||
/* Small primitives which can fit in a single vertex buffer:
|
||||
/* Locked primitives which can fit in a single vertex buffer:
|
||||
*/
|
||||
FLUSH_CURRENT( ctx, 0 );
|
||||
|
||||
@@ -210,10 +219,6 @@ _tnl_DrawArrays(GLenum mode, GLint start, GLsizei count)
|
||||
|
||||
FLUSH_CURRENT( ctx, 0 );
|
||||
|
||||
/* fprintf(stderr, "start %d count %d min %d modulo %d skip %d\n", */
|
||||
/* start, count, minimum, modulo, skip); */
|
||||
|
||||
|
||||
bufsz -= bufsz % modulo;
|
||||
bufsz -= minimum;
|
||||
count += start;
|
||||
@@ -222,8 +227,6 @@ _tnl_DrawArrays(GLenum mode, GLint start, GLsizei count)
|
||||
|
||||
nr = MIN2( bufsz, count - j );
|
||||
|
||||
/* fprintf(stderr, "%d..%d\n", j - minimum, j+nr); */
|
||||
|
||||
_tnl_vb_bind_arrays( ctx, j - minimum, j + nr );
|
||||
|
||||
VB->FirstPrimitive = 0;
|
||||
@@ -246,10 +249,10 @@ _tnl_DrawRangeElements(GLenum mode,
|
||||
GLsizei count, GLenum type, const GLvoid *indices)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
GLuint *ui_indices;
|
||||
|
||||
/* fprintf(stderr, "%s\n", __FUNCTION__); */
|
||||
if (MESA_VERBOSE & VERBOSE_API)
|
||||
fprintf(stderr, "_tnl_DrawRangeElements %d %d %d\n", start, end, count);
|
||||
|
||||
/* Check arguments, etc.
|
||||
*/
|
||||
@@ -257,9 +260,6 @@ _tnl_DrawRangeElements(GLenum mode,
|
||||
type, indices ))
|
||||
return;
|
||||
|
||||
if (tnl->pipeline.build_state_changes)
|
||||
_tnl_validate_pipeline( ctx );
|
||||
|
||||
ui_indices = (GLuint *)_ac_import_elements( ctx, GL_UNSIGNED_INT,
|
||||
count, type, indices );
|
||||
|
||||
@@ -316,19 +316,16 @@ _tnl_DrawElements(GLenum mode, GLsizei count, GLenum type,
|
||||
const GLvoid *indices)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
GLuint *ui_indices;
|
||||
|
||||
/* fprintf(stderr, "%s\n", __FUNCTION__); */
|
||||
if (MESA_VERBOSE & VERBOSE_API)
|
||||
fprintf(stderr, "_tnl_DrawElements %d\n", count);
|
||||
|
||||
/* Check arguments, etc.
|
||||
*/
|
||||
if (!_mesa_validate_DrawElements( ctx, mode, count, type, indices ))
|
||||
return;
|
||||
|
||||
if (tnl->pipeline.build_state_changes)
|
||||
_tnl_validate_pipeline( ctx );
|
||||
|
||||
ui_indices = (GLuint *)_ac_import_elements( ctx, GL_UNSIGNED_INT,
|
||||
count, type, indices );
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: t_context.c,v 1.24 2002/02/13 00:53:20 keithw Exp $ */
|
||||
/* $Id: t_context.c,v 1.25 2002/04/09 16:56:52 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -110,12 +110,15 @@ _tnl_CreateContext( GLcontext *ctx )
|
||||
/* Hook our functions into exec and compile dispatch tables.
|
||||
*/
|
||||
_mesa_install_exec_vtxfmt( ctx, &tnl->vtxfmt );
|
||||
_mesa_install_save_vtxfmt( ctx, &tnl->vtxfmt );
|
||||
ctx->Save->CallList = _mesa_save_CallList;
|
||||
ctx->Save->CallLists = _mesa_save_CallLists;
|
||||
ctx->Save->EvalMesh1 = _mesa_save_EvalMesh1;
|
||||
ctx->Save->EvalMesh2 = _mesa_save_EvalMesh2;
|
||||
ctx->Save->Begin = _tnl_save_Begin;
|
||||
|
||||
tnl->save_vtxfmt = tnl->vtxfmt;
|
||||
tnl->save_vtxfmt.CallList = _mesa_save_CallList;
|
||||
tnl->save_vtxfmt.EvalMesh1 = _mesa_save_EvalMesh1;
|
||||
tnl->save_vtxfmt.EvalMesh2 = _mesa_save_EvalMesh2;
|
||||
tnl->save_vtxfmt.Begin = _tnl_save_Begin;
|
||||
|
||||
_mesa_install_save_vtxfmt( ctx, &tnl->save_vtxfmt );
|
||||
|
||||
|
||||
/* Set a few default values in the driver struct.
|
||||
*/
|
||||
@@ -200,12 +203,7 @@ _tnl_wakeup_save_exec( GLcontext *ctx )
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
|
||||
_tnl_wakeup_exec( ctx );
|
||||
_mesa_install_save_vtxfmt( ctx, &tnl->vtxfmt );
|
||||
ctx->Save->CallList = _mesa_save_CallList; /* fixme */
|
||||
ctx->Save->CallLists = _mesa_save_CallLists;
|
||||
ctx->Save->EvalMesh1 = _mesa_save_EvalMesh1; /* fixme */
|
||||
ctx->Save->EvalMesh2 = _mesa_save_EvalMesh2;
|
||||
ctx->Save->Begin = _tnl_save_Begin;
|
||||
_mesa_install_save_vtxfmt( ctx, &tnl->save_vtxfmt );
|
||||
}
|
||||
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: t_context.h,v 1.39 2002/04/04 18:25:40 kschultz Exp $ */
|
||||
/* $Id: t_context.h,v 1.40 2002/04/09 16:56:52 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -387,9 +387,13 @@ struct tnl_device_driver {
|
||||
*/
|
||||
|
||||
void (*NotifyMaterialChange)(GLcontext *ctx);
|
||||
/* Alert tnl-aware drivers of changes to material, especially in
|
||||
* exec_empty_cassette, which doesn't otherwise reach the driver.
|
||||
* --> Need to be able to disable exec_empty_cassette???
|
||||
/* Alert tnl-aware drivers of changes to material.
|
||||
*/
|
||||
|
||||
GLboolean (*NotifyBegin)(GLcontext *ctx, GLenum p);
|
||||
/* Allow drivers to hook in optimized begin/end engines.
|
||||
* Return value: GL_TRUE - driver handled the begin
|
||||
* GL_FALSE - driver didn't handle the begin
|
||||
*/
|
||||
|
||||
/***
|
||||
@@ -539,6 +543,7 @@ typedef struct {
|
||||
/* Functions to be plugged into dispatch when tnl is active.
|
||||
*/
|
||||
GLvertexformat vtxfmt;
|
||||
GLvertexformat save_vtxfmt;
|
||||
|
||||
} TNLcontext;
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: t_eval_api.c,v 1.8 2001/12/03 17:39:12 keithw Exp $ */
|
||||
/* $Id: t_eval_api.c,v 1.9 2002/04/09 16:56:52 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -100,7 +100,12 @@ _tnl_exec_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
|
||||
*/
|
||||
{
|
||||
GLboolean compiling = ctx->CompileFlag;
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
struct immediate *im = TNL_CURRENT_IM(ctx);
|
||||
GLboolean (*NotifyBegin)(GLcontext *ctx, GLenum p);
|
||||
|
||||
NotifyBegin = tnl->Driver.NotifyBegin;
|
||||
tnl->Driver.NotifyBegin = 0;
|
||||
|
||||
if (compiling) {
|
||||
struct immediate *tmp = _tnl_alloc_immediate( ctx );
|
||||
@@ -110,7 +115,7 @@ _tnl_exec_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
|
||||
ctx->CompileFlag = GL_FALSE;
|
||||
}
|
||||
|
||||
_tnl_hard_begin( ctx, prim );
|
||||
_tnl_Begin( prim );
|
||||
for (i=i1;i<=i2;i++,u+=du) {
|
||||
_tnl_eval_coord1f( ctx, u );
|
||||
}
|
||||
@@ -119,6 +124,7 @@ _tnl_exec_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
|
||||
/* Need this for replay *and* compile:
|
||||
*/
|
||||
FLUSH_VERTICES( ctx, 0 );
|
||||
tnl->Driver.NotifyBegin = NotifyBegin;
|
||||
|
||||
if (compiling) {
|
||||
TNL_CURRENT_IM(ctx)->ref_count--;
|
||||
@@ -160,6 +166,11 @@ _tnl_exec_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )
|
||||
{
|
||||
GLboolean compiling = ctx->CompileFlag;
|
||||
struct immediate *im = TNL_CURRENT_IM(ctx);
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
GLboolean (*NotifyBegin)(GLcontext *ctx, GLenum p);
|
||||
|
||||
NotifyBegin = tnl->Driver.NotifyBegin;
|
||||
tnl->Driver.NotifyBegin = 0;
|
||||
|
||||
if (compiling) {
|
||||
struct immediate *tmp = _tnl_alloc_immediate( ctx );
|
||||
@@ -171,7 +182,7 @@ _tnl_exec_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )
|
||||
|
||||
switch (mode) {
|
||||
case GL_POINT:
|
||||
_tnl_hard_begin( ctx, GL_POINTS );
|
||||
_tnl_Begin( GL_POINTS );
|
||||
for (v=v1,j=j1;j<=j2;j++,v+=dv) {
|
||||
for (u=u1,i=i1;i<=i2;i++,u+=du) {
|
||||
_tnl_eval_coord2f( ctx, u, v );
|
||||
@@ -181,14 +192,14 @@ _tnl_exec_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )
|
||||
break;
|
||||
case GL_LINE:
|
||||
for (v=v1,j=j1;j<=j2;j++,v+=dv) {
|
||||
_tnl_hard_begin( ctx, GL_LINE_STRIP );
|
||||
_tnl_Begin( GL_LINE_STRIP );
|
||||
for (u=u1,i=i1;i<=i2;i++,u+=du) {
|
||||
_tnl_eval_coord2f( ctx, u, v );
|
||||
}
|
||||
_tnl_end(ctx);
|
||||
}
|
||||
for (u=u1,i=i1;i<=i2;i++,u+=du) {
|
||||
_tnl_hard_begin( ctx, GL_LINE_STRIP );
|
||||
_tnl_Begin( GL_LINE_STRIP );
|
||||
for (v=v1,j=j1;j<=j2;j++,v+=dv) {
|
||||
_tnl_eval_coord2f( ctx, u, v );
|
||||
}
|
||||
@@ -197,7 +208,7 @@ _tnl_exec_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )
|
||||
break;
|
||||
case GL_FILL:
|
||||
for (v=v1,j=j1;j<j2;j++,v+=dv) {
|
||||
_tnl_hard_begin( ctx, GL_TRIANGLE_STRIP );
|
||||
_tnl_Begin( GL_TRIANGLE_STRIP );
|
||||
for (u=u1,i=i1;i<=i2;i++,u+=du) {
|
||||
_tnl_eval_coord2f( ctx, u, v );
|
||||
_tnl_eval_coord2f( ctx, u, v+dv );
|
||||
@@ -213,6 +224,7 @@ _tnl_exec_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )
|
||||
/* Need this for replay *and* compile:
|
||||
*/
|
||||
FLUSH_VERTICES( ctx, 0 );
|
||||
tnl->Driver.NotifyBegin = NotifyBegin;
|
||||
|
||||
if (compiling) {
|
||||
TNL_CURRENT_IM(ctx)->ref_count--;
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: t_imm_api.c,v 1.25 2002/02/13 00:53:20 keithw Exp $ */
|
||||
/* $Id: t_imm_api.c,v 1.26 2002/04/09 16:56:52 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -53,6 +53,10 @@ void _tnl_flush_immediate( struct immediate *IM )
|
||||
{
|
||||
GLcontext *ctx = IM->backref;
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_IMMEDIATE)
|
||||
fprintf(stderr, "_tnl_flush_immediate IM: %d compiling: %d\n",
|
||||
IM->id, ctx->CompileFlag);
|
||||
|
||||
if (IM->FlushElt == FLUSH_ELT_EAGER) {
|
||||
_tnl_translate_array_elts( ctx, IM, IM->LastPrimitive, IM->Count );
|
||||
}
|
||||
@@ -69,10 +73,18 @@ void _tnl_flush_immediate( struct immediate *IM )
|
||||
}
|
||||
|
||||
|
||||
/* Hook for ctx->Driver.FlushVertices:
|
||||
*/
|
||||
void _tnl_flush_vertices( GLcontext *ctx, GLuint flags )
|
||||
{
|
||||
struct immediate *IM = TNL_CURRENT_IM(ctx);
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_IMMEDIATE)
|
||||
fprintf( stderr,
|
||||
"_tnl_flush_vertices flags %x IM(%d) %d..%d Flag[%d]: %x\n",
|
||||
flags, IM->id, IM->Start, IM->Count, IM->Start,
|
||||
IM->Flag[IM->Start]);
|
||||
|
||||
if (IM->Flag[IM->Start])
|
||||
if ((flags & FLUSH_UPDATE_CURRENT) || IM->Count > IM->Start)
|
||||
_tnl_flush_immediate( IM );
|
||||
@@ -81,29 +93,23 @@ void _tnl_flush_vertices( GLcontext *ctx, GLuint flags )
|
||||
|
||||
|
||||
|
||||
/* Note the ctx argument. This function called only by _tnl_Begin,
|
||||
* _tnl_save_Begin and _tnl_hard_begin() in this file.
|
||||
*/
|
||||
static void
|
||||
_tnl_begin( GLcontext *ctx, GLenum p )
|
||||
void
|
||||
_tnl_save_Begin( GLenum mode )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
struct immediate *IM = TNL_CURRENT_IM(ctx);
|
||||
GLuint inflags, state;
|
||||
|
||||
if (MESA_VERBOSE&VERBOSE_API)
|
||||
fprintf(stderr, "glBegin(IM %d) %s\n", IM->id,
|
||||
_mesa_lookup_enum_by_nr(p));
|
||||
/* fprintf(stderr, "%s: before: %x\n", __FUNCTION__, IM->BeginState); */
|
||||
|
||||
if (mode > GL_POLYGON) {
|
||||
_mesa_compile_error( ctx, GL_INVALID_ENUM, "_tnl_Begin" );
|
||||
return;
|
||||
}
|
||||
|
||||
if (ctx->NewState)
|
||||
_mesa_update_state(ctx);
|
||||
|
||||
/* if only a very few slots left, might as well flush now
|
||||
*/
|
||||
if (IM->Count > IMM_MAXDATA-8) {
|
||||
_tnl_flush_immediate( IM );
|
||||
IM = TNL_CURRENT_IM(ctx);
|
||||
}
|
||||
|
||||
/* Check for and flush buffered vertices from internal operations.
|
||||
*/
|
||||
if (IM->SavedBeginState) {
|
||||
@@ -124,7 +130,7 @@ _tnl_begin( GLcontext *ctx, GLenum p )
|
||||
|
||||
state |= (VERT_BEGIN_0|VERT_BEGIN_1);
|
||||
IM->Flag[count] |= VERT_BIT_BEGIN;
|
||||
IM->Primitive[count] = p | PRIM_BEGIN;
|
||||
IM->Primitive[count] = mode | PRIM_BEGIN;
|
||||
IM->PrimitiveLength[IM->LastPrimitive] = count - IM->LastPrimitive;
|
||||
IM->LastPrimitive = count;
|
||||
|
||||
@@ -139,20 +145,15 @@ _tnl_begin( GLcontext *ctx, GLenum p )
|
||||
|
||||
ctx->Driver.NeedFlush |= FLUSH_STORED_VERTICES;
|
||||
IM->BeginState = state;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
_tnl_save_Begin( GLenum mode )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
if (mode > GL_POLYGON) {
|
||||
_mesa_compile_error( ctx, GL_INVALID_ENUM, "glBegin" );
|
||||
return;
|
||||
if (ctx->ExecuteFlag) {
|
||||
if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {
|
||||
_mesa_error( ctx, GL_INVALID_OPERATION, "_tnl_Begin" );
|
||||
}
|
||||
else
|
||||
ctx->Driver.CurrentExecPrimitive = mode;
|
||||
}
|
||||
|
||||
_tnl_begin( ctx, mode );
|
||||
|
||||
/* Update save_primitive now.
|
||||
*/
|
||||
@@ -167,18 +168,52 @@ void
|
||||
_tnl_Begin( GLenum mode )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
ASSERT (!ctx->CompileFlag);
|
||||
|
||||
if (mode > GL_POLYGON) {
|
||||
_mesa_compile_error( ctx, GL_INVALID_ENUM, "glBegin" );
|
||||
_mesa_error( ctx, GL_INVALID_ENUM, "_tnl_Begin" );
|
||||
return;
|
||||
}
|
||||
|
||||
_tnl_begin(ctx, mode);
|
||||
if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {
|
||||
_mesa_error( ctx, GL_INVALID_OPERATION, "_tnl_Begin" );
|
||||
return;
|
||||
}
|
||||
|
||||
/* Update exec_primitive now.
|
||||
*/
|
||||
ASSERT (!ctx->CompileFlag);
|
||||
if (ctx->Driver.CurrentExecPrimitive == PRIM_OUTSIDE_BEGIN_END) {
|
||||
if (ctx->NewState)
|
||||
_mesa_update_state(ctx);
|
||||
|
||||
{
|
||||
struct immediate *IM = TNL_CURRENT_IM(ctx);
|
||||
GLuint count = IM->Count;
|
||||
GLuint last = IM->LastPrimitive;
|
||||
|
||||
if (IM->Start == IM->Count &&
|
||||
tnl->Driver.NotifyBegin &&
|
||||
tnl->Driver.NotifyBegin( ctx, mode ))
|
||||
return;
|
||||
|
||||
assert( IM->SavedBeginState == 0 );
|
||||
assert( IM->BeginState == 0 );
|
||||
|
||||
/* Not quite right. Need to use the fallback '_aa_ArrayElement'
|
||||
* when not known to be inside begin/end and arrays are
|
||||
* unlocked.
|
||||
*/
|
||||
if (IM->FlushElt == FLUSH_ELT_EAGER) {
|
||||
_tnl_translate_array_elts( ctx, IM, last, count );
|
||||
}
|
||||
|
||||
IM->Flag[count] |= VERT_BIT_BEGIN;
|
||||
IM->Primitive[count] = mode | PRIM_BEGIN;
|
||||
IM->PrimitiveLength[last] = count - last;
|
||||
IM->LastPrimitive = count;
|
||||
IM->BeginState = (VERT_BEGIN_0|VERT_BEGIN_1);
|
||||
|
||||
/* fprintf(stderr, "%s: %x\n", __FUNCTION__, IM->BeginState); */
|
||||
|
||||
ctx->Driver.NeedFlush |= FLUSH_STORED_VERTICES;
|
||||
ctx->Driver.CurrentExecPrimitive = mode;
|
||||
}
|
||||
}
|
||||
@@ -191,12 +226,13 @@ _tnl_Begin( GLenum mode )
|
||||
GLboolean
|
||||
_tnl_hard_begin( GLcontext *ctx, GLenum p )
|
||||
{
|
||||
/* fprintf(stderr, "%s\n", __FUNCTION__); */
|
||||
|
||||
if (!ctx->CompileFlag) {
|
||||
/* If not compiling, treat as a normal begin().
|
||||
*/
|
||||
_tnl_begin( ctx, p );
|
||||
ASSERT(ctx->Driver.CurrentExecPrimitive == PRIM_OUTSIDE_BEGIN_END);
|
||||
ctx->Driver.CurrentExecPrimitive = p;
|
||||
/* fprintf(stderr, "%s: treating as glBegin\n", __FUNCTION__); */
|
||||
glBegin( p );
|
||||
return GL_TRUE;
|
||||
}
|
||||
else {
|
||||
@@ -262,7 +298,7 @@ _tnl_hard_begin( GLcontext *ctx, GLenum p )
|
||||
return GL_TRUE;
|
||||
|
||||
default:
|
||||
ASSERT (0);
|
||||
assert (0);
|
||||
return GL_TRUE;
|
||||
}
|
||||
}
|
||||
@@ -285,6 +321,8 @@ _tnl_end( GLcontext *ctx )
|
||||
GLuint state = IM->BeginState;
|
||||
GLuint inflags = (~state) & (VERT_BEGIN_0|VERT_BEGIN_1);
|
||||
|
||||
assert( ctx->Driver.NeedFlush & FLUSH_STORED_VERTICES );
|
||||
|
||||
state |= inflags << 2; /* errors */
|
||||
|
||||
if (inflags != (VERT_BEGIN_0|VERT_BEGIN_1))
|
||||
@@ -308,8 +346,11 @@ _tnl_end( GLcontext *ctx )
|
||||
|
||||
IM->BeginState = state;
|
||||
|
||||
if (!ctx->CompileFlag) {
|
||||
ctx->Driver.CurrentExecPrimitive = PRIM_OUTSIDE_BEGIN_END;
|
||||
if (ctx->ExecuteFlag) {
|
||||
if (ctx->Driver.CurrentExecPrimitive == PRIM_OUTSIDE_BEGIN_END)
|
||||
_mesa_error( ctx, GL_INVALID_OPERATION, "_tnl_End" );
|
||||
else
|
||||
ctx->Driver.CurrentExecPrimitive = PRIM_OUTSIDE_BEGIN_END;
|
||||
}
|
||||
|
||||
/* You can set this flag to get the old 'flush_vb on glEnd()'
|
||||
@@ -1076,19 +1117,6 @@ _tnl_eval_coord2f( GLcontext *CC, GLfloat u, GLfloat v )
|
||||
EVALCOORD2( i, u, v );
|
||||
}
|
||||
|
||||
void
|
||||
_tnl_array_element( GLcontext *CC, GLint i )
|
||||
{
|
||||
struct immediate *im = TNL_CURRENT_IM(CC);
|
||||
ARRAY_ELT( im, i );
|
||||
}
|
||||
|
||||
void
|
||||
_tnl_vertex2f( GLcontext *ctx, GLfloat x, GLfloat y )
|
||||
{
|
||||
struct immediate *im = TNL_CURRENT_IM(ctx);
|
||||
VERTEX2( im, x, y );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1141,14 +1169,12 @@ _tnl_Rectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 )
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
/* fprintf(stderr, "%s\n", __FUNCTION__); */
|
||||
|
||||
if (_tnl_hard_begin( ctx, GL_QUADS )) {
|
||||
_tnl_vertex2f( ctx, x1, y1 );
|
||||
_tnl_vertex2f( ctx, x2, y1 );
|
||||
_tnl_vertex2f( ctx, x2, y2 );
|
||||
_tnl_vertex2f( ctx, x1, y2 );
|
||||
_tnl_end( ctx );
|
||||
glVertex2f( x1, y1 );
|
||||
glVertex2f( x2, y1 );
|
||||
glVertex2f( x2, y2 );
|
||||
glVertex2f( x1, y2 );
|
||||
glEnd();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1165,6 +1191,9 @@ _tnl_Materialfv( GLenum face, GLenum pname, const GLfloat *params )
|
||||
if (bitmask == 0)
|
||||
return;
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_API)
|
||||
fprintf(stderr, "_tnl_Materialfv\n");
|
||||
|
||||
if (tnl->IsolateMaterials &&
|
||||
!(IM->BeginState & VERT_BEGIN_1)) /* heuristic */
|
||||
{
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: t_imm_api.h,v 1.4 2001/12/14 02:51:44 brianp Exp $ */
|
||||
/* $Id: t_imm_api.h,v 1.5 2002/04/09 16:56:52 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
|
||||
extern void _tnl_save_Begin( GLenum mode );
|
||||
extern void _tnl_Begin( GLenum mode );
|
||||
|
||||
extern void _tnl_Begin( GLenum mode );
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: t_imm_dlist.c,v 1.38 2002/02/13 00:53:20 keithw Exp $ */
|
||||
/* $Id: t_imm_dlist.c,v 1.39 2002/04/09 16:56:52 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -128,6 +128,9 @@ _tnl_compile_cassette( GLcontext *ctx, struct immediate *IM )
|
||||
TNLvertexcassette *node;
|
||||
GLuint new_beginstate;
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_DISPLAY_LIST)
|
||||
fprintf(stderr, "_tnl_compiled_cassette IM: %d\n", IM->id);
|
||||
|
||||
if (IM->FlushElt) {
|
||||
ASSERT (IM->FlushElt == FLUSH_ELT_LAZY);
|
||||
_tnl_translate_array_elts( ctx, IM, IM->Start, IM->Count );
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: t_imm_eval.c,v 1.21 2002/01/22 14:35:16 brianp Exp $ */
|
||||
/* $Id: t_imm_eval.c,v 1.22 2002/04/09 16:56:52 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -242,7 +242,6 @@ static void eval2_4f( GLvector4f *dest,
|
||||
if (flags[i] & (VERT_BIT_EVAL_C2|VERT_BIT_EVAL_P2)) {
|
||||
GLfloat u = (coord[i][0] - u1) * du;
|
||||
GLfloat v = (coord[i][1] - v1) * dv;
|
||||
/* fprintf(stderr, "coord %d: %f %f\n", i, coord[i][0], coord[i][1]); */
|
||||
|
||||
_math_horner_bezier_surf(map->Points, to[i], u, v, dimension,
|
||||
map->Uorder, map->Vorder);
|
||||
@@ -344,8 +343,6 @@ static void copy_4f_stride( GLfloat to[][4], GLfloat *from,
|
||||
MEMCPY( to, from, count * sizeof(to[0]));
|
||||
else {
|
||||
GLuint i;
|
||||
/* fprintf(stderr, "%s stride %d count %d\n", __FUNCTION__, */
|
||||
/* stride, count); */
|
||||
for (i = 0 ; i < count ; i++, STRIDE_F(from, stride))
|
||||
COPY_4FV( to[i], from );
|
||||
}
|
||||
@@ -354,11 +351,7 @@ static void copy_4f_stride( GLfloat to[][4], GLfloat *from,
|
||||
static void copy_3f( GLfloat to[][4], GLfloat from[][4], GLuint count )
|
||||
{
|
||||
GLuint i;
|
||||
/* MEMCPY( to, from, (count) * sizeof(to[0])); */
|
||||
for (i = 0 ; i < count ; i++) {
|
||||
/* fprintf(stderr, "copy norm %d from %p: %f %f %f\n", i, */
|
||||
/* from[i], */
|
||||
/* from[i][0], from[i][1], from[i][2]); */
|
||||
COPY_3FV(to[i], from[i]);
|
||||
}
|
||||
}
|
||||
@@ -459,9 +452,6 @@ void _tnl_eval_immediate( GLcontext *ctx, struct immediate *IM )
|
||||
else
|
||||
copycount = IM->Count - IM->CopyStart; /* copy all vertices */
|
||||
|
||||
/* fprintf(stderr, "%s copystart %d start %d count %d copycount %d\n", */
|
||||
/* __FUNCTION__, IM->CopyStart, IM->Start, IM->Count, copycount); */
|
||||
|
||||
if (!store)
|
||||
store = tnl->eval.im = _tnl_alloc_immediate( ctx );
|
||||
|
||||
@@ -711,8 +701,6 @@ void _tnl_eval_immediate( GLcontext *ctx, struct immediate *IM )
|
||||
struct vertex_buffer *VB = &tnl->vb;
|
||||
GLuint i,j,count = VB->Count;
|
||||
|
||||
/* fprintf(stderr, "PURGING\n"); */
|
||||
|
||||
for (i = 0, j = 0 ; i < count ; i++) {
|
||||
if (flags[i] & vertex) {
|
||||
store->Elt[j++] = i;
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: t_imm_exec.c,v 1.37 2002/02/13 23:53:19 keithw Exp $ */
|
||||
/* $Id: t_imm_exec.c,v 1.38 2002/04/09 16:56:52 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -71,6 +71,10 @@ static void reset_input( GLcontext *ctx,
|
||||
if (start < IM->Count+2)
|
||||
MEMSET(IM->Flag + start, 0, sizeof(GLuint) * (IM->Count+2-start));
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_IMMEDIATE)
|
||||
fprintf(stderr, "reset_input: IM(%d) new %x\n",
|
||||
IM->id, beginstate);
|
||||
|
||||
IM->Start = start;
|
||||
IM->Count = start;
|
||||
IM->LastMaterial = start;
|
||||
@@ -432,7 +436,7 @@ static void exec_elt_cassette( GLcontext *ctx, struct immediate *IM )
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
struct vertex_buffer *VB = &tnl->vb;
|
||||
|
||||
/* fprintf(stderr, "%s\n", __FUNCTION__); */
|
||||
/* fprintf(stderr, "%s\n", __FUNCTION__); */
|
||||
|
||||
_tnl_vb_bind_arrays( ctx, ctx->Array.LockFirst, ctx->Array.LockCount );
|
||||
|
||||
@@ -514,6 +518,9 @@ void _tnl_execute_cassette( GLcontext *ctx, struct immediate *IM )
|
||||
|
||||
if (ctx->Driver.CurrentExecPrimitive == GL_POLYGON+1)
|
||||
ctx->Driver.NeedFlush &= ~FLUSH_STORED_VERTICES;
|
||||
|
||||
/* fprintf(stderr, "%s: NeedFlush: %x\n", __FUNCTION__, */
|
||||
/* ctx->Driver.NeedFlush); */
|
||||
}
|
||||
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: t_imm_fixup.c,v 1.34 2002/02/13 00:53:20 keithw Exp $ */
|
||||
/* $Id: t_imm_fixup.c,v 1.35 2002/04/09 16:56:52 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -386,6 +386,7 @@ void _tnl_fixup_input( GLcontext *ctx, struct immediate *IM )
|
||||
vulnerable );
|
||||
|
||||
|
||||
++i;
|
||||
} while (vulnerable);
|
||||
}
|
||||
}
|
||||
@@ -680,6 +681,7 @@ void _tnl_fixup_compiled_cassette( GLcontext *ctx, struct immediate *IM )
|
||||
vulnerable );
|
||||
|
||||
|
||||
++i;
|
||||
} while (vulnerable);
|
||||
}
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: t_vb_render.c,v 1.28 2002/02/13 00:53:20 keithw Exp $ */
|
||||
/* $Id: t_vb_render.c,v 1.29 2002/04/09 16:56:52 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -42,6 +42,7 @@
|
||||
|
||||
#include "glheader.h"
|
||||
#include "context.h"
|
||||
#include "enums.h"
|
||||
#include "macros.h"
|
||||
#include "mem.h"
|
||||
#include "mtypes.h"
|
||||
@@ -324,6 +325,12 @@ static GLboolean run_render( GLcontext *ctx,
|
||||
length= VB->PrimitiveLength[i];
|
||||
ASSERT(length || (flags & PRIM_LAST));
|
||||
ASSERT((flags & PRIM_MODE_MASK) <= GL_POLYGON+1);
|
||||
|
||||
if (MESA_VERBOSE & VERBOSE_PRIMS)
|
||||
fprintf(stderr, "MESA prim %s %d..%d\n",
|
||||
_mesa_lookup_enum_by_nr(flags & PRIM_MODE_MASK),
|
||||
i, i+length);
|
||||
|
||||
if (length)
|
||||
tab[flags & PRIM_MODE_MASK]( ctx, i, i + length, flags );
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
/* $Id: t_vb_vertex.c,v 1.13 2002/03/29 17:27:59 brianp Exp $ */
|
||||
/* $Id: t_vb_vertex.c,v 1.14 2002/04/09 16:56:52 keithw Exp $ */
|
||||
|
||||
/*
|
||||
* Mesa 3-D graphics library
|
||||
@@ -140,7 +140,8 @@ static GLboolean run_vertex_stage( GLcontext *ctx,
|
||||
if (stage->changed_inputs) {
|
||||
|
||||
if (ctx->_NeedEyeCoords) {
|
||||
/* Separate modelview and project transformations:
|
||||
/* Separate modelview transformation:
|
||||
* Use combined ModelProject to avoid some depth artifacts
|
||||
*/
|
||||
if (ctx->ModelviewMatrixStack.Top->type == MATRIX_IDENTITY)
|
||||
VB->EyePtr = VB->ObjPtr;
|
||||
@@ -153,8 +154,8 @@ static GLboolean run_vertex_stage( GLcontext *ctx,
|
||||
VB->ClipPtr = VB->EyePtr;
|
||||
else
|
||||
VB->ClipPtr = TransformRaw( &store->clip,
|
||||
ctx->ProjectionMatrixStack.Top,
|
||||
VB->EyePtr );
|
||||
&ctx->_ModelProjectMatrix,
|
||||
VB->ObjPtr );
|
||||
}
|
||||
else {
|
||||
/* Combined modelviewproject transform:
|
||||
|
Reference in New Issue
Block a user