getstring.c revision c3d61d378574878deedb44d84f506ca23e66c6ca
1169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul/* 2169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Mesa 3-D graphics library 33f4e80c06b5b6efcd540ca5daf734100fad19ff0Brian Paul * Version: 7.1 4169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 53f4e80c06b5b6efcd540ca5daf734100fad19ff0Brian Paul * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 6169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 7169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a 8169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * copy of this software and associated documentation files (the "Software"), 9169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * to deal in the Software without restriction, including without limitation 10169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * and/or sell copies of the Software, and to permit persons to whom the 12169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Software is furnished to do so, subject to the following conditions: 13169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 14169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * The above copyright notice and this permission notice shall be included 15169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * in all copies or substantial portions of the Software. 16169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 17169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 21169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul */ 24169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 25169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 26169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 27169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul#include "glheader.h" 28169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul#include "context.h" 29169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul#include "get.h" 30169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul#include "version.h" 31169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul#include "enums.h" 32169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul#include "extensions.h" 33169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 34169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 35169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul/** 36948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul * Examine enabled GL extensions to determine GL version. 37948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul * \return version string 38948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul */ 39948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paulstatic const char * 40948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paulcompute_version(const GLcontext *ctx) 41948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul{ 42948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul static const char *version_1_2 = "1.2 Mesa " MESA_VERSION_STRING; 43948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul static const char *version_1_3 = "1.3 Mesa " MESA_VERSION_STRING; 44948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul static const char *version_1_4 = "1.4 Mesa " MESA_VERSION_STRING; 45948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul static const char *version_1_5 = "1.5 Mesa " MESA_VERSION_STRING; 46948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul static const char *version_2_0 = "2.0 Mesa " MESA_VERSION_STRING; 47948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul static const char *version_2_1 = "2.1 Mesa " MESA_VERSION_STRING; 48948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul 49948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul const GLboolean ver_1_3 = (ctx->Extensions.ARB_multisample && 50948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_multitexture && 51948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_texture_border_clamp && 52948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_texture_compression && 53948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_texture_cube_map && 54948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.EXT_texture_env_add && 55948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_texture_env_combine && 56948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_texture_env_dot3); 57948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul const GLboolean ver_1_4 = (ver_1_3 && 58948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_depth_texture && 59948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_shadow && 60948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_texture_env_crossbar && 61948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_texture_mirrored_repeat && 62948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_window_pos && 63948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.EXT_blend_color && 64948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.EXT_blend_func_separate && 65948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.EXT_blend_minmax && 66948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.EXT_blend_subtract && 67948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.EXT_fog_coord && 68948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.EXT_multi_draw_arrays && 69948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.EXT_point_parameters && 70948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.EXT_secondary_color && 71948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.EXT_stencil_wrap && 72948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.EXT_texture_lod_bias && 73948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.SGIS_generate_mipmap); 74948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul const GLboolean ver_1_5 = (ver_1_4 && 75948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_occlusion_query && 76948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_vertex_buffer_object && 77948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.EXT_shadow_funcs); 78948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul const GLboolean ver_2_0 = (ver_1_5 && 79948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_draw_buffers && 80948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_point_sprite && 81948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_shader_objects && 82948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_vertex_shader && 83948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_fragment_shader && 84948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.ARB_texture_non_power_of_two && 85dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick ctx->Extensions.EXT_blend_equation_separate && 86dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick 87dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick /* Technically, 2.0 requires the functionality 88dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * of the EXT version. Enable 2.0 if either 89dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * extension is available, and assume that a 90dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * driver that only exposes the ATI extension 91dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick * will fallback to software when necessary. 92dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick */ 93dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick (ctx->Extensions.EXT_stencil_two_side 94dde7cb962860e72e1bf3175069767358cc5b3f3cIan Romanick || ctx->Extensions.ATI_separate_stencil)); 95948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul const GLboolean ver_2_1 = (ver_2_0 && 96f59719c6c70d6b2a36d329b4cf02a079444cbca7Brian Paul ctx->Extensions.ARB_shading_language_120 && 97948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.EXT_pixel_buffer_object && 98948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul ctx->Extensions.EXT_texture_sRGB); 99948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul if (ver_2_1) 100948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul return version_2_1; 101948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul if (ver_2_0) 102948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul return version_2_0; 103948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul if (ver_1_5) 104948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul return version_1_5; 105948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul if (ver_1_4) 106948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul return version_1_4; 107948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul if (ver_1_3) 108948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul return version_1_3; 109948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul return version_1_2; 110948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul} 111948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul 112948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul 113948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul 114948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul/** 115169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Query string-valued state. The return value should _not_ be freed by 116169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * the caller. 117169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 118169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * \param name the state variable to query. 119169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 120169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * \sa glGetString(). 121169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 122169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Tries to get the string from dd_function_table::GetString, otherwise returns 123169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * the hardcoded strings. 124169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul */ 125169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paulconst GLubyte * GLAPIENTRY 126169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul_mesa_GetString( GLenum name ) 127169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul{ 128169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul GET_CURRENT_CONTEXT(ctx); 129169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul static const char *vendor = "Brian Paul"; 130169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul static const char *renderer = "Mesa"; 131365582dd6f632aafbc1c817aa57926d679bb2efcMichal Krol 132346a239f0144b5ba7ebad39b70ee7e125264cd6eBrian Paul if (!ctx) 133346a239f0144b5ba7ebad39b70ee7e125264cd6eBrian Paul return NULL; 134346a239f0144b5ba7ebad39b70ee7e125264cd6eBrian Paul 135a0c85249244e1af8dac88076d5f384cf4bd01236Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, NULL); 136169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 137169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul /* this is a required driver function */ 138169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul assert(ctx->Driver.GetString); 139169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul { 140169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul /* Give the driver the chance to handle this query */ 141169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul const GLubyte *str = (*ctx->Driver.GetString)(ctx, name); 142169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul if (str) 143169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul return str; 144169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul } 145169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 146169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul switch (name) { 147169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_VENDOR: 148169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul return (const GLubyte *) vendor; 149169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_RENDERER: 150948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul return (const GLubyte *) renderer; 151169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_VERSION: 152948f6e302ca3b6e0aa4d74eaef2e17dfb31bdfd5Brian Paul return (const GLubyte *) compute_version(ctx); 153169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_EXTENSIONS: 154169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul if (!ctx->Extensions.String) 155169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul ctx->Extensions.String = _mesa_make_extension_string(ctx); 1566acf1e93a291511cfb20b0e2aeda6e71ceb62a62Michal Krol return (const GLubyte *) ctx->Extensions.String; 1576acf1e93a291511cfb20b0e2aeda6e71ceb62a62Michal Krol#if FEATURE_ARB_shading_language_100 1586acf1e93a291511cfb20b0e2aeda6e71ceb62a62Michal Krol case GL_SHADING_LANGUAGE_VERSION_ARB: 159bafefccff8e9a56b797b988f9a5d7d72e2d51b9aBrian Paul if (ctx->Extensions.ARB_shading_language_120) 160bafefccff8e9a56b797b988f9a5d7d72e2d51b9aBrian Paul return (const GLubyte *) "1.20"; 161bafefccff8e9a56b797b988f9a5d7d72e2d51b9aBrian Paul else if (ctx->Extensions.ARB_shading_language_100) 162bafefccff8e9a56b797b988f9a5d7d72e2d51b9aBrian Paul return (const GLubyte *) "1.10"; 1636acf1e93a291511cfb20b0e2aeda6e71ceb62a62Michal Krol goto error; 1641a5fecb4d6975418da055891f6899a9f4aaa0b31Michal Krol#endif 165169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul#if FEATURE_NV_fragment_program || FEATURE_ARB_fragment_program || \ 166169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul FEATURE_NV_vertex_program || FEATURE_ARB_vertex_program 167169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_PROGRAM_ERROR_STRING_NV: 168169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul if (ctx->Extensions.NV_fragment_program || 169169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul ctx->Extensions.ARB_fragment_program || 170169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul ctx->Extensions.NV_vertex_program || 171169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul ctx->Extensions.ARB_vertex_program) { 172169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul return (const GLubyte *) ctx->Program.ErrorString; 173169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul } 174169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul /* FALL-THROUGH */ 1756acf1e93a291511cfb20b0e2aeda6e71ceb62a62Michal Krol#endif 176365582dd6f632aafbc1c817aa57926d679bb2efcMichal Krol#if FEATURE_ARB_shading_language_100 1771a5fecb4d6975418da055891f6899a9f4aaa0b31Michal Krol error: 178365582dd6f632aafbc1c817aa57926d679bb2efcMichal Krol#endif 179169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul default: 180169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glGetString" ); 181169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul return (const GLubyte *) 0; 182169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul } 183169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul} 184169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 185169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 186169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul/** 187169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Return pointer-valued state, such as a vertex array pointer. 188169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 189169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * \param pname names state to be queried 190169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * \param params returns the pointer value 191169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 192169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * \sa glGetPointerv(). 193169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 194169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Tries to get the specified pointer via dd_function_table::GetPointerv, 195169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * otherwise gets the specified pointer from the current context. 196169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul */ 197169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paulvoid GLAPIENTRY 198169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul_mesa_GetPointerv( GLenum pname, GLvoid **params ) 199169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul{ 200169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul GET_CURRENT_CONTEXT(ctx); 201169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul const GLuint clientUnit = ctx->Array.ActiveTexture; 202169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul ASSERT_OUTSIDE_BEGIN_END(ctx); 203169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 204169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul if (!params) 205169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul return; 206169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 207169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul if (MESA_VERBOSE & VERBOSE_API) 208169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul _mesa_debug(ctx, "glGetPointerv %s\n", _mesa_lookup_enum_by_nr(pname)); 209169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 210169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul if (ctx->Driver.GetPointerv 211169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul && (*ctx->Driver.GetPointerv)(ctx, pname, params)) 212169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul return; 213169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 214169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul switch (pname) { 215169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_VERTEX_ARRAY_POINTER: 216ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick *params = (GLvoid *) ctx->Array.ArrayObj->Vertex.Ptr; 217169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 218169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_NORMAL_ARRAY_POINTER: 219ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick *params = (GLvoid *) ctx->Array.ArrayObj->Normal.Ptr; 220169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 221169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_COLOR_ARRAY_POINTER: 222ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick *params = (GLvoid *) ctx->Array.ArrayObj->Color.Ptr; 223169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 224169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_SECONDARY_COLOR_ARRAY_POINTER_EXT: 225ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick *params = (GLvoid *) ctx->Array.ArrayObj->SecondaryColor.Ptr; 226169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 227169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_FOG_COORDINATE_ARRAY_POINTER_EXT: 228ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick *params = (GLvoid *) ctx->Array.ArrayObj->FogCoord.Ptr; 229169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 230169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_INDEX_ARRAY_POINTER: 231ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick *params = (GLvoid *) ctx->Array.ArrayObj->Index.Ptr; 232169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 233169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_TEXTURE_COORD_ARRAY_POINTER: 234ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick *params = (GLvoid *) ctx->Array.ArrayObj->TexCoord[clientUnit].Ptr; 235169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 236169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_EDGE_FLAG_ARRAY_POINTER: 237ee34e6ef716bb630440299ac1efbc2055ef09ffdIan Romanick *params = (GLvoid *) ctx->Array.ArrayObj->EdgeFlag.Ptr; 238169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 239169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_FEEDBACK_BUFFER_POINTER: 240169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul *params = ctx->Feedback.Buffer; 241169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 242169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul case GL_SELECTION_BUFFER_POINTER: 243169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul *params = ctx->Select.Buffer; 244169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul break; 245c3d61d378574878deedb44d84f506ca23e66c6caChia-I Wu#if FEATURE_point_size_array 246c3d61d378574878deedb44d84f506ca23e66c6caChia-I Wu case GL_POINT_SIZE_ARRAY_POINTER_OES: 247c3d61d378574878deedb44d84f506ca23e66c6caChia-I Wu *params = (GLvoid *) ctx->Array.ArrayObj->PointSize.Ptr; 248c3d61d378574878deedb44d84f506ca23e66c6caChia-I Wu break; 249c3d61d378574878deedb44d84f506ca23e66c6caChia-I Wu#endif 250169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul default: 251169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul _mesa_error( ctx, GL_INVALID_ENUM, "glGetPointerv" ); 252169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul return; 253169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul } 254169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul} 255169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 256169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 257169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul/** 258169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Returns the current GL error code, or GL_NO_ERROR. 259169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * \return current error code 260169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * 261169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul * Returns __GLcontextRec::ErrorValue. 262169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul */ 263169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian PaulGLenum GLAPIENTRY 264169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul_mesa_GetError( void ) 265169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul{ 266169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul GET_CURRENT_CONTEXT(ctx); 267169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul GLenum e = ctx->ErrorValue; 268169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0); 269169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 270169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul if (MESA_VERBOSE & VERBOSE_API) 271169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul _mesa_debug(ctx, "glGetError <-- %s\n", _mesa_lookup_enum_by_nr(e)); 272169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul 273169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul ctx->ErrorValue = (GLenum) GL_NO_ERROR; 274def77160d69dbb0a333ea3f9263e661f8557a7ecBrian Paul ctx->ErrorDebugCount = 0; 275169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul return e; 276169a723d2ba90f91e3c16f7e186d0ed238da9a65Brian Paul} 277