📄 tdfx_render.c
字号:
fxMesa->Color.ClearAlpha, fxMesa->Depth.Clear, (FxU32) (ctx->Stencil.Clear & 0xff)); else fxMesa->Glide.grBufferClear(fxMesa->Color.ClearColor, fxMesa->Color.ClearAlpha, fxMesa->Depth.Clear); FX_grColorMaskv_NoLock(ctx, true4); if (ctx->DrawBuffer->_ColorDrawBufferIndexes[0] == BUFFER_FRONT_LEFT) fxMesa->Glide.grRenderBuffer(GR_BUFFER_FRONTBUFFER); if (!ctx->Depth.Test || !ctx->Depth.Mask) fxMesa->Glide.grDepthMask(FXFALSE); break; default: /* clear no color buffers or depth buffer but might clear stencil */ if (stencil_size > 0 && (mask & BUFFER_BIT_STENCIL)) { /* XXX need this RenderBuffer call to work around Glide bug */ fxMesa->Glide.grRenderBuffer(GR_BUFFER_BACKBUFFER); fxMesa->Glide.grDepthMask(FXFALSE); FX_grColorMaskv_NoLock(ctx, false4); fxMesa->Glide.grBufferClearExt(fxMesa->Color.ClearColor, fxMesa->Color.ClearAlpha, fxMesa->Depth.Clear, (FxU32) (ctx->Stencil.Clear & 0xff)); if (ctx->Depth.Mask && ctx->Depth.Test) { fxMesa->Glide.grDepthMask(FXTRUE); } FX_grColorMaskv_NoLock(ctx, true4); if (ctx->DrawBuffer->_ColorDrawBufferIndexes[0] == BUFFER_FRONT_LEFT) fxMesa->Glide.grRenderBuffer(GR_BUFFER_FRONTBUFFER); } } } END_CLIP_LOOP(fxMesa); if (fxMesa->haveHwStencil && (mask & BUFFER_BIT_STENCIL)) { /* We changed the stencil state above. Signal that we need to * upload it again. */ fxMesa->dirty |= TDFX_UPLOAD_STENCIL; } if (softwareMask) _swrast_Clear(ctx, softwareMask);}static void tdfxFinish( GLcontext *ctx ){ tdfxContextPtr fxMesa = TDFX_CONTEXT(ctx); FLUSH_BATCH( fxMesa ); LOCK_HARDWARE( fxMesa ); fxMesa->Glide.grFinish(); UNLOCK_HARDWARE( fxMesa );}static void tdfxFlush( GLcontext *ctx ){ tdfxContextPtr fxMesa = TDFX_CONTEXT(ctx); FLUSH_BATCH( fxMesa ); LOCK_HARDWARE( fxMesa ); fxMesa->Glide.grFlush(); UNLOCK_HARDWARE( fxMesa );}#if 0static const char *texSource(int k){ switch (k) { case GR_CMBX_ZERO: return "GR_CMBX_ZERO"; case GR_CMBX_TEXTURE_ALPHA: return "GR_CMBX_TEXTURE_ALPHA"; case GR_CMBX_ALOCAL: return "GR_CMBX_ALOCAL"; case GR_CMBX_AOTHER: return "GR_CMBX_AOTHER"; case GR_CMBX_B: return "GR_CMBX_B"; case GR_CMBX_CONSTANT_ALPHA: return "GR_CMBX_CONSTANT_ALPHA"; case GR_CMBX_CONSTANT_COLOR: return "GR_CMBX_CONSTANT_COLOR"; case GR_CMBX_DETAIL_FACTOR: return "GR_CMBX_DETAIL_FACTOR"; case GR_CMBX_ITALPHA: return "GR_CMBX_ITALPHA"; case GR_CMBX_ITRGB: return "GR_CMBX_ITRGB"; case GR_CMBX_LOCAL_TEXTURE_ALPHA: return "GR_CMBX_LOCAL_TEXTURE_ALPHA"; case GR_CMBX_LOCAL_TEXTURE_RGB: return "GR_CMBX_LOCAL_TEXTURE_RGB"; case GR_CMBX_LOD_FRAC: return "GR_CMBX_LOD_FRAC"; case GR_CMBX_OTHER_TEXTURE_ALPHA: return "GR_CMBX_OTHER_TEXTURE_ALPHA"; case GR_CMBX_OTHER_TEXTURE_RGB: return "GR_CMBX_OTHER_TEXTURE_RGB"; case GR_CMBX_TEXTURE_RGB: return "GR_CMBX_TEXTURE_RGB"; case GR_CMBX_TMU_CALPHA: return "GR_CMBX_TMU_CALPHA"; case GR_CMBX_TMU_CCOLOR: return "GR_CMBX_TMU_CCOLOR"; default: return ""; }}#endif#if 0static const char *texMode(int k){ switch (k) { case GR_FUNC_MODE_ZERO: return "GR_FUNC_MODE_ZERO"; case GR_FUNC_MODE_X: return "GR_FUNC_MODE_X"; case GR_FUNC_MODE_ONE_MINUS_X: return "GR_FUNC_MODE_ONE_MINUS_X"; case GR_FUNC_MODE_NEGATIVE_X: return "GR_FUNC_MODE_NEGATIVE_X"; case GR_FUNC_MODE_X_MINUS_HALF: return "GR_FUNC_MODE_X_MINUS_HALF"; default: return ""; }}#endif#if 0static const char *texInvert(int k){ return k ? "FXTRUE" : "FXFALSE";}#endifstatic void uploadTextureEnv( tdfxContextPtr fxMesa ){ if (TDFX_IS_NAPALM(fxMesa)) { int unit; for (unit = 0; unit < TDFX_NUM_TMU; unit++) {#if 0 printf("upload env %d\n", unit); printf(" cSourceA = %s\t", texSource(fxMesa->TexCombineExt[unit].Color.SourceA)); printf(" cModeA = %s\n", texMode(fxMesa->TexCombineExt[unit].Color.ModeA)); printf(" cSourceB = %s\t", texSource(fxMesa->TexCombineExt[unit].Color.SourceB)); printf(" cModeB = %s\n", texMode(fxMesa->TexCombineExt[unit].Color.ModeB)); printf(" cSourceC = %s\t", texSource(fxMesa->TexCombineExt[unit].Color.SourceC)); printf(" cInvertC = %s\n", texInvert(fxMesa->TexCombineExt[unit].Color.InvertC)); printf(" cSourceD = %s\t", texSource(fxMesa->TexCombineExt[unit].Color.SourceD)); printf(" cInvertD = %s\n", texInvert(fxMesa->TexCombineExt[unit].Color.InvertD)); printf(" cShift = %d\t", fxMesa->TexCombineExt[unit].Color.Shift); printf(" cInvert = %d\n", fxMesa->TexCombineExt[unit].Color.Invert); printf(" aSourceA = %s\t", texSource(fxMesa->TexCombineExt[unit].Alpha.SourceA)); printf(" aModeA = %s\n", texMode(fxMesa->TexCombineExt[unit].Alpha.ModeA)); printf(" aSourceB = %s\t", texSource(fxMesa->TexCombineExt[unit].Alpha.SourceB)); printf(" aModeB = %s\n", texMode(fxMesa->TexCombineExt[unit].Alpha.ModeB)); printf(" aSourceC = %s\t", texSource(fxMesa->TexCombineExt[unit].Alpha.SourceC)); printf(" aInvertC = %s\n", texInvert(fxMesa->TexCombineExt[unit].Alpha.InvertC)); printf(" aSourceD = %s\t", texSource(fxMesa->TexCombineExt[unit].Alpha.SourceD)); printf(" aInvertD = %s\n", texInvert(fxMesa->TexCombineExt[unit].Alpha.InvertD)); printf(" aShift = %d\t", fxMesa->TexCombineExt[unit].Alpha.Shift); printf(" aInvert = %d\n", fxMesa->TexCombineExt[unit].Alpha.Invert); printf(" Color = 0x%08x\n", fxMesa->TexCombineExt[unit].EnvColor);#endif fxMesa->Glide.grTexColorCombineExt(TDFX_TMU0 + unit, fxMesa->TexCombineExt[unit].Color.SourceA, fxMesa->TexCombineExt[unit].Color.ModeA, fxMesa->TexCombineExt[unit].Color.SourceB, fxMesa->TexCombineExt[unit].Color.ModeB, fxMesa->TexCombineExt[unit].Color.SourceC, fxMesa->TexCombineExt[unit].Color.InvertC, fxMesa->TexCombineExt[unit].Color.SourceD, fxMesa->TexCombineExt[unit].Color.InvertD, fxMesa->TexCombineExt[unit].Color.Shift, fxMesa->TexCombineExt[unit].Color.Invert); fxMesa->Glide.grTexAlphaCombineExt(TDFX_TMU0 + unit, fxMesa->TexCombineExt[unit].Alpha.SourceA, fxMesa->TexCombineExt[unit].Alpha.ModeA, fxMesa->TexCombineExt[unit].Alpha.SourceB, fxMesa->TexCombineExt[unit].Alpha.ModeB, fxMesa->TexCombineExt[unit].Alpha.SourceC, fxMesa->TexCombineExt[unit].Alpha.InvertC, fxMesa->TexCombineExt[unit].Alpha.SourceD, fxMesa->TexCombineExt[unit].Alpha.InvertD, fxMesa->TexCombineExt[unit].Alpha.Shift, fxMesa->TexCombineExt[unit].Alpha.Invert); fxMesa->Glide.grConstantColorValueExt(TDFX_TMU0 + unit, fxMesa->TexCombineExt[unit].EnvColor); } } else { /* Voodoo3 */ int unit; for (unit = 0; unit < TDFX_NUM_TMU; unit++) { struct tdfx_texcombine *comb = &fxMesa->TexCombine[unit]; fxMesa->Glide.grTexCombine(TDFX_TMU0 + unit, comb->FunctionRGB, comb->FactorRGB, comb->FunctionAlpha, comb->FactorAlpha, comb->InvertRGB, comb->InvertAlpha); } }}static void uploadTextureParams( tdfxContextPtr fxMesa ){ int unit; for (unit = 0; unit < TDFX_NUM_TMU; unit++) { const struct tdfx_texparams *p = &fxMesa->TexParams[unit]; /* printf("upload params %d\n", unit); printf(" clamp %x %x\n", env->sClamp, env->tClamp); printf(" filter %x %x\n", env->minFilt, env->magFilt); printf(" mipmap %x %x\n", env->mmMode, env->LODblend); printf(" lod bias %f\n", env->LodBias); */ fxMesa->Glide.grTexClampMode(GR_TMU0 + unit, p->sClamp, p->tClamp); fxMesa->Glide.grTexFilterMode(GR_TMU0 + unit, p->minFilt, p->magFilt); fxMesa->Glide.grTexMipMapMode(GR_TMU0 + unit, p->mmMode, p->LODblend); fxMesa->Glide.grTexLodBiasValue(GR_TMU0 + unit, CLAMP(p->LodBias, -8, 7.75)); }}static void uploadTextureSource( tdfxContextPtr fxMesa ){ int unit; for (unit = 0; unit < TDFX_NUM_TMU; unit++) { const struct tdfx_texsource *src = &fxMesa->TexSource[unit]; /* printf("upload source %d @ %d %p\n", unit, src->StartAddress, src->Info); */ if (src->Info) { /* printf(" smallLodLog2=%d largeLodLog2=%d ar=%d format=%d data=%p\n", src->Info->smallLodLog2, src->Info->largeLodLog2, src->Info->aspectRatioLog2, src->Info->format, src->Info->data); */ fxMesa->Glide.grTexSource(GR_TMU0 + unit, src->StartAddress, src->EvenOdd, src->Info); } }}static void uploadTextureImages( tdfxContextPtr fxMesa ){ GLcontext *ctx = fxMesa->glCtx; int unit; for (unit = 0; unit < TDFX_NUM_TMU; unit++) { if (ctx->Texture.Unit[unit]._ReallyEnabled & (TEXTURE_1D_BIT|TEXTURE_2D_BIT)) { struct gl_texture_object *tObj = ctx->Texture.Unit[unit]._Current; tdfxTexInfo *ti = TDFX_TEXTURE_DATA(tObj); if (ti && ti->reloadImages && ti->whichTMU != TDFX_TMU_NONE) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -