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