📄 fxsetup.h
字号:
/* * Mesa 3-D graphics library * Version: 4.0 * * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. *//* Authors: * David Bucciarelli * Brian Paul * Daryll Strauss * Keith Whitwell * Daniel Borca * Hiroshi Morii *//* fxsetup.c - 3Dfx VooDoo rendering mode setup functions *//* This code belongs to fxsetup.c, but I didn't want to clutter * the original code with Napalm specifics, in order to keep things * clear -- especially for backward compatibility. I should have * put it into another .c file, but I didn't want to export so many * things... * The point is, Napalm uses a different technique for texture env. * SST1 Single texturing: * setup standard grTexCombine * fiddle with grColorCombine/grAlphaCombine * SST1 Multi texturing: * fiddle with grTexCombine/grColorCombine/grAlphaCombine * Napalm Single texturing: * setup standard grColorCombineExt/grAlphaCombineExt * fiddle with grTexColorCombine/grTexAlphaCombine * Napalm Multi texturing: * setup standard grColorCombineExt/grAlphaCombineExt * fiddle with grTexColorCombine/grTexAlphaCombine *//* * These macros are used below when handling COMBINE_EXT. */#define TEXENV_OPERAND_INVERTED(operand) \ (((operand) == GL_ONE_MINUS_SRC_ALPHA) \ || ((operand) == GL_ONE_MINUS_SRC_COLOR))#define TEXENV_OPERAND_ALPHA(operand) \ (((operand) == GL_SRC_ALPHA) || ((operand) == GL_ONE_MINUS_SRC_ALPHA))#define TEXENV_SETUP_ARG_A(param, source, operand, iteratedAlpha) \ switch (source) { \ case GL_TEXTURE: \ param = GR_CMBX_LOCAL_TEXTURE_ALPHA; \ break; \ case GL_CONSTANT_EXT: \ param = GR_CMBX_TMU_CALPHA; \ break; \ case GL_PRIMARY_COLOR_EXT: \ param = GR_CMBX_ITALPHA; \ break; \ case GL_PREVIOUS_EXT: \ param = iteratedAlpha; \ break; \ default: \ /* \ * This is here just to keep from getting \ * compiler warnings. \ */ \ param = GR_CMBX_ZERO; \ break; \ }#define TEXENV_SETUP_ARG_RGB(param, source, operand, iteratedColor, iteratedAlpha) \ if (!TEXENV_OPERAND_ALPHA(operand)) { \ switch (source) { \ case GL_TEXTURE: \ param = GR_CMBX_LOCAL_TEXTURE_RGB; \ break; \ case GL_CONSTANT_EXT: \ param = GR_CMBX_TMU_CCOLOR; \ break; \ case GL_PRIMARY_COLOR_EXT: \ param = GR_CMBX_ITRGB; \ break; \ case GL_PREVIOUS_EXT: \ param = iteratedColor; \ break; \ default: \ /* \ * This is here just to keep from getting \ * compiler warnings. \ */ \ param = GR_CMBX_ZERO; \ break; \ } \ } else { \ switch (source) { \ case GL_TEXTURE: \ param = GR_CMBX_LOCAL_TEXTURE_ALPHA; \ break; \ case GL_CONSTANT_EXT: \ param = GR_CMBX_TMU_CALPHA; \ break; \ case GL_PRIMARY_COLOR_EXT: \ param = GR_CMBX_ITALPHA; \ break; \ case GL_PREVIOUS_EXT: \ param = iteratedAlpha; \ break; \ default: \ /* \ * This is here just to keep from getting \ * compiler warnings. \ */ \ param = GR_CMBX_ZERO; \ break; \ } \ }#define TEXENV_SETUP_MODE_RGB(param, operand) \ switch (operand) { \ case GL_SRC_COLOR: \ case GL_SRC_ALPHA: \ param = GR_FUNC_MODE_X; \ break; \ case GL_ONE_MINUS_SRC_ALPHA: \ case GL_ONE_MINUS_SRC_COLOR: \ param = GR_FUNC_MODE_ONE_MINUS_X; \ break; \ default: \ param = GR_FUNC_MODE_ZERO; \ break; \ }#define TEXENV_SETUP_MODE_A(param, operand) \ switch (operand) { \ case GL_SRC_ALPHA: \ param = GR_FUNC_MODE_X; \ break; \ case GL_ONE_MINUS_SRC_ALPHA: \ param = GR_FUNC_MODE_ONE_MINUS_X; \ break; \ default: \ param = GR_FUNC_MODE_ZERO; \ break; \ }static voidfxSetupTextureEnvNapalm_NoLock(GLcontext * ctx, GLuint textureset, GLuint tmu, GLboolean iterated){ fxMesaContext fxMesa = FX_CONTEXT(ctx); const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[textureset]; struct tdfx_combine_alpha_ext alphaComb; struct tdfx_combine_color_ext colorComb; const GLfloat *envColor = texUnit->EnvColor; GrCombineLocal_t localc, locala; /* fragmentColor/Alpha */ GLint ifmt; tfxTexInfo *ti; struct gl_texture_object *tObj = texUnit->_Current; if (TDFX_DEBUG & VERBOSE_DRIVER) { fprintf(stderr, "fxSetupTextureEnvNapalm_NoLock(unit %u, TMU %u, iterated %d)\n", textureset, tmu, iterated); } ti = fxTMGetTexInfo(tObj); ifmt = ti->baseLevelInternalFormat; if (iterated) { /* we don't have upstream TMU */ locala = GR_CMBX_ITALPHA; localc = GR_CMBX_ITRGB; } else { /* we have upstream TMU */ locala = GR_CMBX_OTHER_TEXTURE_ALPHA; localc = GR_CMBX_OTHER_TEXTURE_RGB; } alphaComb.InvertD = FXFALSE; alphaComb.Shift = 0; alphaComb.Invert = FXFALSE; colorComb.InvertD = FXFALSE; colorComb.Shift = 0; colorComb.Invert = FXFALSE; switch (texUnit->EnvMode) { case GL_DECAL: 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; colorComb.SourceA = GR_CMBX_LOCAL_TEXTURE_RGB; colorComb.ModeA = GR_FUNC_MODE_X; colorComb.SourceB = localc; colorComb.ModeB = GR_FUNC_MODE_NEGATIVE_X; colorComb.SourceC = GR_CMBX_LOCAL_TEXTURE_ALPHA; colorComb.InvertC = FXFALSE; colorComb.SourceD = GR_CMBX_B; break; case GL_MODULATE: 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 = 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_ZERO; colorComb.ModeB = GR_FUNC_MODE_X; colorComb.SourceC = GR_CMBX_LOCAL_TEXTURE_RGB; colorComb.InvertC = FXFALSE; colorComb.SourceD = GR_CMBX_ZERO; } break; case GL_BLEND: if (ifmt == GL_INTENSITY) { alphaComb.SourceA = GR_CMBX_TMU_CALPHA; alphaComb.ModeA = GR_FUNC_MODE_X; alphaComb.SourceB = locala; alphaComb.ModeB = GR_FUNC_MODE_X; alphaComb.SourceC = GR_CMBX_LOCAL_TEXTURE_ALPHA; alphaComb.InvertC = FXFALSE; 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 = GR_CMBX_TMU_CCOLOR; colorComb.ModeA = GR_FUNC_MODE_X; colorComb.SourceB = localc;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -