1126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul/* 2126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * Mesa 3-D graphics library 3126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * Version: 7.8 4126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * 5126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 69b858186988083918483b00ca8a14a5d36787c82Vinson Lee * Copyright (C) 2010 VMware, Inc. All Rights Reserved. 7126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * 8126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * Permission is hereby granted, free of charge, to any person obtaining a 9126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * copy of this software and associated documentation files (the "Software"), 10126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * to deal in the Software without restriction, including without limitation 11126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * and/or sell copies of the Software, and to permit persons to whom the 13126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * Software is furnished to do so, subject to the following conditions: 14126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * 15126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * The above copyright notice and this permission notice shall be included 16126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * in all copies or substantial portions of the Software. 17126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * 18126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 22126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul */ 25126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul 26126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul 27126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul/** 28126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * No-op dispatch table. 29126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * 30126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * This file defines a special dispatch table which is loaded with no-op 31126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * functions. 32126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * 33126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * When there's no current rendering context, calling a GL function like 34126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * glBegin() is a no-op. Apps should never normally do this. So as a 35126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * debugging aid, each of the no-op functions will emit a warning to 36126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul * stderr if the MESA_DEBUG or LIBGL_DEBUG env var is set. 37126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul */ 38126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul 39126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul 40126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul 41e607b67ebc0d15f6709fc8f9c79afeeda8ac1031Chia-I Wu#include "glapi/glapi_priv.h" 42126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul 43f1381880a8e0e0cdd96c4c725ff35a28b250b09dChia-I Wu 44f1381880a8e0e0cdd96c4c725ff35a28b250b09dChia-I Wuvoid 45760451baaec42bced6ade5026546ed3759495d70Chia-I Wu_glapi_noop_enable_warnings(unsigned char enable) 46f1381880a8e0e0cdd96c4c725ff35a28b250b09dChia-I Wu{ 47f1381880a8e0e0cdd96c4c725ff35a28b250b09dChia-I Wu} 48f1381880a8e0e0cdd96c4c725ff35a28b250b09dChia-I Wu 49f1381880a8e0e0cdd96c4c725ff35a28b250b09dChia-I Wuvoid 50f1381880a8e0e0cdd96c4c725ff35a28b250b09dChia-I Wu_glapi_set_warning_func(_glapi_proc func) 51f1381880a8e0e0cdd96c4c725ff35a28b250b09dChia-I Wu{ 52f1381880a8e0e0cdd96c4c725ff35a28b250b09dChia-I Wu} 53f1381880a8e0e0cdd96c4c725ff35a28b250b09dChia-I Wu 54efd73f72d8f34a40d6a1cd279fffa48dc13b6e5bJosé Fonseca/* 55efd73f72d8f34a40d6a1cd279fffa48dc13b6e5bJosé Fonseca * When GLAPIENTRY is __stdcall (i.e. Windows), the stack is popped by the 56efd73f72d8f34a40d6a1cd279fffa48dc13b6e5bJosé Fonseca * callee making the number/type of arguments significant. 57efd73f72d8f34a40d6a1cd279fffa48dc13b6e5bJosé Fonseca */ 58efd73f72d8f34a40d6a1cd279fffa48dc13b6e5bJosé Fonseca#if defined(_WIN32) || defined(DEBUG) 59126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul 60e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul/** 61e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul * Called by each of the no-op GL entrypoints. 62126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul */ 63126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paulstatic int 64e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian PaulWarn(const char *func) 65126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul{ 66efd73f72d8f34a40d6a1cd279fffa48dc13b6e5bJosé Fonseca#if defined(DEBUG) && !defined(_WIN32_WCE) 67e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul if (getenv("MESA_DEBUG") || getenv("LIBGL_DEBUG")) { 68e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul fprintf(stderr, "GL User Error: gl%s called without a rendering context\n", 69e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul func); 70126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul } 71126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul#endif 72e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul return 0; 73e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul} 74e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul 75e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul 76e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul/** 77e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul * This is called if the user somehow calls an unassigned GL dispatch function. 78e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul */ 79e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paulstatic GLint 80e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian PaulNoOpUnused(void) 81e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul{ 82e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul return Warn(" function"); 83126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul} 84126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul 85e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul/* 86e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul * Defines for the glapitemp.h functions. 87e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul */ 88126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul#define KEYWORD1 static 89126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul#define KEYWORD1_ALT static 90126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul#define KEYWORD2 GLAPIENTRY 91126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul#define NAME(func) NoOp##func 92e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul#define DISPATCH(func, args, msg) Warn(#func); 93e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul#define RETURN_DISPATCH(func, args, msg) Warn(#func); return 0 94126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul 95126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul 96e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul/* 97e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul * Defines for the table of no-op entry points. 98e4f168a6f4911a096be97d2e83ef8ad9c5862ec0Brian Paul */ 99126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul#define TABLE_ENTRY(name) (_glapi_proc) NoOp##name 100da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg 101da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg#else 102da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg 10359258498dc6fa51573b176d071644bd3e750b5acBrian Paulstatic int 104da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian HøgsbergNoOpGeneric(void) 105da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg{ 106da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg#if !defined(_WIN32_WCE) 107da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg if (getenv("MESA_DEBUG") || getenv("LIBGL_DEBUG")) { 108da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg fprintf(stderr, "GL User Error: calling GL function without a rendering context\n"); 109da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg } 110da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg#endif 11159258498dc6fa51573b176d071644bd3e750b5acBrian Paul return 0; 112da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg} 113da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg 114da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg#define TABLE_ENTRY(name) (_glapi_proc) NoOpGeneric 115da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg 116da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg#endif 117da73c4d5fef6ad20d41de9a4e2d1d86b0b83fd8bKristian Høgsberg 118126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul#define DISPATCH_TABLE_NAME __glapi_noop_table 119126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul#define UNUSED_TABLE_NAME __unused_noop_functions 120126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul 121126aff18aaf7512dfe07e4fd43e21a2ecd3a96ffBrian Paul#include "glapi/glapitemp.h" 122