📄 tdfx_render.c
字号:
/* printf("download texture image on unit %d\n", unit); */ tdfxTMDownloadTexture(fxMesa, tObj); ti->reloadImages = GL_FALSE; } } }}/* * If scissoring is enabled, compute intersection of scissor region * with all X clip rects, resulting in new cliprect list. * If number of cliprects is zero or one, call grClipWindow to setup * the clip region. Otherwise we'll call grClipWindow inside the * BEGIN_CLIP_LOOP macro. */void tdfxUploadClipping( tdfxContextPtr fxMesa ){ __DRIdrawablePrivate *dPriv = fxMesa->driDrawable; assert(dPriv); if (fxMesa->numClipRects == 0) { /* all drawing clipped away */ fxMesa->Glide.grClipWindow(0, 0, 0, 0); } else if (fxMesa->numClipRects == 1) { fxMesa->Glide.grClipWindow(fxMesa->pClipRects[0].x1, fxMesa->screen_height - fxMesa->pClipRects[0].y2, fxMesa->pClipRects[0].x2, fxMesa->screen_height - fxMesa->pClipRects[0].y1); } /* else, we'll do a cliprect loop around all drawing */ fxMesa->Glide.grDRIPosition( dPriv->x, dPriv->y, dPriv->w, dPriv->h, fxMesa->numClipRects, fxMesa->pClipRects );}void tdfxEmitHwStateLocked( tdfxContextPtr fxMesa ){ if ( !fxMesa->dirty ) return; if ( fxMesa->dirty & TDFX_UPLOAD_COLOR_COMBINE ) { if (TDFX_IS_NAPALM(fxMesa)) { fxMesa->Glide.grColorCombineExt(fxMesa->ColorCombineExt.SourceA, fxMesa->ColorCombineExt.ModeA, fxMesa->ColorCombineExt.SourceB, fxMesa->ColorCombineExt.ModeB, fxMesa->ColorCombineExt.SourceC, fxMesa->ColorCombineExt.InvertC, fxMesa->ColorCombineExt.SourceD, fxMesa->ColorCombineExt.InvertD, fxMesa->ColorCombineExt.Shift, fxMesa->ColorCombineExt.Invert); } else { /* Voodoo 3 */ fxMesa->Glide.grColorCombine( fxMesa->ColorCombine.Function, fxMesa->ColorCombine.Factor, fxMesa->ColorCombine.Local, fxMesa->ColorCombine.Other, fxMesa->ColorCombine.Invert ); } fxMesa->dirty &= ~TDFX_UPLOAD_COLOR_COMBINE; } if ( fxMesa->dirty & TDFX_UPLOAD_ALPHA_COMBINE ) { if (TDFX_IS_NAPALM(fxMesa)) { fxMesa->Glide.grAlphaCombineExt(fxMesa->AlphaCombineExt.SourceA, fxMesa->AlphaCombineExt.ModeA, fxMesa->AlphaCombineExt.SourceB, fxMesa->AlphaCombineExt.ModeB, fxMesa->AlphaCombineExt.SourceC, fxMesa->AlphaCombineExt.InvertC, fxMesa->AlphaCombineExt.SourceD, fxMesa->AlphaCombineExt.InvertD, fxMesa->AlphaCombineExt.Shift, fxMesa->AlphaCombineExt.Invert); } else { /* Voodoo 3 */ fxMesa->Glide.grAlphaCombine( fxMesa->AlphaCombine.Function, fxMesa->AlphaCombine.Factor, fxMesa->AlphaCombine.Local, fxMesa->AlphaCombine.Other, fxMesa->AlphaCombine.Invert ); } fxMesa->dirty &= ~TDFX_UPLOAD_ALPHA_COMBINE; } if ( fxMesa->dirty & TDFX_UPLOAD_RENDER_BUFFER ) { fxMesa->Glide.grRenderBuffer( fxMesa->DrawBuffer ); fxMesa->dirty &= ~TDFX_UPLOAD_RENDER_BUFFER; } if ( fxMesa->dirty & TDFX_UPLOAD_STIPPLE) { fxMesa->Glide.grStipplePattern( fxMesa->Stipple.Pattern ); fxMesa->Glide.grStippleMode( fxMesa->Stipple.Mode ); fxMesa->dirty &= ~TDFX_UPLOAD_STIPPLE; } if ( fxMesa->dirty & TDFX_UPLOAD_ALPHA_TEST ) { fxMesa->Glide.grAlphaTestFunction( fxMesa->Color.AlphaFunc ); fxMesa->dirty &= ~TDFX_UPLOAD_ALPHA_TEST; } if ( fxMesa->dirty & TDFX_UPLOAD_ALPHA_REF ) { fxMesa->Glide.grAlphaTestReferenceValue( fxMesa->Color.AlphaRef ); fxMesa->dirty &= ~TDFX_UPLOAD_ALPHA_REF; } if ( fxMesa->dirty & TDFX_UPLOAD_BLEND_FUNC ) { if (fxMesa->Glide.grAlphaBlendFunctionExt) { fxMesa->Glide.grAlphaBlendFunctionExt( fxMesa->Color.BlendSrcRGB, fxMesa->Color.BlendDstRGB, fxMesa->Color.BlendEqRGB, fxMesa->Color.BlendSrcA, fxMesa->Color.BlendDstA, fxMesa->Color.BlendEqA ); } else { fxMesa->Glide.grAlphaBlendFunction( fxMesa->Color.BlendSrcRGB, fxMesa->Color.BlendDstRGB, fxMesa->Color.BlendSrcA, fxMesa->Color.BlendDstA ); } fxMesa->dirty &= ~TDFX_UPLOAD_BLEND_FUNC; } if ( fxMesa->dirty & TDFX_UPLOAD_DEPTH_MODE ) { fxMesa->Glide.grDepthBufferMode( fxMesa->Depth.Mode ); fxMesa->dirty &= ~TDFX_UPLOAD_DEPTH_MODE; } if ( fxMesa->dirty & TDFX_UPLOAD_DEPTH_BIAS ) { fxMesa->Glide.grDepthBiasLevel( fxMesa->Depth.Bias ); fxMesa->dirty &= ~TDFX_UPLOAD_DEPTH_BIAS; } if ( fxMesa->dirty & TDFX_UPLOAD_DEPTH_FUNC ) { fxMesa->Glide.grDepthBufferFunction( fxMesa->Depth.Func ); fxMesa->dirty &= ~TDFX_UPLOAD_DEPTH_FUNC; } if ( fxMesa->dirty & TDFX_UPLOAD_DEPTH_MASK ) { fxMesa->Glide.grDepthMask( fxMesa->Depth.Mask ); fxMesa->dirty &= ~TDFX_UPLOAD_DEPTH_MASK; } if ( fxMesa->dirty & TDFX_UPLOAD_DITHER) { fxMesa->Glide.grDitherMode( fxMesa->Color.Dither ); } if ( fxMesa->dirty & TDFX_UPLOAD_FOG_MODE ) { fxMesa->Glide.grFogMode( fxMesa->Fog.Mode ); fxMesa->dirty &= ~TDFX_UPLOAD_FOG_MODE; } if ( fxMesa->dirty & TDFX_UPLOAD_FOG_COLOR ) { fxMesa->Glide.grFogColorValue( fxMesa->Fog.Color ); fxMesa->dirty &= ~TDFX_UPLOAD_FOG_COLOR; } if ( fxMesa->dirty & TDFX_UPLOAD_FOG_TABLE ) { fxMesa->Glide.grFogTable( fxMesa->Fog.Table ); fxMesa->dirty &= ~TDFX_UPLOAD_FOG_TABLE; } if ( fxMesa->dirty & TDFX_UPLOAD_CULL ) { fxMesa->Glide.grCullMode( fxMesa->CullMode ); fxMesa->dirty &= ~TDFX_UPLOAD_CULL; } if ( fxMesa->dirty & TDFX_UPLOAD_CLIP ) { tdfxUploadClipping( fxMesa ); fxMesa->dirty &= ~TDFX_UPLOAD_CLIP; } if ( fxMesa->dirty & TDFX_UPLOAD_COLOR_MASK ) { if ( fxMesa->Glide.grColorMaskExt && fxMesa->glCtx->Visual.redBits == 8) { fxMesa->Glide.grColorMaskExt( fxMesa->Color.ColorMask[RCOMP], fxMesa->Color.ColorMask[GCOMP], fxMesa->Color.ColorMask[BCOMP], fxMesa->Color.ColorMask[ACOMP] ); } else { fxMesa->Glide.grColorMask( fxMesa->Color.ColorMask[RCOMP] || fxMesa->Color.ColorMask[GCOMP] || fxMesa->Color.ColorMask[BCOMP], /*fxMesa->Color.ColorMask[ACOMP]*/GL_FALSE/*[dBorca] no-no*/ ); } fxMesa->dirty &= ~TDFX_UPLOAD_COLOR_MASK; } if ( fxMesa->dirty & TDFX_UPLOAD_CONSTANT_COLOR ) { fxMesa->Glide.grConstantColorValue( fxMesa->Color.MonoColor ); fxMesa->dirty &= ~TDFX_UPLOAD_CONSTANT_COLOR; } if ( fxMesa->dirty & TDFX_UPLOAD_LINE ) { if (fxMesa->glCtx->Line.SmoothFlag && fxMesa->glCtx->Line.Width == 1.0) fxMesa->Glide.grEnable(GR_AA_ORDERED); else fxMesa->Glide.grDisable(GR_AA_ORDERED); fxMesa->dirty &= ~TDFX_UPLOAD_LINE; } if ( fxMesa->dirty & TDFX_UPLOAD_STENCIL ) { if (fxMesa->glCtx->Stencil.Enabled) { fxMesa->Glide.grEnable(GR_STENCIL_MODE_EXT); fxMesa->Glide.grStencilOp(fxMesa->Stencil.FailFunc, fxMesa->Stencil.ZFailFunc, fxMesa->Stencil.ZPassFunc); fxMesa->Glide.grStencilFunc(fxMesa->Stencil.Function, fxMesa->Stencil.RefValue, fxMesa->Stencil.ValueMask); fxMesa->Glide.grStencilMask(fxMesa->Stencil.WriteMask); } else { fxMesa->Glide.grDisable(GR_STENCIL_MODE_EXT); } fxMesa->dirty &= ~TDFX_UPLOAD_STENCIL; } if ( fxMesa->dirty & TDFX_UPLOAD_VERTEX_LAYOUT ) { fxMesa->Glide.grGlideSetVertexLayout( fxMesa->layout[fxMesa->vertexFormat] ); /* [dborca] enable fogcoord */ fxMesa->Glide.grVertexLayout(GR_PARAM_FOG_EXT, TDFX_FOG_OFFSET, fxMesa->Fog.Mode == GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT); fxMesa->dirty &= ~TDFX_UPLOAD_VERTEX_LAYOUT; } if ( fxMesa->dirty & TDFX_UPLOAD_TEXTURE_ENV ) { uploadTextureEnv(fxMesa); fxMesa->dirty &= ~TDFX_UPLOAD_TEXTURE_ENV; } if ( fxMesa->dirty & TDFX_UPLOAD_TEXTURE_PARAMS ) { uploadTextureParams(fxMesa); fxMesa->dirty &= ~TDFX_UPLOAD_TEXTURE_PARAMS; } if ( fxMesa->dirty & TDFX_UPLOAD_TEXTURE_PALETTE ) { if (fxMesa->TexPalette.Data) { fxMesa->Glide.grTexDownloadTable(fxMesa->TexPalette.Type, fxMesa->TexPalette.Data); } fxMesa->dirty &= ~TDFX_UPLOAD_TEXTURE_PALETTE; } if ( fxMesa->dirty & TDFX_UPLOAD_TEXTURE_SOURCE ) { uploadTextureSource(fxMesa); fxMesa->dirty &= ~TDFX_UPLOAD_TEXTURE_SOURCE; } if ( fxMesa->dirty & TDFX_UPLOAD_TEXTURE_IMAGES ) { uploadTextureImages(fxMesa); fxMesa->dirty &= ~TDFX_UPLOAD_TEXTURE_IMAGES; } fxMesa->dirty = 0;}void tdfxInitRenderFuncs( struct dd_function_table *functions ){ functions->Clear = tdfxClear; functions->Finish = tdfxFinish; functions->Flush = tdfxFlush;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -