📄 fxg.c
字号:
/* * Mesa 3-D graphics library * Version: 5.0.1 * * Copyright (C) 1999-2003 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. *//* * Mesa/FX device driver. Interface to Glide3. * * Copyright (c) 2003 - Daniel Borca * Email : dborca@users.sourceforge.net * Web : http://www.geocities.com/dborca */#ifdef FX#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include <assert.h>#define FX_TRAP_GLIDE_internal#include "fxg.h"/****************************************************************************\* logging *\****************************************************************************/#if FX_TRAP_GLIDE#define TRAP_LOG trp_printf#ifdef __GNUC____attribute__ ((format(printf, 1, 2)))#endif /* __GNUC__ */int trp_printf (const char *format, ...){ va_list arg; int n; FILE *trap_file; va_start(arg, format); trap_file = fopen("trap.log", "a"); if (trap_file == NULL) { trap_file = stderr; } n = vfprintf(trap_file, format, arg); fclose(trap_file); va_end(arg); return n;}#else /* FX_TRAP_GLIDE */#ifdef __GNUC__#define TRAP_LOG(format, ...) do {} while (0)#else /* __GNUC__ */#define TRAP_LOG 0 && (unsigned long)#endif /* __GNUC__ */#endif /* FX_TRAP_GLIDE */#if FX_TRAP_GLIDE/****************************************************************************\* helpers *\****************************************************************************/#define GOT "\t"const char *TRP_BOOL (FxBool b){ return b ? "FXTRUE" : "FXFALSE";}#define TRAP_CASE_STRING(name) case name: return #name#define TRAP_NODEFAULT default: assert(0)const char *TRP_PARAM (FxU32 mode){ switch (mode) { TRAP_CASE_STRING(GR_PARAM_DISABLE); TRAP_CASE_STRING(GR_PARAM_ENABLE); TRAP_NODEFAULT; }}const char *TRP_VTX (FxU32 param){ switch (param) { TRAP_CASE_STRING(GR_PARAM_XY); TRAP_CASE_STRING(GR_PARAM_Z); TRAP_CASE_STRING(GR_PARAM_W); TRAP_CASE_STRING(GR_PARAM_Q); TRAP_CASE_STRING(GR_PARAM_FOG_EXT); TRAP_CASE_STRING(GR_PARAM_A); TRAP_CASE_STRING(GR_PARAM_RGB); TRAP_CASE_STRING(GR_PARAM_PARGB); TRAP_CASE_STRING(GR_PARAM_ST0); TRAP_CASE_STRING(GR_PARAM_ST1); TRAP_CASE_STRING(GR_PARAM_ST2); TRAP_CASE_STRING(GR_PARAM_Q0); TRAP_CASE_STRING(GR_PARAM_Q1); TRAP_CASE_STRING(GR_PARAM_Q2); TRAP_NODEFAULT; }}const char *TRP_ARRAY (FxU32 mode){ switch (mode) { TRAP_CASE_STRING(GR_POINTS); TRAP_CASE_STRING(GR_LINE_STRIP); TRAP_CASE_STRING(GR_LINES); TRAP_CASE_STRING(GR_POLYGON); TRAP_CASE_STRING(GR_TRIANGLE_STRIP); TRAP_CASE_STRING(GR_TRIANGLE_FAN); TRAP_CASE_STRING(GR_TRIANGLES); TRAP_CASE_STRING(GR_TRIANGLE_STRIP_CONTINUE); TRAP_CASE_STRING(GR_TRIANGLE_FAN_CONTINUE); TRAP_NODEFAULT; }}const char *TRP_BUFFER (GrBuffer_t buffer){ switch (buffer) { TRAP_CASE_STRING(GR_BUFFER_FRONTBUFFER); TRAP_CASE_STRING(GR_BUFFER_BACKBUFFER); TRAP_CASE_STRING(GR_BUFFER_AUXBUFFER); TRAP_CASE_STRING(GR_BUFFER_DEPTHBUFFER); TRAP_CASE_STRING(GR_BUFFER_ALPHABUFFER); TRAP_CASE_STRING(GR_BUFFER_TRIPLEBUFFER); TRAP_CASE_STRING(GR_BUFFER_TEXTUREBUFFER_EXT); TRAP_CASE_STRING(GR_BUFFER_TEXTUREAUXBUFFER_EXT); TRAP_NODEFAULT; }}const char *TRP_ORIGIN (GrOriginLocation_t origin_location){ switch (origin_location) { TRAP_CASE_STRING(GR_ORIGIN_UPPER_LEFT); TRAP_CASE_STRING(GR_ORIGIN_LOWER_LEFT); TRAP_CASE_STRING(GR_ORIGIN_ANY); TRAP_NODEFAULT; }}const char *TRP_REFRESH (GrScreenRefresh_t refresh_rate){ switch (refresh_rate) { TRAP_CASE_STRING(GR_REFRESH_60Hz); TRAP_CASE_STRING(GR_REFRESH_70Hz); TRAP_CASE_STRING(GR_REFRESH_72Hz); TRAP_CASE_STRING(GR_REFRESH_75Hz); TRAP_CASE_STRING(GR_REFRESH_80Hz); TRAP_CASE_STRING(GR_REFRESH_90Hz); TRAP_CASE_STRING(GR_REFRESH_100Hz); TRAP_CASE_STRING(GR_REFRESH_85Hz); TRAP_CASE_STRING(GR_REFRESH_120Hz); TRAP_CASE_STRING(GR_REFRESH_NONE); TRAP_NODEFAULT; }}const char *TRP_COLFMT (GrColorFormat_t color_format){ switch (color_format) { TRAP_CASE_STRING(GR_COLORFORMAT_ARGB); TRAP_CASE_STRING(GR_COLORFORMAT_ABGR); TRAP_CASE_STRING(GR_COLORFORMAT_RGBA); TRAP_CASE_STRING(GR_COLORFORMAT_BGRA); TRAP_NODEFAULT; }}const char *TRP_RESOLUTION (GrScreenResolution_t screen_resolution){ switch (screen_resolution) { TRAP_CASE_STRING(GR_RESOLUTION_320x200); TRAP_CASE_STRING(GR_RESOLUTION_320x240); TRAP_CASE_STRING(GR_RESOLUTION_400x256); TRAP_CASE_STRING(GR_RESOLUTION_512x384); TRAP_CASE_STRING(GR_RESOLUTION_640x200); TRAP_CASE_STRING(GR_RESOLUTION_640x350); TRAP_CASE_STRING(GR_RESOLUTION_640x400); TRAP_CASE_STRING(GR_RESOLUTION_640x480); TRAP_CASE_STRING(GR_RESOLUTION_800x600); TRAP_CASE_STRING(GR_RESOLUTION_960x720); TRAP_CASE_STRING(GR_RESOLUTION_856x480); TRAP_CASE_STRING(GR_RESOLUTION_512x256); TRAP_CASE_STRING(GR_RESOLUTION_1024x768); TRAP_CASE_STRING(GR_RESOLUTION_1280x1024); TRAP_CASE_STRING(GR_RESOLUTION_1600x1200); TRAP_CASE_STRING(GR_RESOLUTION_400x300); TRAP_CASE_STRING(GR_RESOLUTION_1152x864); TRAP_CASE_STRING(GR_RESOLUTION_1280x960); TRAP_CASE_STRING(GR_RESOLUTION_1600x1024); TRAP_CASE_STRING(GR_RESOLUTION_1792x1344); TRAP_CASE_STRING(GR_RESOLUTION_1856x1392); TRAP_CASE_STRING(GR_RESOLUTION_1920x1440); TRAP_CASE_STRING(GR_RESOLUTION_2048x1536); TRAP_CASE_STRING(GR_RESOLUTION_2048x2048); TRAP_CASE_STRING(GR_RESOLUTION_NONE); TRAP_NODEFAULT; }}const char *TRP_BLEND (GrAlphaBlendFnc_t func){ switch (func) { TRAP_CASE_STRING(GR_BLEND_ZERO); TRAP_CASE_STRING(GR_BLEND_SRC_ALPHA); TRAP_CASE_STRING(GR_BLEND_SRC_COLOR); /*TRAP_CASE_STRING(GR_BLEND_DST_COLOR); ==GR_BLEND_SRC_COLOR*/ TRAP_CASE_STRING(GR_BLEND_DST_ALPHA); TRAP_CASE_STRING(GR_BLEND_ONE); TRAP_CASE_STRING(GR_BLEND_ONE_MINUS_SRC_ALPHA); TRAP_CASE_STRING(GR_BLEND_ONE_MINUS_SRC_COLOR); /*TRAP_CASE_STRING(GR_BLEND_ONE_MINUS_DST_COLOR); ==GR_BLEND_ONE_MINUS_SRC_COLOR*/ TRAP_CASE_STRING(GR_BLEND_ONE_MINUS_DST_ALPHA); TRAP_CASE_STRING(GR_BLEND_SAME_COLOR_EXT); /*TRAP_CASE_STRING(GR_BLEND_RESERVED_8); ==GR_BLEND_SAME_COLOR_EXT*/ TRAP_CASE_STRING(GR_BLEND_ONE_MINUS_SAME_COLOR_EXT); /*TRAP_CASE_STRING(GR_BLEND_RESERVED_9); ==GR_BLEND_ONE_MINUS_SAME_COLOR_EXT*/ TRAP_CASE_STRING(GR_BLEND_RESERVED_A); TRAP_CASE_STRING(GR_BLEND_RESERVED_B); TRAP_CASE_STRING(GR_BLEND_RESERVED_C); TRAP_CASE_STRING(GR_BLEND_RESERVED_D); TRAP_CASE_STRING(GR_BLEND_RESERVED_E); TRAP_CASE_STRING(GR_BLEND_ALPHA_SATURATE); /*TRAP_CASE_STRING(GR_BLEND_PREFOG_COLOR); ==GR_BLEND_ALPHA_SATURATE*/ TRAP_NODEFAULT; }}const char *TRP_CMBFUNC (GrCombineFunction_t cfunc){ switch (cfunc) { TRAP_CASE_STRING(GR_COMBINE_FUNCTION_ZERO); /*TRAP_CASE_STRING(GR_COMBINE_FUNCTION_NONE); ==GR_COMBINE_FUNCTION_ZERO*/ TRAP_CASE_STRING(GR_COMBINE_FUNCTION_LOCAL); TRAP_CASE_STRING(GR_COMBINE_FUNCTION_LOCAL_ALPHA); TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_OTHER); /*TRAP_CASE_STRING(GR_COMBINE_FUNCTION_BLEND_OTHER); ==GR_COMBINE_FUNCTION_SCALE_OTHER*/ TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL); TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_OTHER_ADD_LOCAL_ALPHA); TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL); TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL); /*TRAP_CASE_STRING(GR_COMBINE_FUNCTION_BLEND); ==GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL*/ TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_OTHER_MINUS_LOCAL_ADD_LOCAL_ALPHA); TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL); /*TRAP_CASE_STRING(GR_COMBINE_FUNCTION_BLEND_LOCAL); ==GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL*/ TRAP_CASE_STRING(GR_COMBINE_FUNCTION_SCALE_MINUS_LOCAL_ADD_LOCAL_ALPHA); TRAP_NODEFAULT; }}const char *TRP_CMBFACT (GrCombineFactor_t cfactor){ switch (cfactor) { TRAP_CASE_STRING(GR_COMBINE_FACTOR_ZERO); /*TRAP_CASE_STRING(GR_COMBINE_FACTOR_NONE); ==GR_COMBINE_FACTOR_ZERO*/ TRAP_CASE_STRING(GR_COMBINE_FACTOR_LOCAL); TRAP_CASE_STRING(GR_COMBINE_FACTOR_OTHER_ALPHA); TRAP_CASE_STRING(GR_COMBINE_FACTOR_LOCAL_ALPHA); TRAP_CASE_STRING(GR_COMBINE_FACTOR_TEXTURE_ALPHA); TRAP_CASE_STRING(GR_COMBINE_FACTOR_TEXTURE_RGB); /*TRAP_CASE_STRING(GR_COMBINE_FACTOR_DETAIL_FACTOR); ==GR_COMBINE_FACTOR_TEXTURE_ALPHA*/ /*TRAP_CASE_STRING(GR_COMBINE_FACTOR_LOD_FRACTION); ==GR_COMBINE_FACTOR_TEXTURE_RGB ???*/ TRAP_CASE_STRING(GR_COMBINE_FACTOR_ONE); TRAP_CASE_STRING(GR_COMBINE_FACTOR_ONE_MINUS_LOCAL); TRAP_CASE_STRING(GR_COMBINE_FACTOR_ONE_MINUS_OTHER_ALPHA); TRAP_CASE_STRING(GR_COMBINE_FACTOR_ONE_MINUS_LOCAL_ALPHA); TRAP_CASE_STRING(GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA); /*TRAP_CASE_STRING(GR_COMBINE_FACTOR_ONE_MINUS_DETAIL_FACTOR); ==GR_COMBINE_FACTOR_ONE_MINUS_TEXTURE_ALPHA*/ TRAP_CASE_STRING(GR_COMBINE_FACTOR_ONE_MINUS_LOD_FRACTION); TRAP_NODEFAULT; }}const char *TRP_CMBLOCAL (GrCombineLocal_t clocal){ switch (clocal) { TRAP_CASE_STRING(GR_COMBINE_LOCAL_ITERATED); TRAP_CASE_STRING(GR_COMBINE_LOCAL_CONSTANT); /*TRAP_CASE_STRING(GR_COMBINE_LOCAL_NONE); ==GR_COMBINE_LOCAL_CONSTANT*/ TRAP_CASE_STRING(GR_COMBINE_LOCAL_DEPTH); TRAP_NODEFAULT; }}const char *TRP_CMBOTHER (GrCombineOther_t cother){ switch (cother) { TRAP_CASE_STRING(GR_COMBINE_OTHER_ITERATED); TRAP_CASE_STRING(GR_COMBINE_OTHER_TEXTURE); TRAP_CASE_STRING(GR_COMBINE_OTHER_CONSTANT); /*TRAP_CASE_STRING(GR_COMBINE_OTHER_NONE); ==GR_COMBINE_OTHER_CONSTANT*/ TRAP_NODEFAULT; }}const char *TRP_CMPFUNC (GrCmpFnc_t function){ switch (function) { TRAP_CASE_STRING(GR_CMP_NEVER); TRAP_CASE_STRING(GR_CMP_LESS); TRAP_CASE_STRING(GR_CMP_EQUAL); TRAP_CASE_STRING(GR_CMP_LEQUAL); TRAP_CASE_STRING(GR_CMP_GREATER); TRAP_CASE_STRING(GR_CMP_NOTEQUAL); TRAP_CASE_STRING(GR_CMP_GEQUAL); TRAP_CASE_STRING(GR_CMP_ALWAYS); TRAP_NODEFAULT; }}const char *TRP_CKMODE (GrChromakeyMode_t mode){ switch (mode) { TRAP_CASE_STRING(GR_CHROMAKEY_DISABLE); TRAP_CASE_STRING(GR_CHROMAKEY_ENABLE); TRAP_NODEFAULT; }}const char *TRP_CULLMODE (GrCullMode_t mode){ switch (mode) { TRAP_CASE_STRING(GR_CULL_DISABLE); TRAP_CASE_STRING(GR_CULL_NEGATIVE); TRAP_CASE_STRING(GR_CULL_POSITIVE); TRAP_NODEFAULT; }}const char *TRP_DEPTHMODE (GrDepthBufferMode_t mode){ switch (mode) { TRAP_CASE_STRING(GR_DEPTHBUFFER_DISABLE); TRAP_CASE_STRING(GR_DEPTHBUFFER_ZBUFFER); TRAP_CASE_STRING(GR_DEPTHBUFFER_WBUFFER); TRAP_CASE_STRING(GR_DEPTHBUFFER_ZBUFFER_COMPARE_TO_BIAS); TRAP_CASE_STRING(GR_DEPTHBUFFER_WBUFFER_COMPARE_TO_BIAS); TRAP_NODEFAULT; }}const char *TRP_DITHERMODE (GrDitherMode_t mode){ switch (mode) { TRAP_CASE_STRING(GR_DITHER_DISABLE); TRAP_CASE_STRING(GR_DITHER_2x2); TRAP_CASE_STRING(GR_DITHER_4x4); TRAP_NODEFAULT; }}const char *TRP_FOGMODE (GrFogMode_t mode){ switch (mode) { TRAP_CASE_STRING(GR_FOG_DISABLE); TRAP_CASE_STRING(GR_FOG_WITH_TABLE_ON_FOGCOORD_EXT); TRAP_CASE_STRING(GR_FOG_WITH_TABLE_ON_Q); /*TRAP_CASE_STRING(GR_FOG_WITH_TABLE_ON_W); ==GR_FOG_WITH_TABLE_ON_Q*/ TRAP_CASE_STRING(GR_FOG_WITH_ITERATED_Z); TRAP_CASE_STRING(GR_FOG_WITH_ITERATED_ALPHA_EXT); TRAP_CASE_STRING(GR_FOG_MULT2); TRAP_CASE_STRING(GR_FOG_ADD2); TRAP_NODEFAULT; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -