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

📄 mtypes.h

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 H
📖 第 1 页 / 共 5 页
字号:
/** * \file mtypes.h * Main Mesa data structures. * * Please try to mark derived values with a leading underscore ('_'). *//* * Mesa 3-D graphics library * Version:  6.5.3 * * Copyright (C) 1999-2007  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. */#ifndef TYPES_H#define TYPES_H#include "glheader.h"#include <GL/internal/glcore.h>	/* __GLcontextModes (GLvisual) */#include "config.h"		/* Hardwired parameters */#include "glapi/glapitable.h"#include "glapi/glthread.h"#include "math/m_matrix.h"	/* GLmatrix */#include "bitset.h"/** * Special, internal token */#define GL_SHADER_PROGRAM_MESA 0x9999/** * Color channel data type. */#if CHAN_BITS == 8   typedef GLubyte GLchan;#define CHAN_MAX 255#define CHAN_MAXF 255.0F#define CHAN_TYPE GL_UNSIGNED_BYTE#elif CHAN_BITS == 16   typedef GLushort GLchan;#define CHAN_MAX 65535#define CHAN_MAXF 65535.0F#define CHAN_TYPE GL_UNSIGNED_SHORT#elif CHAN_BITS == 32   typedef GLfloat GLchan;#define CHAN_MAX 1.0#define CHAN_MAXF 1.0F#define CHAN_TYPE GL_FLOAT#else#error "illegal number of color channel bits"#endif/** * Stencil buffer data type. */#if STENCIL_BITS==8   typedef GLubyte GLstencil;#elif STENCIL_BITS==16   typedef GLushort GLstencil;#else#  error "illegal number of stencil bits"#endif/** * Fixed point data type. */typedef int GLfixed;/* * Fixed point arithmetic macros */#ifndef FIXED_FRAC_BITS#define FIXED_FRAC_BITS 11#endif#define FIXED_SHIFT     FIXED_FRAC_BITS#define FIXED_ONE       (1 << FIXED_SHIFT)#define FIXED_HALF      (1 << (FIXED_SHIFT-1))#define FIXED_FRAC_MASK (FIXED_ONE - 1)#define FIXED_INT_MASK  (~FIXED_FRAC_MASK)#define FIXED_EPSILON   1#define FIXED_SCALE     ((float) FIXED_ONE)#define FIXED_DBL_SCALE ((double) FIXED_ONE)#define FloatToFixed(X) (IROUND((X) * FIXED_SCALE))#define FixedToDouble(X) ((X) * (1.0 / FIXED_DBL_SCALE))#define IntToFixed(I)   ((I) << FIXED_SHIFT)#define FixedToInt(X)   ((X) >> FIXED_SHIFT)#define FixedToUns(X)   (((unsigned int)(X)) >> FIXED_SHIFT)#define FixedCeil(X)    (((X) + FIXED_ONE - FIXED_EPSILON) & FIXED_INT_MASK)#define FixedFloor(X)   ((X) & FIXED_INT_MASK)#define FixedToFloat(X) ((X) * (1.0F / FIXED_SCALE))#define PosFloatToFixed(X)      FloatToFixed(X)#define SignedFloatToFixed(X)   FloatToFixed(X)/** * \name Some forward type declarations *//*@{*/struct _mesa_HashTable;struct gl_pixelstore_attrib;struct gl_texture_format;struct gl_texture_image;struct gl_texture_object;typedef struct __GLcontextRec GLcontext;typedef struct __GLcontextModesRec GLvisual;typedef struct gl_framebuffer GLframebuffer;/*@}*//** * Indexes for vertex program attributes. * GL_NV_vertex_program aliases generic attributes over the conventional * attributes.  In GL_ARB_vertex_program shader the aliasing is optional. * In GL_ARB_vertex_shader / OpenGL 2.0 the aliasing is disallowed (the * generic attributes are distinct/separate). */enum{   VERT_ATTRIB_POS = 0,   VERT_ATTRIB_WEIGHT = 1,   VERT_ATTRIB_NORMAL = 2,   VERT_ATTRIB_COLOR0 = 3,   VERT_ATTRIB_COLOR1 = 4,   VERT_ATTRIB_FOG = 5,   VERT_ATTRIB_COLOR_INDEX = 6,   VERT_ATTRIB_EDGEFLAG = 7,   VERT_ATTRIB_TEX0 = 8,   VERT_ATTRIB_TEX1 = 9,   VERT_ATTRIB_TEX2 = 10,   VERT_ATTRIB_TEX3 = 11,   VERT_ATTRIB_TEX4 = 12,   VERT_ATTRIB_TEX5 = 13,   VERT_ATTRIB_TEX6 = 14,   VERT_ATTRIB_TEX7 = 15,   VERT_ATTRIB_GENERIC0 = 16,   VERT_ATTRIB_GENERIC1 = 17,   VERT_ATTRIB_GENERIC2 = 18,   VERT_ATTRIB_GENERIC3 = 19,   VERT_ATTRIB_GENERIC4 = 20,   VERT_ATTRIB_GENERIC5 = 21,   VERT_ATTRIB_GENERIC6 = 22,   VERT_ATTRIB_GENERIC7 = 23,   VERT_ATTRIB_GENERIC8 = 24,   VERT_ATTRIB_GENERIC9 = 25,   VERT_ATTRIB_GENERIC10 = 26,   VERT_ATTRIB_GENERIC11 = 27,   VERT_ATTRIB_GENERIC12 = 28,   VERT_ATTRIB_GENERIC13 = 29,   VERT_ATTRIB_GENERIC14 = 30,   VERT_ATTRIB_GENERIC15 = 31,   VERT_ATTRIB_MAX = 32};/** * Bitflags for vertex attributes. * These are used in bitfields in many places. *//*@{*/#define VERT_BIT_POS         (1 << VERT_ATTRIB_POS)#define VERT_BIT_WEIGHT      (1 << VERT_ATTRIB_WEIGHT)#define VERT_BIT_NORMAL      (1 << VERT_ATTRIB_NORMAL)#define VERT_BIT_COLOR0      (1 << VERT_ATTRIB_COLOR0)#define VERT_BIT_COLOR1      (1 << VERT_ATTRIB_COLOR1)#define VERT_BIT_FOG         (1 << VERT_ATTRIB_FOG)#define VERT_BIT_COLOR_INDEX (1 << VERT_ATTRIB_COLOR_INDEX)#define VERT_BIT_EDGEFLAG    (1 << VERT_ATTRIB_EDGEFLAG)#define VERT_BIT_TEX0        (1 << VERT_ATTRIB_TEX0)#define VERT_BIT_TEX1        (1 << VERT_ATTRIB_TEX1)#define VERT_BIT_TEX2        (1 << VERT_ATTRIB_TEX2)#define VERT_BIT_TEX3        (1 << VERT_ATTRIB_TEX3)#define VERT_BIT_TEX4        (1 << VERT_ATTRIB_TEX4)#define VERT_BIT_TEX5        (1 << VERT_ATTRIB_TEX5)#define VERT_BIT_TEX6        (1 << VERT_ATTRIB_TEX6)#define VERT_BIT_TEX7        (1 << VERT_ATTRIB_TEX7)#define VERT_BIT_GENERIC0    (1 << VERT_ATTRIB_GENERIC0)#define VERT_BIT_GENERIC1    (1 << VERT_ATTRIB_GENERIC1)#define VERT_BIT_GENERIC2    (1 << VERT_ATTRIB_GENERIC2)#define VERT_BIT_GENERIC3    (1 << VERT_ATTRIB_GENERIC3)#define VERT_BIT_GENERIC4    (1 << VERT_ATTRIB_GENERIC4)#define VERT_BIT_GENERIC5    (1 << VERT_ATTRIB_GENERIC5)#define VERT_BIT_GENERIC6    (1 << VERT_ATTRIB_GENERIC6)#define VERT_BIT_GENERIC7    (1 << VERT_ATTRIB_GENERIC7)#define VERT_BIT_GENERIC8    (1 << VERT_ATTRIB_GENERIC8)#define VERT_BIT_GENERIC9    (1 << VERT_ATTRIB_GENERIC9)#define VERT_BIT_GENERIC10   (1 << VERT_ATTRIB_GENERIC10)#define VERT_BIT_GENERIC11   (1 << VERT_ATTRIB_GENERIC11)#define VERT_BIT_GENERIC12   (1 << VERT_ATTRIB_GENERIC12)#define VERT_BIT_GENERIC13   (1 << VERT_ATTRIB_GENERIC13)#define VERT_BIT_GENERIC14   (1 << VERT_ATTRIB_GENERIC14)#define VERT_BIT_GENERIC15   (1 << VERT_ATTRIB_GENERIC15)#define VERT_BIT_TEX(u)  (1 << (VERT_ATTRIB_TEX0 + (u)))#define VERT_BIT_GENERIC(g)  (1 << (VERT_ATTRIB_GENERIC0 + (g)))/*@}*//** * Indexes for vertex program result attributes *//*@{*/#define VERT_RESULT_HPOS 0#define VERT_RESULT_COL0 1#define VERT_RESULT_COL1 2#define VERT_RESULT_FOGC 3#define VERT_RESULT_TEX0 4#define VERT_RESULT_TEX1 5#define VERT_RESULT_TEX2 6#define VERT_RESULT_TEX3 7#define VERT_RESULT_TEX4 8#define VERT_RESULT_TEX5 9#define VERT_RESULT_TEX6 10#define VERT_RESULT_TEX7 11#define VERT_RESULT_PSIZ 12#define VERT_RESULT_BFC0 13#define VERT_RESULT_BFC1 14#define VERT_RESULT_EDGE 15#define VERT_RESULT_VAR0 16  /**< shader varying */#define VERT_RESULT_MAX  (VERT_RESULT_VAR0 + MAX_VARYING)/*@}*//** * Indexes for fragment program input attributes. */enum{   FRAG_ATTRIB_WPOS = 0,   FRAG_ATTRIB_COL0 = 1,   FRAG_ATTRIB_COL1 = 2,   FRAG_ATTRIB_FOGC = 3,   FRAG_ATTRIB_TEX0 = 4,   FRAG_ATTRIB_TEX1 = 5,   FRAG_ATTRIB_TEX2 = 6,   FRAG_ATTRIB_TEX3 = 7,   FRAG_ATTRIB_TEX4 = 8,   FRAG_ATTRIB_TEX5 = 9,   FRAG_ATTRIB_TEX6 = 10,   FRAG_ATTRIB_TEX7 = 11,   FRAG_ATTRIB_VAR0 = 12,  /**< shader varying */   FRAG_ATTRIB_MAX = (FRAG_ATTRIB_VAR0 + MAX_VARYING)};/** * Bitflags for fragment program input attributes. *//*@{*/#define FRAG_BIT_WPOS  (1 << FRAG_ATTRIB_WPOS)#define FRAG_BIT_COL0  (1 << FRAG_ATTRIB_COL0)#define FRAG_BIT_COL1  (1 << FRAG_ATTRIB_COL1)#define FRAG_BIT_FOGC  (1 << FRAG_ATTRIB_FOGC)#define FRAG_BIT_TEX0  (1 << FRAG_ATTRIB_TEX0)#define FRAG_BIT_TEX1  (1 << FRAG_ATTRIB_TEX1)#define FRAG_BIT_TEX2  (1 << FRAG_ATTRIB_TEX2)#define FRAG_BIT_TEX3  (1 << FRAG_ATTRIB_TEX3)#define FRAG_BIT_TEX4  (1 << FRAG_ATTRIB_TEX4)#define FRAG_BIT_TEX5  (1 << FRAG_ATTRIB_TEX5)#define FRAG_BIT_TEX6  (1 << FRAG_ATTRIB_TEX6)#define FRAG_BIT_TEX7  (1 << FRAG_ATTRIB_TEX7)#define FRAG_BIT_VAR0  (1 << FRAG_ATTRIB_VAR0)#define FRAG_BIT_TEX(U)  (FRAG_BIT_TEX0 << (U))#define FRAG_BIT_VAR(V)  (FRAG_BIT_VAR0 << (V))#define FRAG_BITS_TEX_ANY (FRAG_BIT_TEX0|	\			   FRAG_BIT_TEX1|	\			   FRAG_BIT_TEX2|	\			   FRAG_BIT_TEX3|	\			   FRAG_BIT_TEX4|	\			   FRAG_BIT_TEX5|	\			   FRAG_BIT_TEX6|	\			   FRAG_BIT_TEX7)/*@}*//** * Fragment program results */enum{   FRAG_RESULT_COLR = 0,   FRAG_RESULT_COLH = 1,   FRAG_RESULT_DEPR = 2,   FRAG_RESULT_DATA0 = 3,   FRAG_RESULT_MAX = (FRAG_RESULT_DATA0 + MAX_DRAW_BUFFERS)};/** * Indexes for all renderbuffers */enum {   BUFFER_FRONT_LEFT  = 0,  /* the four standard color buffers */   BUFFER_BACK_LEFT   = 1,   BUFFER_FRONT_RIGHT = 2,   BUFFER_BACK_RIGHT  = 3,   BUFFER_AUX0        = 4,  /* optional aux buffer */   BUFFER_AUX1        = 5,   BUFFER_AUX2        = 6,   BUFFER_AUX3        = 7,   BUFFER_DEPTH       = 8,   BUFFER_STENCIL     = 9,   BUFFER_ACCUM       = 10,   BUFFER_COLOR0      = 11, /* generic renderbuffers */   BUFFER_COLOR1      = 12,   BUFFER_COLOR2      = 13,   BUFFER_COLOR3      = 14,   BUFFER_COLOR4      = 15,   BUFFER_COLOR5      = 16,   BUFFER_COLOR6      = 17,   BUFFER_COLOR7      = 18,   BUFFER_COUNT       = 19};/** * Bit flags for all renderbuffers */#define BUFFER_BIT_FRONT_LEFT   (1 << BUFFER_FRONT_LEFT)#define BUFFER_BIT_BACK_LEFT    (1 << BUFFER_BACK_LEFT)#define BUFFER_BIT_FRONT_RIGHT  (1 << BUFFER_FRONT_RIGHT)#define BUFFER_BIT_BACK_RIGHT   (1 << BUFFER_BACK_RIGHT)#define BUFFER_BIT_AUX0         (1 << BUFFER_AUX0)#define BUFFER_BIT_AUX1         (1 << BUFFER_AUX1)#define BUFFER_BIT_AUX2         (1 << BUFFER_AUX2)#define BUFFER_BIT_AUX3         (1 << BUFFER_AUX3)#define BUFFER_BIT_DEPTH        (1 << BUFFER_DEPTH)#define BUFFER_BIT_STENCIL      (1 << BUFFER_STENCIL)#define BUFFER_BIT_ACCUM        (1 << BUFFER_ACCUM)#define BUFFER_BIT_COLOR0       (1 << BUFFER_COLOR0)#define BUFFER_BIT_COLOR1       (1 << BUFFER_COLOR1)#define BUFFER_BIT_COLOR2       (1 << BUFFER_COLOR2)#define BUFFER_BIT_COLOR3       (1 << BUFFER_COLOR3)#define BUFFER_BIT_COLOR4       (1 << BUFFER_COLOR4)#define BUFFER_BIT_COLOR5       (1 << BUFFER_COLOR5)#define BUFFER_BIT_COLOR6       (1 << BUFFER_COLOR6)#define BUFFER_BIT_COLOR7       (1 << BUFFER_COLOR7)/** * Mask of all the color buffer bits (but not accum). */#define BUFFER_BITS_COLOR  (BUFFER_BIT_FRONT_LEFT | \                            BUFFER_BIT_BACK_LEFT | \                            BUFFER_BIT_FRONT_RIGHT | \                            BUFFER_BIT_BACK_RIGHT | \                            BUFFER_BIT_AUX0 | \                            BUFFER_BIT_AUX1 | \                            BUFFER_BIT_AUX2 | \                            BUFFER_BIT_AUX3 | \                            BUFFER_BIT_COLOR0 | \                            BUFFER_BIT_COLOR1 | \                            BUFFER_BIT_COLOR2 | \                            BUFFER_BIT_COLOR3 | \                            BUFFER_BIT_COLOR4 | \                            BUFFER_BIT_COLOR5 | \                            BUFFER_BIT_COLOR6 | \                            BUFFER_BIT_COLOR7)/** The pixel transfer path has three color tables: *//*@{*/#define COLORTABLE_PRECONVOLUTION  0#define COLORTABLE_POSTCONVOLUTION 1#define COLORTABLE_POSTCOLORMATRIX 2#define COLORTABLE_MAX 3/*@}*//** * Data structure for color tables */struct gl_color_table{   GLenum InternalFormat;      /**< The user-specified format */   GLenum _BaseFormat;         /**< GL_ALPHA, GL_RGBA, GL_RGB, etc */   GLuint Size;                /**< number of entries in table */   GLfloat *TableF;            /**< Color table, floating point values */   GLubyte *TableUB;           /**< Color table, ubyte values */   GLubyte RedSize;   GLubyte GreenSize;   GLubyte BlueSize;   GLubyte AlphaSize;   GLubyte LuminanceSize;   GLubyte IntensitySize;};/** * \name Bit flags used for updating material values. *//*@{*/#define MAT_ATTRIB_FRONT_AMBIENT           0 #define MAT_ATTRIB_BACK_AMBIENT            1#define MAT_ATTRIB_FRONT_DIFFUSE           2 #define MAT_ATTRIB_BACK_DIFFUSE            3#define MAT_ATTRIB_FRONT_SPECULAR          4 #define MAT_ATTRIB_BACK_SPECULAR           5#define MAT_ATTRIB_FRONT_EMISSION          6#define MAT_ATTRIB_BACK_EMISSION           7#define MAT_ATTRIB_FRONT_SHININESS         8#define MAT_ATTRIB_BACK_SHININESS          9#define MAT_ATTRIB_FRONT_INDEXES           10#define MAT_ATTRIB_BACK_INDEXES            11#define MAT_ATTRIB_MAX                     12#define MAT_ATTRIB_AMBIENT(f)  (MAT_ATTRIB_FRONT_AMBIENT+(f))  #define MAT_ATTRIB_DIFFUSE(f)  (MAT_ATTRIB_FRONT_DIFFUSE+(f))  #define MAT_ATTRIB_SPECULAR(f) (MAT_ATTRIB_FRONT_SPECULAR+(f)) #define MAT_ATTRIB_EMISSION(f) (MAT_ATTRIB_FRONT_EMISSION+(f)) #define MAT_ATTRIB_SHININESS(f)(MAT_ATTRIB_FRONT_SHININESS+(f))#define MAT_ATTRIB_INDEXES(f)  (MAT_ATTRIB_FRONT_INDEXES+(f))  #define MAT_INDEX_AMBIENT  0#define MAT_INDEX_DIFFUSE  1#define MAT_INDEX_SPECULAR 2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -