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

📄 fxsetup.h

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