static void intel_draw_quad(struct intel_context *intel, intelVertexPtr v0, intelVertexPtr v1, intelVertexPtr v2, intelVertexPtr v3) { GLuint vertsize = intel->vertex_size; GLuint *vb = intelExtendInlinePrimitive(intel, 6 * vertsize); int j; COPY_DWORDS(j, vb, vertsize, v0); COPY_DWORDS(j, vb, vertsize, v1); /* If smooth shading, draw like a trifan which gives better * rasterization. Otherwise draw as two triangles with provoking * vertex in third position as required for flat shading. */ if (intel->ctx.Light.ShadeModel == GL_FLAT) { COPY_DWORDS(j, vb, vertsize, v3); COPY_DWORDS(j, vb, vertsize, v1); } else { COPY_DWORDS(j, vb, vertsize, v2); COPY_DWORDS(j, vb, vertsize, v0); } COPY_DWORDS(j, vb, vertsize, v2); COPY_DWORDS(j, vb, vertsize, v3); }
void intel_meta_draw_poly(struct intel_context *intel, GLuint n, GLfloat xy[][2], GLfloat z, GLuint color, GLfloat tex[][2]) { union fi *vb; GLint i; /* All 3d primitives should be emitted with INTEL_BATCH_CLIPRECTS, * otherwise the drawing origin (DR4) might not be set correctly. */ intelStartInlinePrimitive(intel, PRIM3D_TRIFAN, INTEL_BATCH_CLIPRECTS); vb = (union fi *) intelExtendInlinePrimitive(intel, n * 6); for (i = 0; i < n; i++) { vb[0].f = xy[i][0]; vb[1].f = xy[i][1]; vb[2].f = z; vb[3].i = color; vb[4].f = tex[i][0]; vb[5].f = tex[i][1]; vb += 6; } INTEL_FIREVERTICES(intel); }
static __inline__ void intel_draw_line( intelContextPtr intel, intelVertexPtr v0, intelVertexPtr v1 ) { GLuint vertsize = intel->vertex_size; GLuint *vb = intelExtendInlinePrimitive( intel, 2 * vertsize ); int j; COPY_DWORDS( j, vb, vertsize, v0 ); COPY_DWORDS( j, vb, vertsize, v1 ); }
static void intel_draw_triangle(struct intel_context *intel, intelVertexPtr v0, intelVertexPtr v1, intelVertexPtr v2) { GLuint vertsize = intel->vertex_size; GLuint *vb = intelExtendInlinePrimitive(intel, 3 * vertsize); int j; COPY_DWORDS(j, vb, vertsize, v0); COPY_DWORDS(j, vb, vertsize, v1); COPY_DWORDS(j, vb, vertsize, v2); }
static __inline__ void intel_draw_point( intelContextPtr intel, intelVertexPtr v0 ) { GLuint vertsize = intel->vertex_size; GLuint *vb = intelExtendInlinePrimitive( intel, vertsize ); int j; /* Adjust for sub pixel position -- still required for conform. */ *(float *)&vb[0] = v0->v.x - 0.125; *(float *)&vb[1] = v0->v.y - 0.125; for (j = 2 ; j < vertsize ; j++) vb[j] = v0->ui[j]; }
static void intelFastRenderClippedPoly( GLcontext *ctx, const GLuint *elts, GLuint n ) { intelContextPtr intel = INTEL_CONTEXT( ctx ); const GLuint vertsize = intel->vertex_size; GLuint *vb = intelExtendInlinePrimitive( intel, (n-2) * 3 * vertsize ); GLubyte *vertptr = (GLubyte *)intel->verts; const GLuint *start = (const GLuint *)V(elts[0]); int i,j; for (i = 2 ; i < n ; i++) { COPY_DWORDS( j, vb, vertsize, V(elts[i-1]) ); COPY_DWORDS( j, vb, vertsize, V(elts[i]) ); COPY_DWORDS( j, vb, vertsize, start ); } }
static void __inline__ intel_draw_quad( intelContextPtr intel, intelVertexPtr v0, intelVertexPtr v1, intelVertexPtr v2, intelVertexPtr v3 ) { GLuint vertsize = intel->vertex_size; GLuint *vb = intelExtendInlinePrimitive( intel, 6 * vertsize ); int j; COPY_DWORDS( j, vb, vertsize, v0 ); COPY_DWORDS( j, vb, vertsize, v1 ); COPY_DWORDS( j, vb, vertsize, v3 ); COPY_DWORDS( j, vb, vertsize, v1 ); COPY_DWORDS( j, vb, vertsize, v2 ); COPY_DWORDS( j, vb, vertsize, v3 ); }