📄 ffb_vbtmp.h
字号:
/* $XFree86: xc/lib/GL/mesa/src/drv/ffb/ffb_vbtmp.h,v 1.1 2002/02/22 21:32:59 dawes Exp $ */static void TAG(emit)(GLcontext *ctx, GLuint start, GLuint end){ ffbContextPtr fmesa = FFB_CONTEXT(ctx);#if defined(VB_DEBUG) || (IND & (FFB_VB_XYZ_BIT | FFB_VB_RGBA_BIT)) struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;#endif#if (IND & (FFB_VB_RGBA_BIT)) GLfloat (*col0)[4]; GLuint col0_stride;#if (IND & (FFB_VB_TWOSIDE_BIT)) GLfloat (*col1)[4]; GLuint col1_stride;#endif#endif#if (IND & FFB_VB_XYZ_BIT) GLfloat (*proj)[4] = VB->NdcPtr->data; GLuint proj_stride = VB->NdcPtr->stride; const GLubyte *mask = VB->ClipMask;#endif ffb_vertex *v = &fmesa->verts[start]; int i;#ifdef VB_DEBUG fprintf(stderr, "FFB: ffb_emit ["#if (IND & (FFB_VB_XYZ_BIT)) " XYZ"#endif#if (IND & (FFB_VB_RGBA_BIT)) " RGBA"#endif#if (IND & (FFB_VB_TWOSIDE_BIT)) " TWOSIDE"#endif "] start(%d) end(%d) import(%d)\n", start, end, VB->importable_data);#endif#if (IND & (FFB_VB_RGBA_BIT)) col0 = VB->ColorPtr[0]->data; col0_stride = VB->ColorPtr[0]->stride;#if (IND & (FFB_VB_TWOSIDE_BIT)) col1 = VB->ColorPtr[1]->data; col1_stride = VB->ColorPtr[1]->stride;#endif#endif { if (start) {#if (IND & (FFB_VB_XYZ_BIT)) proj = (GLfloat (*)[4])((GLubyte *)proj + start * proj_stride);#endif#if (IND & (FFB_VB_RGBA_BIT)) col0 = (GLfloat (*)[4])((GLubyte *)col0 + start * col0_stride);#if (IND & (FFB_VB_TWOSIDE_BIT)) col1 = (GLfloat (*)[4])((GLubyte *)col1 + start * col1_stride);#endif#endif } for (i = start; i < end; i++, v++) {#if (IND & (FFB_VB_XYZ_BIT)) if (mask[i] == 0) { v->x = proj[0][0]; v->y = proj[0][1]; v->z = proj[0][2]; } proj = (GLfloat (*)[4])((GLubyte *)proj + proj_stride);#endif#if (IND & (FFB_VB_RGBA_BIT)) v->color[0].alpha = CLAMP(col0[0][3], 0.0f, 1.0f); v->color[0].red = CLAMP(col0[0][0], 0.0f, 1.0f); v->color[0].green = CLAMP(col0[0][1], 0.0f, 1.0f); v->color[0].blue = CLAMP(col0[0][2], 0.0f, 1.0f); col0 = (GLfloat (*)[4])((GLubyte *)col0 + col0_stride);#if (IND & (FFB_VB_TWOSIDE_BIT)) v->color[1].alpha = CLAMP(col1[0][3], 0.0f, 1.0f); v->color[1].red = CLAMP(col1[0][0], 0.0f, 1.0f); v->color[1].green = CLAMP(col1[0][1], 0.0f, 1.0f); v->color[1].blue = CLAMP(col1[0][2], 0.0f, 1.0f); col1 = (GLfloat (*)[4])((GLubyte *)col1 + col1_stride);#endif#endif } }}static void TAG(interp)(GLcontext *ctx, GLfloat t, GLuint edst, GLuint eout, GLuint ein, GLboolean force_boundary){#if (IND & (FFB_VB_XYZ_BIT | FFB_VB_RGBA_BIT)) ffbContextPtr fmesa = FFB_CONTEXT(ctx);#endif#if (IND & (FFB_VB_XYZ_BIT)) struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb; const GLfloat *dstclip = VB->ClipPtr->data[edst]; GLfloat oow = 1.0 / dstclip[3];#endif#if (IND & (FFB_VB_XYZ_BIT | FFB_VB_RGBA_BIT)) ffb_vertex *dst = &fmesa->verts[edst];#endif#if (IND & (FFB_VB_RGBA_BIT)) ffb_vertex *in = &fmesa->verts[eout]; ffb_vertex *out = &fmesa->verts[ein];#endif#ifdef VB_DEBUG fprintf(stderr, "FFB: ffb_interp ["#if (IND & (FFB_VB_XYZ_BIT)) " XYZ"#endif#if (IND & (FFB_VB_RGBA_BIT)) " RGBA"#endif#if (IND & (FFB_VB_TWOSIDE_BIT)) " TWOSIDE"#endif "] edst(%d) eout(%d) ein(%d)\n", edst, eout, ein);#endif#if (IND & (FFB_VB_XYZ_BIT)) dst->x = dstclip[0] * oow; dst->y = dstclip[1] * oow; dst->z = dstclip[2] * oow;#endif#if (IND & (FFB_VB_RGBA_BIT)) INTERP_F(t, dst->color[0].alpha, out->color[0].alpha, in->color[0].alpha); INTERP_F(t, dst->color[0].red, out->color[0].red, in->color[0].red); INTERP_F(t, dst->color[0].green, out->color[0].green, in->color[0].green); INTERP_F(t, dst->color[0].blue, out->color[0].blue, in->color[0].blue);#if (IND & (FFB_VB_TWOSIDE_BIT)) INTERP_F(t, dst->color[1].alpha, out->color[1].alpha, in->color[1].alpha); INTERP_F(t, dst->color[1].red, out->color[1].red, in->color[1].red); INTERP_F(t, dst->color[1].green, out->color[1].green, in->color[1].green); INTERP_F(t, dst->color[1].blue, out->color[1].blue, in->color[1].blue);#endif#endif}static void TAG(init)(void){ setup_tab[IND].emit = TAG(emit); setup_tab[IND].interp = TAG(interp);}#undef IND#undef TAG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -