📄 fxsetup.h
字号:
colorComb.ModeB = GR_FUNC_MODE_NEGATIVE_X; colorComb.SourceC = GR_CMBX_LOCAL_TEXTURE_RGB; colorComb.InvertC = FXFALSE; colorComb.SourceD = GR_CMBX_B; } fxMesa->Glide.grConstantColorValueExt(tmu, (((GLuint)(envColor[0] * 255.0f)) ) | (((GLuint)(envColor[1] * 255.0f)) << 8) | (((GLuint)(envColor[2] * 255.0f)) << 16) | (((GLuint)(envColor[3] * 255.0f)) << 24)); break; case GL_REPLACE: if (ifmt == GL_LUMINANCE || ifmt == GL_RGB) { alphaComb.SourceA = locala; alphaComb.ModeA = GR_FUNC_MODE_X; alphaComb.SourceB = GR_CMBX_ZERO; alphaComb.ModeB = GR_FUNC_MODE_X; alphaComb.SourceC = GR_CMBX_ZERO; alphaComb.InvertC = FXTRUE; alphaComb.SourceD = GR_CMBX_ZERO; } else { alphaComb.SourceA = GR_CMBX_LOCAL_TEXTURE_ALPHA; alphaComb.ModeA = GR_FUNC_MODE_X; alphaComb.SourceB = GR_CMBX_ZERO; alphaComb.ModeB = GR_FUNC_MODE_X; alphaComb.SourceC = GR_CMBX_ZERO; alphaComb.InvertC = FXTRUE; alphaComb.SourceD = GR_CMBX_ZERO; } if (ifmt == GL_ALPHA) { colorComb.SourceA = localc; colorComb.ModeA = GR_FUNC_MODE_X; colorComb.SourceB = GR_CMBX_ZERO; colorComb.ModeB = GR_FUNC_MODE_X; colorComb.SourceC = GR_CMBX_ZERO; colorComb.InvertC = FXTRUE; colorComb.SourceD = GR_CMBX_ZERO; } else { colorComb.SourceA = GR_CMBX_LOCAL_TEXTURE_RGB; colorComb.ModeA = GR_FUNC_MODE_X; colorComb.SourceB = GR_CMBX_ZERO; colorComb.ModeB = GR_FUNC_MODE_X; colorComb.SourceC = GR_CMBX_ZERO; colorComb.InvertC = FXTRUE; colorComb.SourceD = GR_CMBX_ZERO; } break; case GL_ADD: if (ifmt == GL_LUMINANCE || ifmt == GL_RGB) { alphaComb.SourceA = locala; alphaComb.ModeA = GR_FUNC_MODE_X; alphaComb.SourceB = GR_CMBX_ZERO; alphaComb.ModeB = GR_FUNC_MODE_X; alphaComb.SourceC = GR_CMBX_ZERO; alphaComb.InvertC = FXTRUE; alphaComb.SourceD = GR_CMBX_ZERO; } else if (ifmt == GL_INTENSITY) { alphaComb.SourceA = locala; alphaComb.ModeA = GR_FUNC_MODE_X; alphaComb.SourceB = GR_CMBX_LOCAL_TEXTURE_ALPHA; alphaComb.ModeB = GR_FUNC_MODE_X; alphaComb.SourceC = GR_CMBX_ZERO; alphaComb.InvertC = FXTRUE; alphaComb.SourceD = GR_CMBX_ZERO; } else { alphaComb.SourceA = locala; alphaComb.ModeA = GR_FUNC_MODE_X; alphaComb.SourceB = GR_CMBX_ZERO; alphaComb.ModeB = GR_FUNC_MODE_X; alphaComb.SourceC = GR_CMBX_LOCAL_TEXTURE_ALPHA; alphaComb.InvertC = FXFALSE; alphaComb.SourceD = GR_CMBX_ZERO; } if (ifmt == GL_ALPHA) { colorComb.SourceA = localc; colorComb.ModeA = GR_FUNC_MODE_X; colorComb.SourceB = GR_CMBX_ZERO; colorComb.ModeB = GR_FUNC_MODE_X; colorComb.SourceC = GR_CMBX_ZERO; colorComb.InvertC = FXTRUE; colorComb.SourceD = GR_CMBX_ZERO; } else { colorComb.SourceA = localc; colorComb.ModeA = GR_FUNC_MODE_X; colorComb.SourceB = GR_CMBX_LOCAL_TEXTURE_RGB; colorComb.ModeB = GR_FUNC_MODE_X; colorComb.SourceC = GR_CMBX_ZERO; colorComb.InvertC = FXTRUE; colorComb.SourceD = GR_CMBX_ZERO; } break; /* COMBINE_EXT */ case GL_COMBINE_EXT: /* XXX todo - INCOMPLETE!!! */ if (TDFX_DEBUG & (VERBOSE_DRIVER | VERBOSE_TEXTURE)) {#if 1 fprintf(stderr, "COMBINE_EXT: %s + %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.ModeRGB), _mesa_lookup_enum_by_nr(texUnit->Combine.ModeA));#else fprintf(stderr, "Texture Unit %d\n", textureset); fprintf(stderr, " GL_TEXTURE_ENV_MODE = %s\n", _mesa_lookup_enum_by_nr(texUnit->EnvMode)); fprintf(stderr, " GL_COMBINE_RGB = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.ModeRGB)); fprintf(stderr, " GL_COMBINE_ALPHA = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.ModeA)); fprintf(stderr, " GL_SOURCE0_RGB = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.SourceRGB[0])); fprintf(stderr, " GL_SOURCE1_RGB = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.SourceRGB[1])); fprintf(stderr, " GL_SOURCE2_RGB = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.SourceRGB[2])); fprintf(stderr, " GL_SOURCE0_ALPHA = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.SourceA[0])); fprintf(stderr, " GL_SOURCE1_ALPHA = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.SourceA[1])); fprintf(stderr, " GL_SOURCE2_ALPHA = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.SourceA[2])); fprintf(stderr, " GL_OPERAND0_RGB = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.OperandRGB[0])); fprintf(stderr, " GL_OPERAND1_RGB = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.OperandRGB[1])); fprintf(stderr, " GL_OPERAND2_RGB = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.OperandRGB[2])); fprintf(stderr, " GL_OPERAND0_ALPHA = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.OperandA[0])); fprintf(stderr, " GL_OPERAND1_ALPHA = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.OperandA[1])); fprintf(stderr, " GL_OPERAND2_ALPHA = %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.OperandA[2])); fprintf(stderr, " GL_RGB_SCALE = %d\n", 1 << texUnit->Combine.ScaleShiftRGB); fprintf(stderr, " GL_ALPHA_SCALE = %d\n", 1 << texUnit->Combine.ScaleShiftA); fprintf(stderr, " GL_TEXTURE_ENV_COLOR = (%f, %f, %f, %f)\n", envColor[0], envColor[1], envColor[2], envColor[3]);#endif } alphaComb.Shift = texUnit->Combine.ScaleShiftA; colorComb.Shift = texUnit->Combine.ScaleShiftRGB; switch (texUnit->Combine.ModeRGB) { case GL_MODULATE: /* Arg0 * Arg1 == (A + 0) * C + 0 */ TEXENV_SETUP_ARG_RGB(colorComb.SourceA, texUnit->Combine.SourceRGB[0], texUnit->Combine.OperandRGB[0], localc, locala); TEXENV_SETUP_MODE_RGB(colorComb.ModeA, texUnit->Combine.OperandRGB[0]); colorComb.SourceB = GR_CMBX_ZERO; colorComb.ModeB = GR_FUNC_MODE_ZERO; TEXENV_SETUP_ARG_RGB(colorComb.SourceC, texUnit->Combine.SourceRGB[1], texUnit->Combine.OperandRGB[1], localc, locala); colorComb.InvertC = TEXENV_OPERAND_INVERTED( texUnit->Combine.OperandRGB[1]); colorComb.SourceD = GR_CMBX_ZERO; break; case GL_REPLACE: /* Arg0 == (A + 0) * 1 + 0 */ TEXENV_SETUP_ARG_RGB(colorComb.SourceA, texUnit->Combine.SourceRGB[0], texUnit->Combine.OperandRGB[0], localc, locala); TEXENV_SETUP_MODE_RGB(colorComb.ModeA, texUnit->Combine.OperandRGB[0]); colorComb.SourceB = GR_CMBX_ZERO; colorComb.ModeB = GR_FUNC_MODE_ZERO; colorComb.SourceC = GR_CMBX_ZERO; colorComb.InvertC = FXTRUE; colorComb.SourceD = GR_CMBX_ZERO; break; case GL_ADD: /* Arg0 + Arg1 = (A + B) * 1 + 0 */ TEXENV_SETUP_ARG_RGB(colorComb.SourceA, texUnit->Combine.SourceRGB[0], texUnit->Combine.OperandRGB[0], localc, locala); TEXENV_SETUP_MODE_RGB(colorComb.ModeA, texUnit->Combine.OperandRGB[0]); TEXENV_SETUP_ARG_RGB(colorComb.SourceB, texUnit->Combine.SourceRGB[1], texUnit->Combine.OperandRGB[1], localc, locala); TEXENV_SETUP_MODE_RGB(colorComb.ModeB, texUnit->Combine.OperandRGB[1]); colorComb.SourceC = GR_CMBX_ZERO; colorComb.InvertC = FXTRUE; colorComb.SourceD = GR_CMBX_ZERO; break; case GL_INTERPOLATE_EXT: /* Arg0 * Arg2 + Arg1 * (1 - Arg2) == * (Arg0 - Arg1) * Arg2 + Arg1 == (A - B) * C + D */ TEXENV_SETUP_ARG_RGB(colorComb.SourceA, texUnit->Combine.SourceRGB[0], texUnit->Combine.OperandRGB[0], localc, locala); TEXENV_SETUP_MODE_RGB(colorComb.ModeA, texUnit->Combine.OperandRGB[0]); TEXENV_SETUP_ARG_RGB(colorComb.SourceB, texUnit->Combine.SourceRGB[1], texUnit->Combine.OperandRGB[1], localc, locala); if (TEXENV_OPERAND_INVERTED(texUnit->Combine.OperandRGB[1])) { /* Hack alert!!! This case is wrong!!! */ fprintf(stderr, "COMBINE_EXT_color: WRONG!!!\n"); colorComb.ModeB = GR_FUNC_MODE_NEGATIVE_X; } else { colorComb.ModeB = GR_FUNC_MODE_NEGATIVE_X; } /* * The Source/Operand for the C value must * specify some kind of alpha value. */ TEXENV_SETUP_ARG_A(colorComb.SourceC, texUnit->Combine.SourceRGB[2], texUnit->Combine.OperandRGB[2], locala); colorComb.InvertC = FXFALSE; colorComb.SourceD = GR_CMBX_B; break; default: fprintf(stderr, "COMBINE_EXT_color: %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.ModeRGB)); } switch (texUnit->Combine.ModeA) { case GL_MODULATE: /* Arg0 * Arg1 == (A + 0) * C + 0 */ TEXENV_SETUP_ARG_A(alphaComb.SourceA, texUnit->Combine.SourceA[0], texUnit->Combine.OperandA[0], locala); TEXENV_SETUP_MODE_A(alphaComb.ModeA, texUnit->Combine.OperandA[0]); alphaComb.SourceB = GR_CMBX_ZERO; alphaComb.ModeB = GR_FUNC_MODE_ZERO; TEXENV_SETUP_ARG_A(alphaComb.SourceC, texUnit->Combine.SourceA[1], texUnit->Combine.OperandA[1], locala); alphaComb.InvertC = TEXENV_OPERAND_INVERTED( texUnit->Combine.OperandA[1]); alphaComb.SourceD = GR_CMBX_ZERO; break; case GL_REPLACE: /* Arg0 == (A + 0) * 1 + 0 */ TEXENV_SETUP_ARG_A(alphaComb.SourceA, texUnit->Combine.SourceA[0], texUnit->Combine.OperandA[0], locala); TEXENV_SETUP_MODE_A(alphaComb.ModeA, texUnit->Combine.OperandA[0]); alphaComb.SourceB = GR_CMBX_ZERO; alphaComb.ModeB = GR_FUNC_MODE_ZERO; alphaComb.SourceC = GR_CMBX_ZERO; alphaComb.InvertC = FXTRUE; alphaComb.SourceD = GR_CMBX_ZERO; break; case GL_ADD: /* Arg0 + Arg1 = (A + B) * 1 + 0 */ TEXENV_SETUP_ARG_A(alphaComb.SourceA, texUnit->Combine.SourceA[0], texUnit->Combine.OperandA[0], locala); TEXENV_SETUP_MODE_A(alphaComb.ModeA, texUnit->Combine.OperandA[0]); TEXENV_SETUP_ARG_A(alphaComb.SourceB, texUnit->Combine.SourceA[1], texUnit->Combine.OperandA[1], locala); TEXENV_SETUP_MODE_A(alphaComb.ModeB, texUnit->Combine.OperandA[1]); alphaComb.SourceC = GR_CMBX_ZERO; alphaComb.InvertC = FXTRUE; alphaComb.SourceD = GR_CMBX_ZERO; break; default: fprintf(stderr, "COMBINE_EXT_alpha: %s\n", _mesa_lookup_enum_by_nr(texUnit->Combine.ModeA)); } fxMesa->Glide.grConstantColorValueExt(tmu, (((GLuint)(envColor[0] * 255.0f)) ) | (((GLuint)(envColor[1] * 255.0f)) << 8) | (((GLuint)(envColor[2] * 255.0f)) << 16) | (((GLuint)(envColor[3] * 255.0f)) << 24)); break; default: if (TDFX_DEBUG & VERBOSE_DRIVER) { fprintf(stderr, "fxSetupTextureEnvNapalm_NoLock: %x Texture.EnvMode not yet supported\n", texUnit->EnvMode); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -