📄 fxsetup.h
字号:
return; } /* On Napalm we simply put the color combine unit into passthrough mode * and do everything we need with the texture combine units. */ fxMesa->Glide.grColorCombineExt(GR_CMBX_TEXTURE_RGB, GR_FUNC_MODE_X, GR_CMBX_ZERO, GR_FUNC_MODE_X, GR_CMBX_ZERO, FXTRUE, GR_CMBX_ZERO, FXFALSE, 0, FXFALSE); fxMesa->Glide.grAlphaCombineExt(GR_CMBX_TEXTURE_ALPHA, GR_FUNC_MODE_X, GR_CMBX_ZERO, GR_FUNC_MODE_X, GR_CMBX_ZERO, FXTRUE, GR_CMBX_ZERO, FXFALSE, 0, FXFALSE); fxMesa->Glide.grTexAlphaCombineExt(tmu, alphaComb.SourceA, alphaComb.ModeA, alphaComb.SourceB, alphaComb.ModeB, alphaComb.SourceC, alphaComb.InvertC, alphaComb.SourceD, alphaComb.InvertD, alphaComb.Shift, alphaComb.Invert); fxMesa->Glide.grTexColorCombineExt(tmu, colorComb.SourceA, colorComb.ModeA, colorComb.SourceB, colorComb.ModeB, colorComb.SourceC, colorComb.InvertC, colorComb.SourceD, colorComb.InvertD, colorComb.Shift, colorComb.Invert);}/************************* Single Texture Set ***************************/static voidfxSelectSingleTMUSrcNapalm_NoLock(fxMesaContext fxMesa, GLint tmu, FxBool LODblend){ if (TDFX_DEBUG & VERBOSE_DRIVER) { fprintf(stderr, "fxSelectSingleTMUSrcNapalm_NoLock(%d, %d)\n", tmu, LODblend); } if (LODblend) { /* XXX todo - GR_CMBX_LOD_FRAC? */ fxMesa->tmuSrc = FX_TMU_SPLIT; } else { if (tmu != FX_TMU1) { /* disable tex1 */ if (fxMesa->haveTwoTMUs) { fxMesa->Glide.grTexAlphaCombineExt(FX_TMU1, GR_CMBX_ZERO, GR_FUNC_MODE_ZERO, GR_CMBX_ZERO, GR_FUNC_MODE_ZERO, GR_CMBX_ZERO, FXTRUE, GR_CMBX_ZERO, FXFALSE, 0, FXFALSE); fxMesa->Glide.grTexColorCombineExt(FX_TMU1, GR_CMBX_ZERO, GR_FUNC_MODE_ZERO, GR_CMBX_ZERO, GR_FUNC_MODE_ZERO, GR_CMBX_ZERO, FXTRUE, GR_CMBX_ZERO, FXFALSE, 0, FXFALSE); } fxMesa->tmuSrc = FX_TMU0; } else {#if 1 grTexCombine(GR_TMU0, GR_COMBINE_FUNCTION_BLEND, GR_COMBINE_FACTOR_ONE, GR_COMBINE_FUNCTION_BLEND, GR_COMBINE_FACTOR_ONE, FXFALSE, FXFALSE);#else /* [dBorca] why, oh why? doesn't work! stupid Glide? */ fxMesa->Glide.grTexAlphaCombineExt(FX_TMU0, GR_CMBX_OTHER_TEXTURE_ALPHA, GR_FUNC_MODE_X, GR_CMBX_ZERO, GR_FUNC_MODE_X, GR_CMBX_ZERO, FXTRUE, GR_CMBX_ZERO, FXFALSE, 0, FXFALSE); fxMesa->Glide.grTexColorCombineExt(FX_TMU0, GR_CMBX_OTHER_TEXTURE_RGB, GR_FUNC_MODE_X, GR_CMBX_ZERO, GR_FUNC_MODE_X, GR_CMBX_ZERO, FXTRUE, GR_CMBX_ZERO, FXFALSE, 0, FXFALSE);#endif fxMesa->tmuSrc = FX_TMU1; } }}static voidfxSetupTextureSingleTMUNapalm_NoLock(GLcontext * ctx, GLuint textureset){ fxMesaContext fxMesa = FX_CONTEXT(ctx); GLuint unitsmode; tfxTexInfo *ti; struct gl_texture_object *tObj = ctx->Texture.Unit[textureset]._Current; int tmu; if (TDFX_DEBUG & VERBOSE_DRIVER) { fprintf(stderr, "fxSetupTextureSingleTMUNapalm_NoLock(%d)\n", textureset); } ti = fxTMGetTexInfo(tObj); fxTexValidate(ctx, tObj); fxSetupSingleTMU_NoLock(fxMesa, tObj); if (ti->whichTMU == FX_TMU_BOTH) tmu = FX_TMU0; else tmu = ti->whichTMU; if (fxMesa->tmuSrc != tmu) fxSelectSingleTMUSrcNapalm_NoLock(fxMesa, tmu, ti->LODblend); if (textureset == 0 || !fxMesa->haveTwoTMUs) unitsmode = fxGetTexSetConfiguration(ctx, tObj, NULL); else unitsmode = fxGetTexSetConfiguration(ctx, NULL, tObj);/* if(fxMesa->lastUnitsMode==unitsmode) *//* return; */ fxMesa->lastUnitsMode = unitsmode; fxMesa->stw_hint_state = 0; FX_grHints_NoLock(GR_HINT_STWHINT, 0); if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE)) fprintf(stderr, "fxSetupTextureSingleTMUNapalm_NoLock: envmode is %s\n", _mesa_lookup_enum_by_nr(ctx->Texture.Unit[textureset].EnvMode)); /* [dBorca] Hack alert: * what if we're in split mode? (LODBlend) * also should we update BOTH TMUs in FX_TMU_BOTH mode? */ fxSetupTextureEnvNapalm_NoLock(ctx, textureset, tmu, GL_TRUE);}/************************* Double Texture Set ***************************/static voidfxSetupTextureDoubleTMUNapalm_NoLock(GLcontext * ctx){ fxMesaContext fxMesa = FX_CONTEXT(ctx); tfxTexInfo *ti0, *ti1; struct gl_texture_object *tObj0 = ctx->Texture.Unit[1]._Current; struct gl_texture_object *tObj1 = ctx->Texture.Unit[0]._Current; GLuint unitsmode; int tmu0 = 0, tmu1 = 1; if (TDFX_DEBUG & VERBOSE_DRIVER) { fprintf(stderr, "fxSetupTextureDoubleTMUNapalm_NoLock(...)\n"); } ti0 = fxTMGetTexInfo(tObj0); fxTexValidate(ctx, tObj0); ti1 = fxTMGetTexInfo(tObj1); fxTexValidate(ctx, tObj1); fxSetupDoubleTMU_NoLock(fxMesa, tObj0, tObj1); unitsmode = fxGetTexSetConfiguration(ctx, tObj0, tObj1);/* if(fxMesa->lastUnitsMode==unitsmode) *//* return; */ fxMesa->lastUnitsMode = unitsmode; fxMesa->stw_hint_state |= GR_STWHINT_ST_DIFF_TMU1; FX_grHints_NoLock(GR_HINT_STWHINT, fxMesa->stw_hint_state); if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE)) fprintf(stderr, "fxSetupTextureDoubleTMUNapalm_NoLock: envmode is %s/%s\n", _mesa_lookup_enum_by_nr(ctx->Texture.Unit[0].EnvMode), _mesa_lookup_enum_by_nr(ctx->Texture.Unit[1].EnvMode)); if ((ti0->whichTMU == FX_TMU1) || (ti1->whichTMU == FX_TMU0)) { tmu0 = 1; tmu1 = 0; } fxMesa->tmuSrc = FX_TMU_BOTH; /* OpenGL vs Glide texture pipeline */ fxSetupTextureEnvNapalm_NoLock(ctx, 0, 1, GL_TRUE); fxSetupTextureEnvNapalm_NoLock(ctx, 1, 0, GL_FALSE);}/************************* No Texture ***************************/static voidfxSetupTextureNoneNapalm_NoLock(GLcontext * ctx){ fxMesaContext fxMesa = FX_CONTEXT(ctx); if (TDFX_DEBUG & VERBOSE_DRIVER) { fprintf(stderr, "fxSetupTextureNoneNapalm_NoLock(...)\n"); } /* the combiner formula is: (A + B) * C + D ** ** a = tc_otherselect ** a_mode = tc_invert_other ** b = tc_localselect ** b_mode = tc_invert_local ** c = (tc_mselect, tc_mselect_7) ** d = (tc_add_clocal, tc_add_alocal) ** shift = tc_outshift ** invert = tc_invert_output */ fxMesa->Glide.grColorCombineExt(GR_CMBX_ITRGB, GR_FUNC_MODE_X, GR_CMBX_ZERO, GR_FUNC_MODE_ZERO, GR_CMBX_ZERO, FXTRUE, GR_CMBX_ZERO, FXFALSE, 0, FXFALSE); fxMesa->Glide.grAlphaCombineExt(GR_CMBX_ITALPHA, GR_FUNC_MODE_X, GR_CMBX_ZERO, GR_FUNC_MODE_ZERO, GR_CMBX_ZERO, FXTRUE, GR_CMBX_ZERO, FXFALSE, 0, FXFALSE); fxMesa->lastUnitsMode = FX_UM_NONE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -