⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ffb_rendertmp.h

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 H
📖 第 1 页 / 共 2 页
字号:
/* $XFree86: xc/lib/GL/mesa/src/drv/ffb/ffb_rendertmp.h,v 1.2 2003/01/29 23:00:40 dawes Exp $ */#define IMPL_LOCAL_VARS						\	ffbContextPtr fmesa = FFB_CONTEXT(ctx);			\	ffb_fbcPtr ffb = fmesa->regs;				\	const GLuint * const elt = TNL_CONTEXT(ctx)->vb.Elts;	\	FFB_DELAYED_VIEWPORT_VARS;				\	(void) fmesa; (void) ffb; (void) elt#if (IND & FFB_FLAT_BIT)#define FFB_DECLARE_CACHED_COLOR(NAME)		\	unsigned int NAME;#define FFB_COMPUTE_CACHED_COLOR(NAME, VTX)	\	NAME = FFB_PACK_CONST_UBYTE_ARGB_COLOR((VTX)->color[0])#define FFB_CACHED_COLOR_SAME(NAME1, NAME2)	\	((NAME1) == (NAME2))#define FFB_CACHED_COLOR_SET(NAME)		\	ffb->fg = (NAME)#define FFB_CACHED_COLOR_UPDATE(NAME1, NAME2)	\	ffb->fg = (NAME1) = (NAME2)#define FFB_SET_PRIM_COLOR(COLOR_VERTEX)	\	ffb->fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR((COLOR_VERTEX)->color[0])#define FFB_PRIM_COLOR_COST			1#define FFB_SET_VERTEX_COLOR(VTX)		/**/#define FFB_VERTEX_COLOR_COST			0#else#define FFB_DECLARE_CACHED_COLOR(NAME)		/**/#define FFB_COMPUTE_CACHED_COLOR(NAME, VTX)	/**/#define FFB_CACHED_COLOR_SAME(NAME1, NAME2)	0#define FFB_CACHED_COLOR_SET(NAME1)		/**/#define FFB_CACHED_COLOR_UPDATE(NAME1, NAME2)	/**/#define FFB_SET_PRIM_COLOR(COLOR_VERTEX)	/**/#define FFB_PRIM_COLOR_COST			0#if (IND & FFB_ALPHA_BIT)#define FFB_SET_VERTEX_COLOR(VTX)		\	ffb->alpha = FFB_GET_ALPHA(VTX);	\	ffb->red   = FFB_GET_RED(VTX);		\	ffb->green = FFB_GET_GREEN(VTX);	\	ffb->blue  = FFB_GET_BLUE(VTX)#define FFB_VERTEX_COLOR_COST			4#else#define FFB_SET_VERTEX_COLOR(VTX)		\	ffb->red   = FFB_GET_RED(VTX);		\	ffb->green = FFB_GET_GREEN(VTX);	\	ffb->blue  = FFB_GET_BLUE(VTX)#define FFB_VERTEX_COLOR_COST			3#endif#endif#define RESET_STIPPLE	ffb->lpat = fmesa->lpat;#if !(IND & (FFB_TRI_CULL_BIT))static void TAG(ffb_vb_points)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags){	GLint i;	IMPL_LOCAL_VARS;#ifdef FFB_RENDER_TRACE	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",		__FUNCTION__, start, count, flags);#endif	ffbRenderPrimitive(ctx, GL_POINTS);	if (ctx->_TriangleCaps & DD_POINT_SMOOTH) {		for (i = start; i < count; i++) {			ffb_vertex *v0 = &fmesa->verts[ELT(i)];			FFBFifo(fmesa, 4);			ffb->fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR(v0->color[0]);			ffb->z = FFB_GET_Z(v0);			ffb->y = FFB_GET_Y(v0) + 0x8000 /* FIX ME */;			ffb->x = FFB_GET_X(v0) + 0x8000 /* FIX ME */;		}	} else {		for (i = start; i < count; i++) {			ffb_vertex *v0 = &fmesa->verts[ELT(i)];			FFBFifo(fmesa, 4);			ffb->fg = FFB_PACK_CONST_UBYTE_ARGB_COLOR(v0->color[0]);			ffb->constz = Z_FROM_MESA(FFB_Z_TO_FLOAT(FFB_GET_Z(v0)));			ffb->bh = FFB_GET_Y(v0) >> 16;			ffb->bw = FFB_GET_X(v0) >> 16;		}	}	fmesa->ffbScreen->rp_active = 1;}static void TAG(ffb_vb_lines)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags){	GLint i;	IMPL_LOCAL_VARS;#ifdef FFB_RENDER_TRACE	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",		__FUNCTION__, start, count, flags);#endif	ffbRenderPrimitive(ctx, GL_LINES);	for (i = start + 1; i < count; i += 2) {		ffb_vertex *v0 = &fmesa->verts[i - 1];		ffb_vertex *v1 = &fmesa->verts[i - 0];		FFBFifo(fmesa, (1 + FFB_PRIM_COLOR_COST +				(FFB_VERTEX_COLOR_COST * 2) + 6));		RESET_STIPPLE;		FFB_SET_PRIM_COLOR(v1);		FFB_SET_VERTEX_COLOR(v0);		ffb->z   = FFB_GET_Z(v0);		ffb->ryf = FFB_GET_Y(v0);		ffb->rxf = FFB_GET_X(v0);		FFB_SET_VERTEX_COLOR(v1);		ffb->z   = FFB_GET_Z(v1);		ffb->y   = FFB_GET_Y(v1);		ffb->x   = FFB_GET_X(v1);	}}static void TAG(ffb_vb_line_loop)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags){	GLint i;	IMPL_LOCAL_VARS;#ifdef FFB_RENDER_TRACE	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",		__FUNCTION__, start, count, flags);#endif	ffbRenderPrimitive(ctx, GL_LINE_LOOP);	if ((flags & PRIM_BEGIN) != 0) {		ffb_vertex *v0 = &fmesa->verts[ELT(start + 0)];		ffb_vertex *v1 = &fmesa->verts[ELT(start + 1)];		FFBFifo(fmesa, (1 + FFB_PRIM_COLOR_COST +				((FFB_VERTEX_COLOR_COST * 2) + (3 * 2))));		RESET_STIPPLE;		FFB_SET_PRIM_COLOR(v1);		FFB_SET_VERTEX_COLOR(v0);		ffb->z   = FFB_GET_Z(v0);		ffb->ryf = FFB_GET_Y(v0);		ffb->rxf = FFB_GET_X(v0);		FFB_SET_VERTEX_COLOR(v1);		ffb->z   = FFB_GET_Z(v1);		ffb->y   = FFB_GET_Y(v1);		ffb->x   = FFB_GET_X(v1);	}	for (i = start + 2; i < count; i++) {		ffb_vertex *v0 = &fmesa->verts[ELT(i)];		FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +				(FFB_VERTEX_COLOR_COST + 3)));		FFB_SET_PRIM_COLOR(v0);		FFB_SET_VERTEX_COLOR(v0);		ffb->z   = FFB_GET_Z(v0);		ffb->y   = FFB_GET_Y(v0);		ffb->x   = FFB_GET_X(v0);	}	if ((flags & PRIM_END) != 0) {		ffb_vertex *v0 = &fmesa->verts[ELT(start)];		FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +				(FFB_VERTEX_COLOR_COST + 3)));		FFB_SET_PRIM_COLOR(v0);		FFB_SET_VERTEX_COLOR(v0);		ffb->z   = FFB_GET_Z(v0);		ffb->y   = FFB_GET_Y(v0);		ffb->x   = FFB_GET_X(v0);	}	fmesa->ffbScreen->rp_active = 1;}static void TAG(ffb_vb_line_strip)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags){	GLint i;	FFB_DECLARE_CACHED_COLOR(cached_fg)	IMPL_LOCAL_VARS;#ifdef FFB_RENDER_TRACE	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",		__FUNCTION__, start, count, flags);#endif	ffbRenderPrimitive(ctx, GL_LINE_STRIP);	FFBFifo(fmesa, (1 + FFB_PRIM_COLOR_COST +			((FFB_VERTEX_COLOR_COST * 2) + (3 * 2))));	RESET_STIPPLE;	{		ffb_vertex *v0 = &fmesa->verts[ELT(start + 0)];		ffb_vertex *v1 = &fmesa->verts[ELT(start + 1)];		FFB_COMPUTE_CACHED_COLOR(cached_fg, v0);		FFB_CACHED_COLOR_SET(cached_fg);		FFB_SET_VERTEX_COLOR(v0);		ffb->z = FFB_GET_Z(v0);		ffb->ryf = FFB_GET_Y(v0);		ffb->rxf = FFB_GET_X(v0);		FFB_SET_VERTEX_COLOR(v1);		ffb->z = FFB_GET_Z(v1);		ffb->y = FFB_GET_Y(v1);		ffb->x = FFB_GET_X(v1);	}	for (i = start + 2; i < count; i++) {		ffb_vertex *v1 = &fmesa->verts[ELT(i - 0)];		FFB_DECLARE_CACHED_COLOR(new_fg)		FFB_COMPUTE_CACHED_COLOR(new_fg, v1);		if (FFB_CACHED_COLOR_SAME(cached_fg, new_fg)) {			FFBFifo(fmesa, ((FFB_VERTEX_COLOR_COST * 1) + (3 * 1)));		} else {			FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +					(FFB_VERTEX_COLOR_COST * 1) + (3 * 1)));			FFB_CACHED_COLOR_UPDATE(cached_fg, new_fg);		}		FFB_SET_VERTEX_COLOR(v1);		ffb->z   = FFB_GET_Z(v1);		ffb->y   = FFB_GET_Y(v1);		ffb->x   = FFB_GET_X(v1);	}	fmesa->ffbScreen->rp_active = 1;}#endif /* !(IND & (FFB_TRI_CULL_BIT)) *//* OK, now things start getting fun :-) */#if (IND & (FFB_TRI_CULL_BIT))#define FFB_AREA_DECLARE	GLfloat cc, ex, ey, fx, fy;#define FFB_COMPUTE_AREA_TRI(V0, V1, V2)	\{	ex = (V1)->x - (V0)->x;			\	ey = (V1)->y - (V0)->y;			\	fx = (V2)->x - (V0)->x;			\	fy = (V2)->y - (V0)->y;			\	cc = ex*fy-ey*fx;			\}#define FFB_COMPUTE_AREA_QUAD(V0, V1, V2, V3)	\{	ex = (V2)->x - (V0)->x;			\	ey = (V2)->y - (V0)->y;			\	fx = (V3)->x - (V1)->x;			\	fy = (V3)->y - (V1)->y;			\	cc = ex*fy-ey*fx;			\}#else#define FFB_AREA_DECLARE			/**/#define FFB_COMPUTE_AREA_TRI(V0, V1, V2)	do { } while(0)#define FFB_COMPUTE_AREA_QUAD(V0, V1, V2, V3)	do { } while(0)#endif#if (IND & FFB_TRI_CULL_BIT)#define FFB_CULL_TRI(CULL_ACTION)		\	if (cc * fmesa->backface_sign > fmesa->ffb_zero) {	\		CULL_ACTION			\	}#define FFB_CULL_QUAD(CULL_ACTION)		\	if (cc * fmesa->backface_sign > fmesa->ffb_zero) {	\		CULL_ACTION			\	}#else#define FFB_CULL_TRI(CULL_ACTION)	do { } while (0)#define FFB_CULL_QUAD(CULL_ACTION)	do { } while (0)#endifstatic void TAG(ffb_vb_triangles)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags){	GLint i;	IMPL_LOCAL_VARS;#ifdef FFB_RENDER_TRACE	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",		__FUNCTION__, start, count, flags);#endif	ffbRenderPrimitive(ctx, GL_TRIANGLES);	for (i = start + 2; i < count; i += 3) {		ffb_vertex *v0 = &fmesa->verts[ELT(i - 2)];		ffb_vertex *v1 = &fmesa->verts[ELT(i - 1)];		ffb_vertex *v2 = &fmesa->verts[ELT(i - 0)];		FFB_AREA_DECLARE		FFB_COMPUTE_AREA_TRI(v0, v1, v2);		FFB_CULL_TRI(continue;);		FFBFifo(fmesa, (FFB_PRIM_COLOR_COST +				(FFB_VERTEX_COLOR_COST * 3) + 9));		FFB_SET_PRIM_COLOR(v2);		FFB_SET_VERTEX_COLOR(v0);		ffb->z   = FFB_GET_Z(v0);		ffb->ryf = FFB_GET_Y(v0);		ffb->rxf = FFB_GET_X(v0);		FFB_SET_VERTEX_COLOR(v1);		ffb->z   = FFB_GET_Z(v1);		ffb->y   = FFB_GET_Y(v1);		ffb->x   = FFB_GET_X(v1);		FFB_SET_VERTEX_COLOR(v2);		ffb->z   = FFB_GET_Z(v2);		ffb->y   = FFB_GET_Y(v2);		ffb->x   = FFB_GET_X(v2);	}	fmesa->ffbScreen->rp_active = 1;}static void TAG(ffb_vb_tri_strip)(GLcontext *ctx, GLuint start, GLuint count, GLuint flags){	GLint i;	GLint parity = 0;	IMPL_LOCAL_VARS;#ifdef FFB_RENDER_TRACE	fprintf(stderr, "%s: start(%d) count(%d) flags(%x)\n",

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -