@@ -37,7 +37,7 @@ | |||
struct clipper { | |||
struct prim_stage stage; /**< base class */ | |||
struct draw_stage stage; /**< base class */ | |||
GLuint active_user_planes; | |||
GLfloat (*plane)[4]; | |||
@@ -46,7 +46,7 @@ struct clipper { | |||
/* This is a bit confusing: | |||
*/ | |||
static INLINE struct clipper *clipper_stage( struct prim_stage *stage ) | |||
static INLINE struct clipper *clipper_stage( struct draw_stage *stage ) | |||
{ | |||
return (struct clipper *)stage; | |||
} | |||
@@ -139,7 +139,7 @@ static INLINE GLfloat dot4( const GLfloat *a, | |||
#if 0 | |||
static INLINE void do_tri( struct prim_stage *next, | |||
static INLINE void do_tri( struct draw_stage *next, | |||
struct prim_header *header ) | |||
{ | |||
GLuint i; | |||
@@ -155,7 +155,7 @@ static INLINE void do_tri( struct prim_stage *next, | |||
#endif | |||
static void emit_poly( struct prim_stage *stage, | |||
static void emit_poly( struct draw_stage *stage, | |||
struct vertex_header **inlist, | |||
GLuint n ) | |||
{ | |||
@@ -184,7 +184,7 @@ static void emit_poly( struct prim_stage *stage, | |||
#if 0 | |||
static void emit_poly( struct prim_stage *stage ) | |||
static void emit_poly( struct draw_stage *stage ) | |||
{ | |||
GLuint i; | |||
@@ -202,7 +202,7 @@ static void emit_poly( struct prim_stage *stage ) | |||
/* Clip a triangle against the viewport and user clip planes. | |||
*/ | |||
static void | |||
do_clip_tri( struct prim_stage *stage, | |||
do_clip_tri( struct draw_stage *stage, | |||
struct prim_header *header, | |||
GLuint clipmask ) | |||
{ | |||
@@ -296,7 +296,7 @@ do_clip_tri( struct prim_stage *stage, | |||
/* Clip a line against the viewport and user clip planes. | |||
*/ | |||
static void | |||
do_clip_line( struct prim_stage *stage, | |||
do_clip_line( struct draw_stage *stage, | |||
struct prim_header *header, | |||
GLuint clipmask ) | |||
{ | |||
@@ -360,7 +360,7 @@ do_clip_line( struct prim_stage *stage, | |||
} | |||
static void clip_begin( struct prim_stage *stage ) | |||
static void clip_begin( struct draw_stage *stage ) | |||
{ | |||
struct clipper *clipper = clipper_stage(stage); | |||
GLuint nr = stage->draw->nr_planes; | |||
@@ -374,7 +374,7 @@ static void clip_begin( struct prim_stage *stage ) | |||
static void | |||
clip_point( struct prim_stage *stage, | |||
clip_point( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
if (header->v[0]->clipmask == 0) | |||
@@ -383,7 +383,7 @@ clip_point( struct prim_stage *stage, | |||
static void | |||
clip_line( struct prim_stage *stage, | |||
clip_line( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
GLuint clipmask = (header->v[0]->clipmask | | |||
@@ -401,7 +401,7 @@ clip_line( struct prim_stage *stage, | |||
static void | |||
clip_tri( struct prim_stage *stage, | |||
clip_tri( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
GLuint clipmask = (header->v[0]->clipmask | | |||
@@ -420,7 +420,7 @@ clip_tri( struct prim_stage *stage, | |||
} | |||
static void clip_end( struct prim_stage *stage ) | |||
static void clip_end( struct draw_stage *stage ) | |||
{ | |||
stage->next->end( stage->next ); | |||
} | |||
@@ -430,11 +430,11 @@ static void clip_end( struct prim_stage *stage ) | |||
* Allocate a new clipper stage. | |||
* \return pointer to new stage object | |||
*/ | |||
struct prim_stage *prim_clip( struct draw_context *draw ) | |||
struct draw_stage *draw_clip_stage( struct draw_context *draw ) | |||
{ | |||
struct clipper *clipper = CALLOC_STRUCT(clipper); | |||
prim_alloc_tmps( &clipper->stage, MAX_CLIPPED_VERTICES ); | |||
draw_alloc_tmps( &clipper->stage, MAX_CLIPPED_VERTICES ); | |||
clipper->stage.draw = draw; | |||
clipper->stage.begin = clip_begin; |
@@ -42,12 +42,12 @@ struct draw_context *draw_create( void ) | |||
struct draw_context *draw = CALLOC_STRUCT( draw_context ); | |||
/* create pipeline stages */ | |||
draw->pipeline.unfilled = prim_unfilled( draw ); | |||
draw->pipeline.twoside = prim_twoside( draw ); | |||
draw->pipeline.offset = prim_offset( draw ); | |||
draw->pipeline.clip = prim_clip( draw ); | |||
draw->pipeline.flatshade = prim_flatshade( draw ); | |||
draw->pipeline.cull = prim_cull( draw ); | |||
draw->pipeline.unfilled = draw_unfilled_stage( draw ); | |||
draw->pipeline.twoside = draw_twoside_stage( draw ); | |||
draw->pipeline.offset = draw_offset_stage( draw ); | |||
draw->pipeline.clip = draw_clip_stage( draw ); | |||
draw->pipeline.flatshade = draw_flatshade_stage( draw ); | |||
draw->pipeline.cull = draw_cull_stage( draw ); | |||
ASSIGN_4V( draw->plane[0], -1, 0, 0, 1 ); | |||
ASSIGN_4V( draw->plane[1], 1, 0, 0, 1 ); | |||
@@ -79,7 +79,7 @@ void draw_destroy( struct draw_context *draw ) | |||
*/ | |||
static void validate_pipeline( struct draw_context *draw ) | |||
{ | |||
struct prim_stage *next = draw->pipeline.setup; | |||
struct draw_stage *next = draw->pipeline.setup; | |||
/* | |||
* NOTE: we build up the pipeline in end-to-start order. | |||
@@ -150,7 +150,7 @@ void draw_set_setup_state( struct draw_context *draw, | |||
* This is provided by the device driver. | |||
*/ | |||
void draw_set_setup_stage( struct draw_context *draw, | |||
struct prim_stage *stage ) | |||
struct draw_stage *stage ) | |||
{ | |||
draw->pipeline.setup = stage; | |||
} |
@@ -44,7 +44,7 @@ | |||
struct vertex_buffer; | |||
struct draw_context; | |||
struct prim_stage; | |||
struct draw_stage; | |||
struct draw_context *draw_create( void ); | |||
@@ -61,7 +61,7 @@ void draw_set_setup_state( struct draw_context *draw, | |||
const struct pipe_setup_state *setup ); | |||
void draw_set_setup_stage( struct draw_context *draw, | |||
struct prim_stage *stage ); | |||
struct draw_stage *stage ); | |||
void draw_set_vertex_attributes( struct draw_context *draw, | |||
const GLuint *attrs, |
@@ -39,18 +39,18 @@ | |||
struct cull_stage { | |||
struct prim_stage stage; | |||
struct draw_stage stage; | |||
GLuint mode; /**< one of PIPE_WINDING_x */ | |||
}; | |||
static INLINE struct cull_stage *cull_stage( struct prim_stage *stage ) | |||
static INLINE struct cull_stage *cull_stage( struct draw_stage *stage ) | |||
{ | |||
return (struct cull_stage *)stage; | |||
} | |||
static void cull_begin( struct prim_stage *stage ) | |||
static void cull_begin( struct draw_stage *stage ) | |||
{ | |||
struct cull_stage *cull = cull_stage(stage); | |||
@@ -60,7 +60,7 @@ static void cull_begin( struct prim_stage *stage ) | |||
} | |||
static void cull_tri( struct prim_stage *stage, | |||
static void cull_tri( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
/* Window coords: */ | |||
@@ -89,21 +89,21 @@ static void cull_tri( struct prim_stage *stage, | |||
} | |||
static void cull_line( struct prim_stage *stage, | |||
static void cull_line( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
stage->next->line( stage->next, header ); | |||
} | |||
static void cull_point( struct prim_stage *stage, | |||
static void cull_point( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
stage->next->point( stage->next, header ); | |||
} | |||
static void cull_end( struct prim_stage *stage ) | |||
static void cull_end( struct draw_stage *stage ) | |||
{ | |||
stage->next->end( stage->next ); | |||
} | |||
@@ -112,11 +112,11 @@ static void cull_end( struct prim_stage *stage ) | |||
/** | |||
* Create a new polygon culling stage. | |||
*/ | |||
struct prim_stage *prim_cull( struct draw_context *draw ) | |||
struct draw_stage *draw_cull_stage( struct draw_context *draw ) | |||
{ | |||
struct cull_stage *cull = CALLOC_STRUCT(cull_stage); | |||
prim_alloc_tmps( &cull->stage, 0 ); | |||
draw_alloc_tmps( &cull->stage, 0 ); | |||
cull->stage.draw = draw; | |||
cull->stage.next = NULL; |
@@ -33,20 +33,20 @@ | |||
struct flatshade_stage { | |||
struct prim_stage stage; | |||
struct draw_stage stage; | |||
const GLuint *lookup; | |||
}; | |||
static INLINE struct flatshade_stage *flatshade_stage( struct prim_stage *stage ) | |||
static INLINE struct flatshade_stage *flatshade_stage( struct draw_stage *stage ) | |||
{ | |||
return (struct flatshade_stage *)stage; | |||
} | |||
static void flatshade_begin( struct prim_stage *stage ) | |||
static void flatshade_begin( struct draw_stage *stage ) | |||
{ | |||
stage->next->begin( stage->next ); | |||
} | |||
@@ -65,7 +65,7 @@ static INLINE void copy_attr( GLuint attr, | |||
} | |||
static INLINE void copy_colors( struct prim_stage *stage, | |||
static INLINE void copy_colors( struct draw_stage *stage, | |||
struct vertex_header *dst, | |||
const struct vertex_header *src ) | |||
{ | |||
@@ -83,7 +83,7 @@ static INLINE void copy_colors( struct prim_stage *stage, | |||
* Flatshade tri. Required for clipping and when unfilled tris are | |||
* active, otherwise handled by hardware. | |||
*/ | |||
static void flatshade_tri( struct prim_stage *stage, | |||
static void flatshade_tri( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
struct prim_header tmp; | |||
@@ -103,7 +103,7 @@ static void flatshade_tri( struct prim_stage *stage, | |||
/** | |||
* Flatshade line. Required for clipping. | |||
*/ | |||
static void flatshade_line( struct prim_stage *stage, | |||
static void flatshade_line( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
struct prim_header tmp; | |||
@@ -117,24 +117,27 @@ static void flatshade_line( struct prim_stage *stage, | |||
} | |||
static void flatshade_point( struct prim_stage *stage, | |||
struct prim_header *header ) | |||
static void flatshade_point( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
stage->next->point( stage->next, header ); | |||
} | |||
static void flatshade_end( struct prim_stage *stage ) | |||
static void flatshade_end( struct draw_stage *stage ) | |||
{ | |||
stage->next->end( stage->next ); | |||
} | |||
struct prim_stage *prim_flatshade( struct draw_context *draw ) | |||
/** | |||
* Create flatshading drawing stage. | |||
*/ | |||
struct draw_stage *draw_flatshade_stage( struct draw_context *draw ) | |||
{ | |||
struct flatshade_stage *flatshade = CALLOC_STRUCT(flatshade_stage); | |||
prim_alloc_tmps( &flatshade->stage, 2 ); | |||
draw_alloc_tmps( &flatshade->stage, 2 ); | |||
flatshade->stage.draw = draw; | |||
flatshade->stage.next = NULL; |
@@ -39,7 +39,7 @@ | |||
struct offset_stage { | |||
struct prim_stage stage; | |||
struct draw_stage stage; | |||
GLfloat scale; | |||
GLfloat units; | |||
@@ -47,13 +47,13 @@ struct offset_stage { | |||
static INLINE struct offset_stage *offset_stage( struct prim_stage *stage ) | |||
static INLINE struct offset_stage *offset_stage( struct draw_stage *stage ) | |||
{ | |||
return (struct offset_stage *) stage; | |||
} | |||
static void offset_begin( struct prim_stage *stage ) | |||
static void offset_begin( struct draw_stage *stage ) | |||
{ | |||
struct offset_stage *offset = offset_stage(stage); | |||
GLfloat mrd = 1.0 / 65535.0; /* XXX this depends on depthbuffer bits! */ | |||
@@ -69,7 +69,7 @@ static void offset_begin( struct prim_stage *stage ) | |||
* Offset tri Z. Some hardware can handle this, but not usually when | |||
* doing unfilled rendering. | |||
*/ | |||
static void do_offset_tri( struct prim_stage *stage, | |||
static void do_offset_tri( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
struct offset_stage *offset = offset_stage(stage); | |||
@@ -110,7 +110,7 @@ static void do_offset_tri( struct prim_stage *stage, | |||
} | |||
static void offset_tri( struct prim_stage *stage, | |||
static void offset_tri( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
struct prim_header tmp; | |||
@@ -125,30 +125,34 @@ static void offset_tri( struct prim_stage *stage, | |||
static void offset_line( struct prim_stage *stage, | |||
static void offset_line( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
stage->next->line( stage->next, header ); | |||
} | |||
static void offset_point( struct prim_stage *stage, | |||
static void offset_point( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
stage->next->point( stage->next, header ); | |||
} | |||
static void offset_end( struct prim_stage *stage ) | |||
static void offset_end( struct draw_stage *stage ) | |||
{ | |||
stage->next->end( stage->next ); | |||
} | |||
struct prim_stage *prim_offset( struct draw_context *draw ) | |||
/** | |||
* Create polygon offset drawing stage. | |||
*/ | |||
struct draw_stage *draw_offset_stage( struct draw_context *draw ) | |||
{ | |||
struct offset_stage *offset = CALLOC_STRUCT(offset_stage); | |||
prim_alloc_tmps( &offset->stage, 3 ); | |||
draw_alloc_tmps( &offset->stage, 3 ); | |||
offset->stage.draw = draw; | |||
offset->stage.next = NULL; |
@@ -77,27 +77,27 @@ struct draw_context; | |||
/** | |||
* Base class for all primitive drawing stages. | |||
*/ | |||
struct prim_stage | |||
struct draw_stage | |||
{ | |||
struct draw_context *draw; /**< parent context */ | |||
struct prim_stage *next; /**< next stage in pipeline */ | |||
struct draw_stage *next; /**< next stage in pipeline */ | |||
struct vertex_header **tmp; | |||
GLuint nr_tmps; | |||
void (*begin)( struct prim_stage * ); | |||
void (*begin)( struct draw_stage * ); | |||
void (*point)( struct prim_stage *, | |||
void (*point)( struct draw_stage *, | |||
struct prim_header * ); | |||
void (*line)( struct prim_stage *, | |||
void (*line)( struct draw_stage *, | |||
struct prim_header * ); | |||
void (*tri)( struct prim_stage *, | |||
void (*tri)( struct draw_stage *, | |||
struct prim_header * ); | |||
void (*end)( struct prim_stage * ); | |||
void (*end)( struct draw_stage * ); | |||
}; | |||
@@ -107,16 +107,16 @@ struct prim_stage | |||
struct draw_context | |||
{ | |||
struct { | |||
struct prim_stage *first; /**< one of the following */ | |||
struct draw_stage *first; /**< one of the following */ | |||
/* stages (in logical order) */ | |||
struct prim_stage *flatshade; | |||
struct prim_stage *clip; | |||
struct prim_stage *cull; | |||
struct prim_stage *twoside; | |||
struct prim_stage *offset; | |||
struct prim_stage *unfilled; | |||
struct prim_stage *setup; /* aka render/rasterize */ | |||
struct draw_stage *flatshade; | |||
struct draw_stage *clip; | |||
struct draw_stage *cull; | |||
struct draw_stage *twoside; | |||
struct draw_stage *offset; | |||
struct draw_stage *unfilled; | |||
struct draw_stage *setup; /* aka render/rasterize */ | |||
} pipeline; | |||
/* pipe state that we need: */ | |||
@@ -148,16 +148,16 @@ struct draw_context | |||
extern struct prim_stage *prim_unfilled( struct draw_context *context ); | |||
extern struct prim_stage *prim_twoside( struct draw_context *context ); | |||
extern struct prim_stage *prim_offset( struct draw_context *context ); | |||
extern struct prim_stage *prim_clip( struct draw_context *context ); | |||
extern struct prim_stage *prim_flatshade( struct draw_context *context ); | |||
extern struct prim_stage *prim_cull( struct draw_context *context ); | |||
extern struct draw_stage *draw_unfilled_stage( struct draw_context *context ); | |||
extern struct draw_stage *draw_twoside_stage( struct draw_context *context ); | |||
extern struct draw_stage *draw_offset_stage( struct draw_context *context ); | |||
extern struct draw_stage *draw_clip_stage( struct draw_context *context ); | |||
extern struct draw_stage *draw_flatshade_stage( struct draw_context *context ); | |||
extern struct draw_stage *draw_cull_stage( struct draw_context *context ); | |||
extern void prim_free_tmps( struct prim_stage *stage ); | |||
extern void prim_alloc_tmps( struct prim_stage *stage, GLuint nr ); | |||
extern void draw_free_tmps( struct draw_stage *stage ); | |||
extern void draw_alloc_tmps( struct draw_stage *stage, GLuint nr ); | |||
@@ -169,7 +169,7 @@ extern void prim_alloc_tmps( struct prim_stage *stage, GLuint nr ); | |||
* \return pointer to the copied vertex | |||
*/ | |||
static INLINE struct vertex_header * | |||
dup_vert( struct prim_stage *stage, | |||
dup_vert( struct draw_stage *stage, | |||
const struct vertex_header *vert, | |||
GLuint idx ) | |||
{ |
@@ -34,20 +34,20 @@ | |||
struct twoside_stage { | |||
struct prim_stage stage; | |||
struct draw_stage stage; | |||
GLfloat facing; | |||
const GLuint *lookup; | |||
}; | |||
static INLINE struct twoside_stage *twoside_stage( struct prim_stage *stage ) | |||
static INLINE struct twoside_stage *twoside_stage( struct draw_stage *stage ) | |||
{ | |||
return (struct twoside_stage *)stage; | |||
} | |||
static void twoside_begin( struct prim_stage *stage ) | |||
static void twoside_begin( struct draw_stage *stage ) | |||
{ | |||
struct twoside_stage *twoside = twoside_stage(stage); | |||
@@ -89,7 +89,7 @@ static struct vertex_header *copy_bfc( struct twoside_stage *twoside, | |||
/* Twoside tri: | |||
*/ | |||
static void twoside_tri( struct prim_stage *stage, | |||
static void twoside_tri( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
struct twoside_stage *twoside = twoside_stage(stage); | |||
@@ -112,7 +112,7 @@ static void twoside_tri( struct prim_stage *stage, | |||
} | |||
static void twoside_line( struct prim_stage *stage, | |||
static void twoside_line( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
/* pass-through */ | |||
@@ -120,7 +120,7 @@ static void twoside_line( struct prim_stage *stage, | |||
} | |||
static void twoside_point( struct prim_stage *stage, | |||
static void twoside_point( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
/* pass-through */ | |||
@@ -128,7 +128,7 @@ static void twoside_point( struct prim_stage *stage, | |||
} | |||
static void twoside_end( struct prim_stage *stage ) | |||
static void twoside_end( struct draw_stage *stage ) | |||
{ | |||
/* pass-through */ | |||
stage->next->end( stage->next ); | |||
@@ -138,11 +138,11 @@ static void twoside_end( struct prim_stage *stage ) | |||
/** | |||
* Create twoside pipeline stage. | |||
*/ | |||
struct prim_stage *prim_twoside( struct draw_context *draw ) | |||
struct draw_stage *draw_twoside_stage( struct draw_context *draw ) | |||
{ | |||
struct twoside_stage *twoside = CALLOC_STRUCT(twoside_stage); | |||
prim_alloc_tmps( &twoside->stage, 3 ); | |||
draw_alloc_tmps( &twoside->stage, 3 ); | |||
twoside->stage.draw = draw; | |||
twoside->stage.next = NULL; |
@@ -39,7 +39,7 @@ | |||
struct unfilled_stage { | |||
struct prim_stage stage; | |||
struct draw_stage stage; | |||
/** [0] = front face, [1] = back face. | |||
* legal values: PIPE_POLYGON_MODE_FILL, PIPE_POLYGON_MODE_LINE, | |||
@@ -49,13 +49,13 @@ struct unfilled_stage { | |||
}; | |||
static INLINE struct unfilled_stage *unfilled_stage( struct prim_stage *stage ) | |||
static INLINE struct unfilled_stage *unfilled_stage( struct draw_stage *stage ) | |||
{ | |||
return (struct unfilled_stage *)stage; | |||
} | |||
static void unfilled_begin( struct prim_stage *stage ) | |||
static void unfilled_begin( struct draw_stage *stage ) | |||
{ | |||
struct unfilled_stage *unfilled = unfilled_stage(stage); | |||
@@ -65,7 +65,7 @@ static void unfilled_begin( struct prim_stage *stage ) | |||
stage->next->begin( stage->next ); | |||
} | |||
static void point( struct prim_stage *stage, | |||
static void point( struct draw_stage *stage, | |||
struct vertex_header *v0 ) | |||
{ | |||
struct prim_header tmp; | |||
@@ -73,7 +73,7 @@ static void point( struct prim_stage *stage, | |||
stage->next->point( stage->next, &tmp ); | |||
} | |||
static void line( struct prim_stage *stage, | |||
static void line( struct draw_stage *stage, | |||
struct vertex_header *v0, | |||
struct vertex_header *v1 ) | |||
{ | |||
@@ -84,7 +84,7 @@ static void line( struct prim_stage *stage, | |||
} | |||
static void points( struct prim_stage *stage, | |||
static void points( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
struct vertex_header *v0 = header->v[0]; | |||
@@ -97,7 +97,7 @@ static void points( struct prim_stage *stage, | |||
} | |||
static void lines( struct prim_stage *stage, | |||
static void lines( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
struct vertex_header *v0 = header->v[0]; | |||
@@ -115,7 +115,7 @@ static void lines( struct prim_stage *stage, | |||
* Note edgeflags in the vertex struct is not sufficient as we will | |||
* need to manipulate them when decomposing primitives??? | |||
*/ | |||
static void unfilled_tri( struct prim_stage *stage, | |||
static void unfilled_tri( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
struct unfilled_stage *unfilled = unfilled_stage(stage); | |||
@@ -136,30 +136,34 @@ static void unfilled_tri( struct prim_stage *stage, | |||
} | |||
} | |||
static void unfilled_line( struct prim_stage *stage, | |||
static void unfilled_line( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
stage->next->line( stage->next, header ); | |||
} | |||
static void unfilled_point( struct prim_stage *stage, | |||
static void unfilled_point( struct draw_stage *stage, | |||
struct prim_header *header ) | |||
{ | |||
stage->next->point( stage->next, header ); | |||
} | |||
static void unfilled_end( struct prim_stage *stage ) | |||
static void unfilled_end( struct draw_stage *stage ) | |||
{ | |||
stage->next->end( stage->next ); | |||
} | |||
struct prim_stage *prim_unfilled( struct draw_context *draw ) | |||
/** | |||
* Create unfilled triangle stage. | |||
*/ | |||
struct draw_stage *draw_unfilled_stage( struct draw_context *draw ) | |||
{ | |||
struct unfilled_stage *unfilled = CALLOC_STRUCT(unfilled_stage); | |||
prim_alloc_tmps( &unfilled->stage, 0 ); | |||
draw_alloc_tmps( &unfilled->stage, 0 ); | |||
unfilled->stage.draw = draw; | |||
unfilled->stage.next = NULL; |
@@ -88,7 +88,7 @@ static void draw_set_prim( struct draw_context *draw, | |||
static void do_quad( struct prim_stage *first, | |||
static void do_quad( struct draw_stage *first, | |||
struct vertex_header *v0, | |||
struct vertex_header *v1, | |||
struct vertex_header *v2, | |||
@@ -128,7 +128,7 @@ static void draw_indexed_prim( struct draw_context *draw, | |||
const GLuint *elts, | |||
GLuint count ) | |||
{ | |||
struct prim_stage * const first = draw->pipeline.first; | |||
struct draw_stage * const first = draw->pipeline.first; | |||
struct prim_header prim; | |||
GLuint i; | |||
@@ -290,7 +290,7 @@ static void draw_prim( struct draw_context *draw, | |||
GLuint start, | |||
GLuint count ) | |||
{ | |||
struct prim_stage * const first = draw->pipeline.first; | |||
struct draw_stage * const first = draw->pipeline.first; | |||
struct prim_header prim; | |||
GLuint i; | |||
@@ -698,7 +698,7 @@ void draw_set_vertex_attributes( struct draw_context *draw, | |||
#define MAX_VERTEX_SIZE ((2 + FRAG_ATTRIB_MAX) * 4 * sizeof(GLfloat)) | |||
void prim_alloc_tmps( struct prim_stage *stage, GLuint nr ) | |||
void draw_alloc_tmps( struct draw_stage *stage, GLuint nr ) | |||
{ | |||
stage->nr_tmps = nr; | |||
@@ -713,7 +713,7 @@ void prim_alloc_tmps( struct prim_stage *stage, GLuint nr ) | |||
} | |||
} | |||
void prim_free_tmps( struct prim_stage *stage ) | |||
void draw_free_tmps( struct draw_stage *stage ) | |||
{ | |||
if (stage->tmp) { | |||
FREE(stage->tmp[0]); |
@@ -98,5 +98,10 @@ struct pipe_context *softpipe_create( void ) | |||
softpipe->draw = draw_create(); | |||
draw_set_setup_stage(softpipe->draw, prim_setup(softpipe)); | |||
/* | |||
* XXX we could plug GL selection/feedback into the drawing pipeline | |||
* by specifying a different setup/render stage. | |||
*/ | |||
return &softpipe->pipe; | |||
} |
@@ -41,7 +41,7 @@ | |||
struct softpipe_surface; | |||
struct draw_context; | |||
struct prim_stage; | |||
struct draw_stage; | |||
enum interp_mode { |
@@ -25,9 +25,14 @@ | |||
* | |||
**************************************************************************/ | |||
/* Authors: Keith Whitwell <keith@tungstengraphics.com> | |||
/** | |||
* \brief Primitive rasterization/rendering (points, lines, triangles) | |||
* | |||
* \author Keith Whitwell <keith@tungstengraphics.com> | |||
* \author Brian Paul | |||
*/ | |||
#include "imports.h" | |||
#include "macros.h" | |||
@@ -64,11 +69,11 @@ struct edge { | |||
/** | |||
* Triangle setup info (derived from prim_stage). | |||
* Triangle setup info (derived from draw_stage). | |||
* Also used for line drawing (taking some liberties). | |||
*/ | |||
struct setup_stage { | |||
struct prim_stage stage; /**< This must be first (base class) */ | |||
struct draw_stage stage; /**< This must be first (base class) */ | |||
/*XXX NEW */ | |||
struct softpipe_context *softpipe; | |||
@@ -105,7 +110,7 @@ struct setup_stage { | |||
/** | |||
* Basically a cast wrapper. | |||
*/ | |||
static inline struct setup_stage *setup_stage( struct prim_stage *stage ) | |||
static inline struct setup_stage *setup_stage( struct draw_stage *stage ) | |||
{ | |||
return (struct setup_stage *)stage; | |||
} | |||
@@ -122,7 +127,7 @@ static inline GLint block( GLint x ) | |||
static void setup_begin( struct prim_stage *stage ) | |||
static void setup_begin( struct draw_stage *stage ) | |||
{ | |||
struct setup_stage *setup = setup_stage(stage); | |||
@@ -559,7 +564,7 @@ static void subtriangle( struct setup_stage *setup, | |||
/** | |||
* Do setup for triangle rasterization, then render the triangle. | |||
*/ | |||
static void setup_tri( struct prim_stage *stage, | |||
static void setup_tri( struct draw_stage *stage, | |||
struct prim_header *prim ) | |||
{ | |||
struct setup_stage *setup = setup_stage( stage ); | |||
@@ -576,9 +581,9 @@ static void setup_tri( struct prim_stage *stage, | |||
setup->span.y_flags = 0; | |||
setup->span.right[0] = 0; | |||
setup->span.right[1] = 0; | |||
// setup->span.z_mode = tri_z_mode( setup->ctx ); | |||
/* setup->span.z_mode = tri_z_mode( setup->ctx ); */ | |||
// init_constant_attribs( setup ); | |||
/* init_constant_attribs( setup ); */ | |||
if (setup->oneoverarea < 0.0) { | |||
/* emaj on left: | |||
@@ -714,7 +719,7 @@ plot(struct setup_stage *setup, GLint x, GLint y) | |||
* XXX no scissoring yet. | |||
*/ | |||
static void | |||
setup_line(struct prim_stage *stage, struct prim_header *prim) | |||
setup_line(struct draw_stage *stage, struct prim_header *prim) | |||
{ | |||
const struct vertex_header *v0 = prim->v[0]; | |||
const struct vertex_header *v1 = prim->v[1]; | |||
@@ -810,7 +815,7 @@ setup_line(struct prim_stage *stage, struct prim_header *prim) | |||
* XXX could optimize a lot for 1-pixel points. | |||
*/ | |||
static void | |||
setup_point(struct prim_stage *stage, struct prim_header *prim) | |||
setup_point(struct draw_stage *stage, struct prim_header *prim) | |||
{ | |||
struct setup_stage *setup = setup_stage( stage ); | |||
/*XXX this should be a vertex attrib! */ | |||
@@ -923,7 +928,7 @@ setup_point(struct prim_stage *stage, struct prim_header *prim) | |||
static void setup_end( struct prim_stage *stage ) | |||
static void setup_end( struct draw_stage *stage ) | |||
{ | |||
} | |||
@@ -931,7 +936,7 @@ static void setup_end( struct prim_stage *stage ) | |||
/** | |||
* Create a new primitive setup/render stage. | |||
*/ | |||
struct prim_stage *prim_setup( struct softpipe_context *softpipe ) | |||
struct draw_stage *prim_setup( struct softpipe_context *softpipe ) | |||
{ | |||
struct setup_stage *setup = CALLOC_STRUCT(setup_stage); | |||
@@ -43,7 +43,7 @@ | |||
#include "s_context.h" | |||
extern struct prim_stage *prim_setup( struct softpipe_context *softpipe ); | |||
extern struct draw_stage *prim_setup( struct softpipe_context *softpipe ); | |||
#if 0 /* UNUSED? */ |
@@ -34,7 +34,7 @@ | |||
#if 0 | |||
static void validate_prim_pipe( struct softpipe_context *softpipe ) | |||
{ | |||
struct prim_stage *next = softpipe->prim.setup; | |||
struct draw_stage *next = softpipe->prim.setup; | |||
/* TODO: make the current primitive part of the state and build | |||
* shorter pipelines for lines & points. |