mtypes.h revision 60afd53a1257f900a8878b2c0c72b8c192d2992a
11591693c7b415e9869157c711fe11263c95d74eDavid Li/* 21591693c7b415e9869157c711fe11263c95d74eDavid Li * Mesa 3-D graphics library 31591693c7b415e9869157c711fe11263c95d74eDavid Li * Version: 7.7 41591693c7b415e9869157c711fe11263c95d74eDavid Li * 51591693c7b415e9869157c711fe11263c95d74eDavid Li * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 61591693c7b415e9869157c711fe11263c95d74eDavid Li * Copyright (C) 2009 VMware, Inc. All Rights Reserved. 71591693c7b415e9869157c711fe11263c95d74eDavid Li * 81591693c7b415e9869157c711fe11263c95d74eDavid Li * Permission is hereby granted, free of charge, to any person obtaining a 91591693c7b415e9869157c711fe11263c95d74eDavid Li * copy of this software and associated documentation files (the "Software"), 101591693c7b415e9869157c711fe11263c95d74eDavid Li * to deal in the Software without restriction, including without limitation 111591693c7b415e9869157c711fe11263c95d74eDavid Li * the rights to use, copy, modify, merge, publish, distribute, sublicense, 121591693c7b415e9869157c711fe11263c95d74eDavid Li * and/or sell copies of the Software, and to permit persons to whom the 131591693c7b415e9869157c711fe11263c95d74eDavid Li * Software is furnished to do so, subject to the following conditions: 141591693c7b415e9869157c711fe11263c95d74eDavid Li * 151591693c7b415e9869157c711fe11263c95d74eDavid Li * The above copyright notice and this permission notice shall be included 161591693c7b415e9869157c711fe11263c95d74eDavid Li * in all copies or substantial portions of the Software. 171591693c7b415e9869157c711fe11263c95d74eDavid Li * 181591693c7b415e9869157c711fe11263c95d74eDavid Li * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 191591693c7b415e9869157c711fe11263c95d74eDavid Li * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 201591693c7b415e9869157c711fe11263c95d74eDavid Li * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 211591693c7b415e9869157c711fe11263c95d74eDavid Li * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 221591693c7b415e9869157c711fe11263c95d74eDavid Li * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 231591693c7b415e9869157c711fe11263c95d74eDavid Li * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 241591693c7b415e9869157c711fe11263c95d74eDavid Li */ 251591693c7b415e9869157c711fe11263c95d74eDavid Li 261591693c7b415e9869157c711fe11263c95d74eDavid Li/** 271591693c7b415e9869157c711fe11263c95d74eDavid Li * \file mtypes.h 281591693c7b415e9869157c711fe11263c95d74eDavid Li * Main Mesa data structures. 291591693c7b415e9869157c711fe11263c95d74eDavid Li * 301591693c7b415e9869157c711fe11263c95d74eDavid Li * Please try to mark derived values with a leading underscore ('_'). 311591693c7b415e9869157c711fe11263c95d74eDavid Li */ 321591693c7b415e9869157c711fe11263c95d74eDavid Li 331591693c7b415e9869157c711fe11263c95d74eDavid Li#ifndef MTYPES_H 341591693c7b415e9869157c711fe11263c95d74eDavid Li#define MTYPES_H 351591693c7b415e9869157c711fe11263c95d74eDavid Li 361591693c7b415e9869157c711fe11263c95d74eDavid Li 371591693c7b415e9869157c711fe11263c95d74eDavid Li#include "main/glheader.h" 381591693c7b415e9869157c711fe11263c95d74eDavid Li#include "main/config.h" 391591693c7b415e9869157c711fe11263c95d74eDavid Li#include "main/mfeatures.h" 4060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//#include "glapi/glapi.h" 41f9ad8a790398513a845d486f58566854f7eceee4David Li//#include "math/m_matrix.h" /* GLmatrix */ 421591693c7b415e9869157c711fe11263c95d74eDavid Li#include "main/simple_list.h" /* struct simple_node */ 431591693c7b415e9869157c711fe11263c95d74eDavid Li 441591693c7b415e9869157c711fe11263c95d74eDavid Li 451591693c7b415e9869157c711fe11263c95d74eDavid Li/** 461591693c7b415e9869157c711fe11263c95d74eDavid Li * Color channel data type. 471591693c7b415e9869157c711fe11263c95d74eDavid Li */ 481591693c7b415e9869157c711fe11263c95d74eDavid Li#if CHAN_BITS == 8 491591693c7b415e9869157c711fe11263c95d74eDavid Li typedef GLubyte GLchan; 501591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_MAX 255 511591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_MAXF 255.0F 521591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_TYPE GL_UNSIGNED_BYTE 531591693c7b415e9869157c711fe11263c95d74eDavid Li#elif CHAN_BITS == 16 541591693c7b415e9869157c711fe11263c95d74eDavid Li typedef GLushort GLchan; 551591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_MAX 65535 561591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_MAXF 65535.0F 571591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_TYPE GL_UNSIGNED_SHORT 581591693c7b415e9869157c711fe11263c95d74eDavid Li#elif CHAN_BITS == 32 591591693c7b415e9869157c711fe11263c95d74eDavid Li typedef GLfloat GLchan; 601591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_MAX 1.0 611591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_MAXF 1.0F 621591693c7b415e9869157c711fe11263c95d74eDavid Li#define CHAN_TYPE GL_FLOAT 631591693c7b415e9869157c711fe11263c95d74eDavid Li#else 641591693c7b415e9869157c711fe11263c95d74eDavid Li#error "illegal number of color channel bits" 651591693c7b415e9869157c711fe11263c95d74eDavid Li#endif 661591693c7b415e9869157c711fe11263c95d74eDavid Li 671591693c7b415e9869157c711fe11263c95d74eDavid Li 681591693c7b415e9869157c711fe11263c95d74eDavid Li/** 691591693c7b415e9869157c711fe11263c95d74eDavid Li * Stencil buffer data type. 701591693c7b415e9869157c711fe11263c95d74eDavid Li */ 711591693c7b415e9869157c711fe11263c95d74eDavid Li#if STENCIL_BITS==8 721591693c7b415e9869157c711fe11263c95d74eDavid Li typedef GLubyte GLstencil; 731591693c7b415e9869157c711fe11263c95d74eDavid Li#elif STENCIL_BITS==16 741591693c7b415e9869157c711fe11263c95d74eDavid Li typedef GLushort GLstencil; 751591693c7b415e9869157c711fe11263c95d74eDavid Li#else 761591693c7b415e9869157c711fe11263c95d74eDavid Li# error "illegal number of stencil bits" 771591693c7b415e9869157c711fe11263c95d74eDavid Li#endif 781591693c7b415e9869157c711fe11263c95d74eDavid Li 791591693c7b415e9869157c711fe11263c95d74eDavid Li 801591693c7b415e9869157c711fe11263c95d74eDavid Li/** 811591693c7b415e9869157c711fe11263c95d74eDavid Li * \name 64-bit extension of GLbitfield. 821591693c7b415e9869157c711fe11263c95d74eDavid Li */ 831591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 841591693c7b415e9869157c711fe11263c95d74eDavid Litypedef GLuint64 GLbitfield64; 851591693c7b415e9869157c711fe11263c95d74eDavid Li 861591693c7b415e9869157c711fe11263c95d74eDavid Li#define BITFIELD64_ONE 1ULL 871591693c7b415e9869157c711fe11263c95d74eDavid Li#define BITFIELD64_ALLONES ~0ULL 881591693c7b415e9869157c711fe11263c95d74eDavid Li 891591693c7b415e9869157c711fe11263c95d74eDavid Li/** Set a single bit */ 901591693c7b415e9869157c711fe11263c95d74eDavid Li#define BITFIELD64_BIT(b) (BITFIELD64_ONE << (b)) 911591693c7b415e9869157c711fe11263c95d74eDavid Li 921591693c7b415e9869157c711fe11263c95d74eDavid Li/** Set a mask of the least significant \c b bits */ 931591693c7b415e9869157c711fe11263c95d74eDavid Li#define BITFIELD64_MASK(b) (((b) >= 64) ? BITFIELD64_ALLONES : \ 941591693c7b415e9869157c711fe11263c95d74eDavid Li (BITFIELD64_BIT(b) - 1)) 951591693c7b415e9869157c711fe11263c95d74eDavid Li 961591693c7b415e9869157c711fe11263c95d74eDavid Li/** 971591693c7b415e9869157c711fe11263c95d74eDavid Li * Set all bits from l (low bit) to h (high bit), inclusive. 981591693c7b415e9869157c711fe11263c95d74eDavid Li * 991591693c7b415e9869157c711fe11263c95d74eDavid Li * \note \C BITFIELD_64_RANGE(0, 63) return 64 set bits. 1001591693c7b415e9869157c711fe11263c95d74eDavid Li */ 1011591693c7b415e9869157c711fe11263c95d74eDavid Li#define BITFIELD64_RANGE(l, h) (BITFIELD64_MASK((h) + 1) & ~BITFIELD64_MASK(l)) 1021591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 1031591693c7b415e9869157c711fe11263c95d74eDavid Li 1041591693c7b415e9869157c711fe11263c95d74eDavid Li 1051591693c7b415e9869157c711fe11263c95d74eDavid Li/** 1061591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Some forward type declarations 1071591693c7b415e9869157c711fe11263c95d74eDavid Li */ 1081591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 1091591693c7b415e9869157c711fe11263c95d74eDavid Listruct _mesa_HashTable; 1101591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_attrib_node; 1111591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_list_extensions; 1121591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_meta_state; 1131591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_pixelstore_attrib; 1141591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_program_cache; 1151591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texture_format; 1161591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texture_image; 1171591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texture_object; 1181591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_context; 1191591693c7b415e9869157c711fe11263c95d74eDavid Listruct st_context; 1201591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 1211591693c7b415e9869157c711fe11263c95d74eDavid Li 1221591693c7b415e9869157c711fe11263c95d74eDavid Li 1231591693c7b415e9869157c711fe11263c95d74eDavid Li 1241591693c7b415e9869157c711fe11263c95d74eDavid Li/** 1251591693c7b415e9869157c711fe11263c95d74eDavid Li * Shader stages. Note that these will become 5 with tessellation. 1261591693c7b415e9869157c711fe11263c95d74eDavid Li * These MUST have the same values as gallium's PIPE_SHADER_* 1271591693c7b415e9869157c711fe11263c95d74eDavid Li */ 1281591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 1291591693c7b415e9869157c711fe11263c95d74eDavid Li{ 1301591693c7b415e9869157c711fe11263c95d74eDavid Li MESA_SHADER_VERTEX = 0, 1311591693c7b415e9869157c711fe11263c95d74eDavid Li MESA_SHADER_FRAGMENT = 1, 1321591693c7b415e9869157c711fe11263c95d74eDavid Li MESA_SHADER_GEOMETRY = 2, 1331591693c7b415e9869157c711fe11263c95d74eDavid Li MESA_SHADER_TYPES = 3 1341591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_shader_type; 1351591693c7b415e9869157c711fe11263c95d74eDavid Li 1361591693c7b415e9869157c711fe11263c95d74eDavid Li 1371591693c7b415e9869157c711fe11263c95d74eDavid Li 1381591693c7b415e9869157c711fe11263c95d74eDavid Li/** 1391591693c7b415e9869157c711fe11263c95d74eDavid Li * Indexes for vertex program attributes. 1401591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_NV_vertex_program aliases generic attributes over the conventional 1411591693c7b415e9869157c711fe11263c95d74eDavid Li * attributes. In GL_ARB_vertex_program shader the aliasing is optional. 1421591693c7b415e9869157c711fe11263c95d74eDavid Li * In GL_ARB_vertex_shader / OpenGL 2.0 the aliasing is disallowed (the 1431591693c7b415e9869157c711fe11263c95d74eDavid Li * generic attributes are distinct/separate). 1441591693c7b415e9869157c711fe11263c95d74eDavid Li */ 1451591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 1461591693c7b415e9869157c711fe11263c95d74eDavid Li{ 1471591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_POS = 0, 1481591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_WEIGHT = 1, 1491591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_NORMAL = 2, 1501591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_COLOR0 = 3, 1511591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_COLOR1 = 4, 1521591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_FOG = 5, 1531591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_COLOR_INDEX = 6, 1541591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_POINT_SIZE = 6, /*alias*/ 1551591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_EDGEFLAG = 7, 1561591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX0 = 8, 1571591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX1 = 9, 1581591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX2 = 10, 1591591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX3 = 11, 1601591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX4 = 12, 1611591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX5 = 13, 1621591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX6 = 14, 1631591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_TEX7 = 15, 1641591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC0 = 16, 1651591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC1 = 17, 1661591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC2 = 18, 1671591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC3 = 19, 1681591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC4 = 20, 1691591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC5 = 21, 1701591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC6 = 22, 1711591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC7 = 23, 1721591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC8 = 24, 1731591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC9 = 25, 1741591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC10 = 26, 1751591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC11 = 27, 1761591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC12 = 28, 1771591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC13 = 29, 1781591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC14 = 30, 1791591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_GENERIC15 = 31, 1801591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_ATTRIB_MAX = 32 1811591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_vert_attrib; 1821591693c7b415e9869157c711fe11263c95d74eDavid Li 1831591693c7b415e9869157c711fe11263c95d74eDavid Li/** 1841591693c7b415e9869157c711fe11263c95d74eDavid Li * Bitflags for vertex attributes. 1851591693c7b415e9869157c711fe11263c95d74eDavid Li * These are used in bitfields in many places. 1861591693c7b415e9869157c711fe11263c95d74eDavid Li */ 1871591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 1881591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_POS (1 << VERT_ATTRIB_POS) 1891591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_WEIGHT (1 << VERT_ATTRIB_WEIGHT) 1901591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_NORMAL (1 << VERT_ATTRIB_NORMAL) 1911591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_COLOR0 (1 << VERT_ATTRIB_COLOR0) 1921591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_COLOR1 (1 << VERT_ATTRIB_COLOR1) 1931591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_FOG (1 << VERT_ATTRIB_FOG) 1941591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_COLOR_INDEX (1 << VERT_ATTRIB_COLOR_INDEX) 1951591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_EDGEFLAG (1 << VERT_ATTRIB_EDGEFLAG) 1961591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX0 (1 << VERT_ATTRIB_TEX0) 1971591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX1 (1 << VERT_ATTRIB_TEX1) 1981591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX2 (1 << VERT_ATTRIB_TEX2) 1991591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX3 (1 << VERT_ATTRIB_TEX3) 2001591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX4 (1 << VERT_ATTRIB_TEX4) 2011591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX5 (1 << VERT_ATTRIB_TEX5) 2021591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX6 (1 << VERT_ATTRIB_TEX6) 2031591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX7 (1 << VERT_ATTRIB_TEX7) 2041591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC0 (1 << VERT_ATTRIB_GENERIC0) 2051591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC1 (1 << VERT_ATTRIB_GENERIC1) 2061591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC2 (1 << VERT_ATTRIB_GENERIC2) 2071591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC3 (1 << VERT_ATTRIB_GENERIC3) 2081591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC4 (1 << VERT_ATTRIB_GENERIC4) 2091591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC5 (1 << VERT_ATTRIB_GENERIC5) 2101591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC6 (1 << VERT_ATTRIB_GENERIC6) 2111591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC7 (1 << VERT_ATTRIB_GENERIC7) 2121591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC8 (1 << VERT_ATTRIB_GENERIC8) 2131591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC9 (1 << VERT_ATTRIB_GENERIC9) 2141591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC10 (1 << VERT_ATTRIB_GENERIC10) 2151591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC11 (1 << VERT_ATTRIB_GENERIC11) 2161591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC12 (1 << VERT_ATTRIB_GENERIC12) 2171591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC13 (1 << VERT_ATTRIB_GENERIC13) 2181591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC14 (1 << VERT_ATTRIB_GENERIC14) 2191591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC15 (1 << VERT_ATTRIB_GENERIC15) 2201591693c7b415e9869157c711fe11263c95d74eDavid Li 2211591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_TEX(u) (1 << (VERT_ATTRIB_TEX0 + (u))) 2221591693c7b415e9869157c711fe11263c95d74eDavid Li#define VERT_BIT_GENERIC(g) (1 << (VERT_ATTRIB_GENERIC0 + (g))) 2231591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 2241591693c7b415e9869157c711fe11263c95d74eDavid Li 2251591693c7b415e9869157c711fe11263c95d74eDavid Li 2261591693c7b415e9869157c711fe11263c95d74eDavid Li/** 2271591693c7b415e9869157c711fe11263c95d74eDavid Li * Indexes for vertex program result attributes 2281591693c7b415e9869157c711fe11263c95d74eDavid Li */ 2291591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 2301591693c7b415e9869157c711fe11263c95d74eDavid Li{ 2311591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_HPOS = 0, 2321591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_COL0 = 1, 2331591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_COL1 = 2, 2341591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_FOGC = 3, 2351591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX0 = 4, 2361591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX1 = 5, 2371591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX2 = 6, 2381591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX3 = 7, 2391591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX4 = 8, 2401591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX5 = 9, 2411591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX6 = 10, 2421591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_TEX7 = 11, 2431591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_PSIZ = 12, 2441591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_BFC0 = 13, 2451591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_BFC1 = 14, 2461591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_EDGE = 15, 2471591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_VAR0 = 16, /**< shader varying */ 2481591693c7b415e9869157c711fe11263c95d74eDavid Li VERT_RESULT_MAX = (VERT_RESULT_VAR0 + MAX_VARYING) 2491591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_vert_result; 2501591693c7b415e9869157c711fe11263c95d74eDavid Li 2511591693c7b415e9869157c711fe11263c95d74eDavid Li 2521591693c7b415e9869157c711fe11263c95d74eDavid Li/*********************************************/ 2531591693c7b415e9869157c711fe11263c95d74eDavid Li 2541591693c7b415e9869157c711fe11263c95d74eDavid Li/** 2551591693c7b415e9869157c711fe11263c95d74eDavid Li * Indexes for geometry program attributes. 2561591693c7b415e9869157c711fe11263c95d74eDavid Li */ 2571591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 2581591693c7b415e9869157c711fe11263c95d74eDavid Li{ 2591591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_POSITION = 0, 2601591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_COLOR0 = 1, 2611591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_COLOR1 = 2, 2621591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_SECONDARY_COLOR0 = 3, 2631591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_SECONDARY_COLOR1 = 4, 2641591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_FOG_FRAG_COORD = 5, 2651591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_POINT_SIZE = 6, 2661591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_CLIP_VERTEX = 7, 2671591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_PRIMITIVE_ID = 8, 2681591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_TEX_COORD = 9, 2691591693c7b415e9869157c711fe11263c95d74eDavid Li 2701591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_VAR0 = 16, 2711591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_ATTRIB_MAX = (GEOM_ATTRIB_VAR0 + MAX_VARYING) 2721591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_geom_attrib; 2731591693c7b415e9869157c711fe11263c95d74eDavid Li 2741591693c7b415e9869157c711fe11263c95d74eDavid Li/** 2751591693c7b415e9869157c711fe11263c95d74eDavid Li * Bitflags for geometry attributes. 2761591693c7b415e9869157c711fe11263c95d74eDavid Li * These are used in bitfields in many places. 2771591693c7b415e9869157c711fe11263c95d74eDavid Li */ 2781591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 2791591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_COLOR0 (1 << GEOM_ATTRIB_COLOR0) 2801591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_COLOR1 (1 << GEOM_ATTRIB_COLOR1) 2811591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_SCOLOR0 (1 << GEOM_ATTRIB_SECONDARY_COLOR0) 2821591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_SCOLOR1 (1 << GEOM_ATTRIB_SECONDARY_COLOR1) 2831591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_TEX_COORD (1 << GEOM_ATTRIB_TEX_COORD) 2841591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_FOG_COORD (1 << GEOM_ATTRIB_FOG_FRAG_COORD) 2851591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_POSITION (1 << GEOM_ATTRIB_POSITION) 2861591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_POINT_SIDE (1 << GEOM_ATTRIB_POINT_SIZE) 2871591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_CLIP_VERTEX (1 << GEOM_ATTRIB_CLIP_VERTEX) 2881591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_PRIM_ID (1 << GEOM_ATTRIB_PRIMITIVE_ID) 2891591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_VAR0 (1 << GEOM_ATTRIB_VAR0) 2901591693c7b415e9869157c711fe11263c95d74eDavid Li 2911591693c7b415e9869157c711fe11263c95d74eDavid Li#define GEOM_BIT_VAR(g) (1 << (GEOM_BIT_VAR0 + (g))) 2921591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 2931591693c7b415e9869157c711fe11263c95d74eDavid Li 2941591693c7b415e9869157c711fe11263c95d74eDavid Li 2951591693c7b415e9869157c711fe11263c95d74eDavid Li/** 2961591693c7b415e9869157c711fe11263c95d74eDavid Li * Indexes for geometry program result attributes 2971591693c7b415e9869157c711fe11263c95d74eDavid Li */ 2981591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 2991591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum { 3001591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_POS = 0, 3011591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_COL0 = 1, 3021591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_COL1 = 2, 3031591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_SCOL0 = 3, 3041591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_SCOL1 = 4, 3051591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_FOGC = 5, 3061591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX0 = 6, 3071591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX1 = 7, 3081591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX2 = 8, 3091591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX3 = 9, 3101591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX4 = 10, 3111591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX5 = 11, 3121591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX6 = 12, 3131591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_TEX7 = 13, 3141591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_PSIZ = 14, 3151591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_CLPV = 15, 3161591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_PRID = 16, 3171591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_LAYR = 17, 3181591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_VAR0 = 18, /**< shader varying, should really be 16 */ 3191591693c7b415e9869157c711fe11263c95d74eDavid Li /* ### we need to -2 because var0 is 18 instead 16 like in the others */ 3201591693c7b415e9869157c711fe11263c95d74eDavid Li GEOM_RESULT_MAX = (GEOM_RESULT_VAR0 + MAX_VARYING - 2) 3211591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_geom_result; 3221591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 3231591693c7b415e9869157c711fe11263c95d74eDavid Li 3241591693c7b415e9869157c711fe11263c95d74eDavid Li/** 3251591693c7b415e9869157c711fe11263c95d74eDavid Li * Indexes for fragment program input attributes. 3261591693c7b415e9869157c711fe11263c95d74eDavid Li */ 3271591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 3281591693c7b415e9869157c711fe11263c95d74eDavid Li{ 3291591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_WPOS = 0, 3301591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_COL0 = 1, 3311591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_COL1 = 2, 3321591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_FOGC = 3, 3331591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX0 = 4, 3341591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX1 = 5, 3351591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX2 = 6, 3361591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX3 = 7, 3371591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX4 = 8, 3381591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX5 = 9, 3391591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX6 = 10, 3401591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_TEX7 = 11, 3411591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_FACE = 12, /**< front/back face */ 3421591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_PNTC = 13, /**< sprite/point coord */ 3431591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_VAR0 = 14, /**< shader varying */ 3441591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_ATTRIB_MAX = (FRAG_ATTRIB_VAR0 + MAX_VARYING) 3451591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_frag_attrib; 3461591693c7b415e9869157c711fe11263c95d74eDavid Li 3471591693c7b415e9869157c711fe11263c95d74eDavid Li/** 3481591693c7b415e9869157c711fe11263c95d74eDavid Li * Bitflags for fragment program input attributes. 3491591693c7b415e9869157c711fe11263c95d74eDavid Li */ 3501591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 3511591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_WPOS (1 << FRAG_ATTRIB_WPOS) 3521591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_COL0 (1 << FRAG_ATTRIB_COL0) 3531591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_COL1 (1 << FRAG_ATTRIB_COL1) 3541591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_FOGC (1 << FRAG_ATTRIB_FOGC) 3551591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_FACE (1 << FRAG_ATTRIB_FACE) 3561591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_PNTC (1 << FRAG_ATTRIB_PNTC) 3571591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX0 (1 << FRAG_ATTRIB_TEX0) 3581591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX1 (1 << FRAG_ATTRIB_TEX1) 3591591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX2 (1 << FRAG_ATTRIB_TEX2) 3601591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX3 (1 << FRAG_ATTRIB_TEX3) 3611591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX4 (1 << FRAG_ATTRIB_TEX4) 3621591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX5 (1 << FRAG_ATTRIB_TEX5) 3631591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX6 (1 << FRAG_ATTRIB_TEX6) 3641591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX7 (1 << FRAG_ATTRIB_TEX7) 3651591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_VAR0 (1 << FRAG_ATTRIB_VAR0) 3661591693c7b415e9869157c711fe11263c95d74eDavid Li 3671591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_TEX(U) (FRAG_BIT_TEX0 << (U)) 3681591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BIT_VAR(V) (FRAG_BIT_VAR0 << (V)) 3691591693c7b415e9869157c711fe11263c95d74eDavid Li 3701591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRAG_BITS_TEX_ANY (FRAG_BIT_TEX0| \ 3711591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_BIT_TEX1| \ 3721591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_BIT_TEX2| \ 3731591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_BIT_TEX3| \ 3741591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_BIT_TEX4| \ 3751591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_BIT_TEX5| \ 3761591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_BIT_TEX6| \ 3771591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_BIT_TEX7) 3781591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 3791591693c7b415e9869157c711fe11263c95d74eDavid Li 3801591693c7b415e9869157c711fe11263c95d74eDavid Li 3811591693c7b415e9869157c711fe11263c95d74eDavid Li/** 3821591693c7b415e9869157c711fe11263c95d74eDavid Li * Fragment program results 3831591693c7b415e9869157c711fe11263c95d74eDavid Li */ 3841591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 3851591693c7b415e9869157c711fe11263c95d74eDavid Li{ 3861591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_RESULT_DEPTH = 0, 3871591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_RESULT_STENCIL = 1, 3881591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_RESULT_COLOR = 2, 3891591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_RESULT_DATA0 = 3, 3901591693c7b415e9869157c711fe11263c95d74eDavid Li FRAG_RESULT_MAX = (FRAG_RESULT_DATA0 + MAX_DRAW_BUFFERS) 3911591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_frag_result; 3921591693c7b415e9869157c711fe11263c95d74eDavid Li 3931591693c7b415e9869157c711fe11263c95d74eDavid Li 3941591693c7b415e9869157c711fe11263c95d74eDavid Li/** 3951591693c7b415e9869157c711fe11263c95d74eDavid Li * Indexes for all renderbuffers 3961591693c7b415e9869157c711fe11263c95d74eDavid Li */ 3971591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 3981591693c7b415e9869157c711fe11263c95d74eDavid Li{ 3991591693c7b415e9869157c711fe11263c95d74eDavid Li /* the four standard color buffers */ 4001591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_FRONT_LEFT, 4011591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BACK_LEFT, 4021591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_FRONT_RIGHT, 4031591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BACK_RIGHT, 4041591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_DEPTH, 4051591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_STENCIL, 4061591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_ACCUM, 4071591693c7b415e9869157c711fe11263c95d74eDavid Li /* optional aux buffer */ 4081591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_AUX0, 4091591693c7b415e9869157c711fe11263c95d74eDavid Li /* generic renderbuffers */ 4101591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR0, 4111591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR1, 4121591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR2, 4131591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR3, 4141591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR4, 4151591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR5, 4161591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR6, 4171591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COLOR7, 4181591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_COUNT 4191591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_buffer_index; 4201591693c7b415e9869157c711fe11263c95d74eDavid Li 4211591693c7b415e9869157c711fe11263c95d74eDavid Li/** 4221591693c7b415e9869157c711fe11263c95d74eDavid Li * Bit flags for all renderbuffers 4231591693c7b415e9869157c711fe11263c95d74eDavid Li */ 4241591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_FRONT_LEFT (1 << BUFFER_FRONT_LEFT) 4251591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_BACK_LEFT (1 << BUFFER_BACK_LEFT) 4261591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_FRONT_RIGHT (1 << BUFFER_FRONT_RIGHT) 4271591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_BACK_RIGHT (1 << BUFFER_BACK_RIGHT) 4281591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_AUX0 (1 << BUFFER_AUX0) 4291591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_AUX1 (1 << BUFFER_AUX1) 4301591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_AUX2 (1 << BUFFER_AUX2) 4311591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_AUX3 (1 << BUFFER_AUX3) 4321591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_DEPTH (1 << BUFFER_DEPTH) 4331591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_STENCIL (1 << BUFFER_STENCIL) 4341591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_ACCUM (1 << BUFFER_ACCUM) 4351591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR0 (1 << BUFFER_COLOR0) 4361591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR1 (1 << BUFFER_COLOR1) 4371591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR2 (1 << BUFFER_COLOR2) 4381591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR3 (1 << BUFFER_COLOR3) 4391591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR4 (1 << BUFFER_COLOR4) 4401591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR5 (1 << BUFFER_COLOR5) 4411591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR6 (1 << BUFFER_COLOR6) 4421591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BIT_COLOR7 (1 << BUFFER_COLOR7) 4431591693c7b415e9869157c711fe11263c95d74eDavid Li 4441591693c7b415e9869157c711fe11263c95d74eDavid Li/** 4451591693c7b415e9869157c711fe11263c95d74eDavid Li * Mask of all the color buffer bits (but not accum). 4461591693c7b415e9869157c711fe11263c95d74eDavid Li */ 4471591693c7b415e9869157c711fe11263c95d74eDavid Li#define BUFFER_BITS_COLOR (BUFFER_BIT_FRONT_LEFT | \ 4481591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_BACK_LEFT | \ 4491591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_FRONT_RIGHT | \ 4501591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_BACK_RIGHT | \ 4511591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_AUX0 | \ 4521591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR0 | \ 4531591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR1 | \ 4541591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR2 | \ 4551591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR3 | \ 4561591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR4 | \ 4571591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR5 | \ 4581591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR6 | \ 4591591693c7b415e9869157c711fe11263c95d74eDavid Li BUFFER_BIT_COLOR7) 4601591693c7b415e9869157c711fe11263c95d74eDavid Li 4611591693c7b415e9869157c711fe11263c95d74eDavid Li 4621591693c7b415e9869157c711fe11263c95d74eDavid Li/** 4631591693c7b415e9869157c711fe11263c95d74eDavid Li * Framebuffer configuration (aka visual / pixelformat) 4641591693c7b415e9869157c711fe11263c95d74eDavid Li * Note: some of these fields should be boolean, but it appears that 4651591693c7b415e9869157c711fe11263c95d74eDavid Li * code in drivers/dri/common/util.c requires int-sized fields. 4661591693c7b415e9869157c711fe11263c95d74eDavid Li */ 4671591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_config 4681591693c7b415e9869157c711fe11263c95d74eDavid Li{ 4691591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean rgbMode; 4701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean floatMode; 4711591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean colorIndexMode; /* XXX is this used anywhere? */ 4721591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint doubleBufferMode; 4731591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint stereoMode; 4741591693c7b415e9869157c711fe11263c95d74eDavid Li 4751591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean haveAccumBuffer; 4761591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean haveDepthBuffer; 4771591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean haveStencilBuffer; 4781591693c7b415e9869157c711fe11263c95d74eDavid Li 4791591693c7b415e9869157c711fe11263c95d74eDavid Li GLint redBits, greenBits, blueBits, alphaBits; /* bits per comp */ 4801591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint redMask, greenMask, blueMask, alphaMask; 4811591693c7b415e9869157c711fe11263c95d74eDavid Li GLint rgbBits; /* total bits for rgb */ 4821591693c7b415e9869157c711fe11263c95d74eDavid Li GLint indexBits; /* total bits for colorindex */ 4831591693c7b415e9869157c711fe11263c95d74eDavid Li 4841591693c7b415e9869157c711fe11263c95d74eDavid Li GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits; 4851591693c7b415e9869157c711fe11263c95d74eDavid Li GLint depthBits; 4861591693c7b415e9869157c711fe11263c95d74eDavid Li GLint stencilBits; 4871591693c7b415e9869157c711fe11263c95d74eDavid Li 4881591693c7b415e9869157c711fe11263c95d74eDavid Li GLint numAuxBuffers; 4891591693c7b415e9869157c711fe11263c95d74eDavid Li 4901591693c7b415e9869157c711fe11263c95d74eDavid Li GLint level; 4911591693c7b415e9869157c711fe11263c95d74eDavid Li 4921591693c7b415e9869157c711fe11263c95d74eDavid Li /* EXT_visual_rating / GLX 1.2 */ 4931591693c7b415e9869157c711fe11263c95d74eDavid Li GLint visualRating; 4941591693c7b415e9869157c711fe11263c95d74eDavid Li 4951591693c7b415e9869157c711fe11263c95d74eDavid Li /* EXT_visual_info / GLX 1.2 */ 4961591693c7b415e9869157c711fe11263c95d74eDavid Li GLint transparentPixel; 4971591693c7b415e9869157c711fe11263c95d74eDavid Li /* colors are floats scaled to ints */ 4981591693c7b415e9869157c711fe11263c95d74eDavid Li GLint transparentRed, transparentGreen, transparentBlue, transparentAlpha; 4991591693c7b415e9869157c711fe11263c95d74eDavid Li GLint transparentIndex; 5001591693c7b415e9869157c711fe11263c95d74eDavid Li 5011591693c7b415e9869157c711fe11263c95d74eDavid Li /* ARB_multisample / SGIS_multisample */ 5021591693c7b415e9869157c711fe11263c95d74eDavid Li GLint sampleBuffers; 5031591693c7b415e9869157c711fe11263c95d74eDavid Li GLint samples; 5041591693c7b415e9869157c711fe11263c95d74eDavid Li 5051591693c7b415e9869157c711fe11263c95d74eDavid Li /* SGIX_pbuffer / GLX 1.3 */ 5061591693c7b415e9869157c711fe11263c95d74eDavid Li GLint maxPbufferWidth; 5071591693c7b415e9869157c711fe11263c95d74eDavid Li GLint maxPbufferHeight; 5081591693c7b415e9869157c711fe11263c95d74eDavid Li GLint maxPbufferPixels; 5091591693c7b415e9869157c711fe11263c95d74eDavid Li GLint optimalPbufferWidth; /* Only for SGIX_pbuffer. */ 5101591693c7b415e9869157c711fe11263c95d74eDavid Li GLint optimalPbufferHeight; /* Only for SGIX_pbuffer. */ 5111591693c7b415e9869157c711fe11263c95d74eDavid Li 5121591693c7b415e9869157c711fe11263c95d74eDavid Li /* OML_swap_method */ 5131591693c7b415e9869157c711fe11263c95d74eDavid Li GLint swapMethod; 5141591693c7b415e9869157c711fe11263c95d74eDavid Li 5151591693c7b415e9869157c711fe11263c95d74eDavid Li /* EXT_texture_from_pixmap */ 5161591693c7b415e9869157c711fe11263c95d74eDavid Li GLint bindToTextureRgb; 5171591693c7b415e9869157c711fe11263c95d74eDavid Li GLint bindToTextureRgba; 5181591693c7b415e9869157c711fe11263c95d74eDavid Li GLint bindToMipmapTexture; 5191591693c7b415e9869157c711fe11263c95d74eDavid Li GLint bindToTextureTargets; 5201591693c7b415e9869157c711fe11263c95d74eDavid Li GLint yInverted; 5211591693c7b415e9869157c711fe11263c95d74eDavid Li}; 5221591693c7b415e9869157c711fe11263c95d74eDavid Li 5231591693c7b415e9869157c711fe11263c95d74eDavid Li 5241591693c7b415e9869157c711fe11263c95d74eDavid Li/** 5251591693c7b415e9869157c711fe11263c95d74eDavid Li * Data structure for color tables 5261591693c7b415e9869157c711fe11263c95d74eDavid Li */ 5271591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_color_table 5281591693c7b415e9869157c711fe11263c95d74eDavid Li{ 5291591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum InternalFormat; /**< The user-specified format */ 5301591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum _BaseFormat; /**< GL_ALPHA, GL_RGBA, GL_RGB, etc */ 5311591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Size; /**< number of entries in table */ 5321591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat *TableF; /**< Color table, floating point values */ 5331591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte *TableUB; /**< Color table, ubyte values */ 5341591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte RedSize; 5351591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte GreenSize; 5361591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte BlueSize; 5371591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte AlphaSize; 5381591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte LuminanceSize; 5391591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte IntensitySize; 5401591693c7b415e9869157c711fe11263c95d74eDavid Li}; 5411591693c7b415e9869157c711fe11263c95d74eDavid Li 5421591693c7b415e9869157c711fe11263c95d74eDavid Li 5431591693c7b415e9869157c711fe11263c95d74eDavid Li/** 5441591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Bit flags used for updating material values. 5451591693c7b415e9869157c711fe11263c95d74eDavid Li */ 5461591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 5471591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_FRONT_AMBIENT 0 5481591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_BACK_AMBIENT 1 5491591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_FRONT_DIFFUSE 2 5501591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_BACK_DIFFUSE 3 5511591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_FRONT_SPECULAR 4 5521591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_BACK_SPECULAR 5 5531591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_FRONT_EMISSION 6 5541591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_BACK_EMISSION 7 5551591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_FRONT_SHININESS 8 5561591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_BACK_SHININESS 9 5571591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_FRONT_INDEXES 10 5581591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_BACK_INDEXES 11 5591591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_MAX 12 5601591693c7b415e9869157c711fe11263c95d74eDavid Li 5611591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_AMBIENT(f) (MAT_ATTRIB_FRONT_AMBIENT+(f)) 5621591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_DIFFUSE(f) (MAT_ATTRIB_FRONT_DIFFUSE+(f)) 5631591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_SPECULAR(f) (MAT_ATTRIB_FRONT_SPECULAR+(f)) 5641591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_EMISSION(f) (MAT_ATTRIB_FRONT_EMISSION+(f)) 5651591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_SHININESS(f)(MAT_ATTRIB_FRONT_SHININESS+(f)) 5661591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_ATTRIB_INDEXES(f) (MAT_ATTRIB_FRONT_INDEXES+(f)) 5671591693c7b415e9869157c711fe11263c95d74eDavid Li 5681591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_INDEX_AMBIENT 0 5691591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_INDEX_DIFFUSE 1 5701591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_INDEX_SPECULAR 2 5711591693c7b415e9869157c711fe11263c95d74eDavid Li 5721591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_FRONT_AMBIENT (1<<MAT_ATTRIB_FRONT_AMBIENT) 5731591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_BACK_AMBIENT (1<<MAT_ATTRIB_BACK_AMBIENT) 5741591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_FRONT_DIFFUSE (1<<MAT_ATTRIB_FRONT_DIFFUSE) 5751591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_BACK_DIFFUSE (1<<MAT_ATTRIB_BACK_DIFFUSE) 5761591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_FRONT_SPECULAR (1<<MAT_ATTRIB_FRONT_SPECULAR) 5771591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_BACK_SPECULAR (1<<MAT_ATTRIB_BACK_SPECULAR) 5781591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_FRONT_EMISSION (1<<MAT_ATTRIB_FRONT_EMISSION) 5791591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_BACK_EMISSION (1<<MAT_ATTRIB_BACK_EMISSION) 5801591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_FRONT_SHININESS (1<<MAT_ATTRIB_FRONT_SHININESS) 5811591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_BACK_SHININESS (1<<MAT_ATTRIB_BACK_SHININESS) 5821591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_FRONT_INDEXES (1<<MAT_ATTRIB_FRONT_INDEXES) 5831591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAT_BIT_BACK_INDEXES (1<<MAT_ATTRIB_BACK_INDEXES) 5841591693c7b415e9869157c711fe11263c95d74eDavid Li 5851591693c7b415e9869157c711fe11263c95d74eDavid Li 5861591693c7b415e9869157c711fe11263c95d74eDavid Li#define FRONT_MATERIAL_BITS (MAT_BIT_FRONT_EMISSION | \ 5871591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_FRONT_AMBIENT | \ 5881591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_FRONT_DIFFUSE | \ 5891591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_FRONT_SPECULAR | \ 5901591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_FRONT_SHININESS | \ 5911591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_FRONT_INDEXES) 5921591693c7b415e9869157c711fe11263c95d74eDavid Li 5931591693c7b415e9869157c711fe11263c95d74eDavid Li#define BACK_MATERIAL_BITS (MAT_BIT_BACK_EMISSION | \ 5941591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_BACK_AMBIENT | \ 5951591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_BACK_DIFFUSE | \ 5961591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_BACK_SPECULAR | \ 5971591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_BACK_SHININESS | \ 5981591693c7b415e9869157c711fe11263c95d74eDavid Li MAT_BIT_BACK_INDEXES) 5991591693c7b415e9869157c711fe11263c95d74eDavid Li 6001591693c7b415e9869157c711fe11263c95d74eDavid Li#define ALL_MATERIAL_BITS (FRONT_MATERIAL_BITS | BACK_MATERIAL_BITS) 6011591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 6021591693c7b415e9869157c711fe11263c95d74eDavid Li 6031591693c7b415e9869157c711fe11263c95d74eDavid Li 6041591693c7b415e9869157c711fe11263c95d74eDavid Li#define EXP_TABLE_SIZE 512 /**< Specular exponent lookup table sizes */ 6051591693c7b415e9869157c711fe11263c95d74eDavid Li#define SHINE_TABLE_SIZE 256 /**< Material shininess lookup table sizes */ 6061591693c7b415e9869157c711fe11263c95d74eDavid Li 6071591693c7b415e9869157c711fe11263c95d74eDavid Li/** 6081591693c7b415e9869157c711fe11263c95d74eDavid Li * Material shininess lookup table. 6091591693c7b415e9869157c711fe11263c95d74eDavid Li */ 6101591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_shine_tab 6111591693c7b415e9869157c711fe11263c95d74eDavid Li{ 6121591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shine_tab *next, *prev; 6131591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat tab[SHINE_TABLE_SIZE+1]; 6141591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat shininess; 6151591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint refcount; 6161591693c7b415e9869157c711fe11263c95d74eDavid Li}; 6171591693c7b415e9869157c711fe11263c95d74eDavid Li 6181591693c7b415e9869157c711fe11263c95d74eDavid Li 6191591693c7b415e9869157c711fe11263c95d74eDavid Li/** 6201591693c7b415e9869157c711fe11263c95d74eDavid Li * Light source state. 6211591693c7b415e9869157c711fe11263c95d74eDavid Li */ 6221591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_light 6231591693c7b415e9869157c711fe11263c95d74eDavid Li{ 6241591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_light *next; /**< double linked list with sentinel */ 6251591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_light *prev; 6261591693c7b415e9869157c711fe11263c95d74eDavid Li 6271591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Ambient[4]; /**< ambient color */ 6281591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Diffuse[4]; /**< diffuse color */ 6291591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Specular[4]; /**< specular color */ 6301591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat EyePosition[4]; /**< position in eye coordinates */ 6311591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat SpotDirection[4]; /**< spotlight direction in eye coordinates */ 6321591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat SpotExponent; 6331591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat SpotCutoff; /**< in degrees */ 6341591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _CosCutoffNeg; /**< = cos(SpotCutoff) */ 6351591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _CosCutoff; /**< = MAX(0, cos(SpotCutoff)) */ 6361591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat ConstantAttenuation; 6371591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat LinearAttenuation; 6381591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat QuadraticAttenuation; 6391591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< On/off flag */ 6401591693c7b415e9869157c711fe11263c95d74eDavid Li 6411591693c7b415e9869157c711fe11263c95d74eDavid Li /** 6421591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Derived fields 6431591693c7b415e9869157c711fe11263c95d74eDavid Li */ 6441591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 6451591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _Flags; /**< State */ 6461591693c7b415e9869157c711fe11263c95d74eDavid Li 6471591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _Position[4]; /**< position in eye/obj coordinates */ 6481591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _VP_inf_norm[3]; /**< Norm direction to infinite light */ 6491591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _h_inf_norm[3]; /**< Norm( _VP_inf_norm + <0,0,1> ) */ 6501591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _NormSpotDirection[4]; /**< normalized spotlight direction */ 6511591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _VP_inf_spot_attenuation; 6521591693c7b415e9869157c711fe11263c95d74eDavid Li 6531591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _SpotExpTable[EXP_TABLE_SIZE][2]; /**< to replace a pow() call */ 6541591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _MatAmbient[2][3]; /**< material ambient * light ambient */ 6551591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _MatDiffuse[2][3]; /**< material diffuse * light diffuse */ 6561591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _MatSpecular[2][3]; /**< material spec * light specular */ 6571591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _dli; /**< CI diffuse light intensity */ 6581591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _sli; /**< CI specular light intensity */ 6591591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 6601591693c7b415e9869157c711fe11263c95d74eDavid Li}; 6611591693c7b415e9869157c711fe11263c95d74eDavid Li 6621591693c7b415e9869157c711fe11263c95d74eDavid Li 6631591693c7b415e9869157c711fe11263c95d74eDavid Li/** 6641591693c7b415e9869157c711fe11263c95d74eDavid Li * Light model state. 6651591693c7b415e9869157c711fe11263c95d74eDavid Li */ 6661591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_lightmodel 6671591693c7b415e9869157c711fe11263c95d74eDavid Li{ 6681591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Ambient[4]; /**< ambient color */ 6691591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean LocalViewer; /**< Local (or infinite) view point? */ 6701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean TwoSide; /**< Two (or one) sided lighting? */ 6711591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ColorControl; /**< either GL_SINGLE_COLOR 6721591693c7b415e9869157c711fe11263c95d74eDavid Li * or GL_SEPARATE_SPECULAR_COLOR */ 6731591693c7b415e9869157c711fe11263c95d74eDavid Li}; 6741591693c7b415e9869157c711fe11263c95d74eDavid Li 6751591693c7b415e9869157c711fe11263c95d74eDavid Li 6761591693c7b415e9869157c711fe11263c95d74eDavid Li/** 6771591693c7b415e9869157c711fe11263c95d74eDavid Li * Material state. 6781591693c7b415e9869157c711fe11263c95d74eDavid Li */ 6791591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_material 6801591693c7b415e9869157c711fe11263c95d74eDavid Li{ 6811591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Attrib[MAT_ATTRIB_MAX][4]; 6821591693c7b415e9869157c711fe11263c95d74eDavid Li}; 6831591693c7b415e9869157c711fe11263c95d74eDavid Li 6841591693c7b415e9869157c711fe11263c95d74eDavid Li 6851591693c7b415e9869157c711fe11263c95d74eDavid Li/** 6861591693c7b415e9869157c711fe11263c95d74eDavid Li * Accumulation buffer attribute group (GL_ACCUM_BUFFER_BIT) 6871591693c7b415e9869157c711fe11263c95d74eDavid Li */ 6881591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_accum_attrib 6891591693c7b415e9869157c711fe11263c95d74eDavid Li{ 6901591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat ClearColor[4]; /**< Accumulation buffer clear color */ 6911591693c7b415e9869157c711fe11263c95d74eDavid Li}; 6921591693c7b415e9869157c711fe11263c95d74eDavid Li 6931591693c7b415e9869157c711fe11263c95d74eDavid Li 6941591693c7b415e9869157c711fe11263c95d74eDavid Li/** 6951591693c7b415e9869157c711fe11263c95d74eDavid Li * Color buffer attribute group (GL_COLOR_BUFFER_BIT). 6961591693c7b415e9869157c711fe11263c95d74eDavid Li */ 6971591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_colorbuffer_attrib 6981591693c7b415e9869157c711fe11263c95d74eDavid Li{ 6991591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint ClearIndex; /**< Index to use for glClear */ 7001591693c7b415e9869157c711fe11263c95d74eDavid Li GLclampf ClearColor[4]; /**< Color to use for glClear */ 7011591693c7b415e9869157c711fe11263c95d74eDavid Li 7021591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint IndexMask; /**< Color index write mask */ 7031591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte ColorMask[MAX_DRAW_BUFFERS][4];/**< Each flag is 0xff or 0x0 */ 7041591693c7b415e9869157c711fe11263c95d74eDavid Li 7051591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum DrawBuffer[MAX_DRAW_BUFFERS]; /**< Which buffer to draw into */ 7061591693c7b415e9869157c711fe11263c95d74eDavid Li 7071591693c7b415e9869157c711fe11263c95d74eDavid Li /** 7081591693c7b415e9869157c711fe11263c95d74eDavid Li * \name alpha testing 7091591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7101591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 7111591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean AlphaEnabled; /**< Alpha test enabled flag */ 7121591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum AlphaFunc; /**< Alpha test function */ 7131591693c7b415e9869157c711fe11263c95d74eDavid Li GLclampf AlphaRef; /**< Alpha reference value */ 7141591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 7151591693c7b415e9869157c711fe11263c95d74eDavid Li 7161591693c7b415e9869157c711fe11263c95d74eDavid Li /** 7171591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Blending 7181591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7191591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 7201591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield BlendEnabled; /**< Per-buffer blend enable flags */ 7211591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BlendSrcRGB; /**< Blending source operator */ 7221591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BlendDstRGB; /**< Blending destination operator */ 7231591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BlendSrcA; /**< GL_INGR_blend_func_separate */ 7241591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BlendDstA; /**< GL_INGR_blend_func_separate */ 7251591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BlendEquationRGB; /**< Blending equation */ 7261591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BlendEquationA; /**< GL_EXT_blend_equation_separate */ 7271591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat BlendColor[4]; /**< Blending color */ 7281591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 7291591693c7b415e9869157c711fe11263c95d74eDavid Li 7301591693c7b415e9869157c711fe11263c95d74eDavid Li /** 7311591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Logic op 7321591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7331591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 7341591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum LogicOp; /**< Logic operator */ 7351591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IndexLogicOpEnabled; /**< Color index logic op enabled flag */ 7361591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ColorLogicOpEnabled; /**< RGBA logic op enabled flag */ 7371591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _LogicOpEnabled; /**< RGBA logic op + EXT_blend_logic_op enabled flag */ 7381591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 7391591693c7b415e9869157c711fe11263c95d74eDavid Li 7401591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean DitherFlag; /**< Dither enable flag */ 7411591693c7b415e9869157c711fe11263c95d74eDavid Li 7421591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ClampFragmentColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */ 7431591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ClampReadColor; /**< GL_TRUE, GL_FALSE or GL_FIXED_ONLY_ARB */ 7441591693c7b415e9869157c711fe11263c95d74eDavid Li}; 7451591693c7b415e9869157c711fe11263c95d74eDavid Li 7461591693c7b415e9869157c711fe11263c95d74eDavid Li 7471591693c7b415e9869157c711fe11263c95d74eDavid Li/** 7481591693c7b415e9869157c711fe11263c95d74eDavid Li * Current attribute group (GL_CURRENT_BIT). 7491591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7501591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_current_attrib 7511591693c7b415e9869157c711fe11263c95d74eDavid Li{ 7521591693c7b415e9869157c711fe11263c95d74eDavid Li /** 7531591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Current vertex attributes. 7541591693c7b415e9869157c711fe11263c95d74eDavid Li * \note Values are valid only after FLUSH_VERTICES has been called. 7551591693c7b415e9869157c711fe11263c95d74eDavid Li * \note Index and Edgeflag current values are stored as floats in the 7561591693c7b415e9869157c711fe11263c95d74eDavid Li * SIX and SEVEN attribute slots. 7571591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7581591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Attrib[VERT_ATTRIB_MAX][4]; /**< Position, color, texcoords, etc */ 7591591693c7b415e9869157c711fe11263c95d74eDavid Li 7601591693c7b415e9869157c711fe11263c95d74eDavid Li /** 7611591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Current raster position attributes (always valid). 7621591693c7b415e9869157c711fe11263c95d74eDavid Li * \note This set of attributes is very similar to the SWvertex struct. 7631591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7641591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 7651591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat RasterPos[4]; 7661591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat RasterDistance; 7671591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat RasterColor[4]; 7681591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat RasterSecondaryColor[4]; 7691591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat RasterTexCoords[MAX_TEXTURE_COORD_UNITS][4]; 7701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean RasterPosValid; 7711591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 7721591693c7b415e9869157c711fe11263c95d74eDavid Li}; 7731591693c7b415e9869157c711fe11263c95d74eDavid Li 7741591693c7b415e9869157c711fe11263c95d74eDavid Li 7751591693c7b415e9869157c711fe11263c95d74eDavid Li/** 7761591693c7b415e9869157c711fe11263c95d74eDavid Li * Depth buffer attribute group (GL_DEPTH_BUFFER_BIT). 7771591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7781591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_depthbuffer_attrib 7791591693c7b415e9869157c711fe11263c95d74eDavid Li{ 7801591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Func; /**< Function for depth buffer compare */ 7811591693c7b415e9869157c711fe11263c95d74eDavid Li GLclampd Clear; /**< Value to clear depth buffer to */ 7821591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Test; /**< Depth buffering enabled flag */ 7831591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Mask; /**< Depth buffer writable? */ 7841591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean BoundsTest; /**< GL_EXT_depth_bounds_test */ 7851591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat BoundsMin, BoundsMax;/**< GL_EXT_depth_bounds_test */ 7861591693c7b415e9869157c711fe11263c95d74eDavid Li}; 7871591693c7b415e9869157c711fe11263c95d74eDavid Li 7881591693c7b415e9869157c711fe11263c95d74eDavid Li 7891591693c7b415e9869157c711fe11263c95d74eDavid Li/** 7901591693c7b415e9869157c711fe11263c95d74eDavid Li * Evaluator attribute group (GL_EVAL_BIT). 7911591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7921591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_eval_attrib 7931591693c7b415e9869157c711fe11263c95d74eDavid Li{ 7941591693c7b415e9869157c711fe11263c95d74eDavid Li /** 7951591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Enable bits 7961591693c7b415e9869157c711fe11263c95d74eDavid Li */ 7971591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 7981591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1Color4; 7991591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1Index; 8001591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1Normal; 8011591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1TextureCoord1; 8021591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1TextureCoord2; 8031591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1TextureCoord3; 8041591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1TextureCoord4; 8051591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1Vertex3; 8061591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1Vertex4; 8071591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map1Attrib[16]; /* GL_NV_vertex_program */ 8081591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2Color4; 8091591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2Index; 8101591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2Normal; 8111591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2TextureCoord1; 8121591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2TextureCoord2; 8131591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2TextureCoord3; 8141591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2TextureCoord4; 8151591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2Vertex3; 8161591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2Vertex4; 8171591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Map2Attrib[16]; /* GL_NV_vertex_program */ 8181591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean AutoNormal; 8191591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 8201591693c7b415e9869157c711fe11263c95d74eDavid Li 8211591693c7b415e9869157c711fe11263c95d74eDavid Li /** 8221591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Map Grid endpoints and divisions and calculated du values 8231591693c7b415e9869157c711fe11263c95d74eDavid Li */ 8241591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 8251591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MapGrid1un; 8261591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MapGrid1u1, MapGrid1u2, MapGrid1du; 8271591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MapGrid2un, MapGrid2vn; 8281591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MapGrid2u1, MapGrid2u2, MapGrid2du; 8291591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MapGrid2v1, MapGrid2v2, MapGrid2dv; 8301591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 8311591693c7b415e9869157c711fe11263c95d74eDavid Li}; 8321591693c7b415e9869157c711fe11263c95d74eDavid Li 8331591693c7b415e9869157c711fe11263c95d74eDavid Li 8341591693c7b415e9869157c711fe11263c95d74eDavid Li/** 8351591693c7b415e9869157c711fe11263c95d74eDavid Li * Fog attribute group (GL_FOG_BIT). 8361591693c7b415e9869157c711fe11263c95d74eDavid Li */ 8371591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_fog_attrib 8381591693c7b415e9869157c711fe11263c95d74eDavid Li{ 8391591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< Fog enabled flag */ 8401591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Color[4]; /**< Fog color */ 8411591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Density; /**< Density >= 0.0 */ 8421591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Start; /**< Start distance in eye coords */ 8431591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat End; /**< End distance in eye coords */ 8441591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Index; /**< Fog index */ 8451591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Mode; /**< Fog mode */ 8461591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ColorSumEnabled; 8471591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum FogCoordinateSource; /**< GL_EXT_fog_coord */ 8481591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _Scale; /**< (End == Start) ? 1.0 : 1.0 / (End - Start) */ 8491591693c7b415e9869157c711fe11263c95d74eDavid Li}; 8501591693c7b415e9869157c711fe11263c95d74eDavid Li 8511591693c7b415e9869157c711fe11263c95d74eDavid Li 8521591693c7b415e9869157c711fe11263c95d74eDavid Li/** 8531591693c7b415e9869157c711fe11263c95d74eDavid Li * Hint attribute group (GL_HINT_BIT). 8541591693c7b415e9869157c711fe11263c95d74eDavid Li * 8551591693c7b415e9869157c711fe11263c95d74eDavid Li * Values are always one of GL_FASTEST, GL_NICEST, or GL_DONT_CARE. 8561591693c7b415e9869157c711fe11263c95d74eDavid Li */ 8571591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_hint_attrib 8581591693c7b415e9869157c711fe11263c95d74eDavid Li{ 8591591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum PerspectiveCorrection; 8601591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum PointSmooth; 8611591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum LineSmooth; 8621591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum PolygonSmooth; 8631591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Fog; 8641591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ClipVolumeClipping; /**< GL_EXT_clip_volume_hint */ 8651591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum TextureCompression; /**< GL_ARB_texture_compression */ 8661591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum GenerateMipmap; /**< GL_SGIS_generate_mipmap */ 8671591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum FragmentShaderDerivative; /**< GL_ARB_fragment_shader */ 8681591693c7b415e9869157c711fe11263c95d74eDavid Li}; 8691591693c7b415e9869157c711fe11263c95d74eDavid Li 8701591693c7b415e9869157c711fe11263c95d74eDavid Li/** 8711591693c7b415e9869157c711fe11263c95d74eDavid Li * Light state flags. 8721591693c7b415e9869157c711fe11263c95d74eDavid Li */ 8731591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 8741591693c7b415e9869157c711fe11263c95d74eDavid Li#define LIGHT_SPOT 0x1 8751591693c7b415e9869157c711fe11263c95d74eDavid Li#define LIGHT_LOCAL_VIEWER 0x2 8761591693c7b415e9869157c711fe11263c95d74eDavid Li#define LIGHT_POSITIONAL 0x4 8771591693c7b415e9869157c711fe11263c95d74eDavid Li#define LIGHT_NEED_VERTICES (LIGHT_POSITIONAL|LIGHT_LOCAL_VIEWER) 8781591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 8791591693c7b415e9869157c711fe11263c95d74eDavid Li 8801591693c7b415e9869157c711fe11263c95d74eDavid Li 8811591693c7b415e9869157c711fe11263c95d74eDavid Li/** 8821591693c7b415e9869157c711fe11263c95d74eDavid Li * Lighting attribute group (GL_LIGHT_BIT). 8831591693c7b415e9869157c711fe11263c95d74eDavid Li */ 8841591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_light_attrib 8851591693c7b415e9869157c711fe11263c95d74eDavid Li{ 8861591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_light Light[MAX_LIGHTS]; /**< Array of light sources */ 8871591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_lightmodel Model; /**< Lighting model */ 8881591693c7b415e9869157c711fe11263c95d74eDavid Li 8891591693c7b415e9869157c711fe11263c95d74eDavid Li /** 8901591693c7b415e9869157c711fe11263c95d74eDavid Li * Must flush FLUSH_VERTICES before referencing: 8911591693c7b415e9869157c711fe11263c95d74eDavid Li */ 8921591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 8931591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_material Material; /**< Includes front & back values */ 8941591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 8951591693c7b415e9869157c711fe11263c95d74eDavid Li 8961591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< Lighting enabled flag */ 8971591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ShadeModel; /**< GL_FLAT or GL_SMOOTH */ 8981591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ProvokingVertex; /**< GL_EXT_provoking_vertex */ 8991591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ColorMaterialFace; /**< GL_FRONT, BACK or FRONT_AND_BACK */ 9001591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ColorMaterialMode; /**< GL_AMBIENT, GL_DIFFUSE, etc */ 9011591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield ColorMaterialBitmask; /**< bitmask formed from Face and Mode */ 9021591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ColorMaterialEnabled; 9031591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ClampVertexColor; 9041591693c7b415e9869157c711fe11263c95d74eDavid Li 9051591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_light EnabledList; /**< List sentinel */ 9061591693c7b415e9869157c711fe11263c95d74eDavid Li 9071591693c7b415e9869157c711fe11263c95d74eDavid Li /** 9081591693c7b415e9869157c711fe11263c95d74eDavid Li * Derived state for optimizations: 9091591693c7b415e9869157c711fe11263c95d74eDavid Li */ 9101591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 9111591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _NeedEyeCoords; 9121591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _NeedVertices; /**< Use fast shader? */ 9131591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _Flags; /**< LIGHT_* flags, see above */ 9141591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _BaseColor[2][3]; 9151591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 9161591693c7b415e9869157c711fe11263c95d74eDavid Li}; 9171591693c7b415e9869157c711fe11263c95d74eDavid Li 9181591693c7b415e9869157c711fe11263c95d74eDavid Li 9191591693c7b415e9869157c711fe11263c95d74eDavid Li/** 9201591693c7b415e9869157c711fe11263c95d74eDavid Li * Line attribute group (GL_LINE_BIT). 9211591693c7b415e9869157c711fe11263c95d74eDavid Li */ 9221591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_line_attrib 9231591693c7b415e9869157c711fe11263c95d74eDavid Li{ 9241591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SmoothFlag; /**< GL_LINE_SMOOTH enabled? */ 9251591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean StippleFlag; /**< GL_LINE_STIPPLE enabled? */ 9261591693c7b415e9869157c711fe11263c95d74eDavid Li GLushort StipplePattern; /**< Stipple pattern */ 9271591693c7b415e9869157c711fe11263c95d74eDavid Li GLint StippleFactor; /**< Stipple repeat factor */ 9281591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Width; /**< Line width */ 9291591693c7b415e9869157c711fe11263c95d74eDavid Li}; 9301591693c7b415e9869157c711fe11263c95d74eDavid Li 9311591693c7b415e9869157c711fe11263c95d74eDavid Li 9321591693c7b415e9869157c711fe11263c95d74eDavid Li/** 9331591693c7b415e9869157c711fe11263c95d74eDavid Li * Display list attribute group (GL_LIST_BIT). 9341591693c7b415e9869157c711fe11263c95d74eDavid Li */ 9351591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_list_attrib 9361591693c7b415e9869157c711fe11263c95d74eDavid Li{ 9371591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint ListBase; 9381591693c7b415e9869157c711fe11263c95d74eDavid Li}; 9391591693c7b415e9869157c711fe11263c95d74eDavid Li 9401591693c7b415e9869157c711fe11263c95d74eDavid Li 9411591693c7b415e9869157c711fe11263c95d74eDavid Li/** 9421591693c7b415e9869157c711fe11263c95d74eDavid Li * Multisample attribute group (GL_MULTISAMPLE_BIT). 9431591693c7b415e9869157c711fe11263c95d74eDavid Li */ 9441591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_multisample_attrib 9451591693c7b415e9869157c711fe11263c95d74eDavid Li{ 9461591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; 9471591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Enabled; /**< true if Enabled and multisample buffer */ 9481591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SampleAlphaToCoverage; 9491591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SampleAlphaToOne; 9501591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SampleCoverage; 9511591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat SampleCoverageValue; 9521591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SampleCoverageInvert; 9531591693c7b415e9869157c711fe11263c95d74eDavid Li}; 9541591693c7b415e9869157c711fe11263c95d74eDavid Li 9551591693c7b415e9869157c711fe11263c95d74eDavid Li 9561591693c7b415e9869157c711fe11263c95d74eDavid Li/** 9571591693c7b415e9869157c711fe11263c95d74eDavid Li * A pixelmap (see glPixelMap) 9581591693c7b415e9869157c711fe11263c95d74eDavid Li */ 9591591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_pixelmap 9601591693c7b415e9869157c711fe11263c95d74eDavid Li{ 9611591693c7b415e9869157c711fe11263c95d74eDavid Li GLint Size; 9621591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Map[MAX_PIXEL_MAP_TABLE]; 9631591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte Map8[MAX_PIXEL_MAP_TABLE]; /**< converted to 8-bit color */ 9641591693c7b415e9869157c711fe11263c95d74eDavid Li}; 9651591693c7b415e9869157c711fe11263c95d74eDavid Li 9661591693c7b415e9869157c711fe11263c95d74eDavid Li 9671591693c7b415e9869157c711fe11263c95d74eDavid Li/** 9681591693c7b415e9869157c711fe11263c95d74eDavid Li * Collection of all pixelmaps 9691591693c7b415e9869157c711fe11263c95d74eDavid Li */ 9701591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_pixelmaps 9711591693c7b415e9869157c711fe11263c95d74eDavid Li{ 9721591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap RtoR; /**< i.e. GL_PIXEL_MAP_R_TO_R */ 9731591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap GtoG; 9741591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap BtoB; 9751591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap AtoA; 9761591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap ItoR; 9771591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap ItoG; 9781591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap ItoB; 9791591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap ItoA; 9801591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap ItoI; 9811591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_pixelmap StoS; 9821591693c7b415e9869157c711fe11263c95d74eDavid Li}; 9831591693c7b415e9869157c711fe11263c95d74eDavid Li 9841591693c7b415e9869157c711fe11263c95d74eDavid Li 9851591693c7b415e9869157c711fe11263c95d74eDavid Li/** 9861591693c7b415e9869157c711fe11263c95d74eDavid Li * Pixel attribute group (GL_PIXEL_MODE_BIT). 9871591693c7b415e9869157c711fe11263c95d74eDavid Li */ 9881591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_pixel_attrib 9891591693c7b415e9869157c711fe11263c95d74eDavid Li{ 9901591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ReadBuffer; /**< source buffer for glRead/CopyPixels() */ 9911591693c7b415e9869157c711fe11263c95d74eDavid Li 9921591693c7b415e9869157c711fe11263c95d74eDavid Li /*--- Begin Pixel Transfer State ---*/ 9931591693c7b415e9869157c711fe11263c95d74eDavid Li /* Fields are in the order in which they're applied... */ 9941591693c7b415e9869157c711fe11263c95d74eDavid Li 9951591693c7b415e9869157c711fe11263c95d74eDavid Li /** Scale & Bias (index shift, offset) */ 9961591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 9971591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat RedBias, RedScale; 9981591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat GreenBias, GreenScale; 9991591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat BlueBias, BlueScale; 10001591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat AlphaBias, AlphaScale; 10011591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat DepthBias, DepthScale; 10021591693c7b415e9869157c711fe11263c95d74eDavid Li GLint IndexShift, IndexOffset; 10031591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 10041591693c7b415e9869157c711fe11263c95d74eDavid Li 10051591693c7b415e9869157c711fe11263c95d74eDavid Li /* Pixel Maps */ 10061591693c7b415e9869157c711fe11263c95d74eDavid Li /* Note: actual pixel maps are not part of this attrib group */ 10071591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean MapColorFlag; 10081591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean MapStencilFlag; 10091591693c7b415e9869157c711fe11263c95d74eDavid Li 10101591693c7b415e9869157c711fe11263c95d74eDavid Li /*--- End Pixel Transfer State ---*/ 10111591693c7b415e9869157c711fe11263c95d74eDavid Li 10121591693c7b415e9869157c711fe11263c95d74eDavid Li /** glPixelZoom */ 10131591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat ZoomX, ZoomY; 10141591693c7b415e9869157c711fe11263c95d74eDavid Li 10151591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_SGI_texture_color_table */ 10161591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat TextureColorTableScale[4]; /**< RGBA */ 10171591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat TextureColorTableBias[4]; /**< RGBA */ 10181591693c7b415e9869157c711fe11263c95d74eDavid Li}; 10191591693c7b415e9869157c711fe11263c95d74eDavid Li 10201591693c7b415e9869157c711fe11263c95d74eDavid Li 10211591693c7b415e9869157c711fe11263c95d74eDavid Li/** 10221591693c7b415e9869157c711fe11263c95d74eDavid Li * Point attribute group (GL_POINT_BIT). 10231591693c7b415e9869157c711fe11263c95d74eDavid Li */ 10241591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_point_attrib 10251591693c7b415e9869157c711fe11263c95d74eDavid Li{ 10261591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SmoothFlag; /**< True if GL_POINT_SMOOTH is enabled */ 10271591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Size; /**< User-specified point size */ 10281591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Params[3]; /**< GL_EXT_point_parameters */ 10291591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MinSize, MaxSize; /**< GL_EXT_point_parameters */ 10301591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Threshold; /**< GL_EXT_point_parameters */ 10311591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Attenuated; /**< True if Params != [1, 0, 0] */ 10321591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean PointSprite; /**< GL_NV/ARB_point_sprite */ 10331591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean CoordReplace[MAX_TEXTURE_COORD_UNITS]; /**< GL_ARB_point_sprite*/ 10341591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum SpriteRMode; /**< GL_NV_point_sprite (only!) */ 10351591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum SpriteOrigin; /**< GL_ARB_point_sprite */ 10361591693c7b415e9869157c711fe11263c95d74eDavid Li}; 10371591693c7b415e9869157c711fe11263c95d74eDavid Li 10381591693c7b415e9869157c711fe11263c95d74eDavid Li 10391591693c7b415e9869157c711fe11263c95d74eDavid Li/** 10401591693c7b415e9869157c711fe11263c95d74eDavid Li * Polygon attribute group (GL_POLYGON_BIT). 10411591693c7b415e9869157c711fe11263c95d74eDavid Li */ 10421591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_polygon_attrib 10431591693c7b415e9869157c711fe11263c95d74eDavid Li{ 10441591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum FrontFace; /**< Either GL_CW or GL_CCW */ 10451591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum FrontMode; /**< Either GL_POINT, GL_LINE or GL_FILL */ 10461591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BackMode; /**< Either GL_POINT, GL_LINE or GL_FILL */ 10471591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _FrontBit; /**< 0=GL_CCW, 1=GL_CW */ 10481591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean CullFlag; /**< Culling on/off flag */ 10491591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SmoothFlag; /**< True if GL_POLYGON_SMOOTH is enabled */ 10501591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean StippleFlag; /**< True if GL_POLYGON_STIPPLE is enabled */ 10511591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum CullFaceMode; /**< Culling mode GL_FRONT or GL_BACK */ 10521591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat OffsetFactor; /**< Polygon offset factor, from user */ 10531591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat OffsetUnits; /**< Polygon offset units, from user */ 10541591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean OffsetPoint; /**< Offset in GL_POINT mode */ 10551591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean OffsetLine; /**< Offset in GL_LINE mode */ 10561591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean OffsetFill; /**< Offset in GL_FILL mode */ 10571591693c7b415e9869157c711fe11263c95d74eDavid Li}; 10581591693c7b415e9869157c711fe11263c95d74eDavid Li 10591591693c7b415e9869157c711fe11263c95d74eDavid Li 10601591693c7b415e9869157c711fe11263c95d74eDavid Li/** 10611591693c7b415e9869157c711fe11263c95d74eDavid Li * Scissor attributes (GL_SCISSOR_BIT). 10621591693c7b415e9869157c711fe11263c95d74eDavid Li */ 10631591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_scissor_attrib 10641591693c7b415e9869157c711fe11263c95d74eDavid Li{ 10651591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< Scissor test enabled? */ 10661591693c7b415e9869157c711fe11263c95d74eDavid Li GLint X, Y; /**< Lower left corner of box */ 10671591693c7b415e9869157c711fe11263c95d74eDavid Li GLsizei Width, Height; /**< Size of box */ 10681591693c7b415e9869157c711fe11263c95d74eDavid Li}; 10691591693c7b415e9869157c711fe11263c95d74eDavid Li 10701591693c7b415e9869157c711fe11263c95d74eDavid Li 10711591693c7b415e9869157c711fe11263c95d74eDavid Li/** 10721591693c7b415e9869157c711fe11263c95d74eDavid Li * Stencil attribute group (GL_STENCIL_BUFFER_BIT). 10731591693c7b415e9869157c711fe11263c95d74eDavid Li * 10741591693c7b415e9869157c711fe11263c95d74eDavid Li * Three sets of stencil data are tracked so that OpenGL 2.0, 10751591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_EXT_stencil_two_side, and GL_ATI_separate_stencil can all be supported 10761591693c7b415e9869157c711fe11263c95d74eDavid Li * simultaneously. In each of the stencil state arrays, element 0 corresponds 10771591693c7b415e9869157c711fe11263c95d74eDavid Li * to GL_FRONT. Element 1 corresponds to the OpenGL 2.0 / 10781591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_ATI_separate_stencil GL_BACK state. Element 2 corresponds to the 10791591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_EXT_stencil_two_side GL_BACK state. 10801591693c7b415e9869157c711fe11263c95d74eDavid Li * 10811591693c7b415e9869157c711fe11263c95d74eDavid Li * The derived value \c _BackFace is either 1 or 2 depending on whether or 10821591693c7b415e9869157c711fe11263c95d74eDavid Li * not GL_STENCIL_TEST_TWO_SIDE_EXT is enabled. 10831591693c7b415e9869157c711fe11263c95d74eDavid Li * 10841591693c7b415e9869157c711fe11263c95d74eDavid Li * The derived value \c _TestTwoSide is set when the front-face and back-face 10851591693c7b415e9869157c711fe11263c95d74eDavid Li * stencil state are different. 10861591693c7b415e9869157c711fe11263c95d74eDavid Li */ 10871591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_stencil_attrib 10881591693c7b415e9869157c711fe11263c95d74eDavid Li{ 10891591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< Enabled flag */ 10901591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean TestTwoSide; /**< GL_EXT_stencil_two_side */ 10911591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte ActiveFace; /**< GL_EXT_stencil_two_side (0 or 2) */ 10921591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Enabled; /**< Enabled and stencil buffer present */ 10931591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _TestTwoSide; 10941591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte _BackFace; /**< Current back stencil state (1 or 2) */ 10951591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Function[3]; /**< Stencil function */ 10961591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum FailFunc[3]; /**< Fail function */ 10971591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ZPassFunc[3]; /**< Depth buffer pass function */ 10981591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ZFailFunc[3]; /**< Depth buffer fail function */ 10991591693c7b415e9869157c711fe11263c95d74eDavid Li GLint Ref[3]; /**< Reference value */ 11001591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint ValueMask[3]; /**< Value mask */ 11011591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint WriteMask[3]; /**< Write mask */ 11021591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Clear; /**< Clear value */ 11031591693c7b415e9869157c711fe11263c95d74eDavid Li}; 11041591693c7b415e9869157c711fe11263c95d74eDavid Li 11051591693c7b415e9869157c711fe11263c95d74eDavid Li 11061591693c7b415e9869157c711fe11263c95d74eDavid Li/** 11071591693c7b415e9869157c711fe11263c95d74eDavid Li * An index for each type of texture object. These correspond to the GL 11081591693c7b415e9869157c711fe11263c95d74eDavid Li * texture target enums, such as GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP, etc. 11091591693c7b415e9869157c711fe11263c95d74eDavid Li * Note: the order is from highest priority to lowest priority. 11101591693c7b415e9869157c711fe11263c95d74eDavid Li */ 11111591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 11121591693c7b415e9869157c711fe11263c95d74eDavid Li{ 11131591693c7b415e9869157c711fe11263c95d74eDavid Li TEXTURE_2D_ARRAY_INDEX, 11141591693c7b415e9869157c711fe11263c95d74eDavid Li TEXTURE_1D_ARRAY_INDEX, 11151591693c7b415e9869157c711fe11263c95d74eDavid Li TEXTURE_CUBE_INDEX, 11161591693c7b415e9869157c711fe11263c95d74eDavid Li TEXTURE_3D_INDEX, 11171591693c7b415e9869157c711fe11263c95d74eDavid Li TEXTURE_RECT_INDEX, 11181591693c7b415e9869157c711fe11263c95d74eDavid Li TEXTURE_2D_INDEX, 11191591693c7b415e9869157c711fe11263c95d74eDavid Li TEXTURE_1D_INDEX, 11201591693c7b415e9869157c711fe11263c95d74eDavid Li NUM_TEXTURE_TARGETS 11211591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_texture_index; 11221591693c7b415e9869157c711fe11263c95d74eDavid Li 11231591693c7b415e9869157c711fe11263c95d74eDavid Li 11241591693c7b415e9869157c711fe11263c95d74eDavid Li/** 11251591693c7b415e9869157c711fe11263c95d74eDavid Li * Bit flags for each type of texture object 11261591693c7b415e9869157c711fe11263c95d74eDavid Li * Used for Texture.Unit[]._ReallyEnabled flags. 11271591693c7b415e9869157c711fe11263c95d74eDavid Li */ 11281591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 11291591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXTURE_2D_ARRAY_BIT (1 << TEXTURE_2D_ARRAY_INDEX) 11301591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXTURE_1D_ARRAY_BIT (1 << TEXTURE_1D_ARRAY_INDEX) 11311591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXTURE_CUBE_BIT (1 << TEXTURE_CUBE_INDEX) 11321591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXTURE_3D_BIT (1 << TEXTURE_3D_INDEX) 11331591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXTURE_RECT_BIT (1 << TEXTURE_RECT_INDEX) 11341591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXTURE_2D_BIT (1 << TEXTURE_2D_INDEX) 11351591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXTURE_1D_BIT (1 << TEXTURE_1D_INDEX) 11361591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 11371591693c7b415e9869157c711fe11263c95d74eDavid Li 11381591693c7b415e9869157c711fe11263c95d74eDavid Li 11391591693c7b415e9869157c711fe11263c95d74eDavid Li/** 11401591693c7b415e9869157c711fe11263c95d74eDavid Li * TexGenEnabled flags. 11411591693c7b415e9869157c711fe11263c95d74eDavid Li */ 11421591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 11431591693c7b415e9869157c711fe11263c95d74eDavid Li#define S_BIT 1 11441591693c7b415e9869157c711fe11263c95d74eDavid Li#define T_BIT 2 11451591693c7b415e9869157c711fe11263c95d74eDavid Li#define R_BIT 4 11461591693c7b415e9869157c711fe11263c95d74eDavid Li#define Q_BIT 8 11471591693c7b415e9869157c711fe11263c95d74eDavid Li#define STR_BITS (S_BIT | T_BIT | R_BIT) 11481591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 11491591693c7b415e9869157c711fe11263c95d74eDavid Li 11501591693c7b415e9869157c711fe11263c95d74eDavid Li 11511591693c7b415e9869157c711fe11263c95d74eDavid Li/** 11521591693c7b415e9869157c711fe11263c95d74eDavid Li * Bit flag versions of the corresponding GL_ constants. 11531591693c7b415e9869157c711fe11263c95d74eDavid Li */ 11541591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 11551591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXGEN_SPHERE_MAP 0x1 11561591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXGEN_OBJ_LINEAR 0x2 11571591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXGEN_EYE_LINEAR 0x4 11581591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXGEN_REFLECTION_MAP_NV 0x8 11591591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXGEN_NORMAL_MAP_NV 0x10 11601591693c7b415e9869157c711fe11263c95d74eDavid Li 11611591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXGEN_NEED_NORMALS (TEXGEN_SPHERE_MAP | \ 11621591693c7b415e9869157c711fe11263c95d74eDavid Li TEXGEN_REFLECTION_MAP_NV | \ 11631591693c7b415e9869157c711fe11263c95d74eDavid Li TEXGEN_NORMAL_MAP_NV) 11641591693c7b415e9869157c711fe11263c95d74eDavid Li#define TEXGEN_NEED_EYE_COORD (TEXGEN_SPHERE_MAP | \ 11651591693c7b415e9869157c711fe11263c95d74eDavid Li TEXGEN_REFLECTION_MAP_NV | \ 11661591693c7b415e9869157c711fe11263c95d74eDavid Li TEXGEN_NORMAL_MAP_NV | \ 11671591693c7b415e9869157c711fe11263c95d74eDavid Li TEXGEN_EYE_LINEAR) 11681591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 11691591693c7b415e9869157c711fe11263c95d74eDavid Li 11701591693c7b415e9869157c711fe11263c95d74eDavid Li 11711591693c7b415e9869157c711fe11263c95d74eDavid Li 11721591693c7b415e9869157c711fe11263c95d74eDavid Li/** Tex-gen enabled for texture unit? */ 11731591693c7b415e9869157c711fe11263c95d74eDavid Li#define ENABLE_TEXGEN(unit) (1 << (unit)) 11741591693c7b415e9869157c711fe11263c95d74eDavid Li 11751591693c7b415e9869157c711fe11263c95d74eDavid Li/** Non-identity texture matrix for texture unit? */ 11761591693c7b415e9869157c711fe11263c95d74eDavid Li#define ENABLE_TEXMAT(unit) (1 << (unit)) 11771591693c7b415e9869157c711fe11263c95d74eDavid Li 11781591693c7b415e9869157c711fe11263c95d74eDavid Li 11791591693c7b415e9869157c711fe11263c95d74eDavid Li/** 11801591693c7b415e9869157c711fe11263c95d74eDavid Li * Texel fetch function prototype. We use texel fetch functions to 11811591693c7b415e9869157c711fe11263c95d74eDavid Li * extract RGBA, color indexes and depth components out of 1D, 2D and 3D 11821591693c7b415e9869157c711fe11263c95d74eDavid Li * texture images. These functions help to isolate us from the gritty 11831591693c7b415e9869157c711fe11263c95d74eDavid Li * details of all the various texture image encodings. 11841591693c7b415e9869157c711fe11263c95d74eDavid Li * 11851591693c7b415e9869157c711fe11263c95d74eDavid Li * \param texImage texture image. 11861591693c7b415e9869157c711fe11263c95d74eDavid Li * \param col texel column. 11871591693c7b415e9869157c711fe11263c95d74eDavid Li * \param row texel row. 11881591693c7b415e9869157c711fe11263c95d74eDavid Li * \param img texel image level/layer. 11891591693c7b415e9869157c711fe11263c95d74eDavid Li * \param texelOut output texel (up to 4 GLchans) 11901591693c7b415e9869157c711fe11263c95d74eDavid Li */ 11911591693c7b415e9869157c711fe11263c95d74eDavid Litypedef void (*FetchTexelFuncC)( const struct gl_texture_image *texImage, 11921591693c7b415e9869157c711fe11263c95d74eDavid Li GLint col, GLint row, GLint img, 11931591693c7b415e9869157c711fe11263c95d74eDavid Li GLchan *texelOut ); 11941591693c7b415e9869157c711fe11263c95d74eDavid Li 11951591693c7b415e9869157c711fe11263c95d74eDavid Li/** 11961591693c7b415e9869157c711fe11263c95d74eDavid Li * As above, but returns floats. 11971591693c7b415e9869157c711fe11263c95d74eDavid Li * Used for depth component images and for upcoming signed/float 11981591693c7b415e9869157c711fe11263c95d74eDavid Li * texture images. 11991591693c7b415e9869157c711fe11263c95d74eDavid Li */ 12001591693c7b415e9869157c711fe11263c95d74eDavid Litypedef void (*FetchTexelFuncF)( const struct gl_texture_image *texImage, 12011591693c7b415e9869157c711fe11263c95d74eDavid Li GLint col, GLint row, GLint img, 12021591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat *texelOut ); 12031591693c7b415e9869157c711fe11263c95d74eDavid Li 12041591693c7b415e9869157c711fe11263c95d74eDavid Li 12051591693c7b415e9869157c711fe11263c95d74eDavid Litypedef void (*StoreTexelFunc)(struct gl_texture_image *texImage, 12061591693c7b415e9869157c711fe11263c95d74eDavid Li GLint col, GLint row, GLint img, 12071591693c7b415e9869157c711fe11263c95d74eDavid Li const void *texel); 12081591693c7b415e9869157c711fe11263c95d74eDavid Li 12091591693c7b415e9869157c711fe11263c95d74eDavid Li 12101591693c7b415e9869157c711fe11263c95d74eDavid Li/** 12111591693c7b415e9869157c711fe11263c95d74eDavid Li * Texture image state. Describes the dimensions of a texture image, 12121591693c7b415e9869157c711fe11263c95d74eDavid Li * the texel format and pointers to Texel Fetch functions. 12131591693c7b415e9869157c711fe11263c95d74eDavid Li */ 12141591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texture_image 12151591693c7b415e9869157c711fe11263c95d74eDavid Li{ 12161591693c7b415e9869157c711fe11263c95d74eDavid Li GLint InternalFormat; /**< Internal format as given by the user */ 12171591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_ALPHA, 12181591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_LUMINANCE, GL_LUMINANCE_ALPHA, 12191591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_INTENSITY, GL_COLOR_INDEX, 12201591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_DEPTH_COMPONENT or GL_DEPTH_STENCIL_EXT 12211591693c7b415e9869157c711fe11263c95d74eDavid Li * only. Used for choosing TexEnv arithmetic. 12221591693c7b415e9869157c711fe11263c95d74eDavid Li */ 12231591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint TexFormat; /**< The actual format: MESA_FORMAT_x */ 12241591693c7b415e9869157c711fe11263c95d74eDavid Li 12251591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Border; /**< 0 or 1 */ 12261591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Width; /**< = 2^WidthLog2 + 2*Border */ 12271591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Height; /**< = 2^HeightLog2 + 2*Border */ 12281591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Depth; /**< = 2^DepthLog2 + 2*Border */ 12291591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Width2; /**< = Width - 2*Border */ 12301591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Height2; /**< = Height - 2*Border */ 12311591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Depth2; /**< = Depth - 2*Border */ 12321591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint WidthLog2; /**< = log2(Width2) */ 12331591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint HeightLog2; /**< = log2(Height2) */ 12341591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint DepthLog2; /**< = log2(Depth2) */ 12351591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxLog2; /**< = MAX(WidthLog2, HeightLog2) */ 12361591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat WidthScale; /**< used for mipmap LOD computation */ 12371591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat HeightScale; /**< used for mipmap LOD computation */ 12381591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat DepthScale; /**< used for mipmap LOD computation */ 12391591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IsClientData; /**< Data owned by client? */ 12401591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _IsPowerOfTwo; /**< Are all dimensions powers of two? */ 12411591693c7b415e9869157c711fe11263c95d74eDavid Li 12421591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_object *TexObject; /**< Pointer back to parent object */ 12431591693c7b415e9869157c711fe11263c95d74eDavid Li 12441591693c7b415e9869157c711fe11263c95d74eDavid Li FetchTexelFuncC FetchTexelc; /**< GLchan texel fetch function pointer */ 12451591693c7b415e9869157c711fe11263c95d74eDavid Li FetchTexelFuncF FetchTexelf; /**< Float texel fetch function pointer */ 12461591693c7b415e9869157c711fe11263c95d74eDavid Li 12471591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint RowStride; /**< Padded width in units of texels */ 12481591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint *ImageOffsets; /**< if 3D texture: array [Depth] of offsets to 12491591693c7b415e9869157c711fe11263c95d74eDavid Li each 2D slice in 'Data', in texels */ 12501591693c7b415e9869157c711fe11263c95d74eDavid Li GLvoid *Data; /**< Image data, accessed via FetchTexel() */ 12511591693c7b415e9869157c711fe11263c95d74eDavid Li 12521591693c7b415e9869157c711fe11263c95d74eDavid Li /** 12531591693c7b415e9869157c711fe11263c95d74eDavid Li * \name For device driver: 12541591693c7b415e9869157c711fe11263c95d74eDavid Li */ 12551591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 12561591693c7b415e9869157c711fe11263c95d74eDavid Li void *DriverData; /**< Arbitrary device driver data */ 12571591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 12581591693c7b415e9869157c711fe11263c95d74eDavid Li}; 12591591693c7b415e9869157c711fe11263c95d74eDavid Li 12601591693c7b415e9869157c711fe11263c95d74eDavid Li 12611591693c7b415e9869157c711fe11263c95d74eDavid Li/** 12621591693c7b415e9869157c711fe11263c95d74eDavid Li * Indexes for cube map faces. 12631591693c7b415e9869157c711fe11263c95d74eDavid Li */ 12641591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 12651591693c7b415e9869157c711fe11263c95d74eDavid Li{ 12661591693c7b415e9869157c711fe11263c95d74eDavid Li FACE_POS_X = 0, 12671591693c7b415e9869157c711fe11263c95d74eDavid Li FACE_NEG_X = 1, 12681591693c7b415e9869157c711fe11263c95d74eDavid Li FACE_POS_Y = 2, 12691591693c7b415e9869157c711fe11263c95d74eDavid Li FACE_NEG_Y = 3, 12701591693c7b415e9869157c711fe11263c95d74eDavid Li FACE_POS_Z = 4, 12711591693c7b415e9869157c711fe11263c95d74eDavid Li FACE_NEG_Z = 5, 12721591693c7b415e9869157c711fe11263c95d74eDavid Li MAX_FACES = 6 12731591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_face_index; 12741591693c7b415e9869157c711fe11263c95d74eDavid Li 12751591693c7b415e9869157c711fe11263c95d74eDavid Li 127660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li///** 127760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * Texture object state. Contains the array of mipmap images, border color, 127860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * wrap modes, filter modes, shadow/texcompare state, and the per-texture 127960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * color palette. 128060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 128160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//struct gl_texture_object 128260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//{ 128360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// _glthread_Mutex Mutex; /**< for thread safety */ 128460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint RefCount; /**< reference count */ 128560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint Name; /**< the user-visible texture object ID */ 128660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum Target; /**< GL_TEXTURE_1D, GL_TEXTURE_2D, etc. */ 128760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLfloat Priority; /**< in [0,1] */ 128860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// union { 128960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLfloat f[4]; 129060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint ui[4]; 129160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint i[4]; 129260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// } BorderColor; /**< Interpreted according to texture format */ 129360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum WrapS; /**< S-axis texture image wrap mode */ 129460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum WrapT; /**< T-axis texture image wrap mode */ 129560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum WrapR; /**< R-axis texture image wrap mode */ 129660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum MinFilter; /**< minification filter */ 129760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum MagFilter; /**< magnification filter */ 129860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLfloat MinLod; /**< min lambda, OpenGL 1.2 */ 129960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLfloat MaxLod; /**< max lambda, OpenGL 1.2 */ 130060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLfloat LodBias; /**< OpenGL 1.4 */ 130160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint BaseLevel; /**< min mipmap level, OpenGL 1.2 */ 130260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint MaxLevel; /**< max mipmap level, OpenGL 1.2 */ 130360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLfloat MaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ 130460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum CompareMode; /**< GL_ARB_shadow */ 130560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum CompareFunc; /**< GL_ARB_shadow */ 130660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLfloat CompareFailValue; /**< GL_ARB_shadow_ambient */ 130760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum DepthMode; /**< GL_ARB_depth_texture */ 130860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint _MaxLevel; /**< actual max mipmap level (q in the spec) */ 130960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLfloat _MaxLambda; /**< = _MaxLevel - BaseLevel (q - b in spec) */ 131060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint CropRect[4]; /**< GL_OES_draw_texture */ 131160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum Swizzle[4]; /**< GL_EXT_texture_swizzle */ 131260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint _Swizzle; /**< same as Swizzle, but SWIZZLE_* format */ 131360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLboolean GenerateMipmap; /**< GL_SGIS_generate_mipmap */ 131460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLboolean _Complete; /**< Is texture object complete? */ 131560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLboolean _RenderToTexture; /**< Any rendering to this texture? */ 131660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ 131760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 131860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** Actual texture images, indexed by [cube face] and [mipmap level] */ 131960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_texture_image *Image[MAX_FACES][MAX_TEXTURE_LEVELS]; 132060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 132160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** GL_EXT_paletted_texture */ 132260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_color_table Palette; 132360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 132460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** 132560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * \name For device driver. 132660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * Note: instead of attaching driver data to this pointer, it's preferable 132760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * to instead use this struct as a base class for your own texture object 132860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * class. Driver->NewTextureObject() can be used to implement the 132960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * allocation. 133060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 133160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// void *DriverData; /**< Arbitrary device driver data */ 133260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//}; 13331591693c7b415e9869157c711fe11263c95d74eDavid Li 13341591693c7b415e9869157c711fe11263c95d74eDavid Li 13351591693c7b415e9869157c711fe11263c95d74eDavid Li/** Up to four combiner sources are possible with GL_NV_texture_env_combine4 */ 13361591693c7b415e9869157c711fe11263c95d74eDavid Li#define MAX_COMBINER_TERMS 4 13371591693c7b415e9869157c711fe11263c95d74eDavid Li 13381591693c7b415e9869157c711fe11263c95d74eDavid Li 13391591693c7b415e9869157c711fe11263c95d74eDavid Li/** 13401591693c7b415e9869157c711fe11263c95d74eDavid Li * Texture combine environment state. 13411591693c7b415e9869157c711fe11263c95d74eDavid Li */ 13421591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_tex_env_combine_state 13431591693c7b415e9869157c711fe11263c95d74eDavid Li{ 13441591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ModeRGB; /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */ 13451591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum ModeA; /**< GL_REPLACE, GL_DECAL, GL_ADD, etc. */ 13461591693c7b415e9869157c711fe11263c95d74eDavid Li /** Source terms: GL_PRIMARY_COLOR, GL_TEXTURE, etc */ 13471591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum SourceRGB[MAX_COMBINER_TERMS]; 13481591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum SourceA[MAX_COMBINER_TERMS]; 13491591693c7b415e9869157c711fe11263c95d74eDavid Li /** Source operands: GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, etc */ 13501591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum OperandRGB[MAX_COMBINER_TERMS]; 13511591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum OperandA[MAX_COMBINER_TERMS]; 13521591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint ScaleShiftRGB; /**< 0, 1 or 2 */ 13531591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint ScaleShiftA; /**< 0, 1 or 2 */ 13541591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint _NumArgsRGB; /**< Number of inputs used for the RGB combiner */ 13551591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint _NumArgsA; /**< Number of inputs used for the A combiner */ 13561591693c7b415e9869157c711fe11263c95d74eDavid Li}; 13571591693c7b415e9869157c711fe11263c95d74eDavid Li 13581591693c7b415e9869157c711fe11263c95d74eDavid Li 13591591693c7b415e9869157c711fe11263c95d74eDavid Li/** 13601591693c7b415e9869157c711fe11263c95d74eDavid Li * Texture coord generation state. 13611591693c7b415e9869157c711fe11263c95d74eDavid Li */ 13621591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texgen 13631591693c7b415e9869157c711fe11263c95d74eDavid Li{ 13641591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Mode; /**< GL_EYE_LINEAR, GL_SPHERE_MAP, etc */ 13651591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _ModeBit; /**< TEXGEN_x bit corresponding to Mode */ 13661591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat ObjectPlane[4]; 13671591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat EyePlane[4]; 13681591693c7b415e9869157c711fe11263c95d74eDavid Li}; 13691591693c7b415e9869157c711fe11263c95d74eDavid Li 13701591693c7b415e9869157c711fe11263c95d74eDavid Li 13711591693c7b415e9869157c711fe11263c95d74eDavid Li/** 13721591693c7b415e9869157c711fe11263c95d74eDavid Li * Texture unit state. Contains enable flags, texture environment/function/ 13731591693c7b415e9869157c711fe11263c95d74eDavid Li * combiners, texgen state, pointers to current texture objects and 13741591693c7b415e9869157c711fe11263c95d74eDavid Li * post-filter color tables. 13751591693c7b415e9869157c711fe11263c95d74eDavid Li */ 13761591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texture_unit 13771591693c7b415e9869157c711fe11263c95d74eDavid Li{ 13781591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield Enabled; /**< bitmask of TEXTURE_*_BIT flags */ 13791591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _ReallyEnabled; /**< 0 or exactly one of TEXTURE_*_BIT flags */ 13801591693c7b415e9869157c711fe11263c95d74eDavid Li 13811591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum EnvMode; /**< GL_MODULATE, GL_DECAL, GL_BLEND, etc. */ 13821591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat EnvColor[4]; 13831591693c7b415e9869157c711fe11263c95d74eDavid Li 13841591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texgen GenS; 13851591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texgen GenT; 13861591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texgen GenR; 13871591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texgen GenQ; 13881591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield TexGenEnabled; /**< Bitwise-OR of [STRQ]_BIT values */ 13891591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _GenFlags; /**< Bitwise-OR of Gen[STRQ]._ModeBit */ 13901591693c7b415e9869157c711fe11263c95d74eDavid Li 13911591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat LodBias; /**< for biasing mipmap levels */ 13921591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum BumpTarget; 13931591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat RotMatrix[4]; /* 2x2 matrix */ 13941591693c7b415e9869157c711fe11263c95d74eDavid Li 13951591693c7b415e9869157c711fe11263c95d74eDavid Li /** 13961591693c7b415e9869157c711fe11263c95d74eDavid Li * \name GL_EXT_texture_env_combine 13971591693c7b415e9869157c711fe11263c95d74eDavid Li */ 13981591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_tex_env_combine_state Combine; 13991591693c7b415e9869157c711fe11263c95d74eDavid Li 14001591693c7b415e9869157c711fe11263c95d74eDavid Li /** 14011591693c7b415e9869157c711fe11263c95d74eDavid Li * Derived state based on \c EnvMode and the \c BaseFormat of the 14021591693c7b415e9869157c711fe11263c95d74eDavid Li * currently enabled texture. 14031591693c7b415e9869157c711fe11263c95d74eDavid Li */ 14041591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_tex_env_combine_state _EnvMode; 14051591693c7b415e9869157c711fe11263c95d74eDavid Li 14061591693c7b415e9869157c711fe11263c95d74eDavid Li /** 14071591693c7b415e9869157c711fe11263c95d74eDavid Li * Currently enabled combiner state. This will point to either 14081591693c7b415e9869157c711fe11263c95d74eDavid Li * \c Combine or \c _EnvMode. 14091591693c7b415e9869157c711fe11263c95d74eDavid Li */ 14101591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_tex_env_combine_state *_CurrentCombine; 14111591693c7b415e9869157c711fe11263c95d74eDavid Li 14121591693c7b415e9869157c711fe11263c95d74eDavid Li /** Current texture object pointers */ 14131591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_object *CurrentTex[NUM_TEXTURE_TARGETS]; 14141591693c7b415e9869157c711fe11263c95d74eDavid Li 14151591693c7b415e9869157c711fe11263c95d74eDavid Li /** Points to highest priority, complete and enabled texture object */ 14161591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_object *_Current; 14171591693c7b415e9869157c711fe11263c95d74eDavid Li 14181591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_SGI_texture_color_table */ 14191591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 14201591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_color_table ColorTable; 14211591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_color_table ProxyColorTable; 14221591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ColorTableEnabled; 14231591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 14241591693c7b415e9869157c711fe11263c95d74eDavid Li}; 14251591693c7b415e9869157c711fe11263c95d74eDavid Li 14261591693c7b415e9869157c711fe11263c95d74eDavid Li 14271591693c7b415e9869157c711fe11263c95d74eDavid Li/** 14281591693c7b415e9869157c711fe11263c95d74eDavid Li * Texture attribute group (GL_TEXTURE_BIT). 14291591693c7b415e9869157c711fe11263c95d74eDavid Li */ 14301591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_texture_attrib 14311591693c7b415e9869157c711fe11263c95d74eDavid Li{ 14321591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint CurrentUnit; /**< GL_ACTIVE_TEXTURE */ 14331591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_unit Unit[MAX_COMBINED_TEXTURE_IMAGE_UNITS]; 14341591693c7b415e9869157c711fe11263c95d74eDavid Li 14351591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_object *ProxyTex[NUM_TEXTURE_TARGETS]; 14361591693c7b415e9869157c711fe11263c95d74eDavid Li 14371591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_ARB_seamless_cubemap */ 14381591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean CubeMapSeamless; 14391591693c7b415e9869157c711fe11263c95d74eDavid Li 14401591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_EXT_shared_texture_palette */ 14411591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SharedPalette; 14421591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_color_table Palette; 14431591693c7b415e9869157c711fe11263c95d74eDavid Li 14441591693c7b415e9869157c711fe11263c95d74eDavid Li /** Texture units/samplers used by vertex or fragment texturing */ 14451591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _EnabledUnits; 14461591693c7b415e9869157c711fe11263c95d74eDavid Li 14471591693c7b415e9869157c711fe11263c95d74eDavid Li /** Texture coord units/sets used for fragment texturing */ 14481591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _EnabledCoordUnits; 14491591693c7b415e9869157c711fe11263c95d74eDavid Li 14501591693c7b415e9869157c711fe11263c95d74eDavid Li /** Texture coord units that have texgen enabled */ 14511591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _TexGenEnabled; 14521591693c7b415e9869157c711fe11263c95d74eDavid Li 14531591693c7b415e9869157c711fe11263c95d74eDavid Li /** Texture coord units that have non-identity matrices */ 14541591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _TexMatEnabled; 14551591693c7b415e9869157c711fe11263c95d74eDavid Li 14561591693c7b415e9869157c711fe11263c95d74eDavid Li /** Bitwise-OR of all Texture.Unit[i]._GenFlags */ 14571591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _GenFlags; 14581591693c7b415e9869157c711fe11263c95d74eDavid Li}; 14591591693c7b415e9869157c711fe11263c95d74eDavid Li 14601591693c7b415e9869157c711fe11263c95d74eDavid Li 14611591693c7b415e9869157c711fe11263c95d74eDavid Li/** 14621591693c7b415e9869157c711fe11263c95d74eDavid Li * Transformation attribute group (GL_TRANSFORM_BIT). 14631591693c7b415e9869157c711fe11263c95d74eDavid Li */ 14641591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_transform_attrib 14651591693c7b415e9869157c711fe11263c95d74eDavid Li{ 14661591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum MatrixMode; /**< Matrix mode */ 14671591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat EyeUserPlane[MAX_CLIP_PLANES][4]; /**< User clip planes */ 14681591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat _ClipUserPlane[MAX_CLIP_PLANES][4]; /**< derived */ 14691591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield ClipPlanesEnabled; /**< on/off bitmask */ 14701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Normalize; /**< Normalize all normals? */ 14711591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean RescaleNormals; /**< GL_EXT_rescale_normal */ 14721591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean RasterPositionUnclipped; /**< GL_IBM_rasterpos_clip */ 14731591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean DepthClamp; /**< GL_ARB_depth_clamp */ 14741591693c7b415e9869157c711fe11263c95d74eDavid Li 14751591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat CullEyePos[4]; 14761591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat CullObjPos[4]; 14771591693c7b415e9869157c711fe11263c95d74eDavid Li}; 14781591693c7b415e9869157c711fe11263c95d74eDavid Li 14791591693c7b415e9869157c711fe11263c95d74eDavid Li 14801591693c7b415e9869157c711fe11263c95d74eDavid Li/** 14811591693c7b415e9869157c711fe11263c95d74eDavid Li * Viewport attribute group (GL_VIEWPORT_BIT). 14821591693c7b415e9869157c711fe11263c95d74eDavid Li */ 1483f9ad8a790398513a845d486f58566854f7eceee4David Li//struct gl_viewport_attrib 1484f9ad8a790398513a845d486f58566854f7eceee4David Li//{ 1485f9ad8a790398513a845d486f58566854f7eceee4David Li// GLint X, Y; /**< position */ 1486f9ad8a790398513a845d486f58566854f7eceee4David Li// GLsizei Width, Height; /**< size */ 1487f9ad8a790398513a845d486f58566854f7eceee4David Li// GLfloat Near, Far; /**< Depth buffer range */ 1488f9ad8a790398513a845d486f58566854f7eceee4David Li// GLmatrix _WindowMap; /**< Mapping transformation as a matrix. */ 1489f9ad8a790398513a845d486f58566854f7eceee4David Li//}; 14901591693c7b415e9869157c711fe11263c95d74eDavid Li 14911591693c7b415e9869157c711fe11263c95d74eDavid Li 149260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li///** 149360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * GL_ARB_vertex/pixel_buffer_object buffer object 149460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 149560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//struct gl_buffer_object 149660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//{ 149760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// _glthread_Mutex Mutex; 149860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint RefCount; 149960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint Name; 150060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum Usage; /**< GL_STREAM_DRAW_ARB, GL_STREAM_READ_ARB, etc. */ 150160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLsizeiptrARB Size; /**< Size of buffer storage in bytes */ 150260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLubyte *Data; /**< Location of storage either in RAM or VRAM. */ 150360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** Fields describing a mapped buffer */ 150460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /*@{*/ 150560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLbitfield AccessFlags; /**< Mask of GL_MAP_x_BIT flags */ 150660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLvoid *Pointer; /**< User-space address of mapping */ 150760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLintptr Offset; /**< Mapped offset */ 150860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLsizeiptr Length; /**< Mapped length */ 150960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /*@}*/ 151060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLboolean Written; /**< Ever written to? (for debugging) */ 151160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ 151260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//}; 15131591693c7b415e9869157c711fe11263c95d74eDavid Li 15141591693c7b415e9869157c711fe11263c95d74eDavid Li 15151591693c7b415e9869157c711fe11263c95d74eDavid Li/** 15161591693c7b415e9869157c711fe11263c95d74eDavid Li * Client pixel packing/unpacking attributes 15171591693c7b415e9869157c711fe11263c95d74eDavid Li */ 15181591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_pixelstore_attrib 15191591693c7b415e9869157c711fe11263c95d74eDavid Li{ 15201591693c7b415e9869157c711fe11263c95d74eDavid Li GLint Alignment; 15211591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RowLength; 15221591693c7b415e9869157c711fe11263c95d74eDavid Li GLint SkipPixels; 15231591693c7b415e9869157c711fe11263c95d74eDavid Li GLint SkipRows; 15241591693c7b415e9869157c711fe11263c95d74eDavid Li GLint ImageHeight; 15251591693c7b415e9869157c711fe11263c95d74eDavid Li GLint SkipImages; 15261591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SwapBytes; 15271591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean LsbFirst; 15281591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ClientStorage; /**< GL_APPLE_client_storage */ 15291591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Invert; /**< GL_MESA_pack_invert */ 15301591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *BufferObj; /**< GL_ARB_pixel_buffer_object */ 15311591693c7b415e9869157c711fe11263c95d74eDavid Li}; 15321591693c7b415e9869157c711fe11263c95d74eDavid Li 15331591693c7b415e9869157c711fe11263c95d74eDavid Li 15341591693c7b415e9869157c711fe11263c95d74eDavid Li/** 15351591693c7b415e9869157c711fe11263c95d74eDavid Li * Client vertex array attributes 15361591693c7b415e9869157c711fe11263c95d74eDavid Li */ 15371591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_client_array 15381591693c7b415e9869157c711fe11263c95d74eDavid Li{ 15391591693c7b415e9869157c711fe11263c95d74eDavid Li GLint Size; /**< components per element (1,2,3,4) */ 15401591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Type; /**< datatype: GL_FLOAT, GL_INT, etc */ 15411591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Format; /**< default: GL_RGBA, but may be GL_BGRA */ 15421591693c7b415e9869157c711fe11263c95d74eDavid Li GLsizei Stride; /**< user-specified stride */ 15431591693c7b415e9869157c711fe11263c95d74eDavid Li GLsizei StrideB; /**< actual stride in bytes */ 15441591693c7b415e9869157c711fe11263c95d74eDavid Li const GLubyte *Ptr; /**< Points to array data */ 15451591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< Enabled flag is a boolean */ 15461591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Normalized; /**< GL_ARB_vertex_program */ 15471591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Integer; /**< Integer-valued? */ 15481591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint _ElementSize; /**< size of each element in bytes */ 15491591693c7b415e9869157c711fe11263c95d74eDavid Li 15501591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *BufferObj;/**< GL_ARB_vertex_buffer_object */ 15511591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint _MaxElement; /**< max element index into array buffer + 1 */ 15521591693c7b415e9869157c711fe11263c95d74eDavid Li}; 15531591693c7b415e9869157c711fe11263c95d74eDavid Li 15541591693c7b415e9869157c711fe11263c95d74eDavid Li 155560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li///** 155660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * Collection of vertex arrays. Defined by the GL_APPLE_vertex_array_object 155760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * extension, but a nice encapsulation in any case. 155860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 155960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//struct gl_array_object 156060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//{ 156160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** Name of the array object as received from glGenVertexArrayAPPLE. */ 156260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint Name; 156360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 156460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint RefCount; 156560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// _glthread_Mutex Mutex; 156660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLboolean VBOonly; /**< require all arrays to live in VBOs? */ 156760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 156860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** Conventional vertex arrays */ 156960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /*@{*/ 157060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_client_array Vertex; 157160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_client_array Weight; 157260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_client_array Normal; 157360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_client_array Color; 157460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_client_array SecondaryColor; 157560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_client_array FogCoord; 157660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_client_array Index; 157760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_client_array EdgeFlag; 157860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_client_array TexCoord[MAX_TEXTURE_COORD_UNITS]; 157960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_client_array PointSize; 158060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /*@}*/ 158160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 158260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** 158360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * Generic arrays for vertex programs/shaders. 158460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * For NV vertex programs, these attributes alias and take priority 158560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * over the conventional attribs above. For ARB vertex programs and 158660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * GLSL vertex shaders, these attributes are separate. 158760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 158860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_client_array VertexAttrib[MAX_VERTEX_GENERIC_ATTRIBS]; 158960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 159060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** Mask of _NEW_ARRAY_* values indicating which arrays are enabled */ 159160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLbitfield _Enabled; 159260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 159360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** 159460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * Min of all enabled arrays' _MaxElement. When arrays reside inside VBOs 159560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * we can determine the max legal (in bounds) glDrawElements array index. 159660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 159760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint _MaxElement; 159860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//}; 15991591693c7b415e9869157c711fe11263c95d74eDavid Li 16001591693c7b415e9869157c711fe11263c95d74eDavid Li 16011591693c7b415e9869157c711fe11263c95d74eDavid Li/** 16021591693c7b415e9869157c711fe11263c95d74eDavid Li * Vertex array state 16031591693c7b415e9869157c711fe11263c95d74eDavid Li */ 16041591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_array_attrib 16051591693c7b415e9869157c711fe11263c95d74eDavid Li{ 16061591693c7b415e9869157c711fe11263c95d74eDavid Li /** Currently bound array object. See _mesa_BindVertexArrayAPPLE() */ 16071591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_array_object *ArrayObj; 16081591693c7b415e9869157c711fe11263c95d74eDavid Li 16091591693c7b415e9869157c711fe11263c95d74eDavid Li /** The default vertex array object */ 16101591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_array_object *DefaultArrayObj; 16111591693c7b415e9869157c711fe11263c95d74eDavid Li 16121591693c7b415e9869157c711fe11263c95d74eDavid Li /** Array objects (GL_ARB/APPLE_vertex_array_object) */ 16131591693c7b415e9869157c711fe11263c95d74eDavid Li struct _mesa_HashTable *Objects; 16141591693c7b415e9869157c711fe11263c95d74eDavid Li 16151591693c7b415e9869157c711fe11263c95d74eDavid Li GLint ActiveTexture; /**< Client Active Texture */ 16161591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint LockFirst; /**< GL_EXT_compiled_vertex_array */ 16171591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint LockCount; /**< GL_EXT_compiled_vertex_array */ 16181591693c7b415e9869157c711fe11263c95d74eDavid Li 16191591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL 3.1 (slightly different from GL_NV_primitive_restart) */ 16201591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean PrimitiveRestart; 16211591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint RestartIndex; 16221591693c7b415e9869157c711fe11263c95d74eDavid Li 16231591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield NewState; /**< mask of _NEW_ARRAY_* values */ 16241591693c7b415e9869157c711fe11263c95d74eDavid Li 16251591693c7b415e9869157c711fe11263c95d74eDavid Li /* GL_ARB_vertex_buffer_object */ 16261591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *ArrayBufferObj; 16271591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *ElementArrayBufferObj; 16281591693c7b415e9869157c711fe11263c95d74eDavid Li}; 16291591693c7b415e9869157c711fe11263c95d74eDavid Li 16301591693c7b415e9869157c711fe11263c95d74eDavid Li 16311591693c7b415e9869157c711fe11263c95d74eDavid Li/** 16321591693c7b415e9869157c711fe11263c95d74eDavid Li * Feedback buffer state 16331591693c7b415e9869157c711fe11263c95d74eDavid Li */ 16341591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_feedback 16351591693c7b415e9869157c711fe11263c95d74eDavid Li{ 16361591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Type; 16371591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield _Mask; /**< FB_* bits */ 16381591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat *Buffer; 16391591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint BufferSize; 16401591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Count; 16411591693c7b415e9869157c711fe11263c95d74eDavid Li}; 16421591693c7b415e9869157c711fe11263c95d74eDavid Li 16431591693c7b415e9869157c711fe11263c95d74eDavid Li 16441591693c7b415e9869157c711fe11263c95d74eDavid Li/** 16451591693c7b415e9869157c711fe11263c95d74eDavid Li * Selection buffer state 16461591693c7b415e9869157c711fe11263c95d74eDavid Li */ 16471591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_selection 16481591693c7b415e9869157c711fe11263c95d74eDavid Li{ 16491591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint *Buffer; /**< selection buffer */ 16501591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint BufferSize; /**< size of the selection buffer */ 16511591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint BufferCount; /**< number of values in the selection buffer */ 16521591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Hits; /**< number of records in the selection buffer */ 16531591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NameStackDepth; /**< name stack depth */ 16541591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NameStack[MAX_NAME_STACK_DEPTH]; /**< name stack */ 16551591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean HitFlag; /**< hit flag */ 16561591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat HitMinZ; /**< minimum hit depth */ 16571591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat HitMaxZ; /**< maximum hit depth */ 16581591693c7b415e9869157c711fe11263c95d74eDavid Li}; 16591591693c7b415e9869157c711fe11263c95d74eDavid Li 16601591693c7b415e9869157c711fe11263c95d74eDavid Li 16611591693c7b415e9869157c711fe11263c95d74eDavid Li/** 16621591693c7b415e9869157c711fe11263c95d74eDavid Li * 1-D Evaluator control points 16631591693c7b415e9869157c711fe11263c95d74eDavid Li */ 16641591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_1d_map 16651591693c7b415e9869157c711fe11263c95d74eDavid Li{ 16661591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Order; /**< Number of control points */ 16671591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat u1, u2, du; /**< u1, u2, 1.0/(u2-u1) */ 16681591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat *Points; /**< Points to contiguous control points */ 16691591693c7b415e9869157c711fe11263c95d74eDavid Li}; 16701591693c7b415e9869157c711fe11263c95d74eDavid Li 16711591693c7b415e9869157c711fe11263c95d74eDavid Li 16721591693c7b415e9869157c711fe11263c95d74eDavid Li/** 16731591693c7b415e9869157c711fe11263c95d74eDavid Li * 2-D Evaluator control points 16741591693c7b415e9869157c711fe11263c95d74eDavid Li */ 16751591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_2d_map 16761591693c7b415e9869157c711fe11263c95d74eDavid Li{ 16771591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Uorder; /**< Number of control points in U dimension */ 16781591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Vorder; /**< Number of control points in V dimension */ 16791591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat u1, u2, du; 16801591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat v1, v2, dv; 16811591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat *Points; /**< Points to contiguous control points */ 16821591693c7b415e9869157c711fe11263c95d74eDavid Li}; 16831591693c7b415e9869157c711fe11263c95d74eDavid Li 16841591693c7b415e9869157c711fe11263c95d74eDavid Li 16851591693c7b415e9869157c711fe11263c95d74eDavid Li/** 16861591693c7b415e9869157c711fe11263c95d74eDavid Li * All evaluator control point state 16871591693c7b415e9869157c711fe11263c95d74eDavid Li */ 16881591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_evaluators 16891591693c7b415e9869157c711fe11263c95d74eDavid Li{ 16901591693c7b415e9869157c711fe11263c95d74eDavid Li /** 16911591693c7b415e9869157c711fe11263c95d74eDavid Li * \name 1-D maps 16921591693c7b415e9869157c711fe11263c95d74eDavid Li */ 16931591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 16941591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Vertex3; 16951591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Vertex4; 16961591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Index; 16971591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Color4; 16981591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Normal; 16991591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Texture1; 17001591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Texture2; 17011591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Texture3; 17021591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Texture4; 17031591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_1d_map Map1Attrib[16]; /**< GL_NV_vertex_program */ 17041591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 17051591693c7b415e9869157c711fe11263c95d74eDavid Li 17061591693c7b415e9869157c711fe11263c95d74eDavid Li /** 17071591693c7b415e9869157c711fe11263c95d74eDavid Li * \name 2-D maps 17081591693c7b415e9869157c711fe11263c95d74eDavid Li */ 17091591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 17101591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Vertex3; 17111591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Vertex4; 17121591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Index; 17131591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Color4; 17141591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Normal; 17151591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Texture1; 17161591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Texture2; 17171591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Texture3; 17181591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Texture4; 17191591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_2d_map Map2Attrib[16]; /**< GL_NV_vertex_program */ 17201591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 17211591693c7b415e9869157c711fe11263c95d74eDavid Li}; 17221591693c7b415e9869157c711fe11263c95d74eDavid Li 17231591693c7b415e9869157c711fe11263c95d74eDavid Li 17241591693c7b415e9869157c711fe11263c95d74eDavid Li/** 17251591693c7b415e9869157c711fe11263c95d74eDavid Li * Names of the various vertex/fragment program register files, etc. 17261591693c7b415e9869157c711fe11263c95d74eDavid Li * 17271591693c7b415e9869157c711fe11263c95d74eDavid Li * NOTE: first four tokens must fit into 2 bits (see t_vb_arbprogram.c) 17281591693c7b415e9869157c711fe11263c95d74eDavid Li * All values should fit in a 4-bit field. 17291591693c7b415e9869157c711fe11263c95d74eDavid Li * 17301591693c7b415e9869157c711fe11263c95d74eDavid Li * NOTE: PROGRAM_ENV_PARAM, PROGRAM_STATE_VAR, PROGRAM_NAMED_PARAM, 17311591693c7b415e9869157c711fe11263c95d74eDavid Li * PROGRAM_CONSTANT, and PROGRAM_UNIFORM can all be considered to 17321591693c7b415e9869157c711fe11263c95d74eDavid Li * be "uniform" variables since they can only be set outside glBegin/End. 17331591693c7b415e9869157c711fe11263c95d74eDavid Li * They're also all stored in the same Parameters array. 17341591693c7b415e9869157c711fe11263c95d74eDavid Li */ 17351591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum 17361591693c7b415e9869157c711fe11263c95d74eDavid Li{ 17371591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_TEMPORARY, /**< machine->Temporary[] */ 17381591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_INPUT, /**< machine->Inputs[] */ 17391591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_OUTPUT, /**< machine->Outputs[] */ 17401591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_VARYING, /**< machine->Inputs[]/Outputs[] */ 17411591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_LOCAL_PARAM, /**< gl_program->LocalParams[] */ 17421591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_ENV_PARAM, /**< gl_program->Parameters[] */ 17431591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_STATE_VAR, /**< gl_program->Parameters[] */ 17441591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_NAMED_PARAM, /**< gl_program->Parameters[] */ 17451591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_CONSTANT, /**< gl_program->Parameters[] */ 17461591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_UNIFORM, /**< gl_program->Parameters[] */ 17471591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_WRITE_ONLY, /**< A dummy, write-only register */ 17481591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_ADDRESS, /**< machine->AddressReg */ 17491591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_SAMPLER, /**< for shader samplers, compile-time only */ 17501591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_UNDEFINED, /**< Invalid/TBD value */ 17511591693c7b415e9869157c711fe11263c95d74eDavid Li PROGRAM_FILE_MAX 17521591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_register_file; 17531591693c7b415e9869157c711fe11263c95d74eDavid Li 17541591693c7b415e9869157c711fe11263c95d74eDavid Li 17551591693c7b415e9869157c711fe11263c95d74eDavid Li/** Vertex and fragment instructions */ 17561591693c7b415e9869157c711fe11263c95d74eDavid Listruct prog_instruction; 17571591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_program_parameter_list; 17581591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_uniform_list; 17591591693c7b415e9869157c711fe11263c95d74eDavid Li 17601591693c7b415e9869157c711fe11263c95d74eDavid Li 17611591693c7b415e9869157c711fe11263c95d74eDavid Li/** 17621591693c7b415e9869157c711fe11263c95d74eDavid Li * Base class for any kind of program object 17631591693c7b415e9869157c711fe11263c95d74eDavid Li */ 17641591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_program 17651591693c7b415e9869157c711fe11263c95d74eDavid Li{ 17661591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Id; 17671591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte *String; /**< Null-terminated program text */ 17681591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; 17691591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Target; /**< GL_VERTEX/FRAGMENT_PROGRAM_ARB, GL_FRAGMENT_PROGRAM_NV */ 17701591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Format; /**< String encoding format */ 17711591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Resident; 17721591693c7b415e9869157c711fe11263c95d74eDavid Li 17731591693c7b415e9869157c711fe11263c95d74eDavid Li struct prog_instruction *Instructions; 17741591693c7b415e9869157c711fe11263c95d74eDavid Li 17751591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield InputsRead; /**< Bitmask of which input regs are read */ 17761591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield64 OutputsWritten; /**< Bitmask of which output regs are written */ 17771591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield InputFlags[MAX_PROGRAM_INPUTS]; /**< PROG_PARAM_BIT_x flags */ 17781591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield OutputFlags[MAX_PROGRAM_OUTPUTS]; /**< PROG_PARAM_BIT_x flags */ 17791591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield TexturesUsed[MAX_TEXTURE_UNITS]; /**< TEXTURE_x_BIT bitmask */ 17801591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield SamplersUsed; /**< Bitfield of which samplers are used */ 17811591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield ShadowSamplers; /**< Texture units used for shadow sampling. */ 17821591693c7b415e9869157c711fe11263c95d74eDavid Li 17831591693c7b415e9869157c711fe11263c95d74eDavid Li 17841591693c7b415e9869157c711fe11263c95d74eDavid Li /** Named parameters, constants, etc. from program text */ 17851591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_parameter_list *Parameters; 17861591693c7b415e9869157c711fe11263c95d74eDavid Li /** Numbered local parameters */ 17871591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat LocalParams[MAX_PROGRAM_LOCAL_PARAMS][4]; 17881591693c7b415e9869157c711fe11263c95d74eDavid Li 17891591693c7b415e9869157c711fe11263c95d74eDavid Li /** Vertex/fragment shader varying vars */ 17901591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_parameter_list *Varying; 17911591693c7b415e9869157c711fe11263c95d74eDavid Li /** Vertex program user-defined attributes */ 17921591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_parameter_list *Attributes; 17931591693c7b415e9869157c711fe11263c95d74eDavid Li 17941591693c7b415e9869157c711fe11263c95d74eDavid Li /** Map from sampler unit to texture unit (set by glUniform1i()) */ 17951591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte SamplerUnits[MAX_SAMPLERS]; 17961591693c7b415e9869157c711fe11263c95d74eDavid Li /** Which texture target is being sampled (TEXTURE_1D/2D/3D/etc_INDEX) */ 17971591693c7b415e9869157c711fe11263c95d74eDavid Li gl_texture_index SamplerTargets[MAX_SAMPLERS]; 17981591693c7b415e9869157c711fe11263c95d74eDavid Li 17991591693c7b415e9869157c711fe11263c95d74eDavid Li /** Bitmask of which register files are read/written with indirect 18001591693c7b415e9869157c711fe11263c95d74eDavid Li * addressing. Mask of (1 << PROGRAM_x) bits. 18011591693c7b415e9869157c711fe11263c95d74eDavid Li */ 18021591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield IndirectRegisterFiles; 18031591693c7b415e9869157c711fe11263c95d74eDavid Li 18041591693c7b415e9869157c711fe11263c95d74eDavid Li /** Logical counts */ 18051591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 18061591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumInstructions; 18071591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumTemporaries; 18081591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumParameters; 18091591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumAttributes; 18101591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumAddressRegs; 18111591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumAluInstructions; 18121591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumTexInstructions; 18131591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumTexIndirections; 18141591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 18151591693c7b415e9869157c711fe11263c95d74eDavid Li /** Native, actual h/w counts */ 18161591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 18171591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeInstructions; 18181591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeTemporaries; 18191591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeParameters; 18201591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeAttributes; 18211591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeAddressRegs; 18221591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeAluInstructions; 18231591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeTexInstructions; 18241591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumNativeTexIndirections; 18251591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 18261591693c7b415e9869157c711fe11263c95d74eDavid Li}; 18271591693c7b415e9869157c711fe11263c95d74eDavid Li 18281591693c7b415e9869157c711fe11263c95d74eDavid Li 18291591693c7b415e9869157c711fe11263c95d74eDavid Li/** Vertex program object */ 18301591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_vertex_program 18311591693c7b415e9869157c711fe11263c95d74eDavid Li{ 18321591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program Base; /**< base class */ 18331591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IsNVProgram; /**< is this a GL_NV_vertex_program program? */ 18341591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IsPositionInvariant; 18351591693c7b415e9869157c711fe11263c95d74eDavid Li}; 18361591693c7b415e9869157c711fe11263c95d74eDavid Li 18371591693c7b415e9869157c711fe11263c95d74eDavid Li 18381591693c7b415e9869157c711fe11263c95d74eDavid Li/** Geometry program object */ 18391591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_geometry_program 18401591693c7b415e9869157c711fe11263c95d74eDavid Li{ 18411591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program Base; /**< base class */ 18421591693c7b415e9869157c711fe11263c95d74eDavid Li 18431591693c7b415e9869157c711fe11263c95d74eDavid Li GLint VerticesOut; 18441591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum InputType; /**< GL_POINTS, GL_LINES, GL_LINES_ADJACENCY_ARB, 18451591693c7b415e9869157c711fe11263c95d74eDavid Li GL_TRIANGLES, or GL_TRIANGLES_ADJACENCY_ARB */ 18461591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum OutputType; /**< GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP */ 18471591693c7b415e9869157c711fe11263c95d74eDavid Li}; 18481591693c7b415e9869157c711fe11263c95d74eDavid Li 18491591693c7b415e9869157c711fe11263c95d74eDavid Li 18501591693c7b415e9869157c711fe11263c95d74eDavid Li/** Fragment program object */ 18511591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_fragment_program 18521591693c7b415e9869157c711fe11263c95d74eDavid Li{ 18531591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program Base; /**< base class */ 18541591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum FogOption; 18551591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean UsesKill; /**< shader uses KIL instruction */ 18561591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean OriginUpperLeft; 18571591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean PixelCenterInteger; 18581591693c7b415e9869157c711fe11263c95d74eDavid Li}; 18591591693c7b415e9869157c711fe11263c95d74eDavid Li 18601591693c7b415e9869157c711fe11263c95d74eDavid Li 18611591693c7b415e9869157c711fe11263c95d74eDavid Li/** 18621591693c7b415e9869157c711fe11263c95d74eDavid Li * State common to vertex and fragment programs. 18631591693c7b415e9869157c711fe11263c95d74eDavid Li */ 18641591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_program_state 18651591693c7b415e9869157c711fe11263c95d74eDavid Li{ 18661591693c7b415e9869157c711fe11263c95d74eDavid Li GLint ErrorPos; /* GL_PROGRAM_ERROR_POSITION_ARB/NV */ 18671591693c7b415e9869157c711fe11263c95d74eDavid Li const char *ErrorString; /* GL_PROGRAM_ERROR_STRING_ARB/NV */ 18681591693c7b415e9869157c711fe11263c95d74eDavid Li}; 18691591693c7b415e9869157c711fe11263c95d74eDavid Li 18701591693c7b415e9869157c711fe11263c95d74eDavid Li 18711591693c7b415e9869157c711fe11263c95d74eDavid Li/** 18721591693c7b415e9869157c711fe11263c95d74eDavid Li * Context state for vertex programs. 18731591693c7b415e9869157c711fe11263c95d74eDavid Li */ 18741591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_vertex_program_state 18751591693c7b415e9869157c711fe11263c95d74eDavid Li{ 18761591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< User-set GL_VERTEX_PROGRAM_ARB/NV flag */ 18771591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Enabled; /**< Enabled and _valid_ user program? */ 18781591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean PointSizeEnabled; /**< GL_VERTEX_PROGRAM_POINT_SIZE_ARB/NV */ 18791591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean TwoSideEnabled; /**< GL_VERTEX_PROGRAM_TWO_SIDE_ARB/NV */ 18801591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_vertex_program *Current; /**< User-bound vertex program */ 18811591693c7b415e9869157c711fe11263c95d74eDavid Li 18821591693c7b415e9869157c711fe11263c95d74eDavid Li /** Currently enabled and valid vertex program (including internal 18831591693c7b415e9869157c711fe11263c95d74eDavid Li * programs, user-defined vertex programs and GLSL vertex shaders). 18841591693c7b415e9869157c711fe11263c95d74eDavid Li * This is the program we must use when rendering. 18851591693c7b415e9869157c711fe11263c95d74eDavid Li */ 18861591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_vertex_program *_Current; 18871591693c7b415e9869157c711fe11263c95d74eDavid Li 18881591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ 18891591693c7b415e9869157c711fe11263c95d74eDavid Li 18901591693c7b415e9869157c711fe11263c95d74eDavid Li /* For GL_NV_vertex_program only: */ 18911591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum TrackMatrix[MAX_PROGRAM_ENV_PARAMS / 4]; 18921591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum TrackMatrixTransform[MAX_PROGRAM_ENV_PARAMS / 4]; 18931591693c7b415e9869157c711fe11263c95d74eDavid Li 18941591693c7b415e9869157c711fe11263c95d74eDavid Li /** Should fixed-function T&L be implemented with a vertex prog? */ 18951591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _MaintainTnlProgram; 18961591693c7b415e9869157c711fe11263c95d74eDavid Li 18971591693c7b415e9869157c711fe11263c95d74eDavid Li /** Program to emulate fixed-function T&L (see above) */ 18981591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_vertex_program *_TnlProgram; 18991591693c7b415e9869157c711fe11263c95d74eDavid Li 19001591693c7b415e9869157c711fe11263c95d74eDavid Li /** Cache of fixed-function programs */ 19011591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_cache *Cache; 19021591693c7b415e9869157c711fe11263c95d74eDavid Li 19031591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Overriden; 19041591693c7b415e9869157c711fe11263c95d74eDavid Li}; 19051591693c7b415e9869157c711fe11263c95d74eDavid Li 19061591693c7b415e9869157c711fe11263c95d74eDavid Li 19071591693c7b415e9869157c711fe11263c95d74eDavid Li/** 19081591693c7b415e9869157c711fe11263c95d74eDavid Li * Context state for geometry programs. 19091591693c7b415e9869157c711fe11263c95d74eDavid Li */ 19101591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_geometry_program_state 19111591693c7b415e9869157c711fe11263c95d74eDavid Li{ 19121591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< GL_ARB_GEOMETRY_SHADER4 */ 19131591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Enabled; /**< Enabled and valid program? */ 19141591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_geometry_program *Current; /**< user-bound geometry program */ 19151591693c7b415e9869157c711fe11263c95d74eDavid Li 19161591693c7b415e9869157c711fe11263c95d74eDavid Li /** Currently enabled and valid program (including internal programs 19171591693c7b415e9869157c711fe11263c95d74eDavid Li * and compiled shader programs). 19181591693c7b415e9869157c711fe11263c95d74eDavid Li */ 19191591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_geometry_program *_Current; 19201591693c7b415e9869157c711fe11263c95d74eDavid Li 19211591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ 19221591693c7b415e9869157c711fe11263c95d74eDavid Li 19231591693c7b415e9869157c711fe11263c95d74eDavid Li /** Cache of fixed-function programs */ 19241591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_cache *Cache; 19251591693c7b415e9869157c711fe11263c95d74eDavid Li}; 19261591693c7b415e9869157c711fe11263c95d74eDavid Li 19271591693c7b415e9869157c711fe11263c95d74eDavid Li/** 19281591693c7b415e9869157c711fe11263c95d74eDavid Li * Context state for fragment programs. 19291591693c7b415e9869157c711fe11263c95d74eDavid Li */ 19301591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_fragment_program_state 19311591693c7b415e9869157c711fe11263c95d74eDavid Li{ 19321591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; /**< User-set fragment program enable flag */ 19331591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Enabled; /**< Enabled and _valid_ user program? */ 19341591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_fragment_program *Current; /**< User-bound fragment program */ 19351591693c7b415e9869157c711fe11263c95d74eDavid Li 19361591693c7b415e9869157c711fe11263c95d74eDavid Li /** Currently enabled and valid fragment program (including internal 19371591693c7b415e9869157c711fe11263c95d74eDavid Li * programs, user-defined fragment programs and GLSL fragment shaders). 19381591693c7b415e9869157c711fe11263c95d74eDavid Li * This is the program we must use when rendering. 19391591693c7b415e9869157c711fe11263c95d74eDavid Li */ 19401591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_fragment_program *_Current; 19411591693c7b415e9869157c711fe11263c95d74eDavid Li 19421591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Parameters[MAX_PROGRAM_ENV_PARAMS][4]; /**< Env params */ 19431591693c7b415e9869157c711fe11263c95d74eDavid Li 19441591693c7b415e9869157c711fe11263c95d74eDavid Li /** Should fixed-function texturing be implemented with a fragment prog? */ 19451591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _MaintainTexEnvProgram; 19461591693c7b415e9869157c711fe11263c95d74eDavid Li 19471591693c7b415e9869157c711fe11263c95d74eDavid Li /** Program to emulate fixed-function texture env/combine (see above) */ 19481591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_fragment_program *_TexEnvProgram; 19491591693c7b415e9869157c711fe11263c95d74eDavid Li 19501591693c7b415e9869157c711fe11263c95d74eDavid Li /** Cache of fixed-function programs */ 19511591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_cache *Cache; 19521591693c7b415e9869157c711fe11263c95d74eDavid Li}; 19531591693c7b415e9869157c711fe11263c95d74eDavid Li 19541591693c7b415e9869157c711fe11263c95d74eDavid Li 19551591693c7b415e9869157c711fe11263c95d74eDavid Li/** 19561591693c7b415e9869157c711fe11263c95d74eDavid Li * ATI_fragment_shader runtime state 19571591693c7b415e9869157c711fe11263c95d74eDavid Li */ 19581591693c7b415e9869157c711fe11263c95d74eDavid Li#define ATI_FS_INPUT_PRIMARY 0 19591591693c7b415e9869157c711fe11263c95d74eDavid Li#define ATI_FS_INPUT_SECONDARY 1 19601591693c7b415e9869157c711fe11263c95d74eDavid Li 19611591693c7b415e9869157c711fe11263c95d74eDavid Listruct atifs_instruction; 19621591693c7b415e9869157c711fe11263c95d74eDavid Listruct atifs_setupinst; 19631591693c7b415e9869157c711fe11263c95d74eDavid Li 19641591693c7b415e9869157c711fe11263c95d74eDavid Li/** 19651591693c7b415e9869157c711fe11263c95d74eDavid Li * ATI fragment shader 19661591693c7b415e9869157c711fe11263c95d74eDavid Li */ 19671591693c7b415e9869157c711fe11263c95d74eDavid Listruct ati_fragment_shader 19681591693c7b415e9869157c711fe11263c95d74eDavid Li{ 19691591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Id; 19701591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; 19711591693c7b415e9869157c711fe11263c95d74eDavid Li struct atifs_instruction *Instructions[2]; 19721591693c7b415e9869157c711fe11263c95d74eDavid Li struct atifs_setupinst *SetupInst[2]; 19731591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat Constants[8][4]; 19741591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield LocalConstDef; /**< Indicates which constants have been set */ 19751591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte numArithInstr[2]; 19761591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte regsAssigned[2]; 19771591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte NumPasses; /**< 1 or 2 */ 19781591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte cur_pass; 19791591693c7b415e9869157c711fe11263c95d74eDavid Li GLubyte last_optype; 19801591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean interpinp1; 19811591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean isValid; 19821591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint swizzlerq; 19831591693c7b415e9869157c711fe11263c95d74eDavid Li}; 19841591693c7b415e9869157c711fe11263c95d74eDavid Li 19851591693c7b415e9869157c711fe11263c95d74eDavid Li/** 19861591693c7b415e9869157c711fe11263c95d74eDavid Li * Context state for GL_ATI_fragment_shader 19871591693c7b415e9869157c711fe11263c95d74eDavid Li */ 19881591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_ati_fragment_shader_state 19891591693c7b415e9869157c711fe11263c95d74eDavid Li{ 19901591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Enabled; 19911591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Enabled; /**< enabled and valid shader? */ 19921591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Compiling; 19931591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat GlobalConstants[8][4]; 19941591693c7b415e9869157c711fe11263c95d74eDavid Li struct ati_fragment_shader *Current; 19951591693c7b415e9869157c711fe11263c95d74eDavid Li}; 19961591693c7b415e9869157c711fe11263c95d74eDavid Li 19971591693c7b415e9869157c711fe11263c95d74eDavid Li 19981591693c7b415e9869157c711fe11263c95d74eDavid Li/** 19991591693c7b415e9869157c711fe11263c95d74eDavid Li * Occlusion/timer query object. 20001591693c7b415e9869157c711fe11263c95d74eDavid Li */ 20011591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_query_object 20021591693c7b415e9869157c711fe11263c95d74eDavid Li{ 20031591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Target; /**< The query target, when active */ 20041591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Id; /**< hash table ID/name */ 20051591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint64EXT Result; /**< the counter */ 20061591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Active; /**< inside Begin/EndQuery */ 20071591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Ready; /**< result is ready? */ 20081591693c7b415e9869157c711fe11263c95d74eDavid Li}; 20091591693c7b415e9869157c711fe11263c95d74eDavid Li 20101591693c7b415e9869157c711fe11263c95d74eDavid Li 20111591693c7b415e9869157c711fe11263c95d74eDavid Li/** 20121591693c7b415e9869157c711fe11263c95d74eDavid Li * Context state for query objects. 20131591693c7b415e9869157c711fe11263c95d74eDavid Li */ 20141591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_query_state 20151591693c7b415e9869157c711fe11263c95d74eDavid Li{ 20161591693c7b415e9869157c711fe11263c95d74eDavid Li struct _mesa_HashTable *QueryObjects; 20171591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_query_object *CurrentOcclusionObject; /* GL_ARB_occlusion_query */ 20181591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_query_object *CurrentTimerObject; /* GL_EXT_timer_query */ 20191591693c7b415e9869157c711fe11263c95d74eDavid Li 20201591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_NV_conditional_render */ 20211591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_query_object *CondRenderQuery; 20221591693c7b415e9869157c711fe11263c95d74eDavid Li 20231591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_EXT_transform_feedback */ 20241591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_query_object *PrimitivesGenerated; 20251591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_query_object *PrimitivesWritten; 20261591693c7b415e9869157c711fe11263c95d74eDavid Li 20271591693c7b415e9869157c711fe11263c95d74eDavid Li /** GL_ARB_timer_query */ 20281591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_query_object *TimeElapsed; 20291591693c7b415e9869157c711fe11263c95d74eDavid Li 20301591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum CondRenderMode; 20311591693c7b415e9869157c711fe11263c95d74eDavid Li}; 20321591693c7b415e9869157c711fe11263c95d74eDavid Li 20331591693c7b415e9869157c711fe11263c95d74eDavid Li 20341591693c7b415e9869157c711fe11263c95d74eDavid Li/** Sync object state */ 20351591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_sync_object { 20361591693c7b415e9869157c711fe11263c95d74eDavid Li struct simple_node link; 20371591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Type; /**< GL_SYNC_FENCE */ 20381591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; /**< Fence name */ 20391591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; /**< Reference count */ 20401591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean DeletePending; /**< Object was deleted while there were still 20411591693c7b415e9869157c711fe11263c95d74eDavid Li * live references (e.g., sync not yet finished) 20421591693c7b415e9869157c711fe11263c95d74eDavid Li */ 20431591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum SyncCondition; 20441591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield Flags; /**< Flags passed to glFenceSync */ 20451591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint StatusFlag:1; /**< Has the sync object been signaled? */ 20461591693c7b415e9869157c711fe11263c95d74eDavid Li}; 20471591693c7b415e9869157c711fe11263c95d74eDavid Li 20481591693c7b415e9869157c711fe11263c95d74eDavid Li 20491591693c7b415e9869157c711fe11263c95d74eDavid Li/** Set by #pragma directives */ 20501591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_sl_pragmas 20511591693c7b415e9869157c711fe11263c95d74eDavid Li{ 20521591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IgnoreOptimize; /**< ignore #pragma optimize(on/off) ? */ 20531591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IgnoreDebug; /**< ignore #pragma debug(on/off) ? */ 20541591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Optimize; /**< defaults on */ 20551591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Debug; /**< defaults off */ 20561591693c7b415e9869157c711fe11263c95d74eDavid Li}; 20571591693c7b415e9869157c711fe11263c95d74eDavid Li 20581591693c7b415e9869157c711fe11263c95d74eDavid Li 20591591693c7b415e9869157c711fe11263c95d74eDavid Li/** 20601591693c7b415e9869157c711fe11263c95d74eDavid Li * A GLSL vertex or fragment shader object. 20611591693c7b415e9869157c711fe11263c95d74eDavid Li */ 20621591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_shader 20631591693c7b415e9869157c711fe11263c95d74eDavid Li{ 20641591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Type; /**< GL_FRAGMENT_SHADER || GL_VERTEX_SHADER || GL_GEOMETRY_SHADER_ARB (first field!) */ 20651591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; /**< AKA the handle */ 20661591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; /**< Reference count */ 20671591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean DeletePending; 20681591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean CompileStatus; 20691591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Main; /**< shader defines main() */ 20701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean UnresolvedRefs; 20711591693c7b415e9869157c711fe11263c95d74eDavid Li const GLchar *Source; /**< Source code string */ 2072c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLuint SourceChecksum; /**< for debug/logging purposes */ 2073c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_program *Program; /**< Post-compile assembly code */ 20741591693c7b415e9869157c711fe11263c95d74eDavid Li GLchar *InfoLog; 20751591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_sl_pragmas Pragmas; 20761591693c7b415e9869157c711fe11263c95d74eDavid Li 20771591693c7b415e9869157c711fe11263c95d74eDavid Li unsigned Version; /**< GLSL version used for linking */ 20781591693c7b415e9869157c711fe11263c95d74eDavid Li 20791591693c7b415e9869157c711fe11263c95d74eDavid Li struct exec_list *ir; 20801591693c7b415e9869157c711fe11263c95d74eDavid Li struct glsl_symbol_table *symbols; 20811591693c7b415e9869157c711fe11263c95d74eDavid Li /** Shaders containing built-in functions that are used for linking. */ 20821591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader *builtins_to_link[16]; 20831591693c7b415e9869157c711fe11263c95d74eDavid Li unsigned num_builtins_to_link; 20843225321119408735f16b72b539c9fb7d80683552David Li 20853225321119408735f16b72b539c9fb7d80683552David Li struct Executable * executable; 20863225321119408735f16b72b539c9fb7d80683552David Li void (*function)(); /**< the active function */ 20873225321119408735f16b72b539c9fb7d80683552David Li unsigned SamplersUsed; /**< bitfield of samplers used by shader */ 20881591693c7b415e9869157c711fe11263c95d74eDavid Li}; 20891591693c7b415e9869157c711fe11263c95d74eDavid Li 20901591693c7b415e9869157c711fe11263c95d74eDavid Li 20911591693c7b415e9869157c711fe11263c95d74eDavid Li/** 20921591693c7b415e9869157c711fe11263c95d74eDavid Li * A GLSL program object. 20931591693c7b415e9869157c711fe11263c95d74eDavid Li * Basically a linked collection of vertex and fragment shaders. 20941591693c7b415e9869157c711fe11263c95d74eDavid Li */ 20951591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_shader_program 20961591693c7b415e9869157c711fe11263c95d74eDavid Li{ 20971591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Type; /**< Always GL_SHADER_PROGRAM (internal token) */ 20981591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; /**< aka handle or ID */ 20991591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; /**< Reference count */ 21001591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean DeletePending; 21011591693c7b415e9869157c711fe11263c95d74eDavid Li 21021591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint NumShaders; /**< number of attached shaders */ 21031591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader **Shaders; /**< List of attached the shaders */ 21041591693c7b415e9869157c711fe11263c95d74eDavid Li 21051591693c7b415e9869157c711fe11263c95d74eDavid Li /** User-defined attribute bindings (glBindAttribLocation) */ 21061591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_parameter_list *Attributes; 21071591693c7b415e9869157c711fe11263c95d74eDavid Li 21081591693c7b415e9869157c711fe11263c95d74eDavid Li /** Transform feedback varyings */ 2109c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct { 2110c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLenum BufferMode; 2111c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLuint NumVarying; 2112c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLchar **VaryingNames; /**< Array [NumVarying] of char * */ 2113c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// } TransformFeedback; 21141591693c7b415e9869157c711fe11263c95d74eDavid Li 21151591693c7b415e9869157c711fe11263c95d74eDavid Li /** Geometry shader state - copied into gl_geometry_program at link time */ 2116c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct { 2117c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLint VerticesOut; 2118c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLenum InputType; /**< GL_POINTS, GL_LINES, GL_LINES_ADJACENCY_ARB, 2119c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GL_TRIANGLES, or GL_TRIANGLES_ADJACENCY_ARB */ 2120c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLenum OutputType; /**< GL_POINTS, GL_LINE_STRIP or GL_TRIANGLE_STRIP */ 2121c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// } Geom; 21221591693c7b415e9869157c711fe11263c95d74eDavid Li 21231591693c7b415e9869157c711fe11263c95d74eDavid Li /* post-link info: */ 2124c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_vertex_program *VertexProgram; /**< Linked vertex program */ 2125c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_fragment_program *FragmentProgram; /**< Linked fragment prog */ 2126c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_geometry_program *GeometryProgram; /**< Linked geometry prog */ 21271591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_uniform_list *Uniforms; 21281591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_parameter_list *Varying; 21291591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean LinkStatus; /**< GL_LINK_STATUS */ 21301591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Validated; 21311591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean _Used; /**< Ever used for drawing? */ 21321591693c7b415e9869157c711fe11263c95d74eDavid Li GLchar *InfoLog; 21331591693c7b415e9869157c711fe11263c95d74eDavid Li unsigned Version; /**< GLSL version used for linking */ 21341591693c7b415e9869157c711fe11263c95d74eDavid Li 21351591693c7b415e9869157c711fe11263c95d74eDavid Li /** 21361591693c7b415e9869157c711fe11263c95d74eDavid Li * Per-stage shaders resulting from the first stage of linking. 21371591693c7b415e9869157c711fe11263c95d74eDavid Li * 21381591693c7b415e9869157c711fe11263c95d74eDavid Li * Set of linked shaders for this program. The array is accessed using the 21391591693c7b415e9869157c711fe11263c95d74eDavid Li * \c MESA_SHADER_* defines. Entries for non-existent stages will be 21401591693c7b415e9869157c711fe11263c95d74eDavid Li * \c NULL. 21411591693c7b415e9869157c711fe11263c95d74eDavid Li */ 21421591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader *_LinkedShaders[MESA_SHADER_TYPES]; 2143c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li GLfloat (*ValuesUniform)[4]; 2144c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li GLfloat (*ValuesVertexInput)[4]; /**< actually a VertexInput */ 2145c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li GLfloat (*ValuesVertexOutput)[4]; /**< actually a VertexOutput */ 2146c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li void * InputOuputBase; /**< allocation base for Values* */ 21473225321119408735f16b72b539c9fb7d80683552David Li 21483225321119408735f16b72b539c9fb7d80683552David Li unsigned AttributeSlots;/**< [0,AttributeSlots-1] read by vertex shader */ 21493225321119408735f16b72b539c9fb7d80683552David Li unsigned VaryingSlots; /**< [0,VaryingSlots-1] read by fragment shader */ 21503225321119408735f16b72b539c9fb7d80683552David Li unsigned UsesFragCoord : 1, UsesPointCoord : 1; 21511591693c7b415e9869157c711fe11263c95d74eDavid Li}; 21521591693c7b415e9869157c711fe11263c95d74eDavid Li 21531591693c7b415e9869157c711fe11263c95d74eDavid Li 21541591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_DUMP 0x1 /**< Dump shaders to stdout */ 21551591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_LOG 0x2 /**< Write shaders to files */ 21561591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_OPT 0x4 /**< Force optimizations (override pragmas) */ 21571591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_NO_OPT 0x8 /**< Force no optimizations (override pragmas) */ 21581591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_UNIFORMS 0x10 /**< Print glUniform calls */ 21591591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_NOP_VERT 0x20 /**< Force no-op vertex shaders */ 21601591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_NOP_FRAG 0x40 /**< Force no-op fragment shaders */ 21611591693c7b415e9869157c711fe11263c95d74eDavid Li#define GLSL_USE_PROG 0x80 /**< Log glUseProgram calls */ 21621591693c7b415e9869157c711fe11263c95d74eDavid Li 21631591693c7b415e9869157c711fe11263c95d74eDavid Li 21641591693c7b415e9869157c711fe11263c95d74eDavid Li/** 21651591693c7b415e9869157c711fe11263c95d74eDavid Li * Context state for GLSL vertex/fragment shaders. 21661591693c7b415e9869157c711fe11263c95d74eDavid Li */ 21671591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_shader_state 21681591693c7b415e9869157c711fe11263c95d74eDavid Li{ 21691591693c7b415e9869157c711fe11263c95d74eDavid Li /** 21701591693c7b415e9869157c711fe11263c95d74eDavid Li * Programs used for rendering 21711591693c7b415e9869157c711fe11263c95d74eDavid Li * 21721591693c7b415e9869157c711fe11263c95d74eDavid Li * There is a separate program set for each shader stage. If 21731591693c7b415e9869157c711fe11263c95d74eDavid Li * GL_EXT_separate_shader_objects is not supported, each of these must point 21741591693c7b415e9869157c711fe11263c95d74eDavid Li * to \c NULL or to the same program. 21751591693c7b415e9869157c711fe11263c95d74eDavid Li */ 21761591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader_program *CurrentVertexProgram; 21771591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader_program *CurrentGeometryProgram; 21781591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader_program *CurrentFragmentProgram; 21791591693c7b415e9869157c711fe11263c95d74eDavid Li 21801591693c7b415e9869157c711fe11263c95d74eDavid Li /** 21811591693c7b415e9869157c711fe11263c95d74eDavid Li * Program used by glUniform calls. 21821591693c7b415e9869157c711fe11263c95d74eDavid Li * 21831591693c7b415e9869157c711fe11263c95d74eDavid Li * Explicitly set by \c glUseProgram and \c glActiveProgramEXT. 21841591693c7b415e9869157c711fe11263c95d74eDavid Li */ 21851591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_shader_program *ActiveProgram; 21861591693c7b415e9869157c711fe11263c95d74eDavid Li 21871591693c7b415e9869157c711fe11263c95d74eDavid Li void *MemPool; 21881591693c7b415e9869157c711fe11263c95d74eDavid Li 21891591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield Flags; /**< Mask of GLSL_x flags */ 21901591693c7b415e9869157c711fe11263c95d74eDavid Li}; 21911591693c7b415e9869157c711fe11263c95d74eDavid Li 21921591693c7b415e9869157c711fe11263c95d74eDavid Li/** 21931591693c7b415e9869157c711fe11263c95d74eDavid Li * Compiler options for a single GLSL shaders type 21941591693c7b415e9869157c711fe11263c95d74eDavid Li */ 21951591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_shader_compiler_options 21961591693c7b415e9869157c711fe11263c95d74eDavid Li{ 21971591693c7b415e9869157c711fe11263c95d74eDavid Li /** Driver-selectable options: */ 21981591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitCondCodes; /**< Use condition codes? */ 21991591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNVTempInitialization; /**< 0-fill NV temp registers */ 22001591693c7b415e9869157c711fe11263c95d74eDavid Li /** 22011591693c7b415e9869157c711fe11263c95d74eDavid Li * Attempts to flatten all ir_if (OPCODE_IF) for GPUs that can't 22021591693c7b415e9869157c711fe11263c95d74eDavid Li * support control flow. 22031591693c7b415e9869157c711fe11263c95d74eDavid Li */ 22041591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoIfs; 22051591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoLoops; 22061591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoFunctions; 22071591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoCont; /**< Emit CONT opcode? */ 22081591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoMainReturn; /**< Emit CONT/RET opcodes? */ 22091591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoNoise; /**< Emit NOISE opcodes? */ 22101591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoPow; /**< Emit POW opcodes? */ 22111591693c7b415e9869157c711fe11263c95d74eDavid Li 22121591693c7b415e9869157c711fe11263c95d74eDavid Li /** 22131591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Forms of indirect addressing the driver cannot do. 22141591693c7b415e9869157c711fe11263c95d74eDavid Li */ 22151591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 22161591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoIndirectInput; /**< No indirect addressing of inputs */ 22171591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoIndirectOutput; /**< No indirect addressing of outputs */ 22181591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoIndirectTemp; /**< No indirect addressing of temps */ 22191591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EmitNoIndirectUniform; /**< No indirect addressing of constants */ 22201591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 22211591693c7b415e9869157c711fe11263c95d74eDavid Li 22221591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxUnrollIterations; 22231591693c7b415e9869157c711fe11263c95d74eDavid Li 22241591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_sl_pragmas DefaultPragmas; /**< Default #pragma settings */ 22251591693c7b415e9869157c711fe11263c95d74eDavid Li}; 22261591693c7b415e9869157c711fe11263c95d74eDavid Li 22271591693c7b415e9869157c711fe11263c95d74eDavid Li/** 22281591693c7b415e9869157c711fe11263c95d74eDavid Li * Transform feedback object state 22291591693c7b415e9869157c711fe11263c95d74eDavid Li */ 22301591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_transform_feedback_object 22311591693c7b415e9869157c711fe11263c95d74eDavid Li{ 22321591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; /**< AKA the object ID */ 22331591693c7b415e9869157c711fe11263c95d74eDavid Li GLint RefCount; 22341591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Active; /**< Is transform feedback enabled? */ 22351591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Paused; /**< Is transform feedback paused? */ 22361591693c7b415e9869157c711fe11263c95d74eDavid Li 22371591693c7b415e9869157c711fe11263c95d74eDavid Li /** The feedback buffers */ 22381591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint BufferNames[MAX_FEEDBACK_ATTRIBS]; 22391591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *Buffers[MAX_FEEDBACK_ATTRIBS]; 22401591693c7b415e9869157c711fe11263c95d74eDavid Li 22411591693c7b415e9869157c711fe11263c95d74eDavid Li /** Start of feedback data in dest buffer */ 22421591693c7b415e9869157c711fe11263c95d74eDavid Li GLintptr Offset[MAX_FEEDBACK_ATTRIBS]; 22431591693c7b415e9869157c711fe11263c95d74eDavid Li /** Max data to put into dest buffer (in bytes) */ 22441591693c7b415e9869157c711fe11263c95d74eDavid Li GLsizeiptr Size[MAX_FEEDBACK_ATTRIBS]; 22451591693c7b415e9869157c711fe11263c95d74eDavid Li}; 22461591693c7b415e9869157c711fe11263c95d74eDavid Li 22471591693c7b415e9869157c711fe11263c95d74eDavid Li 22481591693c7b415e9869157c711fe11263c95d74eDavid Li/** 22491591693c7b415e9869157c711fe11263c95d74eDavid Li * Context state for transform feedback. 22501591693c7b415e9869157c711fe11263c95d74eDavid Li */ 22511591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_transform_feedback 22521591693c7b415e9869157c711fe11263c95d74eDavid Li{ 22531591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Mode; /**< GL_POINTS, GL_LINES or GL_TRIANGLES */ 22541591693c7b415e9869157c711fe11263c95d74eDavid Li 22551591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean RasterDiscard; /**< GL_RASTERIZER_DISCARD */ 22561591693c7b415e9869157c711fe11263c95d74eDavid Li 22571591693c7b415e9869157c711fe11263c95d74eDavid Li /** The general binding point (GL_TRANSFORM_FEEDBACK_BUFFER) */ 22581591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_buffer_object *CurrentBuffer; 22591591693c7b415e9869157c711fe11263c95d74eDavid Li 22601591693c7b415e9869157c711fe11263c95d74eDavid Li /** The table of all transform feedback objects */ 22611591693c7b415e9869157c711fe11263c95d74eDavid Li struct _mesa_HashTable *Objects; 22621591693c7b415e9869157c711fe11263c95d74eDavid Li 22631591693c7b415e9869157c711fe11263c95d74eDavid Li /** The current xform-fb object (GL_TRANSFORM_FEEDBACK_BINDING) */ 22641591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_transform_feedback_object *CurrentObject; 22651591693c7b415e9869157c711fe11263c95d74eDavid Li 22661591693c7b415e9869157c711fe11263c95d74eDavid Li /** The default xform-fb object (Name==0) */ 22671591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_transform_feedback_object *DefaultObject; 22681591693c7b415e9869157c711fe11263c95d74eDavid Li}; 22691591693c7b415e9869157c711fe11263c95d74eDavid Li 22701591693c7b415e9869157c711fe11263c95d74eDavid Li 22711591693c7b415e9869157c711fe11263c95d74eDavid Li 227260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li///** 227360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * State which can be shared by multiple contexts: 227460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 227560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//struct gl_shared_state 227660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//{ 227760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// _glthread_Mutex Mutex; /**< for thread safety */ 227860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint RefCount; /**< Reference count */ 227960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct _mesa_HashTable *DisplayList; /**< Display lists hash table */ 228060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct _mesa_HashTable *TexObjects; /**< Texture objects hash table */ 228160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 228260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** Default texture objects (shared by all texture units) */ 228360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_texture_object *DefaultTex[NUM_TEXTURE_TARGETS]; 228460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 228560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** Fallback texture used when a bound texture is incomplete */ 228660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_texture_object *FallbackTex; 228760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 228860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** 228960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * \name Thread safety and statechange notification for texture 229060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * objects. 229160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * 229260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * \todo Improve the granularity of locking. 229360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 229460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /*@{*/ 229560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// _glthread_Mutex TexMutex; /**< texobj thread safety */ 229660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint TextureStateStamp; /**< state notification for shared tex */ 229760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /*@}*/ 229860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 229960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** Default buffer object for vertex arrays that aren't in VBOs */ 230060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_buffer_object *NullBufferObj; 230160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 230260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** 230360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * \name Vertex/geometry/fragment programs 230460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 230560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /*@{*/ 230660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct _mesa_HashTable *Programs; /**< All vertex/fragment programs */ 230760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_vertex_program *DefaultVertexProgram; 230860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_fragment_program *DefaultFragmentProgram; 230960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_geometry_program *DefaultGeometryProgram; 231060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /*@}*/ 231160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 231260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* GL_ATI_fragment_shader */ 231360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct _mesa_HashTable *ATIShaders; 231460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct ati_fragment_shader *DefaultFragmentShader; 231560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 231660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct _mesa_HashTable *BufferObjects; 231760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 231860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** Table of both gl_shader and gl_shader_program objects */ 231960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct _mesa_HashTable *ShaderObjects; 232060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 232160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* GL_EXT_framebuffer_object */ 232260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct _mesa_HashTable *RenderBuffers; 232360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct _mesa_HashTable *FrameBuffers; 232460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 232560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* GL_ARB_sync */ 232660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct simple_node SyncObjects; 232760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 232860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// void *DriverData; /**< Device driver shared state */ 232960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//}; 23301591693c7b415e9869157c711fe11263c95d74eDavid Li 23311591693c7b415e9869157c711fe11263c95d74eDavid Li 23321591693c7b415e9869157c711fe11263c95d74eDavid Li 23331591693c7b415e9869157c711fe11263c95d74eDavid Li 233460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li///** 233560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * A renderbuffer stores colors or depth values or stencil values. 233660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * A framebuffer object will have a collection of these. 233760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * Data are read/written to the buffer with a handful of Get/Put functions. 233860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * 233960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * Instances of this object are allocated with the Driver's NewRenderbuffer 234060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * hook. Drivers will likely wrap this class inside a driver-specific 234160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * class to simulate inheritance. 234260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 234360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//struct gl_renderbuffer 234460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//{ 234560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//#define RB_MAGIC 0xaabbccdd 234660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// int Magic; /** XXX TEMPORARY DEBUG INFO */ 234760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// _glthread_Mutex Mutex; /**< for thread safety */ 234860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint ClassID; /**< Useful for drivers */ 234960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint Name; 235060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint RefCount; 235160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint Width, Height; 235260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLboolean Purgeable; /**< Is the buffer purgeable under memory pressure? */ 235360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 235460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum InternalFormat; /**< The user-specified format */ 235560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum _BaseFormat; /**< Either GL_RGB, GL_RGBA, GL_DEPTH_COMPONENT or 235660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GL_STENCIL_INDEX. */ 235760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint Format; /**< The actual format: MESA_FORMAT_x */ 235860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 235960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLubyte NumSamples; 236060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 236160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum DataType; /**< Type of values passed to the Get/Put functions */ 236260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLvoid *Data; /**< This may not be used by some kinds of RBs */ 236360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 236460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* Used to wrap one renderbuffer around another: */ 236560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_renderbuffer *Wrapped; 236660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 236760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* Delete this renderbuffer */ 236860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// void (*Delete)(struct gl_renderbuffer *rb); 236960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 237060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* Allocate new storage for this renderbuffer */ 237160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLboolean (*AllocStorage)(struct gl_context *ctx, struct gl_renderbuffer *rb, 237260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum internalFormat, 237360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint width, GLuint height); 237460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 237560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* Lock/Unlock are called before/after calling the Get/Put functions. 237660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * Not sure this is the right place for these yet. 237760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// void (*Lock)(struct gl_context *ctx, struct gl_renderbuffer *rb); 237860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// void (*Unlock)(struct gl_context *ctx, struct gl_renderbuffer *rb); 237960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 238060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 238160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* Return a pointer to the element/pixel at (x,y). 238260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * Should return NULL if the buffer memory can't be directly addressed. 238360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 238460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// void *(*GetPointer)(struct gl_context *ctx, struct gl_renderbuffer *rb, 238560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint x, GLint y); 238660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 238760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* Get/Read a row of values. 238860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * The values will be of format _BaseFormat and type DataType. 238960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 239060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// void (*GetRow)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, 239160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint x, GLint y, void *values); 239260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 239360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* Get/Read values at arbitrary locations. 239460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * The values will be of format _BaseFormat and type DataType. 239560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 239660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// void (*GetValues)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, 239760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// const GLint x[], const GLint y[], void *values); 239860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 239960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* Put/Write a row of values. 240060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * The values will be of format _BaseFormat and type DataType. 240160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 240260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// void (*PutRow)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, 240360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint x, GLint y, const void *values, const GLubyte *mask); 240460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 240560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* Put/Write a row of RGB values. This is a special-case routine that's 240660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * only used for RGBA renderbuffers when the source data is GL_RGB. That's 240760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * a common case for glDrawPixels and some triangle routines. 240860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * The values will be of format GL_RGB and type DataType. 240960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 241060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// void (*PutRowRGB)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, 241160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint x, GLint y, const void *values, const GLubyte *mask); 241260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 241360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 241460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* Put/Write a row of identical values. 241560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * The values will be of format _BaseFormat and type DataType. 241660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 241760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// void (*PutMonoRow)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, 241860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint x, GLint y, const void *value, const GLubyte *mask); 241960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 242060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* Put/Write values at arbitrary locations. 242160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * The values will be of format _BaseFormat and type DataType. 242260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 242360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// void (*PutValues)(struct gl_context *ctx, struct gl_renderbuffer *rb, GLuint count, 242460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// const GLint x[], const GLint y[], const void *values, 242560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// const GLubyte *mask); 242660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* Put/Write identical values at arbitrary locations. 242760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * The values will be of format _BaseFormat and type DataType. 242860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 242960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// void (*PutMonoValues)(struct gl_context *ctx, struct gl_renderbuffer *rb, 243060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint count, const GLint x[], const GLint y[], 243160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// const void *value, const GLubyte *mask); 243260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//}; 24331591693c7b415e9869157c711fe11263c95d74eDavid Li 24341591693c7b415e9869157c711fe11263c95d74eDavid Li 24351591693c7b415e9869157c711fe11263c95d74eDavid Li/** 24361591693c7b415e9869157c711fe11263c95d74eDavid Li * A renderbuffer attachment points to either a texture object (and specifies 24371591693c7b415e9869157c711fe11263c95d74eDavid Li * a mipmap level, cube face or 3D texture slice) or points to a renderbuffer. 24381591693c7b415e9869157c711fe11263c95d74eDavid Li */ 24391591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_renderbuffer_attachment 24401591693c7b415e9869157c711fe11263c95d74eDavid Li{ 24411591693c7b415e9869157c711fe11263c95d74eDavid Li GLenum Type; /**< \c GL_NONE or \c GL_TEXTURE or \c GL_RENDERBUFFER_EXT */ 24421591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean Complete; 24431591693c7b415e9869157c711fe11263c95d74eDavid Li 24441591693c7b415e9869157c711fe11263c95d74eDavid Li /** 24451591693c7b415e9869157c711fe11263c95d74eDavid Li * If \c Type is \c GL_RENDERBUFFER_EXT, this stores a pointer to the 24461591693c7b415e9869157c711fe11263c95d74eDavid Li * application supplied renderbuffer object. 24471591693c7b415e9869157c711fe11263c95d74eDavid Li */ 24481591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_renderbuffer *Renderbuffer; 24491591693c7b415e9869157c711fe11263c95d74eDavid Li 24501591693c7b415e9869157c711fe11263c95d74eDavid Li /** 24511591693c7b415e9869157c711fe11263c95d74eDavid Li * If \c Type is \c GL_TEXTURE, this stores a pointer to the application 24521591693c7b415e9869157c711fe11263c95d74eDavid Li * supplied texture object. 24531591693c7b415e9869157c711fe11263c95d74eDavid Li */ 24541591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_texture_object *Texture; 24551591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint TextureLevel; /**< Attached mipmap level. */ 24561591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint CubeMapFace; /**< 0 .. 5, for cube map textures. */ 24571591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Zoffset; /**< Slice for 3D textures, or layer for both 1D 24581591693c7b415e9869157c711fe11263c95d74eDavid Li * and 2D array textures */ 24591591693c7b415e9869157c711fe11263c95d74eDavid Li}; 24601591693c7b415e9869157c711fe11263c95d74eDavid Li 24611591693c7b415e9869157c711fe11263c95d74eDavid Li 246260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li///** 246360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * A framebuffer is a collection of renderbuffers (color, depth, stencil, etc). 246460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * In C++ terms, think of this as a base class from which device drivers 246560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * will make derived classes. 246660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 246760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//struct gl_framebuffer 246860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//{ 246960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// _glthread_Mutex Mutex; /**< for thread safety */ 247060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** 247160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * If zero, this is a window system framebuffer. If non-zero, this 247260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * is a FBO framebuffer; note that for some devices (i.e. those with 247360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * a natural pixel coordinate system for FBOs that differs from the 247460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * OpenGL/Mesa coordinate system), this means that the viewport, 247560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * polygon face orientation, and polygon stipple will have to be inverted. 247660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 247760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint Name; 247860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 247960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint RefCount; 248060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLboolean DeletePending; 248160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 248260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** 248360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * The framebuffer's visual. Immutable if this is a window system buffer. 248460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * Computed from attachments if user-made FBO. 248560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 248660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_config Visual; 248760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 248860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLboolean Initialized; 248960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 249060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint Width, Height; /**< size of frame buffer in pixels */ 249160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 249260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** \name Drawing bounds (Intersection of buffer size and scissor box) */ 249360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /*@{*/ 249460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint _Xmin, _Xmax; /**< inclusive */ 249560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint _Ymin, _Ymax; /**< exclusive */ 249660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /*@}*/ 249760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 249860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** \name Derived Z buffer stuff */ 249960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /*@{*/ 250060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint _DepthMax; /**< Max depth buffer value */ 250160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLfloat _DepthMaxF; /**< Float max depth buffer value */ 250260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLfloat _MRD; /**< minimum resolvable difference in Z values */ 250360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /*@}*/ 250460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 250560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** One of the GL_FRAMEBUFFER_(IN)COMPLETE_* tokens */ 250660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum _Status; 250760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 250860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** Integer color values */ 250960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLboolean _IntegerColor; 251060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 251160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** Array of all renderbuffer attachments, indexed by BUFFER_* tokens. */ 251260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_renderbuffer_attachment Attachment[BUFFER_COUNT]; 251360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 251460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* In unextended OpenGL these vars are part of the GL_COLOR_BUFFER 251560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * attribute group and GL_PIXEL attribute group, respectively. 251660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 251760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum ColorDrawBuffer[MAX_DRAW_BUFFERS]; 251860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum ColorReadBuffer; 251960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 252060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** Computed from ColorDraw/ReadBuffer above */ 252160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint _NumColorDrawBuffers; 252260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint _ColorDrawBufferIndexes[MAX_DRAW_BUFFERS]; /**< BUFFER_x or -1 */ 252360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLint _ColorReadBufferIndex; /* -1 = None */ 252460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_renderbuffer *_ColorDrawBuffers[MAX_DRAW_BUFFERS]; 252560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_renderbuffer *_ColorReadBuffer; 252660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 252760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** The Actual depth/stencil buffers to use. May be wrappers around the 252860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * depth/stencil buffers attached above. */ 252960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_renderbuffer *_DepthBuffer; 253060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_renderbuffer *_StencilBuffer; 253160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 253260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /** Delete this framebuffer */ 253360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// void (*Delete)(struct gl_framebuffer *fb); 253460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//}; 25351591693c7b415e9869157c711fe11263c95d74eDavid Li 25361591693c7b415e9869157c711fe11263c95d74eDavid Li 25371591693c7b415e9869157c711fe11263c95d74eDavid Li/** 25381591693c7b415e9869157c711fe11263c95d74eDavid Li * Limits for vertex and fragment programs/shaders. 25391591693c7b415e9869157c711fe11263c95d74eDavid Li */ 25401591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_program_constants 25411591693c7b415e9869157c711fe11263c95d74eDavid Li{ 25421591693c7b415e9869157c711fe11263c95d74eDavid Li /* logical limits */ 25431591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxInstructions; 25441591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxAluInstructions; 25451591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTexInstructions; 25461591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTexIndirections; 25471591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxAttribs; 25481591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTemps; 25491591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxAddressRegs; 25501591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxParameters; 25511591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxLocalParams; 25521591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxEnvParams; 25531591693c7b415e9869157c711fe11263c95d74eDavid Li /* native/hardware limits */ 25541591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeInstructions; 25551591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeAluInstructions; 25561591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeTexInstructions; 25571591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeTexIndirections; 25581591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeAttribs; 25591591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeTemps; 25601591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeAddressRegs; 25611591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxNativeParameters; 25621591693c7b415e9869157c711fe11263c95d74eDavid Li /* For shaders */ 25631591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxUniformComponents; 25641591693c7b415e9869157c711fe11263c95d74eDavid Li /* GL_ARB_geometry_shader4 */ 25651591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxGeometryTextureImageUnits; 25661591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxGeometryVaryingComponents; 25671591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxVertexVaryingComponents; 25681591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxGeometryUniformComponents; 25691591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxGeometryOutputVertices; 25701591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxGeometryTotalOutputComponents; 25711591693c7b415e9869157c711fe11263c95d74eDavid Li}; 25721591693c7b415e9869157c711fe11263c95d74eDavid Li 25731591693c7b415e9869157c711fe11263c95d74eDavid Li 25741591693c7b415e9869157c711fe11263c95d74eDavid Li/** 25751591693c7b415e9869157c711fe11263c95d74eDavid Li * Constants which may be overridden by device driver during context creation 25761591693c7b415e9869157c711fe11263c95d74eDavid Li * but are never changed after that. 25771591693c7b415e9869157c711fe11263c95d74eDavid Li */ 25781591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_constants 25791591693c7b415e9869157c711fe11263c95d74eDavid Li{ 25801591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MaxTextureMbytes; /**< Max memory per image, in MB */ 25811591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MaxTextureLevels; /**< Max mipmap levels. */ 25821591693c7b415e9869157c711fe11263c95d74eDavid Li GLint Max3DTextureLevels; /**< Max mipmap levels for 3D textures */ 25831591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MaxCubeTextureLevels; /**< Max mipmap levels for cube textures */ 25841591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MaxArrayTextureLayers; /**< Max layers in array textures */ 25851591693c7b415e9869157c711fe11263c95d74eDavid Li GLint MaxTextureRectSize; /**< Max rectangle texture size, in pixes */ 25861591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTextureCoordUnits; 25871591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTextureImageUnits; 25881591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxVertexTextureImageUnits; 25891591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxCombinedTextureImageUnits; 25901591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxTextureUnits; /**< = MIN(CoordUnits, ImageUnits) */ 25911591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MaxTextureMaxAnisotropy; /**< GL_EXT_texture_filter_anisotropic */ 25921591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MaxTextureLodBias; /**< GL_EXT_texture_lod_bias */ 25931591693c7b415e9869157c711fe11263c95d74eDavid Li 25941591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxArrayLockSize; 25951591693c7b415e9869157c711fe11263c95d74eDavid Li 25961591693c7b415e9869157c711fe11263c95d74eDavid Li GLint SubPixelBits; 25971591693c7b415e9869157c711fe11263c95d74eDavid Li 25981591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MinPointSize, MaxPointSize; /**< aliased */ 25991591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MinPointSizeAA, MaxPointSizeAA; /**< antialiased */ 26001591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat PointSizeGranularity; 26011591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MinLineWidth, MaxLineWidth; /**< aliased */ 26021591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MinLineWidthAA, MaxLineWidthAA; /**< antialiased */ 26031591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat LineWidthGranularity; 26041591693c7b415e9869157c711fe11263c95d74eDavid Li 26051591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxColorTableSize; 26061591693c7b415e9869157c711fe11263c95d74eDavid Li 26071591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxClipPlanes; 26081591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxLights; 26091591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MaxShininess; /**< GL_NV_light_max_exponent */ 26101591693c7b415e9869157c711fe11263c95d74eDavid Li GLfloat MaxSpotExponent; /**< GL_NV_light_max_exponent */ 26111591693c7b415e9869157c711fe11263c95d74eDavid Li 26121591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxViewportWidth, MaxViewportHeight; 26131591693c7b415e9869157c711fe11263c95d74eDavid Li 26141591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_constants VertexProgram; /**< GL_ARB_vertex_program */ 26151591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_constants FragmentProgram; /**< GL_ARB_fragment_program */ 26161591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_program_constants GeometryProgram; /**< GL_ARB_geometry_shader4 */ 26171591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxProgramMatrices; 26181591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxProgramMatrixStackDepth; 26191591693c7b415e9869157c711fe11263c95d74eDavid Li 26201591693c7b415e9869157c711fe11263c95d74eDavid Li /** vertex array / buffer object bounds checking */ 26211591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean CheckArrayBounds; 26221591693c7b415e9869157c711fe11263c95d74eDavid Li 26231591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxDrawBuffers; /**< GL_ARB_draw_buffers */ 26241591693c7b415e9869157c711fe11263c95d74eDavid Li 26251591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxColorAttachments; /**< GL_EXT_framebuffer_object */ 26261591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxRenderbufferSize; /**< GL_EXT_framebuffer_object */ 26271591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxSamples; /**< GL_ARB_framebuffer_object */ 26281591693c7b415e9869157c711fe11263c95d74eDavid Li 26291591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint MaxVarying; /**< Number of float[4] varying parameters */ 26301591693c7b415e9869157c711fe11263c95d74eDavid Li 2631b341bc8271147be311b77937347f0f3f54aab749David Li// GLuint GLSLVersion; /**< GLSL version supported (ex: 120 = 1.20) */ 2632b341bc8271147be311b77937347f0f3f54aab749David Li 2633b341bc8271147be311b77937347f0f3f54aab749David Li// /** Which texture units support GL_ATI_envmap_bumpmap as targets */ 2634b341bc8271147be311b77937347f0f3f54aab749David Li// GLbitfield SupportedBumpUnits; 2635b341bc8271147be311b77937347f0f3f54aab749David Li// 2636b341bc8271147be311b77937347f0f3f54aab749David Li// /** 2637b341bc8271147be311b77937347f0f3f54aab749David Li// * Maximum amount of time, measured in nanseconds, that the server can wait. 2638b341bc8271147be311b77937347f0f3f54aab749David Li// */ 2639b341bc8271147be311b77937347f0f3f54aab749David Li// GLuint64 MaxServerWaitTimeout; 2640b341bc8271147be311b77937347f0f3f54aab749David Li// 2641b341bc8271147be311b77937347f0f3f54aab749David Li// /** GL_EXT_provoking_vertex */ 2642b341bc8271147be311b77937347f0f3f54aab749David Li// GLboolean QuadsFollowProvokingVertexConvention; 2643b341bc8271147be311b77937347f0f3f54aab749David Li// 2644b341bc8271147be311b77937347f0f3f54aab749David Li// /** OpenGL version 3.0 */ 2645b341bc8271147be311b77937347f0f3f54aab749David Li// GLbitfield ContextFlags; /**< Ex: GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT */ 2646b341bc8271147be311b77937347f0f3f54aab749David Li// 2647b341bc8271147be311b77937347f0f3f54aab749David Li// /** OpenGL version 3.2 */ 2648b341bc8271147be311b77937347f0f3f54aab749David Li// GLbitfield ProfileMask; /**< Mask of CONTEXT_x_PROFILE_BIT */ 2649b341bc8271147be311b77937347f0f3f54aab749David Li// 2650b341bc8271147be311b77937347f0f3f54aab749David Li// /** GL_EXT_transform_feedback */ 2651b341bc8271147be311b77937347f0f3f54aab749David Li// GLuint MaxTransformFeedbackSeparateAttribs; 2652b341bc8271147be311b77937347f0f3f54aab749David Li// GLuint MaxTransformFeedbackSeparateComponents; 2653b341bc8271147be311b77937347f0f3f54aab749David Li// GLuint MaxTransformFeedbackInterleavedComponents; 2654b341bc8271147be311b77937347f0f3f54aab749David Li// 2655b341bc8271147be311b77937347f0f3f54aab749David Li// /** GL_EXT_gpu_shader4 */ 2656b341bc8271147be311b77937347f0f3f54aab749David Li// GLint MinProgramTexelOffset, MaxProgramTexelOffset; 26571591693c7b415e9869157c711fe11263c95d74eDavid Li}; 26581591693c7b415e9869157c711fe11263c95d74eDavid Li 26591591693c7b415e9869157c711fe11263c95d74eDavid Li 26601591693c7b415e9869157c711fe11263c95d74eDavid Li/** 26611591693c7b415e9869157c711fe11263c95d74eDavid Li * Enable flag for each OpenGL extension. Different device drivers will 26621591693c7b415e9869157c711fe11263c95d74eDavid Li * enable different extensions at runtime. 26631591693c7b415e9869157c711fe11263c95d74eDavid Li */ 26641591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_extensions 26651591693c7b415e9869157c711fe11263c95d74eDavid Li{ 26661591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean dummy; /* don't remove this! */ 26671591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_blend_func_extended; 26681591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_copy_buffer; 26691591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_depth_buffer_float; 26701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_depth_clamp; 26711591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_depth_texture; 26721591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_draw_buffers; 26731591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_draw_elements_base_vertex; 26741591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_draw_instanced; 26751591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_fragment_coord_conventions; 26761591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_fragment_program; 26771591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_fragment_program_shadow; 26781591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_fragment_shader; 26791591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_framebuffer_object; 26801591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_explicit_attrib_location; 26811591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_geometry_shader4; 26821591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_half_float_pixel; 26831591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_half_float_vertex; 26841591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_instanced_arrays; 26851591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_map_buffer_range; 26861591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_multisample; 26871591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_multitexture; 26881591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_occlusion_query; 26891591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_occlusion_query2; 26901591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_point_sprite; 26911591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_sampler_objects; 26921591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_seamless_cube_map; 26931591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_shader_objects; 26941591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_shader_stencil_export; 26951591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_shading_language_100; 26961591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_shadow; 26971591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_shadow_ambient; 26981591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_sync; 26991591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_border_clamp; 27001591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_buffer_object; 27011591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_compression; 27021591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_compression_rgtc; 27031591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_cube_map; 27041591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_env_combine; 27051591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_env_crossbar; 27061591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_env_dot3; 27071591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_float; 27081591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_mirrored_repeat; 27091591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_multisample; 27101591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_non_power_of_two; 27111591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_rg; 27121591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_texture_rgb10_a2ui; 27131591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_timer_query; 27141591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_transform_feedback2; 27151591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_transpose_matrix; 27161591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_uniform_buffer_object; 27171591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_vertex_array_object; 27181591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_vertex_buffer_object; 27191591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_vertex_program; 27201591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_vertex_shader; 27211591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_vertex_type_2_10_10_10_rev; 27221591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ARB_window_pos; 27231591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_abgr; 27241591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_bgra; 27251591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_blend_color; 27261591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_blend_equation_separate; 27271591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_blend_func_separate; 27281591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_blend_logic_op; 27291591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_blend_minmax; 27301591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_blend_subtract; 27311591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_clip_volume_hint; 27321591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_compiled_vertex_array; 27331591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_copy_texture; 27341591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_depth_bounds_test; 27351591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_draw_buffers2; 27361591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_draw_range_elements; 27371591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_fog_coord; 27381591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_framebuffer_blit; 27391591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_framebuffer_multisample; 27401591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_framebuffer_object; 27411591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_framebuffer_sRGB; 27421591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_gpu_program_parameters; 27431591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_gpu_shader4; 27441591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_multi_draw_arrays; 27451591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_paletted_texture; 27461591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_packed_depth_stencil; 27471591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_packed_float; 27481591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_packed_pixels; 27491591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_pixel_buffer_object; 27501591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_point_parameters; 27511591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_polygon_offset; 27521591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_provoking_vertex; 27531591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_rescale_normal; 27541591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_shadow_funcs; 27551591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_secondary_color; 27561591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_separate_shader_objects; 27571591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_separate_specular_color; 27581591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_shared_texture_palette; 27591591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_stencil_wrap; 27601591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_stencil_two_side; 27611591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_subtexture; 27621591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture; 27631591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_object; 27641591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture3D; 27651591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_array; 27661591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_compression_s3tc; 27671591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_env_add; 27681591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_env_combine; 27691591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_env_dot3; 27701591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_filter_anisotropic; 27711591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_integer; 27721591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_lod_bias; 27731591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_mirror_clamp; 27741591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_shared_exponent; 27751591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_sRGB; 27761591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_swizzle; 27771591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_transform_feedback; 27781591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_timer_query; 27791591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_vertex_array; 27801591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_vertex_array_bgra; 27811591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_vertex_array_set; 27821591693c7b415e9869157c711fe11263c95d74eDavid Li /* vendor extensions */ 27831591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean APPLE_client_storage; 27841591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean APPLE_packed_pixels; 27851591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean APPLE_vertex_array_object; 27861591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean APPLE_object_purgeable; 27871591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ATI_envmap_bumpmap; 27881591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ATI_texture_mirror_once; 27891591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ATI_texture_env_combine3; 27901591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ATI_fragment_shader; 27911591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean ATI_separate_stencil; 27921591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IBM_rasterpos_clip; 27931591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean IBM_multimode_draw_arrays; 27941591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean MESA_pack_invert; 27951591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean MESA_resize_buffers; 27961591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean MESA_ycbcr_texture; 27971591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean MESA_texture_array; 27981591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean MESA_texture_signed_rgba; 27991591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_blend_square; 28001591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_conditional_render; 28011591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_fragment_program; 28021591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_fragment_program_option; 28031591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_light_max_exponent; 28041591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_point_sprite; 28051591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_primitive_restart; 28061591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_texgen_reflection; 28071591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_texture_env_combine4; 28081591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_texture_rectangle; 28091591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_vertex_program; 28101591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean NV_vertex_program1_1; 28111591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean OES_read_format; 28121591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SGI_texture_color_table; 28131591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SGIS_generate_mipmap; 28141591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SGIS_texture_edge_clamp; 28151591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean SGIS_texture_lod; 28161591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean TDFX_texture_compression_FXT1; 28171591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean S3_s3tc; 28181591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean OES_EGL_image; 28191591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean OES_draw_texture; 28201591693c7b415e9869157c711fe11263c95d74eDavid Li GLboolean EXT_texture_format_BGRA8888; 28211591693c7b415e9869157c711fe11263c95d74eDavid Li /** The extension string */ 28221591693c7b415e9869157c711fe11263c95d74eDavid Li const GLubyte *String; 28231591693c7b415e9869157c711fe11263c95d74eDavid Li /** Number of supported extensions */ 28241591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Count; 28251591693c7b415e9869157c711fe11263c95d74eDavid Li}; 28261591693c7b415e9869157c711fe11263c95d74eDavid Li 28271591693c7b415e9869157c711fe11263c95d74eDavid Li 28281591693c7b415e9869157c711fe11263c95d74eDavid Li/** 28291591693c7b415e9869157c711fe11263c95d74eDavid Li * A stack of matrices (projection, modelview, color, texture, etc). 28301591693c7b415e9869157c711fe11263c95d74eDavid Li */ 2831f9ad8a790398513a845d486f58566854f7eceee4David Li//struct gl_matrix_stack 2832f9ad8a790398513a845d486f58566854f7eceee4David Li//{ 2833f9ad8a790398513a845d486f58566854f7eceee4David Li// GLmatrix *Top; /**< points into Stack */ 2834f9ad8a790398513a845d486f58566854f7eceee4David Li// GLmatrix *Stack; /**< array [MaxDepth] of GLmatrix */ 2835f9ad8a790398513a845d486f58566854f7eceee4David Li// GLuint Depth; /**< 0 <= Depth < MaxDepth */ 2836f9ad8a790398513a845d486f58566854f7eceee4David Li// GLuint MaxDepth; /**< size of Stack[] array */ 2837f9ad8a790398513a845d486f58566854f7eceee4David Li// GLuint DirtyFlag; /**< _NEW_MODELVIEW or _NEW_PROJECTION, for example */ 2838f9ad8a790398513a845d486f58566854f7eceee4David Li//}; 28391591693c7b415e9869157c711fe11263c95d74eDavid Li 28401591693c7b415e9869157c711fe11263c95d74eDavid Li 28411591693c7b415e9869157c711fe11263c95d74eDavid Li/** 28421591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Bits for image transfer operations 28431591693c7b415e9869157c711fe11263c95d74eDavid Li * \sa __struct gl_contextRec::ImageTransferState. 28441591693c7b415e9869157c711fe11263c95d74eDavid Li */ 28451591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 28461591693c7b415e9869157c711fe11263c95d74eDavid Li#define IMAGE_SCALE_BIAS_BIT 0x1 28471591693c7b415e9869157c711fe11263c95d74eDavid Li#define IMAGE_SHIFT_OFFSET_BIT 0x2 28481591693c7b415e9869157c711fe11263c95d74eDavid Li#define IMAGE_MAP_COLOR_BIT 0x4 28491591693c7b415e9869157c711fe11263c95d74eDavid Li#define IMAGE_CLAMP_BIT 0x800 28501591693c7b415e9869157c711fe11263c95d74eDavid Li 28511591693c7b415e9869157c711fe11263c95d74eDavid Li 28521591693c7b415e9869157c711fe11263c95d74eDavid Li/** Pixel Transfer ops */ 28531591693c7b415e9869157c711fe11263c95d74eDavid Li#define IMAGE_BITS (IMAGE_SCALE_BIAS_BIT | \ 28541591693c7b415e9869157c711fe11263c95d74eDavid Li IMAGE_SHIFT_OFFSET_BIT | \ 28551591693c7b415e9869157c711fe11263c95d74eDavid Li IMAGE_MAP_COLOR_BIT) 28561591693c7b415e9869157c711fe11263c95d74eDavid Li 28571591693c7b415e9869157c711fe11263c95d74eDavid Li/** 28581591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Bits to indicate what state has changed. 28591591693c7b415e9869157c711fe11263c95d74eDavid Li * 28601591693c7b415e9869157c711fe11263c95d74eDavid Li * 4 unused flags. 28611591693c7b415e9869157c711fe11263c95d74eDavid Li */ 28621591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 28631591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_MODELVIEW 0x1 /**< __struct gl_contextRec::ModelView */ 28641591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_PROJECTION 0x2 /**< __struct gl_contextRec::Projection */ 28651591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_TEXTURE_MATRIX 0x4 /**< __struct gl_contextRec::TextureMatrix */ 28661591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ACCUM 0x10 /**< __struct gl_contextRec::Accum */ 28671591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_COLOR 0x20 /**< __struct gl_contextRec::Color */ 28681591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_DEPTH 0x40 /**< __struct gl_contextRec::Depth */ 28691591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_EVAL 0x80 /**< __struct gl_contextRec::Eval, __struct gl_contextRec::EvalMap */ 28701591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_FOG 0x100 /**< __struct gl_contextRec::Fog */ 28711591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_HINT 0x200 /**< __struct gl_contextRec::Hint */ 28721591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_LIGHT 0x400 /**< __struct gl_contextRec::Light */ 28731591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_LINE 0x800 /**< __struct gl_contextRec::Line */ 28741591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_PIXEL 0x1000 /**< __struct gl_contextRec::Pixel */ 28751591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_POINT 0x2000 /**< __struct gl_contextRec::Point */ 28761591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_POLYGON 0x4000 /**< __struct gl_contextRec::Polygon */ 28771591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_POLYGONSTIPPLE 0x8000 /**< __struct gl_contextRec::PolygonStipple */ 28781591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_SCISSOR 0x10000 /**< __struct gl_contextRec::Scissor */ 28791591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_STENCIL 0x20000 /**< __struct gl_contextRec::Stencil */ 28801591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_TEXTURE 0x40000 /**< __struct gl_contextRec::Texture */ 28811591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_TRANSFORM 0x80000 /**< __struct gl_contextRec::Transform */ 28821591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_VIEWPORT 0x100000 /**< __struct gl_contextRec::Viewport */ 28831591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_PACKUNPACK 0x200000 /**< __struct gl_contextRec::Pack, __struct gl_contextRec::Unpack */ 28841591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY 0x400000 /**< __struct gl_contextRec::Array */ 28851591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_RENDERMODE 0x800000 /**< __struct gl_contextRec::RenderMode, __struct gl_contextRec::Feedback, __struct gl_contextRec::Select */ 28861591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_BUFFERS 0x1000000 /**< __struct gl_contextRec::Visual, __struct gl_contextRec::DrawBuffer, */ 28871591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_MULTISAMPLE 0x2000000 /**< __struct gl_contextRec::Multisample */ 28881591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_TRACK_MATRIX 0x4000000 /**< __struct gl_contextRec::VertexProgram */ 28891591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_PROGRAM 0x8000000 /**< __struct gl_contextRec::VertexProgram */ 28901591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_CURRENT_ATTRIB 0x10000000 /**< __struct gl_contextRec::Current */ 28911591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_PROGRAM_CONSTANTS 0x20000000 28921591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_BUFFER_OBJECT 0x40000000 28931591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ALL ~0 28941591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 28951591693c7b415e9869157c711fe11263c95d74eDavid Li 28961591693c7b415e9869157c711fe11263c95d74eDavid Li 28971591693c7b415e9869157c711fe11263c95d74eDavid Li/** 28981591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Bits to track array state changes 28991591693c7b415e9869157c711fe11263c95d74eDavid Li * 29001591693c7b415e9869157c711fe11263c95d74eDavid Li * Also used to summarize array enabled. 29011591693c7b415e9869157c711fe11263c95d74eDavid Li */ 29021591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 29031591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_VERTEX VERT_BIT_POS 29041591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_WEIGHT VERT_BIT_WEIGHT 29051591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_NORMAL VERT_BIT_NORMAL 29061591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_COLOR0 VERT_BIT_COLOR0 29071591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_COLOR1 VERT_BIT_COLOR1 29081591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_FOGCOORD VERT_BIT_FOG 29091591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_INDEX VERT_BIT_COLOR_INDEX 29101591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_EDGEFLAG VERT_BIT_EDGEFLAG 29111591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_POINT_SIZE VERT_BIT_COLOR_INDEX /* aliased */ 29121591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_0 VERT_BIT_TEX0 29131591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_1 VERT_BIT_TEX1 29141591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_2 VERT_BIT_TEX2 29151591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_3 VERT_BIT_TEX3 29161591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_4 VERT_BIT_TEX4 29171591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_5 VERT_BIT_TEX5 29181591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_6 VERT_BIT_TEX6 29191591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD_7 VERT_BIT_TEX7 29201591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_ATTRIB_0 VERT_BIT_GENERIC0 /* start at bit 16 */ 29211591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_ALL 0xffffffff 29221591693c7b415e9869157c711fe11263c95d74eDavid Li 29231591693c7b415e9869157c711fe11263c95d74eDavid Li 29241591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_TEXCOORD(i) (_NEW_ARRAY_TEXCOORD_0 << (i)) 29251591693c7b415e9869157c711fe11263c95d74eDavid Li#define _NEW_ARRAY_ATTRIB(i) (_NEW_ARRAY_ATTRIB_0 << (i)) 29261591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 29271591693c7b415e9869157c711fe11263c95d74eDavid Li 29281591693c7b415e9869157c711fe11263c95d74eDavid Li 29291591693c7b415e9869157c711fe11263c95d74eDavid Li 29301591693c7b415e9869157c711fe11263c95d74eDavid Li/** 29311591693c7b415e9869157c711fe11263c95d74eDavid Li * \name A bunch of flags that we think might be useful to drivers. 29321591693c7b415e9869157c711fe11263c95d74eDavid Li * 29331591693c7b415e9869157c711fe11263c95d74eDavid Li * Set in the __struct gl_contextRec::_TriangleCaps bitfield. 29341591693c7b415e9869157c711fe11263c95d74eDavid Li */ 29351591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 29361591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_FLATSHADE 0x1 29371591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_SEPARATE_SPECULAR 0x2 29381591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_TRI_CULL_FRONT_BACK 0x4 /* special case on some hw */ 29391591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_TRI_LIGHT_TWOSIDE 0x8 29401591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_TRI_UNFILLED 0x10 29411591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_TRI_SMOOTH 0x20 29421591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_TRI_STIPPLE 0x40 29431591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_TRI_OFFSET 0x80 29441591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_LINE_SMOOTH 0x100 29451591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_LINE_STIPPLE 0x200 29461591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_POINT_SMOOTH 0x400 29471591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_POINT_ATTEN 0x800 29481591693c7b415e9869157c711fe11263c95d74eDavid Li#define DD_TRI_TWOSTENCIL 0x1000 29491591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 29501591693c7b415e9869157c711fe11263c95d74eDavid Li 29511591693c7b415e9869157c711fe11263c95d74eDavid Li 29521591693c7b415e9869157c711fe11263c95d74eDavid Li/** 29531591693c7b415e9869157c711fe11263c95d74eDavid Li * \name Define the state changes under which each of these bits might change 29541591693c7b415e9869157c711fe11263c95d74eDavid Li */ 29551591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 29561591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_FLATSHADE _NEW_LIGHT 29571591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_SEPARATE_SPECULAR (_NEW_LIGHT | _NEW_FOG | _NEW_PROGRAM) 29581591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_TRI_CULL_FRONT_BACK _NEW_POLYGON 29591591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_TRI_LIGHT_TWOSIDE _NEW_LIGHT 29601591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_TRI_UNFILLED _NEW_POLYGON 29611591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_TRI_SMOOTH _NEW_POLYGON 29621591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_TRI_STIPPLE _NEW_POLYGON 29631591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_TRI_OFFSET _NEW_POLYGON 29641591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_LINE_SMOOTH _NEW_LINE 29651591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_LINE_STIPPLE _NEW_LINE 29661591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_LINE_WIDTH _NEW_LINE 29671591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_POINT_SMOOTH _NEW_POINT 29681591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_POINT_SIZE _NEW_POINT 29691591693c7b415e9869157c711fe11263c95d74eDavid Li#define _DD_NEW_POINT_ATTEN _NEW_POINT 29701591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 29711591693c7b415e9869157c711fe11263c95d74eDavid Li 29721591693c7b415e9869157c711fe11263c95d74eDavid Li 29731591693c7b415e9869157c711fe11263c95d74eDavid Li/** 29741591693c7b415e9869157c711fe11263c95d74eDavid Li * Composite state flags 29751591693c7b415e9869157c711fe11263c95d74eDavid Li */ 29761591693c7b415e9869157c711fe11263c95d74eDavid Li/*@{*/ 29771591693c7b415e9869157c711fe11263c95d74eDavid Li#define _MESA_NEW_NEED_EYE_COORDS (_NEW_LIGHT | \ 29781591693c7b415e9869157c711fe11263c95d74eDavid Li _NEW_TEXTURE | \ 29791591693c7b415e9869157c711fe11263c95d74eDavid Li _NEW_POINT | \ 29801591693c7b415e9869157c711fe11263c95d74eDavid Li _NEW_PROGRAM | \ 29811591693c7b415e9869157c711fe11263c95d74eDavid Li _NEW_MODELVIEW) 29821591693c7b415e9869157c711fe11263c95d74eDavid Li 29831591693c7b415e9869157c711fe11263c95d74eDavid Li#define _MESA_NEW_NEED_NORMALS (_NEW_LIGHT | \ 29841591693c7b415e9869157c711fe11263c95d74eDavid Li _NEW_TEXTURE) 29851591693c7b415e9869157c711fe11263c95d74eDavid Li 29861591693c7b415e9869157c711fe11263c95d74eDavid Li#define _MESA_NEW_TRANSFER_STATE (_NEW_PIXEL) 29871591693c7b415e9869157c711fe11263c95d74eDavid Li/*@}*/ 29881591693c7b415e9869157c711fe11263c95d74eDavid Li 29891591693c7b415e9869157c711fe11263c95d74eDavid Li 29901591693c7b415e9869157c711fe11263c95d74eDavid Li 29911591693c7b415e9869157c711fe11263c95d74eDavid Li 29921591693c7b415e9869157c711fe11263c95d74eDavid Li/* This has to be included here. */ 299360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//#include "dd.h" 29941591693c7b415e9869157c711fe11263c95d74eDavid Li 29951591693c7b415e9869157c711fe11263c95d74eDavid Li 29961591693c7b415e9869157c711fe11263c95d74eDavid Li/** 29971591693c7b415e9869157c711fe11263c95d74eDavid Li * Display list flags. 29981591693c7b415e9869157c711fe11263c95d74eDavid Li * Strictly this is a tnl-private concept, but it doesn't seem 29991591693c7b415e9869157c711fe11263c95d74eDavid Li * worthwhile adding a tnl private structure just to hold this one bit 30001591693c7b415e9869157c711fe11263c95d74eDavid Li * of information: 30011591693c7b415e9869157c711fe11263c95d74eDavid Li */ 30021591693c7b415e9869157c711fe11263c95d74eDavid Li#define DLIST_DANGLING_REFS 0x1 30031591693c7b415e9869157c711fe11263c95d74eDavid Li 30041591693c7b415e9869157c711fe11263c95d74eDavid Li 30051591693c7b415e9869157c711fe11263c95d74eDavid Li/** Opaque declaration of display list payload data type */ 30061591693c7b415e9869157c711fe11263c95d74eDavid Liunion gl_dlist_node; 30071591693c7b415e9869157c711fe11263c95d74eDavid Li 30081591693c7b415e9869157c711fe11263c95d74eDavid Li 30091591693c7b415e9869157c711fe11263c95d74eDavid Li/** 30101591693c7b415e9869157c711fe11263c95d74eDavid Li * Provide a location where information about a display list can be 30111591693c7b415e9869157c711fe11263c95d74eDavid Li * collected. Could be extended with driverPrivate structures, 30121591693c7b415e9869157c711fe11263c95d74eDavid Li * etc. in the future. 30131591693c7b415e9869157c711fe11263c95d74eDavid Li */ 30141591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_display_list 30151591693c7b415e9869157c711fe11263c95d74eDavid Li{ 30161591693c7b415e9869157c711fe11263c95d74eDavid Li GLuint Name; 30171591693c7b415e9869157c711fe11263c95d74eDavid Li GLbitfield Flags; /**< DLIST_x flags */ 30181591693c7b415e9869157c711fe11263c95d74eDavid Li /** The dlist commands are in a linked list of nodes */ 30191591693c7b415e9869157c711fe11263c95d74eDavid Li union gl_dlist_node *Head; 30201591693c7b415e9869157c711fe11263c95d74eDavid Li}; 30211591693c7b415e9869157c711fe11263c95d74eDavid Li 30221591693c7b415e9869157c711fe11263c95d74eDavid Li 302360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li///** 302460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * State used during display list compilation and execution. 302560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 302660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//struct gl_dlist_state 302760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//{ 302860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint CallDepth; /**< Current recursion calling depth */ 302960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 303060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct gl_display_list *CurrentList; /**< List currently being compiled */ 303160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// union gl_dlist_node *CurrentBlock; /**< Pointer to current block of nodes */ 303260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLuint CurrentPos; /**< Index into current block of nodes */ 303360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 303460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLvertexformat ListVtxfmt; 303560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 303660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLubyte ActiveAttribSize[VERT_ATTRIB_MAX]; 303760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLfloat CurrentAttrib[VERT_ATTRIB_MAX][4]; 303860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 303960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLubyte ActiveMaterialSize[MAT_ATTRIB_MAX]; 304060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLfloat CurrentMaterial[MAT_ATTRIB_MAX][4]; 304160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 304260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLubyte ActiveIndex; 304360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLfloat CurrentIndex; 304460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 304560afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLubyte ActiveEdgeFlag; 304660afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLboolean CurrentEdgeFlag; 304760afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// 304860afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// struct { 304960afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// /* State known to have been set by the currently-compiling display 305060afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// * list. Used to eliminate some redundant state changes. 305160afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// */ 305260afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// GLenum ShadeModel; 305360afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li// } Current; 305460afd53a1257f900a8878b2c0c72b8c192d2992aDavid Li//}; 30551591693c7b415e9869157c711fe11263c95d74eDavid Li 30561591693c7b415e9869157c711fe11263c95d74eDavid Li/** 30571591693c7b415e9869157c711fe11263c95d74eDavid Li * Enum for the OpenGL APIs we know about and may support. 30581591693c7b415e9869157c711fe11263c95d74eDavid Li */ 30591591693c7b415e9869157c711fe11263c95d74eDavid Litypedef enum { 30601591693c7b415e9869157c711fe11263c95d74eDavid Li API_OPENGL, 30611591693c7b415e9869157c711fe11263c95d74eDavid Li API_OPENGLES, 30621591693c7b415e9869157c711fe11263c95d74eDavid Li API_OPENGLES2 30631591693c7b415e9869157c711fe11263c95d74eDavid Li} gl_api; 30641591693c7b415e9869157c711fe11263c95d74eDavid Li 30651591693c7b415e9869157c711fe11263c95d74eDavid Li/** 30661591693c7b415e9869157c711fe11263c95d74eDavid Li * Mesa rendering context. 30671591693c7b415e9869157c711fe11263c95d74eDavid Li * 30681591693c7b415e9869157c711fe11263c95d74eDavid Li * This is the central context data structure for Mesa. Almost all 30691591693c7b415e9869157c711fe11263c95d74eDavid Li * OpenGL state is contained in this structure. 30701591693c7b415e9869157c711fe11263c95d74eDavid Li * Think of this as a base class from which device drivers will derive 30711591693c7b415e9869157c711fe11263c95d74eDavid Li * sub classes. 30721591693c7b415e9869157c711fe11263c95d74eDavid Li * 30731591693c7b415e9869157c711fe11263c95d74eDavid Li * The struct gl_context typedef names this structure. 30741591693c7b415e9869157c711fe11263c95d74eDavid Li */ 30751591693c7b415e9869157c711fe11263c95d74eDavid Listruct gl_context 30761591693c7b415e9869157c711fe11263c95d74eDavid Li{ 30771591693c7b415e9869157c711fe11263c95d74eDavid Li /** State possibly shared with other contexts in the address space */ 3078c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_shared_state *Shared; 30791591693c7b415e9869157c711fe11263c95d74eDavid Li 30801591693c7b415e9869157c711fe11263c95d74eDavid Li /** \name API function pointer tables */ 30811591693c7b415e9869157c711fe11263c95d74eDavid Li /*@{*/ 30821591693c7b415e9869157c711fe11263c95d74eDavid Li gl_api API; 3083c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct _glapi_table *Save; /**< Display list save functions */ 3084c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct _glapi_table *Exec; /**< Execute functions */ 3085c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct _glapi_table *CurrentDispatch; /**< == Save or Exec !! */ 30861591693c7b415e9869157c711fe11263c95d74eDavid Li /*@}*/ 30871591693c7b415e9869157c711fe11263c95d74eDavid Li 3088c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_config Visual; 3089c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_framebuffer *DrawBuffer; /**< buffer for writing */ 3090c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_framebuffer *ReadBuffer; /**< buffer for reading */ 3091c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_framebuffer *WinSysDrawBuffer; /**< set with MakeCurrent */ 3092c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_framebuffer *WinSysReadBuffer; /**< set with MakeCurrent */ 30931591693c7b415e9869157c711fe11263c95d74eDavid Li 30941591693c7b415e9869157c711fe11263c95d74eDavid Li /** 30951591693c7b415e9869157c711fe11263c95d74eDavid Li * Device driver function pointer table 30961591693c7b415e9869157c711fe11263c95d74eDavid Li */ 30972ac1cf8a62bcf080b70eaa7c0e4f57d4e8001685David Li// struct dd_function_table Driver; 30981591693c7b415e9869157c711fe11263c95d74eDavid Li 3099c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// void *DriverCtx; /**< Points to device driver context/state */ 31001591693c7b415e9869157c711fe11263c95d74eDavid Li 31011591693c7b415e9869157c711fe11263c95d74eDavid Li /** Core/Driver constants */ 31021591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_constants Const; 31031591693c7b415e9869157c711fe11263c95d74eDavid Li 3104c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** \name The various 4x4 matrix stacks */ 3105c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@{*/ 3106c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_matrix_stack ModelviewMatrixStack; 3107c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_matrix_stack ProjectionMatrixStack; 3108c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_matrix_stack TextureMatrixStack[MAX_TEXTURE_UNITS]; 3109c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_matrix_stack ProgramMatrixStack[MAX_PROGRAM_MATRICES]; 3110c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_matrix_stack *CurrentStack; /**< Points to one of the above stacks */ 3111c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@}*/ 3112c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3113c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** Combined modelview and projection matrix */ 3114c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLmatrix _ModelProjectMatrix; 3115c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li 3116c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** \name Display lists */ 3117c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_dlist_state ListState; 3118c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li 3119c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLboolean ExecuteFlag; /**< Execute GL commands? */ 3120c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLboolean CompileFlag; /**< Compile GL commands into display list? */ 3121c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li 3122c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** Extension information */ 31231591693c7b415e9869157c711fe11263c95d74eDavid Li struct gl_extensions Extensions; 3124c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3125c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** Version info */ 3126c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLuint VersionMajor, VersionMinor; 3127c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// char *VersionString; 3128c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3129c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** \name State attribute stack (for glPush/PopAttrib) */ 3130c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@{*/ 3131c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLuint AttribStackDepth; 3132c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_attrib_node *AttribStack[MAX_ATTRIB_STACK_DEPTH]; 3133c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@}*/ 3134c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li 3135c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** \name Renderer attribute groups 3136c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// * 3137c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// * We define a struct for each attribute group to make pushing and popping 3138c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// * attributes easy. Also it's a good organization. 3139c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// */ 3140c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@{*/ 3141c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_accum_attrib Accum; /**< Accum buffer attributes */ 3142c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_colorbuffer_attrib Color; /**< Color buffer attributes */ 3143c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_current_attrib Current; /**< Current attributes */ 3144c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_depthbuffer_attrib Depth; /**< Depth buffer attributes */ 3145c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_eval_attrib Eval; /**< Eval attributes */ 3146c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_fog_attrib Fog; /**< Fog attributes */ 3147c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_hint_attrib Hint; /**< Hint attributes */ 3148c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_light_attrib Light; /**< Light attributes */ 3149c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_line_attrib Line; /**< Line attributes */ 3150c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_list_attrib List; /**< List attributes */ 3151c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_multisample_attrib Multisample; 3152c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_pixel_attrib Pixel; /**< Pixel attributes */ 3153c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_point_attrib Point; /**< Point attributes */ 3154c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_polygon_attrib Polygon; /**< Polygon attributes */ 3155c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLuint PolygonStipple[32]; /**< Polygon stipple */ 3156c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_scissor_attrib Scissor; /**< Scissor attributes */ 3157c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_stencil_attrib Stencil; /**< Stencil buffer attributes */ 3158c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_texture_attrib Texture; /**< Texture attributes */ 3159c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_transform_attrib Transform; /**< Transformation attributes */ 3160c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_viewport_attrib Viewport; /**< Viewport attributes */ 3161c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@}*/ 3162c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3163c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** \name Client attribute stack */ 3164c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@{*/ 3165c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLuint ClientAttribStackDepth; 3166c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_attrib_node *ClientAttribStack[MAX_CLIENT_ATTRIB_STACK_DEPTH]; 3167c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@}*/ 3168c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3169c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** \name Client attribute groups */ 3170c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@{*/ 3171c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_array_attrib Array; /**< Vertex arrays */ 3172c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_pixelstore_attrib Pack; /**< Pixel packing */ 3173c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_pixelstore_attrib Unpack; /**< Pixel unpacking */ 3174c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_pixelstore_attrib DefaultPacking; /**< Default params */ 3175c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@}*/ 3176c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3177c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** \name Other assorted state (not pushed/popped on attribute stack) */ 3178c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@{*/ 3179c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_pixelmaps PixelMaps; 3180c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li 3181c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_evaluators EvalMap; /**< All evaluators */ 3182c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_feedback Feedback; /**< Feedback */ 3183c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_selection Select; /**< Selection */ 3184c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li 3185c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_program_state Program; /**< general program state */ 3186c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_vertex_program_state VertexProgram; 3187c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_fragment_program_state FragmentProgram; 3188c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_geometry_program_state GeometryProgram; 3189c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_ati_fragment_shader_state ATIFragmentShader; 3190c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li 3191c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_shader_state Shader; /**< GLSL shader object state */ 3192c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_shader_compiler_options ShaderCompilerOptions[MESA_SHADER_TYPES]; 3193c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li 3194c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_query_state Query; /**< occlusion, timer queries */ 3195c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li 3196c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_transform_feedback TransformFeedback; 3197c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li 3198c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_buffer_object *CopyReadBuffer; /**< GL_ARB_copy_buffer */ 3199c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_buffer_object *CopyWriteBuffer; /**< GL_ARB_copy_buffer */ 3200c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@}*/ 3201c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3202c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_meta_state *Meta; /**< for "meta" operations */ 3203c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3204c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /* GL_EXT_framebuffer_object */ 3205c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_renderbuffer *CurrentRenderbuffer; 3206c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3207c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLenum ErrorValue; /**< Last error code */ 3208c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3209c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** 3210c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// * Recognize and silence repeated error debug messages in buggy apps. 3211c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// */ 3212c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// const char *ErrorDebugFmtString; 3213c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLuint ErrorDebugCount; 3214c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li 3215c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLenum RenderMode; /**< either GL_RENDER, GL_SELECT, GL_FEEDBACK */ 3216c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLbitfield NewState; /**< bitwise-or of _NEW_* flags */ 3217c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li 3218c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLboolean ViewportInitialized; /**< has viewport size been initialized? */ 3219c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li 3220c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLbitfield varying_vp_inputs; /**< mask of VERT_BIT_* flags */ 3221c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3222c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** \name Derived state */ 3223c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@{*/ 3224c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** Bitwise-or of DD_* flags. Note that this bitfield may be used before 3225c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// * state validation so they need to always be current. 3226c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// */ 3227c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLbitfield _TriangleCaps; 3228c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLbitfield _ImageTransferState;/**< bitwise-or of IMAGE_*_BIT flags */ 3229c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLfloat _EyeZDir[3]; 3230c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLfloat _ModelViewInvScale; 3231c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLboolean _NeedEyeCoords; 3232c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLboolean _ForceEyeCoords; 3233c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3234c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLuint TextureStateTimestamp; /**< detect changes to shared state */ 3235c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li 3236c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_shine_tab *_ShineTable[2]; /**< Active shine tables */ 3237c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_shine_tab *_ShineTabList; /**< MRU list of inactive shine tables */ 3238c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /**@}*/ 3239c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3240c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct gl_list_extensions *ListExt; /**< driver dlist extensions */ 3241c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3242c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** \name For debugging/development only */ 3243c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@{*/ 3244c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLboolean FirstTimeCurrent; 3245c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@}*/ 3246c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3247c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** Dither disable via MESA_NO_DITHER env var */ 3248c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLboolean NoDither; 3249c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3250c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** software compression/decompression supported or not */ 3251c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLboolean Mesa_DXTn; 3252c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3253c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** 3254c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// * Use dp4 (rather than mul/mad) instructions for position 3255c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// * transformation? 3256c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// */ 3257c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// GLboolean mvp_with_dp4; 3258c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// 3259c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /** 3260c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// * \name Hooks for module contexts. 3261c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// * 3262c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// * These will eventually live in the driver or elsewhere. 3263c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// */ 3264c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@{*/ 3265c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// void *swrast_context; 3266c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// void *swsetup_context; 3267c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// void *swtnl_context; 3268c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// void *swtnl_im; 3269c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// struct st_context *st; 3270c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// void *aelt_context; 3271c0025eb1a3d421c0355a21db9d8ea2bd81278460David Li// /*@}*/ 32721591693c7b415e9869157c711fe11263c95d74eDavid Li}; 32731591693c7b415e9869157c711fe11263c95d74eDavid Li 32741591693c7b415e9869157c711fe11263c95d74eDavid Li 32751591693c7b415e9869157c711fe11263c95d74eDavid Li/** The string names for GL_POINT, GL_LINE_LOOP, etc */ 32761591693c7b415e9869157c711fe11263c95d74eDavid Liextern const char *_mesa_prim_name[GL_POLYGON+4]; 32771591693c7b415e9869157c711fe11263c95d74eDavid Li 32781591693c7b415e9869157c711fe11263c95d74eDavid Li 32791591693c7b415e9869157c711fe11263c95d74eDavid Li#ifdef DEBUG 32801591693c7b415e9869157c711fe11263c95d74eDavid Liextern int MESA_VERBOSE; 32811591693c7b415e9869157c711fe11263c95d74eDavid Liextern int MESA_DEBUG_FLAGS; 32821591693c7b415e9869157c711fe11263c95d74eDavid Li# define MESA_FUNCTION __FUNCTION__ 32831591693c7b415e9869157c711fe11263c95d74eDavid Li#else 32841591693c7b415e9869157c711fe11263c95d74eDavid Li# define MESA_VERBOSE 0 32851591693c7b415e9869157c711fe11263c95d74eDavid Li# define MESA_DEBUG_FLAGS 0 32861591693c7b415e9869157c711fe11263c95d74eDavid Li# define MESA_FUNCTION "a function" 32871591693c7b415e9869157c711fe11263c95d74eDavid Li# ifndef NDEBUG 32881591693c7b415e9869157c711fe11263c95d74eDavid Li# define NDEBUG 32891591693c7b415e9869157c711fe11263c95d74eDavid Li# endif 32901591693c7b415e9869157c711fe11263c95d74eDavid Li#endif 32911591693c7b415e9869157c711fe11263c95d74eDavid Li 32921591693c7b415e9869157c711fe11263c95d74eDavid Li 32931591693c7b415e9869157c711fe11263c95d74eDavid Li/** The MESA_VERBOSE var is a bitmask of these flags */ 32941591693c7b415e9869157c711fe11263c95d74eDavid Lienum _verbose 32951591693c7b415e9869157c711fe11263c95d74eDavid Li{ 32961591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_VARRAY = 0x0001, 32971591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_TEXTURE = 0x0002, 32981591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_MATERIAL = 0x0004, 32991591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_PIPELINE = 0x0008, 33001591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_DRIVER = 0x0010, 33011591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_STATE = 0x0020, 33021591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_API = 0x0040, 33031591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_DISPLAY_LIST = 0x0100, 33041591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_LIGHTING = 0x0200, 33051591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_PRIMS = 0x0400, 33061591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_VERTS = 0x0800, 33071591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_DISASSEM = 0x1000, 33081591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_DRAW = 0x2000, 33091591693c7b415e9869157c711fe11263c95d74eDavid Li VERBOSE_SWAPBUFFERS = 0x4000 33101591693c7b415e9869157c711fe11263c95d74eDavid Li}; 33111591693c7b415e9869157c711fe11263c95d74eDavid Li 33121591693c7b415e9869157c711fe11263c95d74eDavid Li 33131591693c7b415e9869157c711fe11263c95d74eDavid Li/** The MESA_DEBUG_FLAGS var is a bitmask of these flags */ 33141591693c7b415e9869157c711fe11263c95d74eDavid Lienum _debug 33151591693c7b415e9869157c711fe11263c95d74eDavid Li{ 33161591693c7b415e9869157c711fe11263c95d74eDavid Li DEBUG_ALWAYS_FLUSH = 0x1 33171591693c7b415e9869157c711fe11263c95d74eDavid Li}; 33181591693c7b415e9869157c711fe11263c95d74eDavid Li 33191591693c7b415e9869157c711fe11263c95d74eDavid Li 33201591693c7b415e9869157c711fe11263c95d74eDavid Li 33211591693c7b415e9869157c711fe11263c95d74eDavid Li#endif /* MTYPES_H */ 3322