1 /* $XFree86: xc/lib/GL/mesa/src/drv/ffb/ffb_vbtmp.h,v 1.1 2002/02/22 21:32:59 dawes Exp $ */
3 static void TAG(emit
)(GLcontext
*ctx
, GLuint start
, GLuint end
)
5 ffbContextPtr fmesa
= FFB_CONTEXT(ctx
);
6 #if defined(VB_DEBUG) || (IND & (FFB_VB_XYZ_BIT | FFB_VB_RGBA_BIT))
7 struct vertex_buffer
*VB
= &TNL_CONTEXT(ctx
)->vb
;
9 #if (IND & (FFB_VB_RGBA_BIT))
12 #if (IND & (FFB_VB_TWOSIDE_BIT))
17 #if (IND & FFB_VB_XYZ_BIT)
18 GLfloat (*proj
)[4] = VB
->NdcPtr
->data
;
19 GLuint proj_stride
= VB
->NdcPtr
->stride
;
20 const GLubyte
*mask
= VB
->ClipMask
;
22 ffb_vertex
*v
= &fmesa
->verts
[start
];
26 fprintf(stderr
, "FFB: ffb_emit ["
27 #if (IND & (FFB_VB_XYZ_BIT))
30 #if (IND & (FFB_VB_RGBA_BIT))
33 #if (IND & (FFB_VB_TWOSIDE_BIT))
36 "] start(%d) end(%d) import(%d)\n",
41 #if (IND & (FFB_VB_RGBA_BIT))
42 col0
= VB
->ColorPtr
[0]->data
;
43 col0_stride
= VB
->ColorPtr
[0]->stride
;
44 #if (IND & (FFB_VB_TWOSIDE_BIT))
45 col1
= VB
->ColorPtr
[1]->data
;
46 col1_stride
= VB
->ColorPtr
[1]->stride
;
52 #if (IND & (FFB_VB_XYZ_BIT))
53 proj
= (GLfloat (*)[4])((GLubyte
*)proj
+ start
* proj_stride
);
55 #if (IND & (FFB_VB_RGBA_BIT))
56 col0
= (GLfloat (*)[4])((GLubyte
*)col0
+ start
* col0_stride
);
57 #if (IND & (FFB_VB_TWOSIDE_BIT))
58 col1
= (GLfloat (*)[4])((GLubyte
*)col1
+ start
* col1_stride
);
62 for (i
= start
; i
< end
; i
++, v
++) {
63 #if (IND & (FFB_VB_XYZ_BIT))
69 proj
= (GLfloat (*)[4])((GLubyte
*)proj
+ proj_stride
);
71 #if (IND & (FFB_VB_RGBA_BIT))
72 v
->color
[0].alpha
= CLAMP(col0
[0][3], 0.0f
, 1.0f
);
73 v
->color
[0].red
= CLAMP(col0
[0][0], 0.0f
, 1.0f
);
74 v
->color
[0].green
= CLAMP(col0
[0][1], 0.0f
, 1.0f
);
75 v
->color
[0].blue
= CLAMP(col0
[0][2], 0.0f
, 1.0f
);
76 col0
= (GLfloat (*)[4])((GLubyte
*)col0
+ col0_stride
);
77 #if (IND & (FFB_VB_TWOSIDE_BIT))
78 v
->color
[1].alpha
= CLAMP(col1
[0][3], 0.0f
, 1.0f
);
79 v
->color
[1].red
= CLAMP(col1
[0][0], 0.0f
, 1.0f
);
80 v
->color
[1].green
= CLAMP(col1
[0][1], 0.0f
, 1.0f
);
81 v
->color
[1].blue
= CLAMP(col1
[0][2], 0.0f
, 1.0f
);
82 col1
= (GLfloat (*)[4])((GLubyte
*)col1
+ col1_stride
);
89 static void TAG(interp
)(GLcontext
*ctx
, GLfloat t
,
90 GLuint edst
, GLuint eout
, GLuint ein
,
91 GLboolean force_boundary
)
93 #if (IND & (FFB_VB_XYZ_BIT | FFB_VB_RGBA_BIT))
94 ffbContextPtr fmesa
= FFB_CONTEXT(ctx
);
96 #if (IND & (FFB_VB_XYZ_BIT))
97 struct vertex_buffer
*VB
= &TNL_CONTEXT(ctx
)->vb
;
98 const GLfloat
*dstclip
= VB
->ClipPtr
->data
[edst
];
99 GLfloat oow
= 1.0 / dstclip
[3];
101 #if (IND & (FFB_VB_XYZ_BIT | FFB_VB_RGBA_BIT))
102 ffb_vertex
*dst
= &fmesa
->verts
[edst
];
104 #if (IND & (FFB_VB_RGBA_BIT))
105 ffb_vertex
*in
= &fmesa
->verts
[eout
];
106 ffb_vertex
*out
= &fmesa
->verts
[ein
];
110 fprintf(stderr
, "FFB: ffb_interp ["
111 #if (IND & (FFB_VB_XYZ_BIT))
114 #if (IND & (FFB_VB_RGBA_BIT))
117 #if (IND & (FFB_VB_TWOSIDE_BIT))
120 "] edst(%d) eout(%d) ein(%d)\n",
124 #if (IND & (FFB_VB_XYZ_BIT))
125 dst
->x
= dstclip
[0] * oow
;
126 dst
->y
= dstclip
[1] * oow
;
127 dst
->z
= dstclip
[2] * oow
;
130 #if (IND & (FFB_VB_RGBA_BIT))
131 INTERP_F(t
, dst
->color
[0].alpha
, out
->color
[0].alpha
, in
->color
[0].alpha
);
132 INTERP_F(t
, dst
->color
[0].red
, out
->color
[0].red
, in
->color
[0].red
);
133 INTERP_F(t
, dst
->color
[0].green
, out
->color
[0].green
, in
->color
[0].green
);
134 INTERP_F(t
, dst
->color
[0].blue
, out
->color
[0].blue
, in
->color
[0].blue
);
135 #if (IND & (FFB_VB_TWOSIDE_BIT))
136 INTERP_F(t
, dst
->color
[1].alpha
, out
->color
[1].alpha
, in
->color
[1].alpha
);
137 INTERP_F(t
, dst
->color
[1].red
, out
->color
[1].red
, in
->color
[1].red
);
138 INTERP_F(t
, dst
->color
[1].green
, out
->color
[1].green
, in
->color
[1].green
);
139 INTERP_F(t
, dst
->color
[1].blue
, out
->color
[1].blue
, in
->color
[1].blue
);
144 static void TAG(init
)(void)
146 setup_tab
[IND
].emit
= TAG(emit
);
147 setup_tab
[IND
].interp
= TAG(interp
);