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

📄 tdfx_render.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 3 页
字号:
                                           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 + -