📄 mtypes.h
字号:
/** * \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 + -