glheader.h revision 47b0bc1a36f4a6c3af1c9c76ee96e97c29376d71
1/**
2 * \file glheader.h
3 * Top-most include file.
4 *
5 * This is the top-most include file of the Mesa sources.
6 * It includes gl.h and all system headers which are needed.
7 * Other Mesa source files should \e not directly include any system
8 * headers.  This allows Mesa to be integrated into XFree86 and
9 * allows system-dependent hacks/workarounds to be collected in one place.
10 *
11 * \note Actually, a lot of system-dependent stuff is now in imports.[ch].
12 *
13 * If you touch this file, everything gets recompiled!
14 *
15 * This file should be included before any other header in the .c files.
16 *
17 * Put compiler/OS/assembly pragmas and macros here to avoid
18 * cluttering other source files.
19 */
20
21/*
22 * Mesa 3-D graphics library
23 * Version:  5.1
24 *
25 * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
26 *
27 * Permission is hereby granted, free of charge, to any person obtaining a
28 * copy of this software and associated documentation files (the "Software"),
29 * to deal in the Software without restriction, including without limitation
30 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
31 * and/or sell copies of the Software, and to permit persons to whom the
32 * Software is furnished to do so, subject to the following conditions:
33 *
34 * The above copyright notice and this permission notice shall be included
35 * in all copies or substantial portions of the Software.
36 *
37 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
38 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
39 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
40 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
41 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
42 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
43 */
44
45
46#ifndef GLHEADER_H
47#define GLHEADER_H
48
49
50#if defined(XFree86LOADER) && defined(IN_MODULE)
51#include "xf86_ansic.h"
52#else
53#include <assert.h>
54#include <ctype.h>
55/* If we can use Compaq's Fast Math Library on Alpha */
56#if defined(__alpha__) && defined(CCPML)
57#include <cpml.h>
58#else
59#include <math.h>
60#endif
61#include <limits.h>
62#include <stdlib.h>
63#include <stdio.h>
64#include <string.h>
65#if defined(__linux__) && defined(__i386__)
66#include <fpu_control.h>
67#endif
68#endif
69#include <float.h>
70#include <stdarg.h>
71
72
73#ifdef HAVE_CONFIG_H
74#include "conf.h"
75#endif
76
77
78#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) && !defined(BUILD_FOR_SNAP)
79#	define __WIN32__
80#	define finite _finite
81#endif
82
83#if defined(__WATCOMC__)
84#	define finite _finite
85#endif
86
87#if !defined(OPENSTEP) && (defined(__WIN32__) && !defined(__CYGWIN__)) && !defined(BUILD_FOR_SNAP)
88#  pragma warning( disable : 4068 ) /* unknown pragma */
89#  pragma warning( disable : 4710 ) /* function 'foo' not inlined */
90#  pragma warning( disable : 4711 ) /* function 'foo' selected for automatic inline expansion */
91#  pragma warning( disable : 4127 ) /* conditional expression is constant */
92#  if defined(MESA_MINWARN)
93#    pragma warning( disable : 4244 ) /* '=' : conversion from 'const double ' to 'float ', possible loss of data */
94#    pragma warning( disable : 4018 ) /* '<' : signed/unsigned mismatch */
95#    pragma warning( disable : 4305 ) /* '=' : truncation from 'const double ' to 'float ' */
96#    pragma warning( disable : 4550 ) /* 'function' undefined; assuming extern returning int */
97#    pragma warning( disable : 4761 ) /* integral size mismatch in argument; conversion supplied */
98#  endif
99#  if defined(_MSC_VER) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */
100#    define GLAPI __declspec(dllexport)
101#    define WGLAPI __declspec(dllexport)
102#  elif defined(_MSC_VER) && defined(_DLL) /* tag specifying we're building for DLL runtime support */
103#    define GLAPI __declspec(dllimport)
104#    define WGLAPI __declspec(dllimport)
105#  else /* for use with static link lib build of Win32 edition only */
106#    define GLAPI extern
107#    define WGLAPI __declspec(dllimport)
108#  endif /* _STATIC_MESA support */
109#  define GLAPIENTRY __stdcall
110#  define GLAPIENTRYP __stdcall *
111#  define GLCALLBACK __stdcall
112#  define GLCALLBACKP __stdcall *
113#  if defined(__CYGWIN__)
114#    define GLCALLBACKPCAST *
115#  else
116#    define GLCALLBACKPCAST __stdcall *
117#  endif
118#  define GLWINAPI __stdcall
119#  define GLWINAPIV __cdecl
120#elif !defined(BUILD_FOR_SNAP)
121/* non-Windows compilation */
122#  define GLAPI extern
123#  define GLAPIENTRY
124#  define GLAPIENTRYP *
125#  define GLCALLBACK
126#  define GLCALLBACKP *
127#  define GLCALLBACKPCAST *
128#  define GLWINAPI
129#  define GLWINAPIV
130#endif /* WIN32 / CYGWIN bracket */
131
132/* compatibility guard so we don't need to change client code */
133
134#if defined(_WIN32) && !defined(_WINDEF_) && !defined(_WINDEF_H) && !defined(_GNU_H_WINDOWS32_BASE) && !defined(OPENSTEP) && !defined(__CYGWIN__) && !defined(BUILD_FOR_SNAP)
135#if 0
136#	define CALLBACK GLCALLBACK
137typedef void *HGLRC;
138typedef void *HDC;
139#endif
140typedef int (GLAPIENTRY *PROC)();
141typedef unsigned long COLORREF;
142#endif
143
144
145/* Make sure we include glext.h from gl.h */
146#define GL_GLEXT_PROTOTYPES
147
148
149#if defined(_WIN32) && !defined(_WINGDI_) && !defined(_WINGDI_H) && !defined(_GNU_H_WINDOWS32_DEFINES) && !defined(OPENSTEP) && !defined(BUILD_FOR_SNAP)
150#	define WGL_FONT_LINES      0
151#	define WGL_FONT_POLYGONS   1
152#ifndef _GNU_H_WINDOWS32_FUNCTIONS
153#	ifdef UNICODE
154#		define wglUseFontBitmaps  wglUseFontBitmapsW
155#		define wglUseFontOutlines  wglUseFontOutlinesW
156#	else
157#		define wglUseFontBitmaps  wglUseFontBitmapsA
158#		define wglUseFontOutlines  wglUseFontOutlinesA
159#	endif /* !UNICODE */
160#endif /* _GNU_H_WINDOWS32_FUNCTIONS */
161typedef struct tagLAYERPLANEDESCRIPTOR LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR;
162typedef struct _GLYPHMETRICSFLOAT GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT;
163typedef struct tagPIXELFORMATDESCRIPTOR PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, *LPPIXELFORMATDESCRIPTOR;
164#if !defined(GLX_USE_MESA)
165#include <gl/mesa_wgl.h>
166#endif
167#endif
168
169
170/*
171 * Either define MESA_BIG_ENDIAN or MESA_LITTLE_ENDIAN.
172 * Do not use them unless absolutely necessary!
173 * Try to use a runtime test instead.
174 * For now, only used by some DRI hardware drivers for color/texel packing.
175 */
176#if defined(BYTE_ORDER) && defined(BIG_ENDIAN) && BYTE_ORDER == BIG_ENDIAN
177#if defined(__linux__)
178#include <byteswap.h>
179#define CPU_TO_LE32( x )	bswap_32( x )
180#else /*__linux__*/
181#define CPU_TO_LE32( x )	( x )  /* fix me for non-Linux big-endian! */
182#endif /*__linux__*/
183#define MESA_BIG_ENDIAN 1
184#else
185#define CPU_TO_LE32( x )	( x )
186#define MESA_LITTLE_ENDIAN 1
187#endif
188#define LE32_TO_CPU( x )	CPU_TO_LE32( x )
189
190
191/* This is a macro on IRIX */
192#ifdef _P
193#undef _P
194#endif
195
196
197
198#include "GL/gl.h"
199#include "GL/glext.h"
200
201
202#ifndef CAPI
203#if defined(WIN32) && !defined(BUILD_FOR_SNAP)
204#define CAPI _cdecl
205#else
206#define CAPI
207#endif
208#endif
209#include <GL/internal/glcore.h>
210
211
212
213/* Disable unreachable code warnings for Watcom C++ */
214#ifdef	__WATCOMC__
215#pragma disable_message(201)
216#endif
217
218
219/* Turn off macro checking systems used by other libraries */
220#ifdef CHECK
221#undef CHECK
222#endif
223
224
225/* Create a macro so that asm functions can be linked into compilers other
226 * than GNU C
227 */
228#ifndef _ASMAPI
229#if !defined( __GNUC__ ) && !defined( VMS )
230#define _ASMAPI __cdecl
231#else
232#define _ASMAPI
233#endif
234#ifdef	PTR_DECL_IN_FRONT
235#define	_ASMAPIP * _ASMAPI
236#else
237#define	_ASMAPIP _ASMAPI *
238#endif
239#endif
240
241#ifdef USE_X86_ASM
242#define _NORMAPI _ASMAPI
243#define _NORMAPIP _ASMAPIP
244#else
245#define _NORMAPI
246#define _NORMAPIP *
247#endif
248
249
250/* Function inlining */
251#if defined(__GNUC__)
252#  define INLINE __inline__
253#elif defined(__MSC__)
254#  define INLINE __inline
255#elif defined(_MSC_VER)
256#  define INLINE __inline
257#elif defined(__ICL)
258#  define INLINE __inline
259#elif defined(__WATCOMC__) && (__WATCOMC__ >= 1100)
260#  define INLINE __inline
261#else
262#  define INLINE
263#endif
264
265
266/* Some compilers don't like some of Mesa's const usage */
267#ifdef NO_CONST
268#  define CONST
269#else
270#  define CONST const
271#endif
272
273
274#if defined(BUILD_FOR_SNAP) && defined(CHECKED)
275#  define ASSERT(X)   _CHECK(X)
276#elif defined(DEBUG)
277#  define ASSERT(X)   assert(X)
278#else
279#  define ASSERT(X)
280#endif
281
282
283/**
284 * Sometimes we treat GLfloats as GLints.  On x86 systems, moving a float
285 * as a int (thereby using integer registers instead of FP registers) is
286 * a performance win.  Typically, this can be done with ordinary casts.
287 * But with gcc's -fstrict-aliasing flag (which defaults to on in gcc 3.0)
288 * these casts generate warnings.
289 * The following union typedef is used to solve that.
290 */
291typedef union { GLfloat f; GLint i; } fi_type;
292
293
294#include "config.h"
295
296#endif /* GLHEADER_H */
297