aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/llwindow
diff options
context:
space:
mode:
Diffstat (limited to 'linden/indra/llwindow')
-rw-r--r--linden/indra/llwindow/CMakeLists.txt147
-rw-r--r--linden/indra/llwindow/GL/glh_extensions.h207
-rw-r--r--linden/indra/llwindow/GL/glh_genext.h1671
-rw-r--r--linden/indra/llwindow/files.darwin.lst2
-rw-r--r--linden/indra/llwindow/files.linux.lst3
-rw-r--r--linden/indra/llwindow/files.lst5
-rw-r--r--linden/indra/llwindow/files.sunos5.lst3
-rw-r--r--linden/indra/llwindow/files.win32.lst2
-rw-r--r--linden/indra/llwindow/lldxhardware.cpp4
-rw-r--r--linden/indra/llwindow/lldxhardware.h4
-rw-r--r--linden/indra/llwindow/llgl.cpp1734
-rw-r--r--linden/indra/llwindow/llgl.h377
-rw-r--r--linden/indra/llwindow/llglheaders.h597
-rw-r--r--linden/indra/llwindow/llglstates.h302
-rw-r--r--linden/indra/llwindow/llgltypes.h44
-rw-r--r--linden/indra/llwindow/llkeyboard.cpp27
-rw-r--r--linden/indra/llwindow/llkeyboard.h12
-rw-r--r--linden/indra/llwindow/lllogitechlcd.cpp296
-rw-r--r--linden/indra/llwindow/lllogitechlcd.h135
-rw-r--r--linden/indra/llwindow/llmousehandler.h11
-rw-r--r--linden/indra/llwindow/llwindow.cpp25
-rw-r--r--linden/indra/llwindow/llwindow.h32
-rw-r--r--linden/indra/llwindow/llwindow.vcproj281
-rw-r--r--linden/indra/llwindow/llwindow_vc8.vcproj395
-rw-r--r--linden/indra/llwindow/llwindow_vc9.vcproj398
-rw-r--r--linden/indra/llwindow/llwindowheadless.cpp2
-rw-r--r--linden/indra/llwindow/llwindowheadless.h10
-rw-r--r--linden/indra/llwindow/llwindowmacosx.cpp166
-rw-r--r--linden/indra/llwindow/llwindowmacosx.h23
-rw-r--r--linden/indra/llwindow/llwindowmesaheadless.cpp7
-rw-r--r--linden/indra/llwindow/llwindowmesaheadless.h10
-rw-r--r--linden/indra/llwindow/llwindowsdl.cpp169
-rw-r--r--linden/indra/llwindow/llwindowsdl.h17
-rw-r--r--linden/indra/llwindow/llwindowwin32.cpp154
-rw-r--r--linden/indra/llwindow/llwindowwin32.h13
35 files changed, 2297 insertions, 4988 deletions
diff --git a/linden/indra/llwindow/CMakeLists.txt b/linden/indra/llwindow/CMakeLists.txt
new file mode 100644
index 0000000..95e315f
--- /dev/null
+++ b/linden/indra/llwindow/CMakeLists.txt
@@ -0,0 +1,147 @@
1# -*- cmake -*-
2#
3# Compared to other libraries, compiling this one is a mess. The
4# reason is that we have several source files that have two different
5# sets of behaviour, depending on whether they're intended to be part
6# of the viewer or the map server.
7#
8# Unfortunately, the affected code is a rat's nest of #ifdefs, so it's
9# easier to play compilation tricks than to actually fix the problem.
10
11project(llwindow)
12
13include(00-Common)
14include(DirectX)
15include(LLCommon)
16include(LLImage)
17include(LLMath)
18include(LLRender)
19include(LLVFS)
20include(LLWindow)
21include(LLXML)
22include(Mozlib)
23include(UI)
24
25include_directories(
26 ${LLCOMMON_INCLUDE_DIRS}
27 ${LLIMAGE_INCLUDE_DIRS}
28 ${LLMATH_INCLUDE_DIRS}
29 ${LLRENDER_INCLUDE_DIRS}
30 ${LLVFS_INCLUDE_DIRS}
31 ${LLWINDOW_INCLUDE_DIRS}
32 ${LLXML_INCLUDE_DIRS}
33 )
34
35set(llwindow_SOURCE_FILES
36 llkeyboard.cpp
37 llwindowheadless.cpp
38 )
39
40set(llwindows_HEADER_FILES
41 CMakeLists.txt
42
43 llkeyboard.h
44 llwindowheadless.h
45 )
46
47set(viewer_SOURCE_FILES
48 llwindow.cpp
49 )
50
51set(viewer_HEADER_FILES
52 llwindow.h
53 llpreeditor.h
54 llmousehandler.h
55 )
56
57if (DARWIN)
58 list(APPEND llwindow_SOURCE_FILES
59 llkeyboardmacosx.cpp
60 llwindowmacosx.cpp
61 llwindowmacosx-objc.mm
62 )
63 list(APPEND llwindow_HEADER_FILES
64 llkeyboardmacosx.h
65 llwindowmacosx.h
66 llwindowmacosx-objc.h
67 )
68
69 # We use a bunch of deprecated system APIs.
70 set_source_files_properties(
71 llkeyboardmacosx.cpp
72 llwindowmacosx.cpp
73 PROPERTIES
74 COMPILE_FLAGS "-Wno-deprecated-declarations -fpascal-strings"
75 )
76endif (DARWIN)
77
78if (LINUX)
79 list(APPEND viewer_SOURCE_FILES
80 llkeyboardsdl.cpp
81 llwindowsdl.cpp
82 )
83 list(APPEND viewer_HEADER_FILES
84 llkeyboardsdl.h
85 llwindowsdl.h
86 )
87endif (LINUX)
88
89if (WINDOWS)
90 list(APPEND llwindow_SOURCE_FILES
91 llwindowwin32.cpp
92 lldxhardware.cpp
93 llkeyboardwin32.cpp
94 )
95 list(APPEND llwindow_HEADER_FILES
96 llwindowwin32.h
97 lldxhardware.h
98 llkeyboardwin32.h
99 )
100endif (WINDOWS)
101
102if (SOLARIS)
103 list(APPEND llwindow_SOURCE_FILES
104 llwindowsolaris.cpp
105 )
106 list(APPEND llwindow_HEADER_FILES
107 llwindowsolaris.h
108 )
109endif (SOLARIS)
110
111set_source_files_properties(${llwindow_HEADER_FILES}
112 PROPERTIES HEADER_FILE_ONLY TRUE)
113
114if (SERVER AND NOT WINDOWS AND NOT DARWIN)
115 set(server_SOURCE_FILES
116 llwindowmesaheadless.cpp
117 )
118 set(server_HEADER_FILES
119 llwindowmesaheadless.h
120 )
121 copy_server_sources(
122 llwindow
123 )
124
125
126 set_source_files_properties(
127 ${server_SOURCE_FILES}
128 PROPERTIES
129 COMPILE_FLAGS "-DLL_MESA=1 -DLL_MESA_HEADLESS=1"
130 )
131 add_library (llwindowheadless
132 ${llwindow_SOURCE_FILES}
133 ${server_SOURCE_FILES}
134 )
135endif (SERVER AND NOT WINDOWS AND NOT DARWIN)
136
137if (llwindow_HEADER_FILES)
138 list(APPEND llwindow_SOURCE_FILES ${llwindow_HEADER_FILES})
139endif (llwindow_HEADER_FILES)
140 list(APPEND viewer_SOURCE_FILES ${viewer_HEADER_FILES})
141
142if (VIEWER)
143 add_library (llwindow
144 ${llwindow_SOURCE_FILES}
145 ${viewer_SOURCE_FILES}
146 )
147endif (VIEWER)
diff --git a/linden/indra/llwindow/GL/glh_extensions.h b/linden/indra/llwindow/GL/glh_extensions.h
new file mode 100644
index 0000000..b936b5d
--- /dev/null
+++ b/linden/indra/llwindow/GL/glh_extensions.h
@@ -0,0 +1,207 @@
1/*
2 * glh_extensions.h
3 * From nVidia Corporation, downloaded 2006-12-18 from:
4 * http://developer.nvidia.com/attach/8196
5 * ("NVParse Library with Source (.zip) (2390 KB)")
6 *
7 * License (quoted from license_info.txt in aforementioned file):
8 * "The files bison.exe, bison.simple, and flex.exe are covered by
9 * the GPL. All other files in this distribution can be used however
10 * you want."
11 */
12
13#ifndef GLH_EXTENSIONS
14#define GLH_EXTENSIONS
15
16#include <string.h>
17#include <stdio.h>
18
19#ifdef _WIN32
20# include <windows.h>
21#endif
22
23#ifndef __APPLE__
24#include <GL/gl.h>
25#endif
26
27#ifdef _WIN32
28# include "GL/wglext.h"
29#endif
30
31#define CHECK_MEMORY(ptr) \
32 if (NULL == ptr) { \
33 printf("Error allocating memory in file %s, line %d\n", __FILE__, __LINE__); \
34 exit(-1); \
35 }
36
37#ifdef GLH_EXT_SINGLE_FILE
38# define GLH_EXTENSIONS_SINGLE_FILE // have to do this because glh_genext.h unsets GLH_EXT_SINGLE_FILE
39#endif
40
41#include "glh_genext.h"
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
47#ifdef GLH_EXTENSIONS_SINGLE_FILE
48
49class GLHExts
50{
51public:
52 GLHExts()
53 {
54 mSysExts = NULL;
55// mUnsupportedExts = NULL;
56 }
57 ~GLHExts()
58 {
59 if (mSysExts)
60 {
61 free(mSysExts);
62 }
63// if (mUnsupportedExts)
64// {
65// free(mUnsupportedExts);
66// }
67 }
68 char *mSysExts;
69// char *mUnsupportedExts;
70};
71
72GLHExts gGLHExts;
73
74static int ExtensionExists(const char* extName, const char* sysExts)
75{
76 char *padExtName = (char*)malloc(strlen(extName) + 2);
77 strcat(strcpy(padExtName, extName), " ");
78
79 if (0 == strcmp(extName, "GL_VERSION_1_2")) {
80 const char *version = (const char*)glGetString(GL_VERSION);
81 if (strstr(version, "1.0") == version || strstr(version, "1.1") == version) {
82 return FALSE;
83 } else {
84 return TRUE;
85 }
86 }
87 if (strstr(sysExts, padExtName)) {
88 free(padExtName);
89 return TRUE;
90 } else {
91 free(padExtName);
92 return FALSE;
93 }
94}
95
96static const char* EatWhiteSpace(const char *str)
97{
98 for (; *str && (' ' == *str || '\t' == *str || '\n' == *str); str++);
99 return str;
100}
101
102static const char* EatNonWhiteSpace(const char *str)
103{
104 for (; *str && (' ' != *str && '\t' != *str && '\n' != *str); str++);
105 return str;
106}
107
108
109int glh_init_extensions(const char *origReqExts)
110{
111 // Length of requested extensions string
112 unsigned reqExtsLen;
113 char *reqExts;
114 // Ptr for individual extensions within reqExts
115 char *reqExt;
116 int success = TRUE;
117
118 // build space-padded extension string
119 if (NULL == gGLHExts.mSysExts) {
120 const char *extensions = (const char*)glGetString(GL_EXTENSIONS);
121 int sysExtsLen = (int)strlen(extensions);
122 const char *winsys_extensions = 0;
123 int winsysExtsLen = 0;
124#ifdef _WIN32
125 {
126 PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB = 0;
127 wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)wglGetProcAddress("wglGetExtensionsStringARB");
128 if(wglGetExtensionsStringARB)
129 {
130 winsys_extensions = wglGetExtensionsStringARB(wglGetCurrentDC());
131 winsysExtsLen = (S32)strlen(winsys_extensions);
132 }
133 }
134#endif
135 // Add 2 bytes, one for padding space, one for terminating NULL
136 gGLHExts.mSysExts = (char*)malloc(sysExtsLen + winsysExtsLen + 3);
137 CHECK_MEMORY(gGLHExts.mSysExts);
138 strcpy(gGLHExts.mSysExts, extensions);
139 gGLHExts.mSysExts[sysExtsLen] = ' ';
140 gGLHExts.mSysExts[sysExtsLen + 1] = 0;
141 if (winsysExtsLen)
142 {
143 strcat(gGLHExts.mSysExts, winsys_extensions);
144 }
145 gGLHExts.mSysExts[sysExtsLen + 1 + winsysExtsLen] = ' ';
146 gGLHExts.mSysExts[sysExtsLen + 1 + winsysExtsLen + 1] = 0;
147 }
148
149 if (NULL == origReqExts)
150 {
151 return TRUE;
152 }
153 reqExts = strdup(origReqExts);
154 reqExtsLen = (S32)strlen(reqExts);
155 /*
156 if (NULL == gGLHExts.mUnsupportedExts)
157 {
158 gGLHExts.mUnsupportedExts = (char*)malloc(reqExtsLen + 1);
159 }
160 else if (reqExtsLen > strlen(gGLHExts.mUnsupportedExts))
161 {
162 gGLHExts.mUnsupportedExts = (char*)realloc(gGLHExts.mUnsupportedExts, reqExtsLen + 1);
163 }
164 CHECK_MEMORY(gGLHExts.mUnsupportedExts);
165 *gGLHExts.mUnsupportedExts = 0;
166 */
167
168 // Parse requested extension list
169 for (reqExt = reqExts;
170 (reqExt = (char*)EatWhiteSpace(reqExt)) && *reqExt;
171 reqExt = (char*)EatNonWhiteSpace(reqExt))
172 {
173 char *extEnd = (char*)EatNonWhiteSpace(reqExt);
174 char saveChar = *extEnd;
175 *extEnd = (char)0;
176
177 if (!ExtensionExists(reqExt, gGLHExts.mSysExts) ||
178 !glh_init_extension(reqExt)) {
179 /*
180 // add reqExt to end of unsupportedExts
181 strcat(gGLHExts.mUnsupportedExts, reqExt);
182 strcat(gGLHExts.mUnsupportedExts, " ");
183 */
184 success = FALSE;
185 }
186 *extEnd = saveChar;
187 }
188 free(reqExts);
189 return success;
190}
191
192const char* glh_get_unsupported_extensions()
193{
194 return "";
195// return (const char*)gGLHExts.mUnsupportedExts;
196}
197
198#else
199int glh_init_extensions(const char *origReqExts);
200const char* glh_get_unsupported_extensions();
201#endif /* GLH_EXT_SINGLE_FILE */
202
203#ifdef __cplusplus
204}
205#endif
206
207#endif /* GLH_EXTENSIONS */
diff --git a/linden/indra/llwindow/GL/glh_genext.h b/linden/indra/llwindow/GL/glh_genext.h
new file mode 100644
index 0000000..8d42025
--- /dev/null
+++ b/linden/indra/llwindow/GL/glh_genext.h
@@ -0,0 +1,1671 @@
1/*
2 * glh_genext.h
3 * From nVidia Corporation, downloaded 2006-12-18 from:
4 * http://developer.nvidia.com/attach/8196
5 * ("NVParse Library with Source (.zip) (2390 KB)")
6 *
7 * License (quoted from license_info.txt in aforementioned file):
8 * "The files bison.exe, bison.simple, and flex.exe are covered by
9 * the GPL. All other files in this distribution can be used however
10 * you want."
11 */
12
13/* File generated by extgen.cpp -- do not modify */
14#ifndef GLH_GENEXT_H
15#define GLH_GENEXT_H
16
17// MBW -- None of this is necessary on Mac OS.
18#ifndef __APPLE__
19
20#include <GL/gl.h>
21#include <GL/glext.h>
22
23#ifdef _WIN32 /* supports windows, x -- need to generalize */
24# include <GL/wglext.h>
25# define GLH_EXT_GET_PROC_ADDRESS(p) wglGetProcAddress(p)
26#else if GLX_VERSION_1_3
27# include <GL/glxext.h>
28# define GLH_EXT_GET_PROC_ADDRESS(p) glXGetProcAddressARB(p)
29#endif
30
31#ifdef GLH_EXT_SINGLE_FILE
32 #define GLH_EXTERN
33 #define GLH_INITIALIZER = 0
34#else
35 #define GLH_EXTERN extern
36 #define GLH_INITIALIZER
37#endif
38
39#define GLH__PREPROCESSOR_GYMNASTICS2(a,b) a##b
40#define GLH__PREPROCESSOR_GYMNASTICS(a,b) GLH__PREPROCESSOR_GYMNASTICS2(a,b)
41
42#ifndef GLH_EXT_PREFIX
43# define GLH_EXT_NAME(a) a
44#else
45# define GLH_EXT_NAME(a) GLH__PREPROCESSOR_GYMNASTICS(GLH_EXT_PREFIX,a)
46#endif
47
48#ifndef _WIN32
49# ifndef GLH_CORE_1_2_PREFIX
50# define GLH_CORE_1_2_PREFIX _
51# endif
52#endif
53
54#ifndef GLH_CORE_1_2_PREFIX
55# define GLH_CORE_1_2_NAME(a) a
56#else
57# define GLH_CORE_1_2_NAME(a) GLH__PREPROCESSOR_GYMNASTICS(GLH_CORE_1_2_PREFIX,a)
58#endif
59
60#ifdef GL_ARB_multitexture
61 GLH_EXTERN PFNGLMULTITEXCOORD1DARBPROC GLH_EXT_NAME(glMultiTexCoord1dARB) GLH_INITIALIZER;
62 GLH_EXTERN PFNGLMULTITEXCOORD1DVARBPROC GLH_EXT_NAME(glMultiTexCoord1dvARB) GLH_INITIALIZER;
63 GLH_EXTERN PFNGLMULTITEXCOORD1FARBPROC GLH_EXT_NAME(glMultiTexCoord1fARB) GLH_INITIALIZER;
64 GLH_EXTERN PFNGLMULTITEXCOORD1FVARBPROC GLH_EXT_NAME(glMultiTexCoord1fvARB) GLH_INITIALIZER;
65 GLH_EXTERN PFNGLMULTITEXCOORD1IARBPROC GLH_EXT_NAME(glMultiTexCoord1iARB) GLH_INITIALIZER;
66 GLH_EXTERN PFNGLMULTITEXCOORD1IVARBPROC GLH_EXT_NAME(glMultiTexCoord1ivARB) GLH_INITIALIZER;
67 GLH_EXTERN PFNGLMULTITEXCOORD1SARBPROC GLH_EXT_NAME(glMultiTexCoord1sARB) GLH_INITIALIZER;
68 GLH_EXTERN PFNGLMULTITEXCOORD1SVARBPROC GLH_EXT_NAME(glMultiTexCoord1svARB) GLH_INITIALIZER;
69 GLH_EXTERN PFNGLMULTITEXCOORD2DARBPROC GLH_EXT_NAME(glMultiTexCoord2dARB) GLH_INITIALIZER;
70 GLH_EXTERN PFNGLMULTITEXCOORD2DVARBPROC GLH_EXT_NAME(glMultiTexCoord2dvARB) GLH_INITIALIZER;
71 GLH_EXTERN PFNGLMULTITEXCOORD2FARBPROC GLH_EXT_NAME(glMultiTexCoord2fARB) GLH_INITIALIZER;
72 GLH_EXTERN PFNGLMULTITEXCOORD2FVARBPROC GLH_EXT_NAME(glMultiTexCoord2fvARB) GLH_INITIALIZER;
73 GLH_EXTERN PFNGLMULTITEXCOORD2IARBPROC GLH_EXT_NAME(glMultiTexCoord2iARB) GLH_INITIALIZER;
74 GLH_EXTERN PFNGLMULTITEXCOORD2IVARBPROC GLH_EXT_NAME(glMultiTexCoord2ivARB) GLH_INITIALIZER;
75 GLH_EXTERN PFNGLMULTITEXCOORD2SARBPROC GLH_EXT_NAME(glMultiTexCoord2sARB) GLH_INITIALIZER;
76 GLH_EXTERN PFNGLMULTITEXCOORD2SVARBPROC GLH_EXT_NAME(glMultiTexCoord2svARB) GLH_INITIALIZER;
77 GLH_EXTERN PFNGLMULTITEXCOORD3DARBPROC GLH_EXT_NAME(glMultiTexCoord3dARB) GLH_INITIALIZER;
78 GLH_EXTERN PFNGLMULTITEXCOORD3DVARBPROC GLH_EXT_NAME(glMultiTexCoord3dvARB) GLH_INITIALIZER;
79 GLH_EXTERN PFNGLMULTITEXCOORD3FARBPROC GLH_EXT_NAME(glMultiTexCoord3fARB) GLH_INITIALIZER;
80 GLH_EXTERN PFNGLMULTITEXCOORD3FVARBPROC GLH_EXT_NAME(glMultiTexCoord3fvARB) GLH_INITIALIZER;
81 GLH_EXTERN PFNGLMULTITEXCOORD3IARBPROC GLH_EXT_NAME(glMultiTexCoord3iARB) GLH_INITIALIZER;
82 GLH_EXTERN PFNGLMULTITEXCOORD3IVARBPROC GLH_EXT_NAME(glMultiTexCoord3ivARB) GLH_INITIALIZER;
83 GLH_EXTERN PFNGLMULTITEXCOORD3SARBPROC GLH_EXT_NAME(glMultiTexCoord3sARB) GLH_INITIALIZER;
84 GLH_EXTERN PFNGLMULTITEXCOORD3SVARBPROC GLH_EXT_NAME(glMultiTexCoord3svARB) GLH_INITIALIZER;
85 GLH_EXTERN PFNGLMULTITEXCOORD4DARBPROC GLH_EXT_NAME(glMultiTexCoord4dARB) GLH_INITIALIZER;
86 GLH_EXTERN PFNGLMULTITEXCOORD4DVARBPROC GLH_EXT_NAME(glMultiTexCoord4dvARB) GLH_INITIALIZER;
87 GLH_EXTERN PFNGLMULTITEXCOORD4FARBPROC GLH_EXT_NAME(glMultiTexCoord4fARB) GLH_INITIALIZER;
88 GLH_EXTERN PFNGLMULTITEXCOORD4FVARBPROC GLH_EXT_NAME(glMultiTexCoord4fvARB) GLH_INITIALIZER;
89 GLH_EXTERN PFNGLMULTITEXCOORD4IARBPROC GLH_EXT_NAME(glMultiTexCoord4iARB) GLH_INITIALIZER;
90 GLH_EXTERN PFNGLMULTITEXCOORD4IVARBPROC GLH_EXT_NAME(glMultiTexCoord4ivARB) GLH_INITIALIZER;
91 GLH_EXTERN PFNGLMULTITEXCOORD4SARBPROC GLH_EXT_NAME(glMultiTexCoord4sARB) GLH_INITIALIZER;
92 GLH_EXTERN PFNGLMULTITEXCOORD4SVARBPROC GLH_EXT_NAME(glMultiTexCoord4svARB) GLH_INITIALIZER;
93 GLH_EXTERN PFNGLACTIVETEXTUREARBPROC GLH_EXT_NAME(glActiveTextureARB) GLH_INITIALIZER;
94 GLH_EXTERN PFNGLCLIENTACTIVETEXTUREARBPROC GLH_EXT_NAME(glClientActiveTextureARB) GLH_INITIALIZER;
95#endif
96
97#ifdef GL_ARB_texture_border_clamp
98#endif
99
100#ifdef GL_ARB_texture_compression
101 GLH_EXTERN PFNGLCOMPRESSEDTEXIMAGE3DARBPROC GLH_EXT_NAME(glCompressedTexImage3DARB) GLH_INITIALIZER;
102 GLH_EXTERN PFNGLCOMPRESSEDTEXIMAGE2DARBPROC GLH_EXT_NAME(glCompressedTexImage2DARB) GLH_INITIALIZER;
103 GLH_EXTERN PFNGLCOMPRESSEDTEXIMAGE1DARBPROC GLH_EXT_NAME(glCompressedTexImage1DARB) GLH_INITIALIZER;
104 GLH_EXTERN PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC GLH_EXT_NAME(glCompressedTexSubImage3DARB) GLH_INITIALIZER;
105 GLH_EXTERN PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC GLH_EXT_NAME(glCompressedTexSubImage2DARB) GLH_INITIALIZER;
106 GLH_EXTERN PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC GLH_EXT_NAME(glCompressedTexSubImage1DARB) GLH_INITIALIZER;
107 GLH_EXTERN PFNGLGETCOMPRESSEDTEXIMAGEARBPROC GLH_EXT_NAME(glGetCompressedTexImageARB) GLH_INITIALIZER;
108#endif
109
110#ifdef GL_ARB_texture_cube_map
111#endif
112
113#ifdef GL_ARB_transpose_matrix
114 GLH_EXTERN PFNGLLOADTRANSPOSEMATRIXFARBPROC GLH_EXT_NAME(glLoadTransposeMatrixfARB) GLH_INITIALIZER;
115 GLH_EXTERN PFNGLLOADTRANSPOSEMATRIXDARBPROC GLH_EXT_NAME(glLoadTransposeMatrixdARB) GLH_INITIALIZER;
116 GLH_EXTERN PFNGLMULTTRANSPOSEMATRIXFARBPROC GLH_EXT_NAME(glMultTransposeMatrixfARB) GLH_INITIALIZER;
117 GLH_EXTERN PFNGLMULTTRANSPOSEMATRIXDARBPROC GLH_EXT_NAME(glMultTransposeMatrixdARB) GLH_INITIALIZER;
118#endif
119
120#ifdef GL_ARB_vertex_program
121 GLH_EXTERN PFNGLVERTEXATTRIB1SARBPROC GLH_EXT_NAME(glVertexAttrib1sARB) GLH_INITIALIZER;
122 GLH_EXTERN PFNGLVERTEXATTRIB1FARBPROC GLH_EXT_NAME(glVertexAttrib1fARB) GLH_INITIALIZER;
123 GLH_EXTERN PFNGLVERTEXATTRIB1DARBPROC GLH_EXT_NAME(glVertexAttrib1dARB) GLH_INITIALIZER;
124 GLH_EXTERN PFNGLVERTEXATTRIB2SARBPROC GLH_EXT_NAME(glVertexAttrib2sARB) GLH_INITIALIZER;
125 GLH_EXTERN PFNGLVERTEXATTRIB2FARBPROC GLH_EXT_NAME(glVertexAttrib2fARB) GLH_INITIALIZER;
126 GLH_EXTERN PFNGLVERTEXATTRIB2DARBPROC GLH_EXT_NAME(glVertexAttrib2dARB) GLH_INITIALIZER;
127 GLH_EXTERN PFNGLVERTEXATTRIB3SARBPROC GLH_EXT_NAME(glVertexAttrib3sARB) GLH_INITIALIZER;
128 GLH_EXTERN PFNGLVERTEXATTRIB3FARBPROC GLH_EXT_NAME(glVertexAttrib3fARB) GLH_INITIALIZER;
129 GLH_EXTERN PFNGLVERTEXATTRIB3DARBPROC GLH_EXT_NAME(glVertexAttrib3dARB) GLH_INITIALIZER;
130 GLH_EXTERN PFNGLVERTEXATTRIB4SARBPROC GLH_EXT_NAME(glVertexAttrib4sARB) GLH_INITIALIZER;
131 GLH_EXTERN PFNGLVERTEXATTRIB4FARBPROC GLH_EXT_NAME(glVertexAttrib4fARB) GLH_INITIALIZER;
132 GLH_EXTERN PFNGLVERTEXATTRIB4DARBPROC GLH_EXT_NAME(glVertexAttrib4dARB) GLH_INITIALIZER;
133 GLH_EXTERN PFNGLVERTEXATTRIB4NUBARBPROC GLH_EXT_NAME(glVertexAttrib4NubARB) GLH_INITIALIZER;
134 GLH_EXTERN PFNGLVERTEXATTRIB1SVARBPROC GLH_EXT_NAME(glVertexAttrib1svARB) GLH_INITIALIZER;
135 GLH_EXTERN PFNGLVERTEXATTRIB1FVARBPROC GLH_EXT_NAME(glVertexAttrib1fvARB) GLH_INITIALIZER;
136 GLH_EXTERN PFNGLVERTEXATTRIB1DVARBPROC GLH_EXT_NAME(glVertexAttrib1dvARB) GLH_INITIALIZER;
137 GLH_EXTERN PFNGLVERTEXATTRIB2SVARBPROC GLH_EXT_NAME(glVertexAttrib2svARB) GLH_INITIALIZER;
138 GLH_EXTERN PFNGLVERTEXATTRIB2FVARBPROC GLH_EXT_NAME(glVertexAttrib2fvARB) GLH_INITIALIZER;
139 GLH_EXTERN PFNGLVERTEXATTRIB2DVARBPROC GLH_EXT_NAME(glVertexAttrib2dvARB) GLH_INITIALIZER;
140 GLH_EXTERN PFNGLVERTEXATTRIB3SVARBPROC GLH_EXT_NAME(glVertexAttrib3svARB) GLH_INITIALIZER;
141 GLH_EXTERN PFNGLVERTEXATTRIB3FVARBPROC GLH_EXT_NAME(glVertexAttrib3fvARB) GLH_INITIALIZER;
142 GLH_EXTERN PFNGLVERTEXATTRIB3DVARBPROC GLH_EXT_NAME(glVertexAttrib3dvARB) GLH_INITIALIZER;
143 GLH_EXTERN PFNGLVERTEXATTRIB4BVARBPROC GLH_EXT_NAME(glVertexAttrib4bvARB) GLH_INITIALIZER;
144 GLH_EXTERN PFNGLVERTEXATTRIB4SVARBPROC GLH_EXT_NAME(glVertexAttrib4svARB) GLH_INITIALIZER;
145 GLH_EXTERN PFNGLVERTEXATTRIB4IVARBPROC GLH_EXT_NAME(glVertexAttrib4ivARB) GLH_INITIALIZER;
146 GLH_EXTERN PFNGLVERTEXATTRIB4UBVARBPROC GLH_EXT_NAME(glVertexAttrib4ubvARB) GLH_INITIALIZER;
147 GLH_EXTERN PFNGLVERTEXATTRIB4USVARBPROC GLH_EXT_NAME(glVertexAttrib4usvARB) GLH_INITIALIZER;
148 GLH_EXTERN PFNGLVERTEXATTRIB4UIVARBPROC GLH_EXT_NAME(glVertexAttrib4uivARB) GLH_INITIALIZER;
149 GLH_EXTERN PFNGLVERTEXATTRIB4FVARBPROC GLH_EXT_NAME(glVertexAttrib4fvARB) GLH_INITIALIZER;
150 GLH_EXTERN PFNGLVERTEXATTRIB4DVARBPROC GLH_EXT_NAME(glVertexAttrib4dvARB) GLH_INITIALIZER;
151 GLH_EXTERN PFNGLVERTEXATTRIB4NBVARBPROC GLH_EXT_NAME(glVertexAttrib4NbvARB) GLH_INITIALIZER;
152 GLH_EXTERN PFNGLVERTEXATTRIB4NSVARBPROC GLH_EXT_NAME(glVertexAttrib4NsvARB) GLH_INITIALIZER;
153 GLH_EXTERN PFNGLVERTEXATTRIB4NIVARBPROC GLH_EXT_NAME(glVertexAttrib4NivARB) GLH_INITIALIZER;
154 GLH_EXTERN PFNGLVERTEXATTRIB4NUBVARBPROC GLH_EXT_NAME(glVertexAttrib4NubvARB) GLH_INITIALIZER;
155 GLH_EXTERN PFNGLVERTEXATTRIB4NUSVARBPROC GLH_EXT_NAME(glVertexAttrib4NusvARB) GLH_INITIALIZER;
156 GLH_EXTERN PFNGLVERTEXATTRIB4NUIVARBPROC GLH_EXT_NAME(glVertexAttrib4NuivARB) GLH_INITIALIZER;
157 GLH_EXTERN PFNGLVERTEXATTRIBPOINTERARBPROC GLH_EXT_NAME(glVertexAttribPointerARB) GLH_INITIALIZER;
158 GLH_EXTERN PFNGLENABLEVERTEXATTRIBARRAYARBPROC GLH_EXT_NAME(glEnableVertexAttribArrayARB) GLH_INITIALIZER;
159 GLH_EXTERN PFNGLDISABLEVERTEXATTRIBARRAYARBPROC GLH_EXT_NAME(glDisableVertexAttribArrayARB) GLH_INITIALIZER;
160 GLH_EXTERN PFNGLPROGRAMSTRINGARBPROC GLH_EXT_NAME(glProgramStringARB) GLH_INITIALIZER;
161 GLH_EXTERN PFNGLBINDPROGRAMARBPROC GLH_EXT_NAME(glBindProgramARB) GLH_INITIALIZER;
162 GLH_EXTERN PFNGLDELETEPROGRAMSARBPROC GLH_EXT_NAME(glDeleteProgramsARB) GLH_INITIALIZER;
163 GLH_EXTERN PFNGLGENPROGRAMSARBPROC GLH_EXT_NAME(glGenProgramsARB) GLH_INITIALIZER;
164 GLH_EXTERN PFNGLPROGRAMENVPARAMETER4DARBPROC GLH_EXT_NAME(glProgramEnvParameter4dARB) GLH_INITIALIZER;
165 GLH_EXTERN PFNGLPROGRAMENVPARAMETER4DVARBPROC GLH_EXT_NAME(glProgramEnvParameter4dvARB) GLH_INITIALIZER;
166 GLH_EXTERN PFNGLPROGRAMENVPARAMETER4FARBPROC GLH_EXT_NAME(glProgramEnvParameter4fARB) GLH_INITIALIZER;
167 GLH_EXTERN PFNGLPROGRAMENVPARAMETER4FVARBPROC GLH_EXT_NAME(glProgramEnvParameter4fvARB) GLH_INITIALIZER;
168 GLH_EXTERN PFNGLPROGRAMLOCALPARAMETER4DARBPROC GLH_EXT_NAME(glProgramLocalParameter4dARB) GLH_INITIALIZER;
169 GLH_EXTERN PFNGLPROGRAMLOCALPARAMETER4DVARBPROC GLH_EXT_NAME(glProgramLocalParameter4dvARB) GLH_INITIALIZER;
170 GLH_EXTERN PFNGLPROGRAMLOCALPARAMETER4FARBPROC GLH_EXT_NAME(glProgramLocalParameter4fARB) GLH_INITIALIZER;
171 GLH_EXTERN PFNGLPROGRAMLOCALPARAMETER4FVARBPROC GLH_EXT_NAME(glProgramLocalParameter4fvARB) GLH_INITIALIZER;
172 GLH_EXTERN PFNGLGETPROGRAMENVPARAMETERDVARBPROC GLH_EXT_NAME(glGetProgramEnvParameterdvARB) GLH_INITIALIZER;
173 GLH_EXTERN PFNGLGETPROGRAMENVPARAMETERFVARBPROC GLH_EXT_NAME(glGetProgramEnvParameterfvARB) GLH_INITIALIZER;
174 GLH_EXTERN PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC GLH_EXT_NAME(glGetProgramLocalParameterdvARB) GLH_INITIALIZER;
175 GLH_EXTERN PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC GLH_EXT_NAME(glGetProgramLocalParameterfvARB) GLH_INITIALIZER;
176 GLH_EXTERN PFNGLGETPROGRAMIVARBPROC GLH_EXT_NAME(glGetProgramivARB) GLH_INITIALIZER;
177 GLH_EXTERN PFNGLGETPROGRAMSTRINGARBPROC GLH_EXT_NAME(glGetProgramStringARB) GLH_INITIALIZER;
178 GLH_EXTERN PFNGLGETVERTEXATTRIBDVARBPROC GLH_EXT_NAME(glGetVertexAttribdvARB) GLH_INITIALIZER;
179 GLH_EXTERN PFNGLGETVERTEXATTRIBFVARBPROC GLH_EXT_NAME(glGetVertexAttribfvARB) GLH_INITIALIZER;
180 GLH_EXTERN PFNGLGETVERTEXATTRIBIVARBPROC GLH_EXT_NAME(glGetVertexAttribivARB) GLH_INITIALIZER;
181 GLH_EXTERN PFNGLGETVERTEXATTRIBPOINTERVARBPROC GLH_EXT_NAME(glGetVertexAttribPointervARB) GLH_INITIALIZER;
182 GLH_EXTERN PFNGLISPROGRAMARBPROC GLH_EXT_NAME(glIsProgramARB) GLH_INITIALIZER;
183#endif
184
185#ifdef GL_EXT_abgr
186#endif
187
188#ifdef GL_EXT_bgra
189#endif
190
191#ifdef GL_EXT_blend_color
192 GLH_EXTERN PFNGLBLENDCOLOREXTPROC GLH_EXT_NAME(glBlendColorEXT) GLH_INITIALIZER;
193#endif
194
195#ifdef GL_EXT_blend_minmax
196 GLH_EXTERN PFNGLBLENDEQUATIONEXTPROC GLH_EXT_NAME(glBlendEquationEXT) GLH_INITIALIZER;
197#endif
198
199#ifdef GL_EXT_blend_subtract
200#endif
201
202#ifdef GL_EXT_compiled_vertex_array
203 GLH_EXTERN PFNGLLOCKARRAYSEXTPROC GLH_EXT_NAME(glLockArraysEXT) GLH_INITIALIZER;
204 GLH_EXTERN PFNGLUNLOCKARRAYSEXTPROC GLH_EXT_NAME(glUnlockArraysEXT) GLH_INITIALIZER;
205#endif
206
207#ifdef GL_EXT_fog_coord
208 GLH_EXTERN PFNGLFOGCOORDDEXTPROC GLH_EXT_NAME(glFogCoorddEXT) GLH_INITIALIZER;
209 GLH_EXTERN PFNGLFOGCOORDDVEXTPROC GLH_EXT_NAME(glFogCoorddvEXT) GLH_INITIALIZER;
210 GLH_EXTERN PFNGLFOGCOORDFEXTPROC GLH_EXT_NAME(glFogCoordfEXT) GLH_INITIALIZER;
211 GLH_EXTERN PFNGLFOGCOORDFVEXTPROC GLH_EXT_NAME(glFogCoordfvEXT) GLH_INITIALIZER;
212 GLH_EXTERN PFNGLFOGCOORDPOINTEREXTPROC GLH_EXT_NAME(glFogCoordPointerEXT) GLH_INITIALIZER;
213#endif
214
215#ifdef GL_EXT_light_max_exponent
216#endif
217
218#ifdef GL_EXT_packed_pixels
219#endif
220
221#ifdef GL_EXT_paletted_texture
222 GLH_EXTERN PFNGLCOLORSUBTABLEEXTPROC GLH_EXT_NAME(glColorSubTableEXT) GLH_INITIALIZER;
223 GLH_EXTERN PFNGLCOLORTABLEEXTPROC GLH_EXT_NAME(glColorTableEXT) GLH_INITIALIZER;
224 GLH_EXTERN PFNGLGETCOLORTABLEEXTPROC GLH_EXT_NAME(glGetColorTableEXT) GLH_INITIALIZER;
225 GLH_EXTERN PFNGLGETCOLORTABLEPARAMETERFVEXTPROC GLH_EXT_NAME(glGetColorTableParameterfvEXT) GLH_INITIALIZER;
226 GLH_EXTERN PFNGLGETCOLORTABLEPARAMETERIVEXTPROC GLH_EXT_NAME(glGetColorTableParameterivEXT) GLH_INITIALIZER;
227#endif
228
229#ifdef GL_EXT_point_parameters
230 GLH_EXTERN PFNGLPOINTPARAMETERFEXTPROC GLH_EXT_NAME(glPointParameterfEXT) GLH_INITIALIZER;
231 GLH_EXTERN PFNGLPOINTPARAMETERFVEXTPROC GLH_EXT_NAME(glPointParameterfvEXT) GLH_INITIALIZER;
232#endif
233
234#ifdef GL_EXT_rescale_normal
235#endif
236
237#ifdef GL_EXT_secondary_color
238 GLH_EXTERN PFNGLSECONDARYCOLOR3BEXTPROC GLH_EXT_NAME(glSecondaryColor3bEXT) GLH_INITIALIZER;
239 GLH_EXTERN PFNGLSECONDARYCOLOR3BVEXTPROC GLH_EXT_NAME(glSecondaryColor3bvEXT) GLH_INITIALIZER;
240 GLH_EXTERN PFNGLSECONDARYCOLOR3DEXTPROC GLH_EXT_NAME(glSecondaryColor3dEXT) GLH_INITIALIZER;
241 GLH_EXTERN PFNGLSECONDARYCOLOR3DVEXTPROC GLH_EXT_NAME(glSecondaryColor3dvEXT) GLH_INITIALIZER;
242 GLH_EXTERN PFNGLSECONDARYCOLOR3FEXTPROC GLH_EXT_NAME(glSecondaryColor3fEXT) GLH_INITIALIZER;
243 GLH_EXTERN PFNGLSECONDARYCOLOR3FVEXTPROC GLH_EXT_NAME(glSecondaryColor3fvEXT) GLH_INITIALIZER;
244 GLH_EXTERN PFNGLSECONDARYCOLOR3IEXTPROC GLH_EXT_NAME(glSecondaryColor3iEXT) GLH_INITIALIZER;
245 GLH_EXTERN PFNGLSECONDARYCOLOR3IVEXTPROC GLH_EXT_NAME(glSecondaryColor3ivEXT) GLH_INITIALIZER;
246 GLH_EXTERN PFNGLSECONDARYCOLOR3SEXTPROC GLH_EXT_NAME(glSecondaryColor3sEXT) GLH_INITIALIZER;
247 GLH_EXTERN PFNGLSECONDARYCOLOR3SVEXTPROC GLH_EXT_NAME(glSecondaryColor3svEXT) GLH_INITIALIZER;
248 GLH_EXTERN PFNGLSECONDARYCOLOR3UBEXTPROC GLH_EXT_NAME(glSecondaryColor3ubEXT) GLH_INITIALIZER;
249 GLH_EXTERN PFNGLSECONDARYCOLOR3UBVEXTPROC GLH_EXT_NAME(glSecondaryColor3ubvEXT) GLH_INITIALIZER;
250 GLH_EXTERN PFNGLSECONDARYCOLOR3UIEXTPROC GLH_EXT_NAME(glSecondaryColor3uiEXT) GLH_INITIALIZER;
251 GLH_EXTERN PFNGLSECONDARYCOLOR3UIVEXTPROC GLH_EXT_NAME(glSecondaryColor3uivEXT) GLH_INITIALIZER;
252 GLH_EXTERN PFNGLSECONDARYCOLOR3USEXTPROC GLH_EXT_NAME(glSecondaryColor3usEXT) GLH_INITIALIZER;
253 GLH_EXTERN PFNGLSECONDARYCOLOR3USVEXTPROC GLH_EXT_NAME(glSecondaryColor3usvEXT) GLH_INITIALIZER;
254 GLH_EXTERN PFNGLSECONDARYCOLORPOINTEREXTPROC GLH_EXT_NAME(glSecondaryColorPointerEXT) GLH_INITIALIZER;
255#endif
256
257#ifdef GL_EXT_separate_specular_color
258#endif
259
260#ifdef GL_EXT_shared_texture_palette
261#endif
262
263#ifdef GL_EXT_stencil_wrap
264#endif
265
266#ifdef GL_EXT_texture_compression_s3tc
267#endif
268
269#ifdef GL_EXT_texture_cube_map
270#endif
271
272#ifdef GL_EXT_texture_edge_clamp
273#endif
274
275#ifdef GL_EXT_texture_env_add
276#endif
277
278#ifdef GL_EXT_texture_env_combine
279#endif
280
281#ifdef GL_EXT_texture_filter_anisotropic
282#endif
283
284#ifdef GL_EXT_texture_lod_bias
285#endif
286
287#ifdef GL_EXT_texture_object
288 GLH_EXTERN PFNGLARETEXTURESRESIDENTEXTPROC GLH_EXT_NAME(glAreTexturesResidentEXT) GLH_INITIALIZER;
289 GLH_EXTERN PFNGLBINDTEXTUREEXTPROC GLH_EXT_NAME(glBindTextureEXT) GLH_INITIALIZER;
290 GLH_EXTERN PFNGLDELETETEXTURESEXTPROC GLH_EXT_NAME(glDeleteTexturesEXT) GLH_INITIALIZER;
291 GLH_EXTERN PFNGLGENTEXTURESEXTPROC GLH_EXT_NAME(glGenTexturesEXT) GLH_INITIALIZER;
292 GLH_EXTERN PFNGLISTEXTUREEXTPROC GLH_EXT_NAME(glIsTextureEXT) GLH_INITIALIZER;
293 GLH_EXTERN PFNGLPRIORITIZETEXTURESEXTPROC GLH_EXT_NAME(glPrioritizeTexturesEXT) GLH_INITIALIZER;
294#endif
295
296#ifdef GL_EXT_texture3D
297 GLH_EXTERN PFNGLTEXIMAGE3DEXTPROC GLH_EXT_NAME(glTexImage3DEXT) GLH_INITIALIZER;
298#endif
299
300#ifdef GL_EXT_vertex_array
301 GLH_EXTERN PFNGLARRAYELEMENTEXTPROC GLH_EXT_NAME(glArrayElementEXT) GLH_INITIALIZER;
302 GLH_EXTERN PFNGLCOLORPOINTEREXTPROC GLH_EXT_NAME(glColorPointerEXT) GLH_INITIALIZER;
303 GLH_EXTERN PFNGLEDGEFLAGPOINTEREXTPROC GLH_EXT_NAME(glEdgeFlagPointerEXT) GLH_INITIALIZER;
304 GLH_EXTERN PFNGLGETPOINTERVEXTPROC GLH_EXT_NAME(glGetPointervEXT) GLH_INITIALIZER;
305 GLH_EXTERN PFNGLINDEXPOINTEREXTPROC GLH_EXT_NAME(glIndexPointerEXT) GLH_INITIALIZER;
306 GLH_EXTERN PFNGLNORMALPOINTEREXTPROC GLH_EXT_NAME(glNormalPointerEXT) GLH_INITIALIZER;
307 GLH_EXTERN PFNGLTEXCOORDPOINTEREXTPROC GLH_EXT_NAME(glTexCoordPointerEXT) GLH_INITIALIZER;
308 GLH_EXTERN PFNGLVERTEXPOINTEREXTPROC GLH_EXT_NAME(glVertexPointerEXT) GLH_INITIALIZER;
309 GLH_EXTERN PFNGLDRAWARRAYSEXTPROC GLH_EXT_NAME(glDrawArraysEXT) GLH_INITIALIZER;
310#endif
311
312#ifdef GL_EXT_vertex_weighting
313 GLH_EXTERN PFNGLVERTEXWEIGHTFEXTPROC GLH_EXT_NAME(glVertexWeightfEXT) GLH_INITIALIZER;
314 GLH_EXTERN PFNGLVERTEXWEIGHTFVEXTPROC GLH_EXT_NAME(glVertexWeightfvEXT) GLH_INITIALIZER;
315 GLH_EXTERN PFNGLVERTEXWEIGHTPOINTEREXTPROC GLH_EXT_NAME(glVertexWeightPointerEXT) GLH_INITIALIZER;
316#endif
317
318#ifdef GL_NV_blend_square
319#endif
320
321#ifdef GL_NV_evaluators
322 GLH_EXTERN PFNGLMAPCONTROLPOINTSNVPROC GLH_EXT_NAME(glMapControlPointsNV) GLH_INITIALIZER;
323 GLH_EXTERN PFNGLMAPPARAMETERIVNVPROC GLH_EXT_NAME(glMapParameterivNV) GLH_INITIALIZER;
324 GLH_EXTERN PFNGLMAPPARAMETERFVNVPROC GLH_EXT_NAME(glMapParameterfvNV) GLH_INITIALIZER;
325 GLH_EXTERN PFNGLGETMAPCONTROLPOINTSNVPROC GLH_EXT_NAME(glGetMapControlPointsNV) GLH_INITIALIZER;
326 GLH_EXTERN PFNGLGETMAPPARAMETERIVNVPROC GLH_EXT_NAME(glGetMapParameterivNV) GLH_INITIALIZER;
327 GLH_EXTERN PFNGLGETMAPPARAMETERFVNVPROC GLH_EXT_NAME(glGetMapParameterfvNV) GLH_INITIALIZER;
328 GLH_EXTERN PFNGLGETMAPATTRIBPARAMETERIVNVPROC GLH_EXT_NAME(glGetMapAttribParameterivNV) GLH_INITIALIZER;
329 GLH_EXTERN PFNGLGETMAPATTRIBPARAMETERFVNVPROC GLH_EXT_NAME(glGetMapAttribParameterfvNV) GLH_INITIALIZER;
330 GLH_EXTERN PFNGLEVALMAPSNVPROC GLH_EXT_NAME(glEvalMapsNV) GLH_INITIALIZER;
331#endif
332
333#ifdef GL_NV_fence
334 GLH_EXTERN PFNGLGENFENCESNVPROC GLH_EXT_NAME(glGenFencesNV) GLH_INITIALIZER;
335 GLH_EXTERN PFNGLDELETEFENCESNVPROC GLH_EXT_NAME(glDeleteFencesNV) GLH_INITIALIZER;
336 GLH_EXTERN PFNGLSETFENCENVPROC GLH_EXT_NAME(glSetFenceNV) GLH_INITIALIZER;
337 GLH_EXTERN PFNGLTESTFENCENVPROC GLH_EXT_NAME(glTestFenceNV) GLH_INITIALIZER;
338 GLH_EXTERN PFNGLFINISHFENCENVPROC GLH_EXT_NAME(glFinishFenceNV) GLH_INITIALIZER;
339 GLH_EXTERN PFNGLISFENCENVPROC GLH_EXT_NAME(glIsFenceNV) GLH_INITIALIZER;
340 GLH_EXTERN PFNGLGETFENCEIVNVPROC GLH_EXT_NAME(glGetFenceivNV) GLH_INITIALIZER;
341#endif
342
343#ifdef GL_NV_fog_distance
344#endif
345
346#ifdef GL_NV_packed_depth_stencil
347#endif
348
349#ifdef GL_NV_register_combiners
350 GLH_EXTERN PFNGLCOMBINERPARAMETERFVNVPROC GLH_EXT_NAME(glCombinerParameterfvNV) GLH_INITIALIZER;
351 GLH_EXTERN PFNGLCOMBINERPARAMETERFNVPROC GLH_EXT_NAME(glCombinerParameterfNV) GLH_INITIALIZER;
352 GLH_EXTERN PFNGLCOMBINERPARAMETERIVNVPROC GLH_EXT_NAME(glCombinerParameterivNV) GLH_INITIALIZER;
353 GLH_EXTERN PFNGLCOMBINERPARAMETERINVPROC GLH_EXT_NAME(glCombinerParameteriNV) GLH_INITIALIZER;
354 GLH_EXTERN PFNGLCOMBINERINPUTNVPROC GLH_EXT_NAME(glCombinerInputNV) GLH_INITIALIZER;
355 GLH_EXTERN PFNGLCOMBINEROUTPUTNVPROC GLH_EXT_NAME(glCombinerOutputNV) GLH_INITIALIZER;
356 GLH_EXTERN PFNGLFINALCOMBINERINPUTNVPROC GLH_EXT_NAME(glFinalCombinerInputNV) GLH_INITIALIZER;
357 GLH_EXTERN PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC GLH_EXT_NAME(glGetCombinerInputParameterfvNV) GLH_INITIALIZER;
358 GLH_EXTERN PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC GLH_EXT_NAME(glGetCombinerInputParameterivNV) GLH_INITIALIZER;
359 GLH_EXTERN PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC GLH_EXT_NAME(glGetCombinerOutputParameterfvNV) GLH_INITIALIZER;
360 GLH_EXTERN PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC GLH_EXT_NAME(glGetCombinerOutputParameterivNV) GLH_INITIALIZER;
361 GLH_EXTERN PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC GLH_EXT_NAME(glGetFinalCombinerInputParameterfvNV) GLH_INITIALIZER;
362 GLH_EXTERN PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC GLH_EXT_NAME(glGetFinalCombinerInputParameterivNV) GLH_INITIALIZER;
363#endif
364
365#ifdef GL_NV_register_combiners2
366 GLH_EXTERN PFNGLCOMBINERSTAGEPARAMETERFVNVPROC GLH_EXT_NAME(glCombinerStageParameterfvNV) GLH_INITIALIZER;
367 GLH_EXTERN PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC GLH_EXT_NAME(glGetCombinerStageParameterfvNV) GLH_INITIALIZER;
368#endif
369
370#ifdef GL_NV_texgen_reflection
371#endif
372
373#ifdef GL_NV_texture_env_combine4
374#endif
375
376#ifdef GL_NV_texture_rectangle
377#endif
378
379#ifdef GL_NV_texture_shader
380#endif
381
382#ifdef GL_NV_vertex_array_range
383 GLH_EXTERN PFNGLFLUSHVERTEXARRAYRANGENVPROC GLH_EXT_NAME(glFlushVertexArrayRangeNV) GLH_INITIALIZER;
384 GLH_EXTERN PFNGLVERTEXARRAYRANGENVPROC GLH_EXT_NAME(glVertexArrayRangeNV) GLH_INITIALIZER;
385# ifdef _WIN32
386 GLH_EXTERN PFNWGLALLOCATEMEMORYNVPROC GLH_EXT_NAME(wglAllocateMemoryNV) GLH_INITIALIZER;
387# endif
388# ifdef GLX_VERSION_1_3
389 GLH_EXTERN PFNGLXALLOCATEMEMORYNVPROC GLH_EXT_NAME(glXAllocateMemoryNV) GLH_INITIALIZER;
390# endif
391# ifdef _WIN32
392 GLH_EXTERN PFNWGLFREEMEMORYNVPROC GLH_EXT_NAME(wglFreeMemoryNV) GLH_INITIALIZER;
393# endif
394# ifdef GLX_VERSION_1_3
395 GLH_EXTERN PFNGLXFREEMEMORYNVPROC GLH_EXT_NAME(glXFreeMemoryNV) GLH_INITIALIZER;
396# endif
397#endif
398
399#ifdef GL_NV_vertex_program
400 GLH_EXTERN PFNGLAREPROGRAMSRESIDENTNVPROC GLH_EXT_NAME(glAreProgramsResidentNV) GLH_INITIALIZER;
401 GLH_EXTERN PFNGLBINDPROGRAMNVPROC GLH_EXT_NAME(glBindProgramNV) GLH_INITIALIZER;
402 GLH_EXTERN PFNGLDELETEPROGRAMSNVPROC GLH_EXT_NAME(glDeleteProgramsNV) GLH_INITIALIZER;
403 GLH_EXTERN PFNGLEXECUTEPROGRAMNVPROC GLH_EXT_NAME(glExecuteProgramNV) GLH_INITIALIZER;
404 GLH_EXTERN PFNGLGENPROGRAMSNVPROC GLH_EXT_NAME(glGenProgramsNV) GLH_INITIALIZER;
405 GLH_EXTERN PFNGLGETPROGRAMPARAMETERDVNVPROC GLH_EXT_NAME(glGetProgramParameterdvNV) GLH_INITIALIZER;
406 GLH_EXTERN PFNGLGETPROGRAMPARAMETERFVNVPROC GLH_EXT_NAME(glGetProgramParameterfvNV) GLH_INITIALIZER;
407 GLH_EXTERN PFNGLGETPROGRAMIVNVPROC GLH_EXT_NAME(glGetProgramivNV) GLH_INITIALIZER;
408 GLH_EXTERN PFNGLGETPROGRAMSTRINGNVPROC GLH_EXT_NAME(glGetProgramStringNV) GLH_INITIALIZER;
409 GLH_EXTERN PFNGLGETTRACKMATRIXIVNVPROC GLH_EXT_NAME(glGetTrackMatrixivNV) GLH_INITIALIZER;
410 GLH_EXTERN PFNGLGETVERTEXATTRIBDVNVPROC GLH_EXT_NAME(glGetVertexAttribdvNV) GLH_INITIALIZER;
411 GLH_EXTERN PFNGLGETVERTEXATTRIBFVNVPROC GLH_EXT_NAME(glGetVertexAttribfvNV) GLH_INITIALIZER;
412 GLH_EXTERN PFNGLGETVERTEXATTRIBIVNVPROC GLH_EXT_NAME(glGetVertexAttribivNV) GLH_INITIALIZER;
413 GLH_EXTERN PFNGLGETVERTEXATTRIBPOINTERVNVPROC GLH_EXT_NAME(glGetVertexAttribPointervNV) GLH_INITIALIZER;
414 GLH_EXTERN PFNGLISPROGRAMNVPROC GLH_EXT_NAME(glIsProgramNV) GLH_INITIALIZER;
415 GLH_EXTERN PFNGLLOADPROGRAMNVPROC GLH_EXT_NAME(glLoadProgramNV) GLH_INITIALIZER;
416 GLH_EXTERN PFNGLPROGRAMPARAMETER4DNVPROC GLH_EXT_NAME(glProgramParameter4dNV) GLH_INITIALIZER;
417 GLH_EXTERN PFNGLPROGRAMPARAMETER4DVNVPROC GLH_EXT_NAME(glProgramParameter4dvNV) GLH_INITIALIZER;
418 GLH_EXTERN PFNGLPROGRAMPARAMETER4FNVPROC GLH_EXT_NAME(glProgramParameter4fNV) GLH_INITIALIZER;
419 GLH_EXTERN PFNGLPROGRAMPARAMETER4FVNVPROC GLH_EXT_NAME(glProgramParameter4fvNV) GLH_INITIALIZER;
420 GLH_EXTERN PFNGLPROGRAMPARAMETERS4DVNVPROC GLH_EXT_NAME(glProgramParameters4dvNV) GLH_INITIALIZER;
421 GLH_EXTERN PFNGLPROGRAMPARAMETERS4FVNVPROC GLH_EXT_NAME(glProgramParameters4fvNV) GLH_INITIALIZER;
422 GLH_EXTERN PFNGLREQUESTRESIDENTPROGRAMSNVPROC GLH_EXT_NAME(glRequestResidentProgramsNV) GLH_INITIALIZER;
423 GLH_EXTERN PFNGLTRACKMATRIXNVPROC GLH_EXT_NAME(glTrackMatrixNV) GLH_INITIALIZER;
424 GLH_EXTERN PFNGLVERTEXATTRIBPOINTERNVPROC GLH_EXT_NAME(glVertexAttribPointerNV) GLH_INITIALIZER;
425 GLH_EXTERN PFNGLVERTEXATTRIB1DNVPROC GLH_EXT_NAME(glVertexAttrib1dNV) GLH_INITIALIZER;
426 GLH_EXTERN PFNGLVERTEXATTRIB1DVNVPROC GLH_EXT_NAME(glVertexAttrib1dvNV) GLH_INITIALIZER;
427 GLH_EXTERN PFNGLVERTEXATTRIB1FNVPROC GLH_EXT_NAME(glVertexAttrib1fNV) GLH_INITIALIZER;
428 GLH_EXTERN PFNGLVERTEXATTRIB1FVNVPROC GLH_EXT_NAME(glVertexAttrib1fvNV) GLH_INITIALIZER;
429 GLH_EXTERN PFNGLVERTEXATTRIB1SNVPROC GLH_EXT_NAME(glVertexAttrib1sNV) GLH_INITIALIZER;
430 GLH_EXTERN PFNGLVERTEXATTRIB1SVNVPROC GLH_EXT_NAME(glVertexAttrib1svNV) GLH_INITIALIZER;
431 GLH_EXTERN PFNGLVERTEXATTRIB2DNVPROC GLH_EXT_NAME(glVertexAttrib2dNV) GLH_INITIALIZER;
432 GLH_EXTERN PFNGLVERTEXATTRIB2DVNVPROC GLH_EXT_NAME(glVertexAttrib2dvNV) GLH_INITIALIZER;
433 GLH_EXTERN PFNGLVERTEXATTRIB2FNVPROC GLH_EXT_NAME(glVertexAttrib2fNV) GLH_INITIALIZER;
434 GLH_EXTERN PFNGLVERTEXATTRIB2FVNVPROC GLH_EXT_NAME(glVertexAttrib2fvNV) GLH_INITIALIZER;
435 GLH_EXTERN PFNGLVERTEXATTRIB2SNVPROC GLH_EXT_NAME(glVertexAttrib2sNV) GLH_INITIALIZER;
436 GLH_EXTERN PFNGLVERTEXATTRIB2SVNVPROC GLH_EXT_NAME(glVertexAttrib2svNV) GLH_INITIALIZER;
437 GLH_EXTERN PFNGLVERTEXATTRIB3DNVPROC GLH_EXT_NAME(glVertexAttrib3dNV) GLH_INITIALIZER;
438 GLH_EXTERN PFNGLVERTEXATTRIB3DVNVPROC GLH_EXT_NAME(glVertexAttrib3dvNV) GLH_INITIALIZER;
439 GLH_EXTERN PFNGLVERTEXATTRIB3FNVPROC GLH_EXT_NAME(glVertexAttrib3fNV) GLH_INITIALIZER;
440 GLH_EXTERN PFNGLVERTEXATTRIB3FVNVPROC GLH_EXT_NAME(glVertexAttrib3fvNV) GLH_INITIALIZER;
441 GLH_EXTERN PFNGLVERTEXATTRIB3SNVPROC GLH_EXT_NAME(glVertexAttrib3sNV) GLH_INITIALIZER;
442 GLH_EXTERN PFNGLVERTEXATTRIB3SVNVPROC GLH_EXT_NAME(glVertexAttrib3svNV) GLH_INITIALIZER;
443 GLH_EXTERN PFNGLVERTEXATTRIB4DNVPROC GLH_EXT_NAME(glVertexAttrib4dNV) GLH_INITIALIZER;
444 GLH_EXTERN PFNGLVERTEXATTRIB4DVNVPROC GLH_EXT_NAME(glVertexAttrib4dvNV) GLH_INITIALIZER;
445 GLH_EXTERN PFNGLVERTEXATTRIB4FNVPROC GLH_EXT_NAME(glVertexAttrib4fNV) GLH_INITIALIZER;
446 GLH_EXTERN PFNGLVERTEXATTRIB4FVNVPROC GLH_EXT_NAME(glVertexAttrib4fvNV) GLH_INITIALIZER;
447 GLH_EXTERN PFNGLVERTEXATTRIB4SNVPROC GLH_EXT_NAME(glVertexAttrib4sNV) GLH_INITIALIZER;
448 GLH_EXTERN PFNGLVERTEXATTRIB4SVNVPROC GLH_EXT_NAME(glVertexAttrib4svNV) GLH_INITIALIZER;
449 GLH_EXTERN PFNGLVERTEXATTRIB4UBVNVPROC GLH_EXT_NAME(glVertexAttrib4ubvNV) GLH_INITIALIZER;
450 GLH_EXTERN PFNGLVERTEXATTRIBS1DVNVPROC GLH_EXT_NAME(glVertexAttribs1dvNV) GLH_INITIALIZER;
451 GLH_EXTERN PFNGLVERTEXATTRIBS1FVNVPROC GLH_EXT_NAME(glVertexAttribs1fvNV) GLH_INITIALIZER;
452 GLH_EXTERN PFNGLVERTEXATTRIBS1SVNVPROC GLH_EXT_NAME(glVertexAttribs1svNV) GLH_INITIALIZER;
453 GLH_EXTERN PFNGLVERTEXATTRIBS2DVNVPROC GLH_EXT_NAME(glVertexAttribs2dvNV) GLH_INITIALIZER;
454 GLH_EXTERN PFNGLVERTEXATTRIBS2FVNVPROC GLH_EXT_NAME(glVertexAttribs2fvNV) GLH_INITIALIZER;
455 GLH_EXTERN PFNGLVERTEXATTRIBS2SVNVPROC GLH_EXT_NAME(glVertexAttribs2svNV) GLH_INITIALIZER;
456 GLH_EXTERN PFNGLVERTEXATTRIBS3DVNVPROC GLH_EXT_NAME(glVertexAttribs3dvNV) GLH_INITIALIZER;
457 GLH_EXTERN PFNGLVERTEXATTRIBS3FVNVPROC GLH_EXT_NAME(glVertexAttribs3fvNV) GLH_INITIALIZER;
458 GLH_EXTERN PFNGLVERTEXATTRIBS3SVNVPROC GLH_EXT_NAME(glVertexAttribs3svNV) GLH_INITIALIZER;
459 GLH_EXTERN PFNGLVERTEXATTRIBS4DVNVPROC GLH_EXT_NAME(glVertexAttribs4dvNV) GLH_INITIALIZER;
460 GLH_EXTERN PFNGLVERTEXATTRIBS4FVNVPROC GLH_EXT_NAME(glVertexAttribs4fvNV) GLH_INITIALIZER;
461 GLH_EXTERN PFNGLVERTEXATTRIBS4SVNVPROC GLH_EXT_NAME(glVertexAttribs4svNV) GLH_INITIALIZER;
462 GLH_EXTERN PFNGLVERTEXATTRIBS4UBVNVPROC GLH_EXT_NAME(glVertexAttribs4ubvNV) GLH_INITIALIZER;
463#endif
464
465#ifdef GL_SGIS_generate_mipmap
466#endif
467
468#ifdef GL_SGIS_texture_lod
469#endif
470
471#ifdef GL_SGIX_depth_texture
472#endif
473
474#ifdef GL_SGIX_shadow
475#endif
476
477#ifdef GL_VERSION_1_2
478 /* These routines are prefixed by the preprocessor constant
479 GLH_CORE_1_2_PREFIX to avoid colliding with the OpenGL 1.2 namespace. */
480 GLH_EXTERN PFNGLBLENDCOLORPROC GLH_CORE_1_2_NAME(glBlendColor) GLH_INITIALIZER;
481 GLH_EXTERN PFNGLBLENDEQUATIONPROC GLH_CORE_1_2_NAME(glBlendEquation) GLH_INITIALIZER;
482 GLH_EXTERN PFNGLDRAWRANGEELEMENTSPROC GLH_CORE_1_2_NAME(glDrawRangeElements) GLH_INITIALIZER;
483 GLH_EXTERN PFNGLCOLORTABLEPROC GLH_CORE_1_2_NAME(glColorTable) GLH_INITIALIZER;
484 GLH_EXTERN PFNGLCOLORTABLEPARAMETERFVPROC GLH_CORE_1_2_NAME(glColorTableParameterfv) GLH_INITIALIZER;
485 GLH_EXTERN PFNGLCOLORTABLEPARAMETERIVPROC GLH_CORE_1_2_NAME(glColorTableParameteriv) GLH_INITIALIZER;
486 GLH_EXTERN PFNGLCOPYCOLORTABLEPROC GLH_CORE_1_2_NAME(glCopyColorTable) GLH_INITIALIZER;
487 GLH_EXTERN PFNGLGETCOLORTABLEPROC GLH_CORE_1_2_NAME(glGetColorTable) GLH_INITIALIZER;
488 GLH_EXTERN PFNGLGETCOLORTABLEPARAMETERFVPROC GLH_CORE_1_2_NAME(glGetColorTableParameterfv) GLH_INITIALIZER;
489 GLH_EXTERN PFNGLGETCOLORTABLEPARAMETERIVPROC GLH_CORE_1_2_NAME(glGetColorTableParameteriv) GLH_INITIALIZER;
490 GLH_EXTERN PFNGLTEXIMAGE3DPROC GLH_CORE_1_2_NAME(glTexImage3D) GLH_INITIALIZER;
491 GLH_EXTERN PFNGLTEXSUBIMAGE3DPROC GLH_CORE_1_2_NAME(glTexSubImage3D) GLH_INITIALIZER;
492 GLH_EXTERN PFNGLCOPYTEXSUBIMAGE3DPROC GLH_CORE_1_2_NAME(glCopyTexSubImage3D) GLH_INITIALIZER;
493#endif
494
495#ifdef GL_WIN_swap_hint
496 GLH_EXTERN PFNGLADDSWAPHINTRECTWINPROC GLH_EXT_NAME(glAddSwapHintRectWIN) GLH_INITIALIZER;
497#endif
498
499#ifdef WGL_ARB_pbuffer
500# ifdef _WIN32
501 GLH_EXTERN PFNWGLCREATEPBUFFERARBPROC GLH_EXT_NAME(wglCreatePbufferARB) GLH_INITIALIZER;
502# endif
503# ifdef _WIN32
504 GLH_EXTERN PFNWGLGETPBUFFERDCARBPROC GLH_EXT_NAME(wglGetPbufferDCARB) GLH_INITIALIZER;
505# endif
506# ifdef _WIN32
507 GLH_EXTERN PFNWGLRELEASEPBUFFERDCARBPROC GLH_EXT_NAME(wglReleasePbufferDCARB) GLH_INITIALIZER;
508# endif
509# ifdef _WIN32
510 GLH_EXTERN PFNWGLDESTROYPBUFFERARBPROC GLH_EXT_NAME(wglDestroyPbufferARB) GLH_INITIALIZER;
511# endif
512# ifdef _WIN32
513 GLH_EXTERN PFNWGLQUERYPBUFFERARBPROC GLH_EXT_NAME(wglQueryPbufferARB) GLH_INITIALIZER;
514# endif
515#endif
516
517#ifdef WGL_ARB_render_texture
518# ifdef _WIN32
519 GLH_EXTERN PFNWGLBINDTEXIMAGEARBPROC GLH_EXT_NAME(wglBindTexImageARB) GLH_INITIALIZER;
520# endif
521# ifdef _WIN32
522 GLH_EXTERN PFNWGLRELEASETEXIMAGEARBPROC GLH_EXT_NAME(wglReleaseTexImageARB) GLH_INITIALIZER;
523# endif
524# ifdef _WIN32
525 GLH_EXTERN PFNWGLSETPBUFFERATTRIBARBPROC GLH_EXT_NAME(wglSetPbufferAttribARB) GLH_INITIALIZER;
526# endif
527#endif
528
529#ifdef WGL_ARB_pixel_format
530# ifdef _WIN32
531 GLH_EXTERN PFNWGLGETPIXELFORMATATTRIBIVARBPROC GLH_EXT_NAME(wglGetPixelFormatAttribivARB) GLH_INITIALIZER;
532# endif
533# ifdef _WIN32
534 GLH_EXTERN PFNWGLGETPIXELFORMATATTRIBFVARBPROC GLH_EXT_NAME(wglGetPixelFormatAttribfvARB) GLH_INITIALIZER;
535# endif
536# ifdef _WIN32
537 GLH_EXTERN PFNWGLCHOOSEPIXELFORMATARBPROC GLH_EXT_NAME(wglChoosePixelFormatARB) GLH_INITIALIZER;
538# endif
539#endif
540
541
542#ifdef GLH_EXT_SINGLE_FILE
543
544int glh_init_extension(const char* extension)
545{
546 if (NULL == extension) {
547 return FALSE;
548#ifdef GL_ARB_multitexture
549 } else if (0 == strcmp(extension, "GL_ARB_multitexture")) {
550 GLH_EXT_NAME(glMultiTexCoord1dARB) = (PFNGLMULTITEXCOORD1DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord1dARB");
551 if (NULL == GLH_EXT_NAME(glMultiTexCoord1dARB))
552 return FALSE;
553 GLH_EXT_NAME(glMultiTexCoord1dvARB) = (PFNGLMULTITEXCOORD1DVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord1dvARB");
554 if (NULL == GLH_EXT_NAME(glMultiTexCoord1dvARB))
555 return FALSE;
556 GLH_EXT_NAME(glMultiTexCoord1fARB) = (PFNGLMULTITEXCOORD1FARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord1fARB");
557 if (NULL == GLH_EXT_NAME(glMultiTexCoord1fARB))
558 return FALSE;
559 GLH_EXT_NAME(glMultiTexCoord1fvARB) = (PFNGLMULTITEXCOORD1FVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord1fvARB");
560 if (NULL == GLH_EXT_NAME(glMultiTexCoord1fvARB))
561 return FALSE;
562 GLH_EXT_NAME(glMultiTexCoord1iARB) = (PFNGLMULTITEXCOORD1IARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord1iARB");
563 if (NULL == GLH_EXT_NAME(glMultiTexCoord1iARB))
564 return FALSE;
565 GLH_EXT_NAME(glMultiTexCoord1ivARB) = (PFNGLMULTITEXCOORD1IVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord1ivARB");
566 if (NULL == GLH_EXT_NAME(glMultiTexCoord1ivARB))
567 return FALSE;
568 GLH_EXT_NAME(glMultiTexCoord1sARB) = (PFNGLMULTITEXCOORD1SARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord1sARB");
569 if (NULL == GLH_EXT_NAME(glMultiTexCoord1sARB))
570 return FALSE;
571 GLH_EXT_NAME(glMultiTexCoord1svARB) = (PFNGLMULTITEXCOORD1SVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord1svARB");
572 if (NULL == GLH_EXT_NAME(glMultiTexCoord1svARB))
573 return FALSE;
574 GLH_EXT_NAME(glMultiTexCoord2dARB) = (PFNGLMULTITEXCOORD2DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord2dARB");
575 if (NULL == GLH_EXT_NAME(glMultiTexCoord2dARB))
576 return FALSE;
577 GLH_EXT_NAME(glMultiTexCoord2dvARB) = (PFNGLMULTITEXCOORD2DVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord2dvARB");
578 if (NULL == GLH_EXT_NAME(glMultiTexCoord2dvARB))
579 return FALSE;
580 GLH_EXT_NAME(glMultiTexCoord2fARB) = (PFNGLMULTITEXCOORD2FARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord2fARB");
581 if (NULL == GLH_EXT_NAME(glMultiTexCoord2fARB))
582 return FALSE;
583 GLH_EXT_NAME(glMultiTexCoord2fvARB) = (PFNGLMULTITEXCOORD2FVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord2fvARB");
584 if (NULL == GLH_EXT_NAME(glMultiTexCoord2fvARB))
585 return FALSE;
586 GLH_EXT_NAME(glMultiTexCoord2iARB) = (PFNGLMULTITEXCOORD2IARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord2iARB");
587 if (NULL == GLH_EXT_NAME(glMultiTexCoord2iARB))
588 return FALSE;
589 GLH_EXT_NAME(glMultiTexCoord2ivARB) = (PFNGLMULTITEXCOORD2IVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord2ivARB");
590 if (NULL == GLH_EXT_NAME(glMultiTexCoord2ivARB))
591 return FALSE;
592 GLH_EXT_NAME(glMultiTexCoord2sARB) = (PFNGLMULTITEXCOORD2SARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord2sARB");
593 if (NULL == GLH_EXT_NAME(glMultiTexCoord2sARB))
594 return FALSE;
595 GLH_EXT_NAME(glMultiTexCoord2svARB) = (PFNGLMULTITEXCOORD2SVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord2svARB");
596 if (NULL == GLH_EXT_NAME(glMultiTexCoord2svARB))
597 return FALSE;
598 GLH_EXT_NAME(glMultiTexCoord3dARB) = (PFNGLMULTITEXCOORD3DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord3dARB");
599 if (NULL == GLH_EXT_NAME(glMultiTexCoord3dARB))
600 return FALSE;
601 GLH_EXT_NAME(glMultiTexCoord3dvARB) = (PFNGLMULTITEXCOORD3DVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord3dvARB");
602 if (NULL == GLH_EXT_NAME(glMultiTexCoord3dvARB))
603 return FALSE;
604 GLH_EXT_NAME(glMultiTexCoord3fARB) = (PFNGLMULTITEXCOORD3FARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord3fARB");
605 if (NULL == GLH_EXT_NAME(glMultiTexCoord3fARB))
606 return FALSE;
607 GLH_EXT_NAME(glMultiTexCoord3fvARB) = (PFNGLMULTITEXCOORD3FVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord3fvARB");
608 if (NULL == GLH_EXT_NAME(glMultiTexCoord3fvARB))
609 return FALSE;
610 GLH_EXT_NAME(glMultiTexCoord3iARB) = (PFNGLMULTITEXCOORD3IARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord3iARB");
611 if (NULL == GLH_EXT_NAME(glMultiTexCoord3iARB))
612 return FALSE;
613 GLH_EXT_NAME(glMultiTexCoord3ivARB) = (PFNGLMULTITEXCOORD3IVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord3ivARB");
614 if (NULL == GLH_EXT_NAME(glMultiTexCoord3ivARB))
615 return FALSE;
616 GLH_EXT_NAME(glMultiTexCoord3sARB) = (PFNGLMULTITEXCOORD3SARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord3sARB");
617 if (NULL == GLH_EXT_NAME(glMultiTexCoord3sARB))
618 return FALSE;
619 GLH_EXT_NAME(glMultiTexCoord3svARB) = (PFNGLMULTITEXCOORD3SVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord3svARB");
620 if (NULL == GLH_EXT_NAME(glMultiTexCoord3svARB))
621 return FALSE;
622 GLH_EXT_NAME(glMultiTexCoord4dARB) = (PFNGLMULTITEXCOORD4DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord4dARB");
623 if (NULL == GLH_EXT_NAME(glMultiTexCoord4dARB))
624 return FALSE;
625 GLH_EXT_NAME(glMultiTexCoord4dvARB) = (PFNGLMULTITEXCOORD4DVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord4dvARB");
626 if (NULL == GLH_EXT_NAME(glMultiTexCoord4dvARB))
627 return FALSE;
628 GLH_EXT_NAME(glMultiTexCoord4fARB) = (PFNGLMULTITEXCOORD4FARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord4fARB");
629 if (NULL == GLH_EXT_NAME(glMultiTexCoord4fARB))
630 return FALSE;
631 GLH_EXT_NAME(glMultiTexCoord4fvARB) = (PFNGLMULTITEXCOORD4FVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord4fvARB");
632 if (NULL == GLH_EXT_NAME(glMultiTexCoord4fvARB))
633 return FALSE;
634 GLH_EXT_NAME(glMultiTexCoord4iARB) = (PFNGLMULTITEXCOORD4IARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord4iARB");
635 if (NULL == GLH_EXT_NAME(glMultiTexCoord4iARB))
636 return FALSE;
637 GLH_EXT_NAME(glMultiTexCoord4ivARB) = (PFNGLMULTITEXCOORD4IVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord4ivARB");
638 if (NULL == GLH_EXT_NAME(glMultiTexCoord4ivARB))
639 return FALSE;
640 GLH_EXT_NAME(glMultiTexCoord4sARB) = (PFNGLMULTITEXCOORD4SARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord4sARB");
641 if (NULL == GLH_EXT_NAME(glMultiTexCoord4sARB))
642 return FALSE;
643 GLH_EXT_NAME(glMultiTexCoord4svARB) = (PFNGLMULTITEXCOORD4SVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultiTexCoord4svARB");
644 if (NULL == GLH_EXT_NAME(glMultiTexCoord4svARB))
645 return FALSE;
646 GLH_EXT_NAME(glActiveTextureARB) = (PFNGLACTIVETEXTUREARBPROC)GLH_EXT_GET_PROC_ADDRESS("glActiveTextureARB");
647 if (NULL == GLH_EXT_NAME(glActiveTextureARB))
648 return FALSE;
649 GLH_EXT_NAME(glClientActiveTextureARB) = (PFNGLCLIENTACTIVETEXTUREARBPROC)GLH_EXT_GET_PROC_ADDRESS("glClientActiveTextureARB");
650 if (NULL == GLH_EXT_NAME(glClientActiveTextureARB))
651 return FALSE;
652#endif
653
654#ifdef GL_ARB_texture_border_clamp
655 } else if (0 == strcmp(extension, "GL_ARB_texture_border_clamp")) {
656#endif
657
658#ifdef GL_ARB_texture_compression
659 } else if (0 == strcmp(extension, "GL_ARB_texture_compression")) {
660 GLH_EXT_NAME(glCompressedTexImage3DARB) = (PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glCompressedTexImage3DARB");
661 if (NULL == GLH_EXT_NAME(glCompressedTexImage3DARB))
662 return FALSE;
663 GLH_EXT_NAME(glCompressedTexImage2DARB) = (PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glCompressedTexImage2DARB");
664 if (NULL == GLH_EXT_NAME(glCompressedTexImage2DARB))
665 return FALSE;
666 GLH_EXT_NAME(glCompressedTexImage1DARB) = (PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glCompressedTexImage1DARB");
667 if (NULL == GLH_EXT_NAME(glCompressedTexImage1DARB))
668 return FALSE;
669 GLH_EXT_NAME(glCompressedTexSubImage3DARB) = (PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glCompressedTexSubImage3DARB");
670 if (NULL == GLH_EXT_NAME(glCompressedTexSubImage3DARB))
671 return FALSE;
672 GLH_EXT_NAME(glCompressedTexSubImage2DARB) = (PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glCompressedTexSubImage2DARB");
673 if (NULL == GLH_EXT_NAME(glCompressedTexSubImage2DARB))
674 return FALSE;
675 GLH_EXT_NAME(glCompressedTexSubImage1DARB) = (PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glCompressedTexSubImage1DARB");
676 if (NULL == GLH_EXT_NAME(glCompressedTexSubImage1DARB))
677 return FALSE;
678 GLH_EXT_NAME(glGetCompressedTexImageARB) = (PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetCompressedTexImageARB");
679 if (NULL == GLH_EXT_NAME(glGetCompressedTexImageARB))
680 return FALSE;
681#endif
682
683#ifdef GL_ARB_texture_cube_map
684 } else if (0 == strcmp(extension, "GL_ARB_texture_cube_map")) {
685#endif
686
687#ifdef GL_ARB_transpose_matrix
688 } else if (0 == strcmp(extension, "GL_ARB_transpose_matrix")) {
689 GLH_EXT_NAME(glLoadTransposeMatrixfARB) = (PFNGLLOADTRANSPOSEMATRIXFARBPROC)GLH_EXT_GET_PROC_ADDRESS("glLoadTransposeMatrixfARB");
690 if (NULL == GLH_EXT_NAME(glLoadTransposeMatrixfARB))
691 return FALSE;
692 GLH_EXT_NAME(glLoadTransposeMatrixdARB) = (PFNGLLOADTRANSPOSEMATRIXDARBPROC)GLH_EXT_GET_PROC_ADDRESS("glLoadTransposeMatrixdARB");
693 if (NULL == GLH_EXT_NAME(glLoadTransposeMatrixdARB))
694 return FALSE;
695 GLH_EXT_NAME(glMultTransposeMatrixfARB) = (PFNGLMULTTRANSPOSEMATRIXFARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultTransposeMatrixfARB");
696 if (NULL == GLH_EXT_NAME(glMultTransposeMatrixfARB))
697 return FALSE;
698 GLH_EXT_NAME(glMultTransposeMatrixdARB) = (PFNGLMULTTRANSPOSEMATRIXDARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMultTransposeMatrixdARB");
699 if (NULL == GLH_EXT_NAME(glMultTransposeMatrixdARB))
700 return FALSE;
701#endif
702
703#ifdef GL_ARB_vertex_program
704 } else if (0 == strcmp(extension, "GL_ARB_vertex_program")) {
705 GLH_EXT_NAME(glVertexAttrib1sARB) = (PFNGLVERTEXATTRIB1SARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1sARB");
706 if (NULL == GLH_EXT_NAME(glVertexAttrib1sARB))
707 return GL_FALSE;
708 GLH_EXT_NAME(glVertexAttrib1fARB) = (PFNGLVERTEXATTRIB1FARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1fARB");
709 if (NULL == GLH_EXT_NAME(glVertexAttrib1fARB))
710 return GL_FALSE;
711 GLH_EXT_NAME(glVertexAttrib1dARB) = (PFNGLVERTEXATTRIB1DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1dARB");
712 if (NULL == GLH_EXT_NAME(glVertexAttrib1dARB))
713 return GL_FALSE;
714 GLH_EXT_NAME(glVertexAttrib2sARB) = (PFNGLVERTEXATTRIB2SARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2sARB");
715 if (NULL == GLH_EXT_NAME(glVertexAttrib2sARB))
716 return GL_FALSE;
717 GLH_EXT_NAME(glVertexAttrib2fARB) = (PFNGLVERTEXATTRIB2FARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2fARB");
718 if (NULL == GLH_EXT_NAME(glVertexAttrib2fARB))
719 return GL_FALSE;
720 GLH_EXT_NAME(glVertexAttrib2dARB) = (PFNGLVERTEXATTRIB2DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2dARB");
721 if (NULL == GLH_EXT_NAME(glVertexAttrib2dARB))
722 return GL_FALSE;
723 GLH_EXT_NAME(glVertexAttrib3sARB) = (PFNGLVERTEXATTRIB3SARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3sARB");
724 if (NULL == GLH_EXT_NAME(glVertexAttrib3sARB))
725 return GL_FALSE;
726 GLH_EXT_NAME(glVertexAttrib3fARB) = (PFNGLVERTEXATTRIB3FARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3fARB");
727 if (NULL == GLH_EXT_NAME(glVertexAttrib3fARB))
728 return GL_FALSE;
729 GLH_EXT_NAME(glVertexAttrib3dARB) = (PFNGLVERTEXATTRIB3DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3dARB");
730 if (NULL == GLH_EXT_NAME(glVertexAttrib3dARB))
731 return GL_FALSE;
732 GLH_EXT_NAME(glVertexAttrib4sARB) = (PFNGLVERTEXATTRIB4SARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4sARB");
733 if (NULL == GLH_EXT_NAME(glVertexAttrib4sARB))
734 return GL_FALSE;
735 GLH_EXT_NAME(glVertexAttrib4fARB) = (PFNGLVERTEXATTRIB4FARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4fARB");
736 if (NULL == GLH_EXT_NAME(glVertexAttrib4fARB))
737 return GL_FALSE;
738 GLH_EXT_NAME(glVertexAttrib4dARB) = (PFNGLVERTEXATTRIB4DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4dARB");
739 if (NULL == GLH_EXT_NAME(glVertexAttrib4dARB))
740 return GL_FALSE;
741 GLH_EXT_NAME(glVertexAttrib4NubARB) = (PFNGLVERTEXATTRIB4NUBARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4NubARB");
742 if (NULL == GLH_EXT_NAME(glVertexAttrib4NubARB))
743 return GL_FALSE;
744 GLH_EXT_NAME(glVertexAttrib1svARB) = (PFNGLVERTEXATTRIB1SVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1svARB");
745 if (NULL == GLH_EXT_NAME(glVertexAttrib1svARB))
746 return GL_FALSE;
747 GLH_EXT_NAME(glVertexAttrib1fvARB) = (PFNGLVERTEXATTRIB1FVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1fvARB");
748 if (NULL == GLH_EXT_NAME(glVertexAttrib1fvARB))
749 return GL_FALSE;
750 GLH_EXT_NAME(glVertexAttrib1dvARB) = (PFNGLVERTEXATTRIB1DVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1dvARB");
751 if (NULL == GLH_EXT_NAME(glVertexAttrib1dvARB))
752 return GL_FALSE;
753 GLH_EXT_NAME(glVertexAttrib2svARB) = (PFNGLVERTEXATTRIB2SVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2svARB");
754 if (NULL == GLH_EXT_NAME(glVertexAttrib2svARB))
755 return GL_FALSE;
756 GLH_EXT_NAME(glVertexAttrib2fvARB) = (PFNGLVERTEXATTRIB2FVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2fvARB");
757 if (NULL == GLH_EXT_NAME(glVertexAttrib2fvARB))
758 return GL_FALSE;
759 GLH_EXT_NAME(glVertexAttrib2dvARB) = (PFNGLVERTEXATTRIB2DVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2dvARB");
760 if (NULL == GLH_EXT_NAME(glVertexAttrib2dvARB))
761 return GL_FALSE;
762 GLH_EXT_NAME(glVertexAttrib3svARB) = (PFNGLVERTEXATTRIB3SVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3svARB");
763 if (NULL == GLH_EXT_NAME(glVertexAttrib3svARB))
764 return GL_FALSE;
765 GLH_EXT_NAME(glVertexAttrib3fvARB) = (PFNGLVERTEXATTRIB3FVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3fvARB");
766 if (NULL == GLH_EXT_NAME(glVertexAttrib3fvARB))
767 return GL_FALSE;
768 GLH_EXT_NAME(glVertexAttrib3dvARB) = (PFNGLVERTEXATTRIB3DVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3dvARB");
769 if (NULL == GLH_EXT_NAME(glVertexAttrib3dvARB))
770 return GL_FALSE;
771 GLH_EXT_NAME(glVertexAttrib4bvARB) = (PFNGLVERTEXATTRIB4BVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4bvARB");
772 if (NULL == GLH_EXT_NAME(glVertexAttrib4bvARB))
773 return GL_FALSE;
774 GLH_EXT_NAME(glVertexAttrib4svARB) = (PFNGLVERTEXATTRIB4SVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4svARB");
775 if (NULL == GLH_EXT_NAME(glVertexAttrib4svARB))
776 return GL_FALSE;
777 GLH_EXT_NAME(glVertexAttrib4ivARB) = (PFNGLVERTEXATTRIB4IVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4ivARB");
778 if (NULL == GLH_EXT_NAME(glVertexAttrib4ivARB))
779 return GL_FALSE;
780 GLH_EXT_NAME(glVertexAttrib4ubvARB) = (PFNGLVERTEXATTRIB4UBVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4ubvARB");
781 if (NULL == GLH_EXT_NAME(glVertexAttrib4ubvARB))
782 return GL_FALSE;
783 GLH_EXT_NAME(glVertexAttrib4usvARB) = (PFNGLVERTEXATTRIB4USVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4usvARB");
784 if (NULL == GLH_EXT_NAME(glVertexAttrib4usvARB))
785 return GL_FALSE;
786 GLH_EXT_NAME(glVertexAttrib4uivARB) = (PFNGLVERTEXATTRIB4UIVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4uivARB");
787 if (NULL == GLH_EXT_NAME(glVertexAttrib4uivARB))
788 return GL_FALSE;
789 GLH_EXT_NAME(glVertexAttrib4fvARB) = (PFNGLVERTEXATTRIB4FVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4fvARB");
790 if (NULL == GLH_EXT_NAME(glVertexAttrib4fvARB))
791 return GL_FALSE;
792 GLH_EXT_NAME(glVertexAttrib4dvARB) = (PFNGLVERTEXATTRIB4DVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4dvARB");
793 if (NULL == GLH_EXT_NAME(glVertexAttrib4dvARB))
794 return GL_FALSE;
795 GLH_EXT_NAME(glVertexAttrib4NbvARB) = (PFNGLVERTEXATTRIB4NBVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4NbvARB");
796 if (NULL == GLH_EXT_NAME(glVertexAttrib4NbvARB))
797 return GL_FALSE;
798 GLH_EXT_NAME(glVertexAttrib4NsvARB) = (PFNGLVERTEXATTRIB4NSVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4NsvARB");
799 if (NULL == GLH_EXT_NAME(glVertexAttrib4NsvARB))
800 return GL_FALSE;
801 GLH_EXT_NAME(glVertexAttrib4NivARB) = (PFNGLVERTEXATTRIB4NIVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4NivARB");
802 if (NULL == GLH_EXT_NAME(glVertexAttrib4NivARB))
803 return GL_FALSE;
804 GLH_EXT_NAME(glVertexAttrib4NubvARB) = (PFNGLVERTEXATTRIB4NUBVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4NubvARB");
805 if (NULL == GLH_EXT_NAME(glVertexAttrib4NubvARB))
806 return GL_FALSE;
807 GLH_EXT_NAME(glVertexAttrib4NusvARB) = (PFNGLVERTEXATTRIB4NUSVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4NusvARB");
808 if (NULL == GLH_EXT_NAME(glVertexAttrib4NusvARB))
809 return GL_FALSE;
810 GLH_EXT_NAME(glVertexAttrib4NuivARB) = (PFNGLVERTEXATTRIB4NUIVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4NuivARB");
811 if (NULL == GLH_EXT_NAME(glVertexAttrib4NuivARB))
812 return GL_FALSE;
813 GLH_EXT_NAME(glVertexAttribPointerARB) = (PFNGLVERTEXATTRIBPOINTERARBPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribPointerARB");
814 if (NULL == GLH_EXT_NAME(glVertexAttribPointerARB))
815 return GL_FALSE;
816 GLH_EXT_NAME(glEnableVertexAttribArrayARB) = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)GLH_EXT_GET_PROC_ADDRESS("glEnableVertexAttribArrayARB");
817 if (NULL == GLH_EXT_NAME(glEnableVertexAttribArrayARB))
818 return GL_FALSE;
819 GLH_EXT_NAME(glDisableVertexAttribArrayARB) = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)GLH_EXT_GET_PROC_ADDRESS("glDisableVertexAttribArrayARB");
820 if (NULL == GLH_EXT_NAME(glDisableVertexAttribArrayARB))
821 return GL_FALSE;
822 GLH_EXT_NAME(glProgramStringARB) = (PFNGLPROGRAMSTRINGARBPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramStringARB");
823 if (NULL == GLH_EXT_NAME(glProgramStringARB))
824 return GL_FALSE;
825 GLH_EXT_NAME(glBindProgramARB) = (PFNGLBINDPROGRAMARBPROC)GLH_EXT_GET_PROC_ADDRESS("glBindProgramARB");
826 if (NULL == GLH_EXT_NAME(glBindProgramARB))
827 return GL_FALSE;
828 GLH_EXT_NAME(glDeleteProgramsARB) = (PFNGLDELETEPROGRAMSARBPROC)GLH_EXT_GET_PROC_ADDRESS("glDeleteProgramsARB");
829 if (NULL == GLH_EXT_NAME(glDeleteProgramsARB))
830 return GL_FALSE;
831 GLH_EXT_NAME(glGenProgramsARB) = (PFNGLGENPROGRAMSARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGenProgramsARB");
832 if (NULL == GLH_EXT_NAME(glGenProgramsARB))
833 return GL_FALSE;
834 GLH_EXT_NAME(glProgramEnvParameter4dARB) = (PFNGLPROGRAMENVPARAMETER4DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramEnvParameter4dARB");
835 if (NULL == GLH_EXT_NAME(glProgramEnvParameter4dARB))
836 return GL_FALSE;
837 GLH_EXT_NAME(glProgramEnvParameter4dvARB) = (PFNGLPROGRAMENVPARAMETER4DVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramEnvParameter4dvARB");
838 if (NULL == GLH_EXT_NAME(glProgramEnvParameter4dvARB))
839 return GL_FALSE;
840 GLH_EXT_NAME(glProgramEnvParameter4fARB) = (PFNGLPROGRAMENVPARAMETER4FARBPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramEnvParameter4fARB");
841 if (NULL == GLH_EXT_NAME(glProgramEnvParameter4fARB))
842 return GL_FALSE;
843 GLH_EXT_NAME(glProgramEnvParameter4fvARB) = (PFNGLPROGRAMENVPARAMETER4FVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramEnvParameter4fvARB");
844 if (NULL == GLH_EXT_NAME(glProgramEnvParameter4fvARB))
845 return GL_FALSE;
846 GLH_EXT_NAME(glProgramLocalParameter4dARB) = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramLocalParameter4dARB");
847 if (NULL == GLH_EXT_NAME(glProgramLocalParameter4dARB))
848 return GL_FALSE;
849 GLH_EXT_NAME(glProgramLocalParameter4dvARB) = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramLocalParameter4dvARB");
850 if (NULL == GLH_EXT_NAME(glProgramLocalParameter4dvARB))
851 return GL_FALSE;
852 GLH_EXT_NAME(glProgramLocalParameter4fARB) = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramLocalParameter4fARB");
853 if (NULL == GLH_EXT_NAME(glProgramLocalParameter4fARB))
854 return GL_FALSE;
855 GLH_EXT_NAME(glProgramLocalParameter4fvARB) = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramLocalParameter4fvARB");
856 if (NULL == GLH_EXT_NAME(glProgramLocalParameter4fvARB))
857 return GL_FALSE;
858 GLH_EXT_NAME(glGetProgramEnvParameterdvARB) = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetProgramEnvParameterdvARB");
859 if (NULL == GLH_EXT_NAME(glGetProgramEnvParameterdvARB))
860 return GL_FALSE;
861 GLH_EXT_NAME(glGetProgramEnvParameterfvARB) = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetProgramEnvParameterfvARB");
862 if (NULL == GLH_EXT_NAME(glGetProgramEnvParameterfvARB))
863 return GL_FALSE;
864 GLH_EXT_NAME(glGetProgramLocalParameterdvARB) = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetProgramLocalParameterdvARB");
865 if (NULL == GLH_EXT_NAME(glGetProgramLocalParameterdvARB))
866 return GL_FALSE;
867 GLH_EXT_NAME(glGetProgramLocalParameterfvARB) = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetProgramLocalParameterfvARB");
868 if (NULL == GLH_EXT_NAME(glGetProgramLocalParameterfvARB))
869 return GL_FALSE;
870 GLH_EXT_NAME(glGetProgramivARB) = (PFNGLGETPROGRAMIVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetProgramivARB");
871 if (NULL == GLH_EXT_NAME(glGetProgramivARB))
872 return GL_FALSE;
873 GLH_EXT_NAME(glGetProgramStringARB) = (PFNGLGETPROGRAMSTRINGARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetProgramStringARB");
874 if (NULL == GLH_EXT_NAME(glGetProgramStringARB))
875 return GL_FALSE;
876 GLH_EXT_NAME(glGetVertexAttribdvARB) = (PFNGLGETVERTEXATTRIBDVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetVertexAttribdvARB");
877 if (NULL == GLH_EXT_NAME(glGetVertexAttribdvARB))
878 return GL_FALSE;
879 GLH_EXT_NAME(glGetVertexAttribfvARB) = (PFNGLGETVERTEXATTRIBFVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetVertexAttribfvARB");
880 if (NULL == GLH_EXT_NAME(glGetVertexAttribfvARB))
881 return GL_FALSE;
882 GLH_EXT_NAME(glGetVertexAttribivARB) = (PFNGLGETVERTEXATTRIBIVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetVertexAttribivARB");
883 if (NULL == GLH_EXT_NAME(glGetVertexAttribivARB))
884 return GL_FALSE;
885 GLH_EXT_NAME(glGetVertexAttribPointervARB) = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetVertexAttribPointervARB");
886 if (NULL == GLH_EXT_NAME(glGetVertexAttribPointervARB))
887 return GL_FALSE;
888 GLH_EXT_NAME(glIsProgramARB) = (PFNGLISPROGRAMARBPROC)GLH_EXT_GET_PROC_ADDRESS("glIsProgramARB");
889 if (NULL == GLH_EXT_NAME(glIsProgramARB))
890 return GL_FALSE;
891#endif
892
893#ifdef GL_EXT_abgr
894 } else if (0 == strcmp(extension, "GL_EXT_abgr")) {
895#endif
896
897#ifdef GL_EXT_bgra
898 } else if (0 == strcmp(extension, "GL_EXT_bgra")) {
899#endif
900
901#ifdef GL_EXT_blend_color
902 } else if (0 == strcmp(extension, "GL_EXT_blend_color")) {
903 GLH_EXT_NAME(glBlendColorEXT) = (PFNGLBLENDCOLOREXTPROC)GLH_EXT_GET_PROC_ADDRESS("glBlendColorEXT");
904 if (NULL == GLH_EXT_NAME(glBlendColorEXT))
905 return FALSE;
906#endif
907
908#ifdef GL_EXT_blend_minmax
909 } else if (0 == strcmp(extension, "GL_EXT_blend_minmax")) {
910 GLH_EXT_NAME(glBlendEquationEXT) = (PFNGLBLENDEQUATIONEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glBlendEquationEXT");
911 if (NULL == GLH_EXT_NAME(glBlendEquationEXT))
912 return FALSE;
913#endif
914
915#ifdef GL_EXT_blend_subtract
916 } else if (0 == strcmp(extension, "GL_EXT_blend_subtract")) {
917#endif
918
919#ifdef GL_EXT_compiled_vertex_array
920 } else if (0 == strcmp(extension, "GL_EXT_compiled_vertex_array")) {
921 GLH_EXT_NAME(glLockArraysEXT) = (PFNGLLOCKARRAYSEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glLockArraysEXT");
922 if (NULL == GLH_EXT_NAME(glLockArraysEXT))
923 return FALSE;
924 GLH_EXT_NAME(glUnlockArraysEXT) = (PFNGLUNLOCKARRAYSEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glUnlockArraysEXT");
925 if (NULL == GLH_EXT_NAME(glUnlockArraysEXT))
926 return FALSE;
927#endif
928
929#ifdef GL_EXT_fog_coord
930 } else if (0 == strcmp(extension, "GL_EXT_fog_coord")) {
931 GLH_EXT_NAME(glFogCoorddEXT) = (PFNGLFOGCOORDDEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glFogCoorddEXT");
932 if (NULL == GLH_EXT_NAME(glFogCoorddEXT))
933 return FALSE;
934 GLH_EXT_NAME(glFogCoorddvEXT) = (PFNGLFOGCOORDDVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glFogCoorddvEXT");
935 if (NULL == GLH_EXT_NAME(glFogCoorddvEXT))
936 return FALSE;
937 GLH_EXT_NAME(glFogCoordfEXT) = (PFNGLFOGCOORDFEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glFogCoordfEXT");
938 if (NULL == GLH_EXT_NAME(glFogCoordfEXT))
939 return FALSE;
940 GLH_EXT_NAME(glFogCoordfvEXT) = (PFNGLFOGCOORDFVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glFogCoordfvEXT");
941 if (NULL == GLH_EXT_NAME(glFogCoordfvEXT))
942 return FALSE;
943 GLH_EXT_NAME(glFogCoordPointerEXT) = (PFNGLFOGCOORDPOINTEREXTPROC)GLH_EXT_GET_PROC_ADDRESS("glFogCoordPointerEXT");
944 if (NULL == GLH_EXT_NAME(glFogCoordPointerEXT))
945 return FALSE;
946#endif
947
948#ifdef GL_EXT_light_max_exponent
949 } else if (0 == strcmp(extension, "GL_EXT_light_max_exponent")) {
950#endif
951
952#ifdef GL_EXT_packed_pixels
953 } else if (0 == strcmp(extension, "GL_EXT_packed_pixels")) {
954#endif
955
956#ifdef GL_EXT_paletted_texture
957 } else if (0 == strcmp(extension, "GL_EXT_paletted_texture")) {
958 GLH_EXT_NAME(glColorSubTableEXT) = (PFNGLCOLORSUBTABLEEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glColorSubTableEXT");
959 if (NULL == GLH_EXT_NAME(glColorSubTableEXT))
960 return FALSE;
961 GLH_EXT_NAME(glColorTableEXT) = (PFNGLCOLORTABLEEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glColorTableEXT");
962 if (NULL == GLH_EXT_NAME(glColorTableEXT))
963 return FALSE;
964 GLH_EXT_NAME(glGetColorTableEXT) = (PFNGLGETCOLORTABLEEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glGetColorTableEXT");
965 if (NULL == GLH_EXT_NAME(glGetColorTableEXT))
966 return FALSE;
967 GLH_EXT_NAME(glGetColorTableParameterfvEXT) = (PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glGetColorTableParameterfvEXT");
968 if (NULL == GLH_EXT_NAME(glGetColorTableParameterfvEXT))
969 return FALSE;
970 GLH_EXT_NAME(glGetColorTableParameterivEXT) = (PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glGetColorTableParameterivEXT");
971 if (NULL == GLH_EXT_NAME(glGetColorTableParameterivEXT))
972 return FALSE;
973#endif
974
975#ifdef GL_EXT_point_parameters
976 } else if (0 == strcmp(extension, "GL_EXT_point_parameters")) {
977 GLH_EXT_NAME(glPointParameterfEXT) = (PFNGLPOINTPARAMETERFEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glPointParameterfEXT");
978 if (NULL == GLH_EXT_NAME(glPointParameterfEXT))
979 return FALSE;
980 GLH_EXT_NAME(glPointParameterfvEXT) = (PFNGLPOINTPARAMETERFVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glPointParameterfvEXT");
981 if (NULL == GLH_EXT_NAME(glPointParameterfvEXT))
982 return FALSE;
983#endif
984
985#ifdef GL_EXT_rescale_normal
986 } else if (0 == strcmp(extension, "GL_EXT_rescale_normal")) {
987#endif
988
989#ifdef GL_EXT_secondary_color
990 } else if (0 == strcmp(extension, "GL_EXT_secondary_color")) {
991 GLH_EXT_NAME(glSecondaryColor3bEXT) = (PFNGLSECONDARYCOLOR3BEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3bEXT");
992 if (NULL == GLH_EXT_NAME(glSecondaryColor3bEXT))
993 return FALSE;
994 GLH_EXT_NAME(glSecondaryColor3bvEXT) = (PFNGLSECONDARYCOLOR3BVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3bvEXT");
995 if (NULL == GLH_EXT_NAME(glSecondaryColor3bvEXT))
996 return FALSE;
997 GLH_EXT_NAME(glSecondaryColor3dEXT) = (PFNGLSECONDARYCOLOR3DEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3dEXT");
998 if (NULL == GLH_EXT_NAME(glSecondaryColor3dEXT))
999 return FALSE;
1000 GLH_EXT_NAME(glSecondaryColor3dvEXT) = (PFNGLSECONDARYCOLOR3DVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3dvEXT");
1001 if (NULL == GLH_EXT_NAME(glSecondaryColor3dvEXT))
1002 return FALSE;
1003 GLH_EXT_NAME(glSecondaryColor3fEXT) = (PFNGLSECONDARYCOLOR3FEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3fEXT");
1004 if (NULL == GLH_EXT_NAME(glSecondaryColor3fEXT))
1005 return FALSE;
1006 GLH_EXT_NAME(glSecondaryColor3fvEXT) = (PFNGLSECONDARYCOLOR3FVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3fvEXT");
1007 if (NULL == GLH_EXT_NAME(glSecondaryColor3fvEXT))
1008 return FALSE;
1009 GLH_EXT_NAME(glSecondaryColor3iEXT) = (PFNGLSECONDARYCOLOR3IEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3iEXT");
1010 if (NULL == GLH_EXT_NAME(glSecondaryColor3iEXT))
1011 return FALSE;
1012 GLH_EXT_NAME(glSecondaryColor3ivEXT) = (PFNGLSECONDARYCOLOR3IVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3ivEXT");
1013 if (NULL == GLH_EXT_NAME(glSecondaryColor3ivEXT))
1014 return FALSE;
1015 GLH_EXT_NAME(glSecondaryColor3sEXT) = (PFNGLSECONDARYCOLOR3SEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3sEXT");
1016 if (NULL == GLH_EXT_NAME(glSecondaryColor3sEXT))
1017 return FALSE;
1018 GLH_EXT_NAME(glSecondaryColor3svEXT) = (PFNGLSECONDARYCOLOR3SVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3svEXT");
1019 if (NULL == GLH_EXT_NAME(glSecondaryColor3svEXT))
1020 return FALSE;
1021 GLH_EXT_NAME(glSecondaryColor3ubEXT) = (PFNGLSECONDARYCOLOR3UBEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3ubEXT");
1022 if (NULL == GLH_EXT_NAME(glSecondaryColor3ubEXT))
1023 return FALSE;
1024 GLH_EXT_NAME(glSecondaryColor3ubvEXT) = (PFNGLSECONDARYCOLOR3UBVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3ubvEXT");
1025 if (NULL == GLH_EXT_NAME(glSecondaryColor3ubvEXT))
1026 return FALSE;
1027 GLH_EXT_NAME(glSecondaryColor3uiEXT) = (PFNGLSECONDARYCOLOR3UIEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3uiEXT");
1028 if (NULL == GLH_EXT_NAME(glSecondaryColor3uiEXT))
1029 return FALSE;
1030 GLH_EXT_NAME(glSecondaryColor3uivEXT) = (PFNGLSECONDARYCOLOR3UIVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3uivEXT");
1031 if (NULL == GLH_EXT_NAME(glSecondaryColor3uivEXT))
1032 return FALSE;
1033 GLH_EXT_NAME(glSecondaryColor3usEXT) = (PFNGLSECONDARYCOLOR3USEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3usEXT");
1034 if (NULL == GLH_EXT_NAME(glSecondaryColor3usEXT))
1035 return FALSE;
1036 GLH_EXT_NAME(glSecondaryColor3usvEXT) = (PFNGLSECONDARYCOLOR3USVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColor3usvEXT");
1037 if (NULL == GLH_EXT_NAME(glSecondaryColor3usvEXT))
1038 return FALSE;
1039 GLH_EXT_NAME(glSecondaryColorPointerEXT) = (PFNGLSECONDARYCOLORPOINTEREXTPROC)GLH_EXT_GET_PROC_ADDRESS("glSecondaryColorPointerEXT");
1040 if (NULL == GLH_EXT_NAME(glSecondaryColorPointerEXT))
1041 return FALSE;
1042#endif
1043
1044#ifdef GL_EXT_separate_specular_color
1045 } else if (0 == strcmp(extension, "GL_EXT_separate_specular_color")) {
1046#endif
1047
1048#ifdef GL_EXT_shared_texture_palette
1049 } else if (0 == strcmp(extension, "GL_EXT_shared_texture_palette")) {
1050#endif
1051
1052#ifdef GL_EXT_stencil_wrap
1053 } else if (0 == strcmp(extension, "GL_EXT_stencil_wrap")) {
1054#endif
1055
1056#ifdef GL_EXT_texture_compression_s3tc
1057 } else if (0 == strcmp(extension, "GL_EXT_texture_compression_s3tc")) {
1058#endif
1059
1060#ifdef GL_EXT_texture_cube_map
1061 } else if (0 == strcmp(extension, "GL_EXT_texture_cube_map")) {
1062#endif
1063
1064#ifdef GL_EXT_texture_edge_clamp
1065 } else if (0 == strcmp(extension, "GL_EXT_texture_edge_clamp")) {
1066#endif
1067
1068#ifdef GL_EXT_texture_env_add
1069 } else if (0 == strcmp(extension, "GL_EXT_texture_env_add")) {
1070#endif
1071
1072#ifdef GL_EXT_texture_env_combine
1073 } else if (0 == strcmp(extension, "GL_EXT_texture_env_combine")) {
1074#endif
1075
1076#ifdef GL_EXT_texture_filter_anisotropic
1077 } else if (0 == strcmp(extension, "GL_EXT_texture_filter_anisotropic")) {
1078#endif
1079
1080#ifdef GL_EXT_texture_lod_bias
1081 } else if (0 == strcmp(extension, "GL_EXT_texture_lod_bias")) {
1082#endif
1083
1084#ifdef GL_EXT_texture_object
1085 } else if (0 == strcmp(extension, "GL_EXT_texture_object")) {
1086 GLH_EXT_NAME(glAreTexturesResidentEXT) = (PFNGLARETEXTURESRESIDENTEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glAreTexturesResidentEXT");
1087 if (NULL == GLH_EXT_NAME(glAreTexturesResidentEXT))
1088 return FALSE;
1089 GLH_EXT_NAME(glBindTextureEXT) = (PFNGLBINDTEXTUREEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glBindTextureEXT");
1090 if (NULL == GLH_EXT_NAME(glBindTextureEXT))
1091 return FALSE;
1092 GLH_EXT_NAME(glDeleteTexturesEXT) = (PFNGLDELETETEXTURESEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glDeleteTexturesEXT");
1093 if (NULL == GLH_EXT_NAME(glDeleteTexturesEXT))
1094 return FALSE;
1095 GLH_EXT_NAME(glGenTexturesEXT) = (PFNGLGENTEXTURESEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glGenTexturesEXT");
1096 if (NULL == GLH_EXT_NAME(glGenTexturesEXT))
1097 return FALSE;
1098 GLH_EXT_NAME(glIsTextureEXT) = (PFNGLISTEXTUREEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glIsTextureEXT");
1099 if (NULL == GLH_EXT_NAME(glIsTextureEXT))
1100 return FALSE;
1101 GLH_EXT_NAME(glPrioritizeTexturesEXT) = (PFNGLPRIORITIZETEXTURESEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glPrioritizeTexturesEXT");
1102 if (NULL == GLH_EXT_NAME(glPrioritizeTexturesEXT))
1103 return FALSE;
1104#endif
1105
1106#ifdef GL_EXT_texture3D
1107 } else if (0 == strcmp(extension, "GL_EXT_texture3D")) {
1108 GLH_EXT_NAME(glTexImage3DEXT) = (PFNGLTEXIMAGE3DEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glTexImage3DEXT");
1109 if (NULL == GLH_EXT_NAME(glTexImage3DEXT))
1110 return FALSE;
1111#endif
1112
1113#ifdef GL_EXT_vertex_array
1114 } else if (0 == strcmp(extension, "GL_EXT_vertex_array")) {
1115 GLH_EXT_NAME(glArrayElementEXT) = (PFNGLARRAYELEMENTEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glArrayElementEXT");
1116 if (NULL == GLH_EXT_NAME(glArrayElementEXT))
1117 return FALSE;
1118 GLH_EXT_NAME(glColorPointerEXT) = (PFNGLCOLORPOINTEREXTPROC)GLH_EXT_GET_PROC_ADDRESS("glColorPointerEXT");
1119 if (NULL == GLH_EXT_NAME(glColorPointerEXT))
1120 return FALSE;
1121 GLH_EXT_NAME(glEdgeFlagPointerEXT) = (PFNGLEDGEFLAGPOINTEREXTPROC)GLH_EXT_GET_PROC_ADDRESS("glEdgeFlagPointerEXT");
1122 if (NULL == GLH_EXT_NAME(glEdgeFlagPointerEXT))
1123 return FALSE;
1124 GLH_EXT_NAME(glGetPointervEXT) = (PFNGLGETPOINTERVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glGetPointervEXT");
1125 if (NULL == GLH_EXT_NAME(glGetPointervEXT))
1126 return FALSE;
1127 GLH_EXT_NAME(glIndexPointerEXT) = (PFNGLINDEXPOINTEREXTPROC)GLH_EXT_GET_PROC_ADDRESS("glIndexPointerEXT");
1128 if (NULL == GLH_EXT_NAME(glIndexPointerEXT))
1129 return FALSE;
1130 GLH_EXT_NAME(glNormalPointerEXT) = (PFNGLNORMALPOINTEREXTPROC)GLH_EXT_GET_PROC_ADDRESS("glNormalPointerEXT");
1131 if (NULL == GLH_EXT_NAME(glNormalPointerEXT))
1132 return FALSE;
1133 GLH_EXT_NAME(glTexCoordPointerEXT) = (PFNGLTEXCOORDPOINTEREXTPROC)GLH_EXT_GET_PROC_ADDRESS("glTexCoordPointerEXT");
1134 if (NULL == GLH_EXT_NAME(glTexCoordPointerEXT))
1135 return FALSE;
1136 GLH_EXT_NAME(glVertexPointerEXT) = (PFNGLVERTEXPOINTEREXTPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexPointerEXT");
1137 if (NULL == GLH_EXT_NAME(glVertexPointerEXT))
1138 return FALSE;
1139 GLH_EXT_NAME(glDrawArraysEXT) = (PFNGLDRAWARRAYSEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glDrawArraysEXT");
1140 if (NULL == GLH_EXT_NAME(glDrawArraysEXT))
1141 return FALSE;
1142#endif
1143
1144#ifdef GL_EXT_vertex_weighting
1145 } else if (0 == strcmp(extension, "GL_EXT_vertex_weighting")) {
1146 GLH_EXT_NAME(glVertexWeightfEXT) = (PFNGLVERTEXWEIGHTFEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexWeightfEXT");
1147 if (NULL == GLH_EXT_NAME(glVertexWeightfEXT))
1148 return FALSE;
1149 GLH_EXT_NAME(glVertexWeightfvEXT) = (PFNGLVERTEXWEIGHTFVEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexWeightfvEXT");
1150 if (NULL == GLH_EXT_NAME(glVertexWeightfvEXT))
1151 return FALSE;
1152 GLH_EXT_NAME(glVertexWeightPointerEXT) = (PFNGLVERTEXWEIGHTPOINTEREXTPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexWeightPointerEXT");
1153 if (NULL == GLH_EXT_NAME(glVertexWeightPointerEXT))
1154 return FALSE;
1155#endif
1156
1157#ifdef GL_NV_blend_square
1158 } else if (0 == strcmp(extension, "GL_NV_blend_square")) {
1159#endif
1160
1161#ifdef GL_NV_evaluators
1162 } else if (0 == strcmp(extension, "GL_NV_evaluators")) {
1163 GLH_EXT_NAME(glMapControlPointsNV) = (PFNGLMAPCONTROLPOINTSNVPROC)GLH_EXT_GET_PROC_ADDRESS("glMapControlPointsNV");
1164 if (NULL == GLH_EXT_NAME(glMapControlPointsNV))
1165 return FALSE;
1166 GLH_EXT_NAME(glMapParameterivNV) = (PFNGLMAPPARAMETERIVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glMapParameterivNV");
1167 if (NULL == GLH_EXT_NAME(glMapParameterivNV))
1168 return FALSE;
1169 GLH_EXT_NAME(glMapParameterfvNV) = (PFNGLMAPPARAMETERFVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glMapParameterfvNV");
1170 if (NULL == GLH_EXT_NAME(glMapParameterfvNV))
1171 return FALSE;
1172 GLH_EXT_NAME(glGetMapControlPointsNV) = (PFNGLGETMAPCONTROLPOINTSNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetMapControlPointsNV");
1173 if (NULL == GLH_EXT_NAME(glGetMapControlPointsNV))
1174 return FALSE;
1175 GLH_EXT_NAME(glGetMapParameterivNV) = (PFNGLGETMAPPARAMETERIVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetMapParameterivNV");
1176 if (NULL == GLH_EXT_NAME(glGetMapParameterivNV))
1177 return FALSE;
1178 GLH_EXT_NAME(glGetMapParameterfvNV) = (PFNGLGETMAPPARAMETERFVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetMapParameterfvNV");
1179 if (NULL == GLH_EXT_NAME(glGetMapParameterfvNV))
1180 return FALSE;
1181 GLH_EXT_NAME(glGetMapAttribParameterivNV) = (PFNGLGETMAPATTRIBPARAMETERIVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetMapAttribParameterivNV");
1182 if (NULL == GLH_EXT_NAME(glGetMapAttribParameterivNV))
1183 return FALSE;
1184 GLH_EXT_NAME(glGetMapAttribParameterfvNV) = (PFNGLGETMAPATTRIBPARAMETERFVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetMapAttribParameterfvNV");
1185 if (NULL == GLH_EXT_NAME(glGetMapAttribParameterfvNV))
1186 return FALSE;
1187 GLH_EXT_NAME(glEvalMapsNV) = (PFNGLEVALMAPSNVPROC)GLH_EXT_GET_PROC_ADDRESS("glEvalMapsNV");
1188 if (NULL == GLH_EXT_NAME(glEvalMapsNV))
1189 return FALSE;
1190#endif
1191
1192#ifdef GL_NV_fence
1193 } else if (0 == strcmp(extension, "GL_NV_fence")) {
1194 GLH_EXT_NAME(glGenFencesNV) = (PFNGLGENFENCESNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGenFencesNV");
1195 if (NULL == GLH_EXT_NAME(glGenFencesNV))
1196 return FALSE;
1197 GLH_EXT_NAME(glDeleteFencesNV) = (PFNGLDELETEFENCESNVPROC)GLH_EXT_GET_PROC_ADDRESS("glDeleteFencesNV");
1198 if (NULL == GLH_EXT_NAME(glDeleteFencesNV))
1199 return FALSE;
1200 GLH_EXT_NAME(glSetFenceNV) = (PFNGLSETFENCENVPROC)GLH_EXT_GET_PROC_ADDRESS("glSetFenceNV");
1201 if (NULL == GLH_EXT_NAME(glSetFenceNV))
1202 return FALSE;
1203 GLH_EXT_NAME(glTestFenceNV) = (PFNGLTESTFENCENVPROC)GLH_EXT_GET_PROC_ADDRESS("glTestFenceNV");
1204 if (NULL == GLH_EXT_NAME(glTestFenceNV))
1205 return FALSE;
1206 GLH_EXT_NAME(glFinishFenceNV) = (PFNGLFINISHFENCENVPROC)GLH_EXT_GET_PROC_ADDRESS("glFinishFenceNV");
1207 if (NULL == GLH_EXT_NAME(glFinishFenceNV))
1208 return FALSE;
1209 GLH_EXT_NAME(glIsFenceNV) = (PFNGLISFENCENVPROC)GLH_EXT_GET_PROC_ADDRESS("glIsFenceNV");
1210 if (NULL == GLH_EXT_NAME(glIsFenceNV))
1211 return FALSE;
1212 GLH_EXT_NAME(glGetFenceivNV) = (PFNGLGETFENCEIVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetFenceivNV");
1213 if (NULL == GLH_EXT_NAME(glGetFenceivNV))
1214 return FALSE;
1215#endif
1216
1217#ifdef GL_NV_fog_distance
1218 } else if (0 == strcmp(extension, "GL_NV_fog_distance")) {
1219#endif
1220
1221#ifdef GL_NV_packed_depth_stencil
1222 } else if (0 == strcmp(extension, "GL_NV_packed_depth_stencil")) {
1223#endif
1224
1225#ifdef GL_NV_register_combiners
1226 } else if (0 == strcmp(extension, "GL_NV_register_combiners")) {
1227 GLH_EXT_NAME(glCombinerParameterfvNV) = (PFNGLCOMBINERPARAMETERFVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glCombinerParameterfvNV");
1228 if (NULL == GLH_EXT_NAME(glCombinerParameterfvNV))
1229 return FALSE;
1230 GLH_EXT_NAME(glCombinerParameterfNV) = (PFNGLCOMBINERPARAMETERFNVPROC)GLH_EXT_GET_PROC_ADDRESS("glCombinerParameterfNV");
1231 if (NULL == GLH_EXT_NAME(glCombinerParameterfNV))
1232 return FALSE;
1233 GLH_EXT_NAME(glCombinerParameterivNV) = (PFNGLCOMBINERPARAMETERIVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glCombinerParameterivNV");
1234 if (NULL == GLH_EXT_NAME(glCombinerParameterivNV))
1235 return FALSE;
1236 GLH_EXT_NAME(glCombinerParameteriNV) = (PFNGLCOMBINERPARAMETERINVPROC)GLH_EXT_GET_PROC_ADDRESS("glCombinerParameteriNV");
1237 if (NULL == GLH_EXT_NAME(glCombinerParameteriNV))
1238 return FALSE;
1239 GLH_EXT_NAME(glCombinerInputNV) = (PFNGLCOMBINERINPUTNVPROC)GLH_EXT_GET_PROC_ADDRESS("glCombinerInputNV");
1240 if (NULL == GLH_EXT_NAME(glCombinerInputNV))
1241 return FALSE;
1242 GLH_EXT_NAME(glCombinerOutputNV) = (PFNGLCOMBINEROUTPUTNVPROC)GLH_EXT_GET_PROC_ADDRESS("glCombinerOutputNV");
1243 if (NULL == GLH_EXT_NAME(glCombinerOutputNV))
1244 return FALSE;
1245 GLH_EXT_NAME(glFinalCombinerInputNV) = (PFNGLFINALCOMBINERINPUTNVPROC)GLH_EXT_GET_PROC_ADDRESS("glFinalCombinerInputNV");
1246 if (NULL == GLH_EXT_NAME(glFinalCombinerInputNV))
1247 return FALSE;
1248 GLH_EXT_NAME(glGetCombinerInputParameterfvNV) = (PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetCombinerInputParameterfvNV");
1249 if (NULL == GLH_EXT_NAME(glGetCombinerInputParameterfvNV))
1250 return FALSE;
1251 GLH_EXT_NAME(glGetCombinerInputParameterivNV) = (PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetCombinerInputParameterivNV");
1252 if (NULL == GLH_EXT_NAME(glGetCombinerInputParameterivNV))
1253 return FALSE;
1254 GLH_EXT_NAME(glGetCombinerOutputParameterfvNV) = (PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetCombinerOutputParameterfvNV");
1255 if (NULL == GLH_EXT_NAME(glGetCombinerOutputParameterfvNV))
1256 return FALSE;
1257 GLH_EXT_NAME(glGetCombinerOutputParameterivNV) = (PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetCombinerOutputParameterivNV");
1258 if (NULL == GLH_EXT_NAME(glGetCombinerOutputParameterivNV))
1259 return FALSE;
1260 GLH_EXT_NAME(glGetFinalCombinerInputParameterfvNV) = (PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetFinalCombinerInputParameterfvNV");
1261 if (NULL == GLH_EXT_NAME(glGetFinalCombinerInputParameterfvNV))
1262 return FALSE;
1263 GLH_EXT_NAME(glGetFinalCombinerInputParameterivNV) = (PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetFinalCombinerInputParameterivNV");
1264 if (NULL == GLH_EXT_NAME(glGetFinalCombinerInputParameterivNV))
1265 return FALSE;
1266#endif
1267
1268#ifdef GL_NV_register_combiners2
1269 } else if (0 == strcmp(extension, "GL_NV_register_combiners2")) {
1270 GLH_EXT_NAME(glCombinerStageParameterfvNV) = (PFNGLCOMBINERSTAGEPARAMETERFVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glCombinerStageParameterfvNV");
1271 if (NULL == GLH_EXT_NAME(glCombinerStageParameterfvNV))
1272 return FALSE;
1273 GLH_EXT_NAME(glGetCombinerStageParameterfvNV) = (PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetCombinerStageParameterfvNV");
1274 if (NULL == GLH_EXT_NAME(glGetCombinerStageParameterfvNV))
1275 return FALSE;
1276#endif
1277
1278#ifdef GL_NV_texgen_reflection
1279 } else if (0 == strcmp(extension, "GL_NV_texgen_reflection")) {
1280#endif
1281
1282#ifdef GL_NV_texture_env_combine4
1283 } else if (0 == strcmp(extension, "GL_NV_texture_env_combine4")) {
1284#endif
1285
1286#ifdef GL_NV_texture_rectangle
1287 } else if (0 == strcmp(extension, "GL_NV_texture_rectangle")) {
1288#endif
1289
1290#ifdef GL_NV_texture_shader
1291 } else if (0 == strcmp(extension, "GL_NV_texture_shader")) {
1292#endif
1293
1294#ifdef GL_NV_vertex_array_range
1295 } else if (0 == strcmp(extension, "GL_NV_vertex_array_range")) {
1296 GLH_EXT_NAME(glFlushVertexArrayRangeNV) = (PFNGLFLUSHVERTEXARRAYRANGENVPROC)GLH_EXT_GET_PROC_ADDRESS("glFlushVertexArrayRangeNV");
1297 if (NULL == GLH_EXT_NAME(glFlushVertexArrayRangeNV))
1298 return FALSE;
1299 GLH_EXT_NAME(glVertexArrayRangeNV) = (PFNGLVERTEXARRAYRANGENVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexArrayRangeNV");
1300 if (NULL == GLH_EXT_NAME(glVertexArrayRangeNV))
1301 return FALSE;
1302# ifdef _WIN32
1303 GLH_EXT_NAME(wglAllocateMemoryNV) = (PFNWGLALLOCATEMEMORYNVPROC)GLH_EXT_GET_PROC_ADDRESS("wglAllocateMemoryNV");
1304 if (NULL == GLH_EXT_NAME(wglAllocateMemoryNV))
1305 return FALSE;
1306# endif
1307# ifdef GLX_VERSION_1_3
1308 GLH_EXT_NAME(glXAllocateMemoryNV) = (PFNGLXALLOCATEMEMORYNVPROC)GLH_EXT_GET_PROC_ADDRESS("glXAllocateMemoryNV");
1309 if (NULL == GLH_EXT_NAME(glXAllocateMemoryNV))
1310 return FALSE;
1311# endif
1312# ifdef _WIN32
1313 GLH_EXT_NAME(wglFreeMemoryNV) = (PFNWGLFREEMEMORYNVPROC)GLH_EXT_GET_PROC_ADDRESS("wglFreeMemoryNV");
1314 if (NULL == GLH_EXT_NAME(wglFreeMemoryNV))
1315 return FALSE;
1316# endif
1317# ifdef GLX_VERSION_1_3
1318 GLH_EXT_NAME(glXFreeMemoryNV) = (PFNGLXFREEMEMORYNVPROC)GLH_EXT_GET_PROC_ADDRESS("glXFreeMemoryNV");
1319 if (NULL == GLH_EXT_NAME(glXFreeMemoryNV))
1320 return FALSE;
1321# endif
1322#endif
1323
1324#ifdef GL_NV_vertex_program
1325 } else if (0 == strcmp(extension, "GL_NV_vertex_program")) {
1326 GLH_EXT_NAME(glAreProgramsResidentNV) = (PFNGLAREPROGRAMSRESIDENTNVPROC)GLH_EXT_GET_PROC_ADDRESS("glAreProgramsResidentNV");
1327 if (NULL == GLH_EXT_NAME(glAreProgramsResidentNV))
1328 return FALSE;
1329 GLH_EXT_NAME(glBindProgramNV) = (PFNGLBINDPROGRAMNVPROC)GLH_EXT_GET_PROC_ADDRESS("glBindProgramNV");
1330 if (NULL == GLH_EXT_NAME(glBindProgramNV))
1331 return FALSE;
1332 GLH_EXT_NAME(glDeleteProgramsNV) = (PFNGLDELETEPROGRAMSNVPROC)GLH_EXT_GET_PROC_ADDRESS("glDeleteProgramsNV");
1333 if (NULL == GLH_EXT_NAME(glDeleteProgramsNV))
1334 return FALSE;
1335 GLH_EXT_NAME(glExecuteProgramNV) = (PFNGLEXECUTEPROGRAMNVPROC)GLH_EXT_GET_PROC_ADDRESS("glExecuteProgramNV");
1336 if (NULL == GLH_EXT_NAME(glExecuteProgramNV))
1337 return FALSE;
1338 GLH_EXT_NAME(glGenProgramsNV) = (PFNGLGENPROGRAMSNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGenProgramsNV");
1339 if (NULL == GLH_EXT_NAME(glGenProgramsNV))
1340 return FALSE;
1341 GLH_EXT_NAME(glGetProgramParameterdvNV) = (PFNGLGETPROGRAMPARAMETERDVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetProgramParameterdvNV");
1342 if (NULL == GLH_EXT_NAME(glGetProgramParameterdvNV))
1343 return FALSE;
1344 GLH_EXT_NAME(glGetProgramParameterfvNV) = (PFNGLGETPROGRAMPARAMETERFVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetProgramParameterfvNV");
1345 if (NULL == GLH_EXT_NAME(glGetProgramParameterfvNV))
1346 return FALSE;
1347 GLH_EXT_NAME(glGetProgramivNV) = (PFNGLGETPROGRAMIVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetProgramivNV");
1348 if (NULL == GLH_EXT_NAME(glGetProgramivNV))
1349 return FALSE;
1350 GLH_EXT_NAME(glGetProgramStringNV) = (PFNGLGETPROGRAMSTRINGNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetProgramStringNV");
1351 if (NULL == GLH_EXT_NAME(glGetProgramStringNV))
1352 return FALSE;
1353 GLH_EXT_NAME(glGetTrackMatrixivNV) = (PFNGLGETTRACKMATRIXIVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetTrackMatrixivNV");
1354 if (NULL == GLH_EXT_NAME(glGetTrackMatrixivNV))
1355 return FALSE;
1356 GLH_EXT_NAME(glGetVertexAttribdvNV) = (PFNGLGETVERTEXATTRIBDVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetVertexAttribdvNV");
1357 if (NULL == GLH_EXT_NAME(glGetVertexAttribdvNV))
1358 return FALSE;
1359 GLH_EXT_NAME(glGetVertexAttribfvNV) = (PFNGLGETVERTEXATTRIBFVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetVertexAttribfvNV");
1360 if (NULL == GLH_EXT_NAME(glGetVertexAttribfvNV))
1361 return FALSE;
1362 GLH_EXT_NAME(glGetVertexAttribivNV) = (PFNGLGETVERTEXATTRIBIVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetVertexAttribivNV");
1363 if (NULL == GLH_EXT_NAME(glGetVertexAttribivNV))
1364 return FALSE;
1365 GLH_EXT_NAME(glGetVertexAttribPointervNV) = (PFNGLGETVERTEXATTRIBPOINTERVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetVertexAttribPointervNV");
1366 if (NULL == GLH_EXT_NAME(glGetVertexAttribPointervNV))
1367 return FALSE;
1368 GLH_EXT_NAME(glIsProgramNV) = (PFNGLISPROGRAMNVPROC)GLH_EXT_GET_PROC_ADDRESS("glIsProgramNV");
1369 if (NULL == GLH_EXT_NAME(glIsProgramNV))
1370 return FALSE;
1371 GLH_EXT_NAME(glLoadProgramNV) = (PFNGLLOADPROGRAMNVPROC)GLH_EXT_GET_PROC_ADDRESS("glLoadProgramNV");
1372 if (NULL == GLH_EXT_NAME(glLoadProgramNV))
1373 return FALSE;
1374 GLH_EXT_NAME(glProgramParameter4dNV) = (PFNGLPROGRAMPARAMETER4DNVPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramParameter4dNV");
1375 if (NULL == GLH_EXT_NAME(glProgramParameter4dNV))
1376 return FALSE;
1377 GLH_EXT_NAME(glProgramParameter4dvNV) = (PFNGLPROGRAMPARAMETER4DVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramParameter4dvNV");
1378 if (NULL == GLH_EXT_NAME(glProgramParameter4dvNV))
1379 return FALSE;
1380 GLH_EXT_NAME(glProgramParameter4fNV) = (PFNGLPROGRAMPARAMETER4FNVPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramParameter4fNV");
1381 if (NULL == GLH_EXT_NAME(glProgramParameter4fNV))
1382 return FALSE;
1383 GLH_EXT_NAME(glProgramParameter4fvNV) = (PFNGLPROGRAMPARAMETER4FVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramParameter4fvNV");
1384 if (NULL == GLH_EXT_NAME(glProgramParameter4fvNV))
1385 return FALSE;
1386 GLH_EXT_NAME(glProgramParameters4dvNV) = (PFNGLPROGRAMPARAMETERS4DVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramParameters4dvNV");
1387 if (NULL == GLH_EXT_NAME(glProgramParameters4dvNV))
1388 return FALSE;
1389 GLH_EXT_NAME(glProgramParameters4fvNV) = (PFNGLPROGRAMPARAMETERS4FVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glProgramParameters4fvNV");
1390 if (NULL == GLH_EXT_NAME(glProgramParameters4fvNV))
1391 return FALSE;
1392 GLH_EXT_NAME(glRequestResidentProgramsNV) = (PFNGLREQUESTRESIDENTPROGRAMSNVPROC)GLH_EXT_GET_PROC_ADDRESS("glRequestResidentProgramsNV");
1393 if (NULL == GLH_EXT_NAME(glRequestResidentProgramsNV))
1394 return FALSE;
1395 GLH_EXT_NAME(glTrackMatrixNV) = (PFNGLTRACKMATRIXNVPROC)GLH_EXT_GET_PROC_ADDRESS("glTrackMatrixNV");
1396 if (NULL == GLH_EXT_NAME(glTrackMatrixNV))
1397 return FALSE;
1398 GLH_EXT_NAME(glVertexAttribPointerNV) = (PFNGLVERTEXATTRIBPOINTERNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribPointerNV");
1399 if (NULL == GLH_EXT_NAME(glVertexAttribPointerNV))
1400 return FALSE;
1401 GLH_EXT_NAME(glVertexAttrib1dNV) = (PFNGLVERTEXATTRIB1DNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1dNV");
1402 if (NULL == GLH_EXT_NAME(glVertexAttrib1dNV))
1403 return FALSE;
1404 GLH_EXT_NAME(glVertexAttrib1dvNV) = (PFNGLVERTEXATTRIB1DVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1dvNV");
1405 if (NULL == GLH_EXT_NAME(glVertexAttrib1dvNV))
1406 return FALSE;
1407 GLH_EXT_NAME(glVertexAttrib1fNV) = (PFNGLVERTEXATTRIB1FNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1fNV");
1408 if (NULL == GLH_EXT_NAME(glVertexAttrib1fNV))
1409 return FALSE;
1410 GLH_EXT_NAME(glVertexAttrib1fvNV) = (PFNGLVERTEXATTRIB1FVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1fvNV");
1411 if (NULL == GLH_EXT_NAME(glVertexAttrib1fvNV))
1412 return FALSE;
1413 GLH_EXT_NAME(glVertexAttrib1sNV) = (PFNGLVERTEXATTRIB1SNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1sNV");
1414 if (NULL == GLH_EXT_NAME(glVertexAttrib1sNV))
1415 return FALSE;
1416 GLH_EXT_NAME(glVertexAttrib1svNV) = (PFNGLVERTEXATTRIB1SVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1svNV");
1417 if (NULL == GLH_EXT_NAME(glVertexAttrib1svNV))
1418 return FALSE;
1419 GLH_EXT_NAME(glVertexAttrib2dNV) = (PFNGLVERTEXATTRIB2DNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2dNV");
1420 if (NULL == GLH_EXT_NAME(glVertexAttrib2dNV))
1421 return FALSE;
1422 GLH_EXT_NAME(glVertexAttrib2dvNV) = (PFNGLVERTEXATTRIB2DVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2dvNV");
1423 if (NULL == GLH_EXT_NAME(glVertexAttrib2dvNV))
1424 return FALSE;
1425 GLH_EXT_NAME(glVertexAttrib2fNV) = (PFNGLVERTEXATTRIB2FNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2fNV");
1426 if (NULL == GLH_EXT_NAME(glVertexAttrib2fNV))
1427 return FALSE;
1428 GLH_EXT_NAME(glVertexAttrib2fvNV) = (PFNGLVERTEXATTRIB2FVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2fvNV");
1429 if (NULL == GLH_EXT_NAME(glVertexAttrib2fvNV))
1430 return FALSE;
1431 GLH_EXT_NAME(glVertexAttrib2sNV) = (PFNGLVERTEXATTRIB2SNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2sNV");
1432 if (NULL == GLH_EXT_NAME(glVertexAttrib2sNV))
1433 return FALSE;
1434 GLH_EXT_NAME(glVertexAttrib2svNV) = (PFNGLVERTEXATTRIB2SVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2svNV");
1435 if (NULL == GLH_EXT_NAME(glVertexAttrib2svNV))
1436 return FALSE;
1437 GLH_EXT_NAME(glVertexAttrib3dNV) = (PFNGLVERTEXATTRIB3DNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3dNV");
1438 if (NULL == GLH_EXT_NAME(glVertexAttrib3dNV))
1439 return FALSE;
1440 GLH_EXT_NAME(glVertexAttrib3dvNV) = (PFNGLVERTEXATTRIB3DVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3dvNV");
1441 if (NULL == GLH_EXT_NAME(glVertexAttrib3dvNV))
1442 return FALSE;
1443 GLH_EXT_NAME(glVertexAttrib3fNV) = (PFNGLVERTEXATTRIB3FNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3fNV");
1444 if (NULL == GLH_EXT_NAME(glVertexAttrib3fNV))
1445 return FALSE;
1446 GLH_EXT_NAME(glVertexAttrib3fvNV) = (PFNGLVERTEXATTRIB3FVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3fvNV");
1447 if (NULL == GLH_EXT_NAME(glVertexAttrib3fvNV))
1448 return FALSE;
1449 GLH_EXT_NAME(glVertexAttrib3sNV) = (PFNGLVERTEXATTRIB3SNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3sNV");
1450 if (NULL == GLH_EXT_NAME(glVertexAttrib3sNV))
1451 return FALSE;
1452 GLH_EXT_NAME(glVertexAttrib3svNV) = (PFNGLVERTEXATTRIB3SVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3svNV");
1453 if (NULL == GLH_EXT_NAME(glVertexAttrib3svNV))
1454 return FALSE;
1455 GLH_EXT_NAME(glVertexAttrib4dNV) = (PFNGLVERTEXATTRIB4DNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4dNV");
1456 if (NULL == GLH_EXT_NAME(glVertexAttrib4dNV))
1457 return FALSE;
1458 GLH_EXT_NAME(glVertexAttrib4dvNV) = (PFNGLVERTEXATTRIB4DVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4dvNV");
1459 if (NULL == GLH_EXT_NAME(glVertexAttrib4dvNV))
1460 return FALSE;
1461 GLH_EXT_NAME(glVertexAttrib4fNV) = (PFNGLVERTEXATTRIB4FNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4fNV");
1462 if (NULL == GLH_EXT_NAME(glVertexAttrib4fNV))
1463 return FALSE;
1464 GLH_EXT_NAME(glVertexAttrib4fvNV) = (PFNGLVERTEXATTRIB4FVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4fvNV");
1465 if (NULL == GLH_EXT_NAME(glVertexAttrib4fvNV))
1466 return FALSE;
1467 GLH_EXT_NAME(glVertexAttrib4sNV) = (PFNGLVERTEXATTRIB4SNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4sNV");
1468 if (NULL == GLH_EXT_NAME(glVertexAttrib4sNV))
1469 return FALSE;
1470 GLH_EXT_NAME(glVertexAttrib4svNV) = (PFNGLVERTEXATTRIB4SVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4svNV");
1471 if (NULL == GLH_EXT_NAME(glVertexAttrib4svNV))
1472 return FALSE;
1473 GLH_EXT_NAME(glVertexAttrib4ubvNV) = (PFNGLVERTEXATTRIB4UBVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4ubvNV");
1474 if (NULL == GLH_EXT_NAME(glVertexAttrib4ubvNV))
1475 return FALSE;
1476 GLH_EXT_NAME(glVertexAttribs1dvNV) = (PFNGLVERTEXATTRIBS1DVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribs1dvNV");
1477 if (NULL == GLH_EXT_NAME(glVertexAttribs1dvNV))
1478 return FALSE;
1479 GLH_EXT_NAME(glVertexAttribs1fvNV) = (PFNGLVERTEXATTRIBS1FVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribs1fvNV");
1480 if (NULL == GLH_EXT_NAME(glVertexAttribs1fvNV))
1481 return FALSE;
1482 GLH_EXT_NAME(glVertexAttribs1svNV) = (PFNGLVERTEXATTRIBS1SVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribs1svNV");
1483 if (NULL == GLH_EXT_NAME(glVertexAttribs1svNV))
1484 return FALSE;
1485 GLH_EXT_NAME(glVertexAttribs2dvNV) = (PFNGLVERTEXATTRIBS2DVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribs2dvNV");
1486 if (NULL == GLH_EXT_NAME(glVertexAttribs2dvNV))
1487 return FALSE;
1488 GLH_EXT_NAME(glVertexAttribs2fvNV) = (PFNGLVERTEXATTRIBS2FVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribs2fvNV");
1489 if (NULL == GLH_EXT_NAME(glVertexAttribs2fvNV))
1490 return FALSE;
1491 GLH_EXT_NAME(glVertexAttribs2svNV) = (PFNGLVERTEXATTRIBS2SVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribs2svNV");
1492 if (NULL == GLH_EXT_NAME(glVertexAttribs2svNV))
1493 return FALSE;
1494 GLH_EXT_NAME(glVertexAttribs3dvNV) = (PFNGLVERTEXATTRIBS3DVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribs3dvNV");
1495 if (NULL == GLH_EXT_NAME(glVertexAttribs3dvNV))
1496 return FALSE;
1497 GLH_EXT_NAME(glVertexAttribs3fvNV) = (PFNGLVERTEXATTRIBS3FVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribs3fvNV");
1498 if (NULL == GLH_EXT_NAME(glVertexAttribs3fvNV))
1499 return FALSE;
1500 GLH_EXT_NAME(glVertexAttribs3svNV) = (PFNGLVERTEXATTRIBS3SVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribs3svNV");
1501 if (NULL == GLH_EXT_NAME(glVertexAttribs3svNV))
1502 return FALSE;
1503 GLH_EXT_NAME(glVertexAttribs4dvNV) = (PFNGLVERTEXATTRIBS4DVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribs4dvNV");
1504 if (NULL == GLH_EXT_NAME(glVertexAttribs4dvNV))
1505 return FALSE;
1506 GLH_EXT_NAME(glVertexAttribs4fvNV) = (PFNGLVERTEXATTRIBS4FVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribs4fvNV");
1507 if (NULL == GLH_EXT_NAME(glVertexAttribs4fvNV))
1508 return FALSE;
1509 GLH_EXT_NAME(glVertexAttribs4svNV) = (PFNGLVERTEXATTRIBS4SVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribs4svNV");
1510 if (NULL == GLH_EXT_NAME(glVertexAttribs4svNV))
1511 return FALSE;
1512 GLH_EXT_NAME(glVertexAttribs4ubvNV) = (PFNGLVERTEXATTRIBS4UBVNVPROC)GLH_EXT_GET_PROC_ADDRESS("glVertexAttribs4ubvNV");
1513 if (NULL == GLH_EXT_NAME(glVertexAttribs4ubvNV))
1514 return FALSE;
1515#endif
1516
1517#ifdef GL_SGIS_generate_mipmap
1518 } else if (0 == strcmp(extension, "GL_SGIS_generate_mipmap")) {
1519#endif
1520
1521#ifdef GL_SGIS_texture_lod
1522 } else if (0 == strcmp(extension, "GL_SGIS_texture_lod")) {
1523#endif
1524
1525#ifdef GL_SGIX_depth_texture
1526 } else if (0 == strcmp(extension, "GL_SGIX_depth_texture")) {
1527#endif
1528
1529#ifdef GL_SGIX_shadow
1530 } else if (0 == strcmp(extension, "GL_SGIX_shadow")) {
1531#endif
1532
1533#ifdef GL_VERSION_1_2
1534 } else if (0 == strcmp(extension, "GL_VERSION_1_2")) {
1535 GLH_CORE_1_2_NAME(glBlendColor) = (PFNGLBLENDCOLORPROC)GLH_EXT_GET_PROC_ADDRESS("glBlendColor");
1536 if (NULL == GLH_CORE_1_2_NAME(glBlendColor))
1537 return FALSE;
1538 GLH_CORE_1_2_NAME(glBlendEquation) = (PFNGLBLENDEQUATIONPROC)GLH_EXT_GET_PROC_ADDRESS("glBlendEquation");
1539 if (NULL == GLH_CORE_1_2_NAME(glBlendEquation))
1540 return FALSE;
1541 GLH_CORE_1_2_NAME(glDrawRangeElements) = (PFNGLDRAWRANGEELEMENTSPROC)GLH_EXT_GET_PROC_ADDRESS("glDrawRangeElements");
1542 if (NULL == GLH_CORE_1_2_NAME(glDrawRangeElements))
1543 return FALSE;
1544 GLH_CORE_1_2_NAME(glColorTable) = (PFNGLCOLORTABLEPROC)GLH_EXT_GET_PROC_ADDRESS("glColorTable");
1545 if (NULL == GLH_CORE_1_2_NAME(glColorTable))
1546 return FALSE;
1547 GLH_CORE_1_2_NAME(glColorTableParameterfv) = (PFNGLCOLORTABLEPARAMETERFVPROC)GLH_EXT_GET_PROC_ADDRESS("glColorTableParameterfv");
1548 if (NULL == GLH_CORE_1_2_NAME(glColorTableParameterfv))
1549 return FALSE;
1550 GLH_CORE_1_2_NAME(glColorTableParameteriv) = (PFNGLCOLORTABLEPARAMETERIVPROC)GLH_EXT_GET_PROC_ADDRESS("glColorTableParameteriv");
1551 if (NULL == GLH_CORE_1_2_NAME(glColorTableParameteriv))
1552 return FALSE;
1553 GLH_CORE_1_2_NAME(glCopyColorTable) = (PFNGLCOPYCOLORTABLEPROC)GLH_EXT_GET_PROC_ADDRESS("glCopyColorTable");
1554 if (NULL == GLH_CORE_1_2_NAME(glCopyColorTable))
1555 return FALSE;
1556 GLH_CORE_1_2_NAME(glGetColorTable) = (PFNGLGETCOLORTABLEPROC)GLH_EXT_GET_PROC_ADDRESS("glGetColorTable");
1557 if (NULL == GLH_CORE_1_2_NAME(glGetColorTable))
1558 return FALSE;
1559 GLH_CORE_1_2_NAME(glGetColorTableParameterfv) = (PFNGLGETCOLORTABLEPARAMETERFVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetColorTableParameterfv");
1560 if (NULL == GLH_CORE_1_2_NAME(glGetColorTableParameterfv))
1561 return FALSE;
1562 GLH_CORE_1_2_NAME(glGetColorTableParameteriv) = (PFNGLGETCOLORTABLEPARAMETERIVPROC)GLH_EXT_GET_PROC_ADDRESS("glGetColorTableParameteriv");
1563 if (NULL == GLH_CORE_1_2_NAME(glGetColorTableParameteriv))
1564 return FALSE;
1565 GLH_CORE_1_2_NAME(glTexImage3D) = (PFNGLTEXIMAGE3DPROC)GLH_EXT_GET_PROC_ADDRESS("glTexImage3D");
1566 if (NULL == GLH_CORE_1_2_NAME(glTexImage3D))
1567 return FALSE;
1568 GLH_CORE_1_2_NAME(glTexSubImage3D) = (PFNGLTEXSUBIMAGE3DPROC)GLH_EXT_GET_PROC_ADDRESS("glTexSubImage3D");
1569 if (NULL == GLH_CORE_1_2_NAME(glTexSubImage3D))
1570 return FALSE;
1571 GLH_CORE_1_2_NAME(glCopyTexSubImage3D) = (PFNGLCOPYTEXSUBIMAGE3DPROC)GLH_EXT_GET_PROC_ADDRESS("glCopyTexSubImage3D");
1572 if (NULL == GLH_CORE_1_2_NAME(glCopyTexSubImage3D))
1573 return FALSE;
1574#endif
1575
1576#ifdef GL_WIN_swap_hint
1577 } else if (0 == strcmp(extension, "GL_WIN_swap_hint")) {
1578 GLH_EXT_NAME(glAddSwapHintRectWIN) = (PFNGLADDSWAPHINTRECTWINPROC)GLH_EXT_GET_PROC_ADDRESS("glAddSwapHintRectWIN");
1579 if (NULL == GLH_EXT_NAME(glAddSwapHintRectWIN))
1580 return FALSE;
1581#endif
1582
1583#ifdef WGL_ARB_pbuffer
1584 } else if (0 == strcmp(extension, "WGL_ARB_pbuffer")) {
1585# ifdef _WIN32
1586 GLH_EXT_NAME(wglCreatePbufferARB) = (PFNWGLCREATEPBUFFERARBPROC)GLH_EXT_GET_PROC_ADDRESS("wglCreatePbufferARB");
1587 if (NULL == GLH_EXT_NAME(wglCreatePbufferARB))
1588 return FALSE;
1589# endif
1590# ifdef _WIN32
1591 GLH_EXT_NAME(wglGetPbufferDCARB) = (PFNWGLGETPBUFFERDCARBPROC)GLH_EXT_GET_PROC_ADDRESS("wglGetPbufferDCARB");
1592 if (NULL == GLH_EXT_NAME(wglGetPbufferDCARB))
1593 return FALSE;
1594# endif
1595# ifdef _WIN32
1596 GLH_EXT_NAME(wglReleasePbufferDCARB) = (PFNWGLRELEASEPBUFFERDCARBPROC)GLH_EXT_GET_PROC_ADDRESS("wglReleasePbufferDCARB");
1597 if (NULL == GLH_EXT_NAME(wglReleasePbufferDCARB))
1598 return FALSE;
1599# endif
1600# ifdef _WIN32
1601 GLH_EXT_NAME(wglDestroyPbufferARB) = (PFNWGLDESTROYPBUFFERARBPROC)GLH_EXT_GET_PROC_ADDRESS("wglDestroyPbufferARB");
1602 if (NULL == GLH_EXT_NAME(wglDestroyPbufferARB))
1603 return FALSE;
1604# endif
1605# ifdef _WIN32
1606 GLH_EXT_NAME(wglQueryPbufferARB) = (PFNWGLQUERYPBUFFERARBPROC)GLH_EXT_GET_PROC_ADDRESS("wglQueryPbufferARB");
1607 if (NULL == GLH_EXT_NAME(wglQueryPbufferARB))
1608 return FALSE;
1609# endif
1610#endif
1611
1612#ifdef WGL_ARB_render_texture
1613# ifdef _WIN32
1614 GLH_EXT_NAME(wglBindTexImageARB) = (PFNWGLBINDTEXIMAGEARBPROC)GLH_EXT_GET_PROC_ADDRESS("wglBindTexImageARB");
1615 if (NULL == GLH_EXT_NAME(wglBindTexImageARB))
1616 return FALSE;
1617# endif
1618# ifdef _WIN32
1619 GLH_EXT_NAME(wglReleaseTexImageARB) = (PFNWGLRELEASETEXIMAGEARBPROC)GLH_EXT_GET_PROC_ADDRESS("wglReleaseTexImageARB");
1620 if (NULL == GLH_EXT_NAME(wglReleaseTexImageARB))
1621 return FALSE;
1622# endif
1623# ifdef _WIN32
1624 GLH_EXT_NAME(wglSetPbufferAttribARB) = (PFNWGLSETPBUFFERATTRIBARBPROC)GLH_EXT_GET_PROC_ADDRESS("wglSetPbufferAttribARB");
1625 if (NULL == GLH_EXT_NAME(wglSetPbufferAttribARB))
1626 return FALSE;
1627# endif
1628#endif
1629
1630#ifdef WGL_ARB_pixel_format
1631 } else if (0 == strcmp(extension, "WGL_ARB_pixel_format")) {
1632# ifdef _WIN32
1633 GLH_EXT_NAME(wglGetPixelFormatAttribivARB) = (PFNWGLGETPIXELFORMATATTRIBIVARBPROC)GLH_EXT_GET_PROC_ADDRESS("wglGetPixelFormatAttribivARB");
1634 if (NULL == GLH_EXT_NAME(wglGetPixelFormatAttribivARB))
1635 return FALSE;
1636# endif
1637# ifdef _WIN32
1638 GLH_EXT_NAME(wglGetPixelFormatAttribfvARB) = (PFNWGLGETPIXELFORMATATTRIBFVARBPROC)GLH_EXT_GET_PROC_ADDRESS("wglGetPixelFormatAttribfvARB");
1639 if (NULL == GLH_EXT_NAME(wglGetPixelFormatAttribfvARB))
1640 return FALSE;
1641# endif
1642# ifdef _WIN32
1643 GLH_EXT_NAME(wglChoosePixelFormatARB) = (PFNWGLCHOOSEPIXELFORMATARBPROC)GLH_EXT_GET_PROC_ADDRESS("wglChoosePixelFormatARB");
1644 if (NULL == GLH_EXT_NAME(wglChoosePixelFormatARB))
1645 return FALSE;
1646# endif
1647#endif
1648
1649 } else {
1650 return FALSE;
1651 }
1652 return TRUE;
1653}
1654#endif
1655
1656#else // defined(__APPLE__)
1657
1658#ifdef GLH_EXT_SINGLE_FILE
1659
1660int glh_init_extension(const char* extension)
1661{
1662 // MBW -- XXX -- Should this check for extension availability?
1663 return TRUE;
1664}
1665#endif // GLH_EXT_SINGLE_FILE
1666
1667#endif // defined(__APPLE__)
1668
1669#undef GLH_EXT_SINGLE_FILE
1670
1671#endif /* GLH_GENEXT_H */
diff --git a/linden/indra/llwindow/files.darwin.lst b/linden/indra/llwindow/files.darwin.lst
deleted file mode 100644
index e8eca9b..0000000
--- a/linden/indra/llwindow/files.darwin.lst
+++ /dev/null
@@ -1,2 +0,0 @@
1llwindow/llkeyboardmacosx.cpp
2llwindow/llwindowmacosx.cpp
diff --git a/linden/indra/llwindow/files.linux.lst b/linden/indra/llwindow/files.linux.lst
deleted file mode 100644
index a2dfa07..0000000
--- a/linden/indra/llwindow/files.linux.lst
+++ /dev/null
@@ -1,3 +0,0 @@
1llwindow/llkeyboardsdl.cpp
2llwindow/llwindowsdl.cpp
3llwindow/llwindowmesaheadless.cpp
diff --git a/linden/indra/llwindow/files.lst b/linden/indra/llwindow/files.lst
deleted file mode 100644
index 1c16b09..0000000
--- a/linden/indra/llwindow/files.lst
+++ /dev/null
@@ -1,5 +0,0 @@
1llwindow/lldxhardware.cpp
2llwindow/llgl.cpp
3llwindow/llkeyboard.cpp
4llwindow/llwindow.cpp
5llwindow/llwindowheadless.cpp
diff --git a/linden/indra/llwindow/files.sunos5.lst b/linden/indra/llwindow/files.sunos5.lst
deleted file mode 100644
index a2dfa07..0000000
--- a/linden/indra/llwindow/files.sunos5.lst
+++ /dev/null
@@ -1,3 +0,0 @@
1llwindow/llkeyboardsdl.cpp
2llwindow/llwindowsdl.cpp
3llwindow/llwindowmesaheadless.cpp
diff --git a/linden/indra/llwindow/files.win32.lst b/linden/indra/llwindow/files.win32.lst
deleted file mode 100644
index 1abcb6e..0000000
--- a/linden/indra/llwindow/files.win32.lst
+++ /dev/null
@@ -1,2 +0,0 @@
1llwindow/llkeyboardwin32.cpp
2llwindow/llwindowwin32.cpp
diff --git a/linden/indra/llwindow/lldxhardware.cpp b/linden/indra/llwindow/lldxhardware.cpp
index c2d94c3..ec4230c 100644
--- a/linden/indra/llwindow/lldxhardware.cpp
+++ b/linden/indra/llwindow/lldxhardware.cpp
@@ -150,7 +150,7 @@ S32 LLVersion::getField(const S32 field_num)
150 } 150 }
151} 151}
152 152
153LLString LLDXDriverFile::dump() 153std::string LLDXDriverFile::dump()
154{ 154{
155 if (gWriteDebug) 155 if (gWriteDebug)
156 { 156 {
@@ -237,7 +237,7 @@ void LLDXHardware::cleanup()
237} 237}
238 238
239/* 239/*
240LLString LLDXHardware::dumpDevices() 240std::string LLDXHardware::dumpDevices()
241{ 241{
242 if (gWriteDebug) 242 if (gWriteDebug)
243 { 243 {
diff --git a/linden/indra/llwindow/lldxhardware.h b/linden/indra/llwindow/lldxhardware.h
index 12d106a..d63120c 100644
--- a/linden/indra/llwindow/lldxhardware.h
+++ b/linden/indra/llwindow/lldxhardware.h
@@ -53,7 +53,7 @@ protected:
53class LLDXDriverFile 53class LLDXDriverFile
54{ 54{
55public: 55public:
56 LLString dump(); 56 std::string dump();
57 57
58public: 58public:
59 std::string mFilepath; 59 std::string mFilepath;
@@ -103,7 +103,7 @@ public:
103 // ANY of them to match and return. 103 // ANY of them to match and return.
104 // LLDXDevice *findDevice(const std::string &vendor, const std::string &devices); 104 // LLDXDevice *findDevice(const std::string &vendor, const std::string &devices);
105 105
106 // LLString dumpDevices(); 106 // std::string dumpDevices();
107public: 107public:
108 typedef std::map<std::string, LLDXDevice *> device_map_t; 108 typedef std::map<std::string, LLDXDevice *> device_map_t;
109 // device_map_t mDevices; 109 // device_map_t mDevices;
diff --git a/linden/indra/llwindow/llgl.cpp b/linden/indra/llwindow/llgl.cpp
deleted file mode 100644
index debf2e3..0000000
--- a/linden/indra/llwindow/llgl.cpp
+++ /dev/null
@@ -1,1734 +0,0 @@
1/**
2 * @file llgl.cpp
3 * @brief LLGL implementation
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32// This file sets some global GL parameters, and implements some
33// useful functions for GL operations.
34
35#define GLH_EXT_SINGLE_FILE
36
37#include "linden_common.h"
38
39#include "boost/tokenizer.hpp"
40
41#include "llsys.h"
42
43#include "llgl.h"
44#include "llrender.h"
45
46#include "llerror.h"
47#include "llquaternion.h"
48#include "llmath.h"
49#include "m4math.h"
50#include "llstring.h"
51
52#include "llglheaders.h"
53
54#ifdef _DEBUG
55//#define GL_STATE_VERIFY
56#endif
57
58BOOL gDebugGL = FALSE;
59BOOL gClothRipple = FALSE;
60BOOL gNoRender = FALSE;
61LLMatrix4 gGLObliqueProjectionInverse;
62
63LLGLNamePool::pool_list_t LLGLNamePool::sInstances;
64
65#if (LL_WINDOWS || LL_LINUX) && !LL_MESA_HEADLESS
66// ATI prototypes
67// vertex blending prototypes
68PFNGLWEIGHTPOINTERARBPROC glWeightPointerARB = NULL;
69PFNGLVERTEXBLENDARBPROC glVertexBlendARB = NULL;
70PFNGLWEIGHTFVARBPROC glWeightfvARB = NULL;
71
72// Vertex buffer object prototypes
73PFNGLBINDBUFFERARBPROC glBindBufferARB = NULL;
74PFNGLDELETEBUFFERSARBPROC glDeleteBuffersARB = NULL;
75PFNGLGENBUFFERSARBPROC glGenBuffersARB = NULL;
76PFNGLISBUFFERARBPROC glIsBufferARB = NULL;
77PFNGLBUFFERDATAARBPROC glBufferDataARB = NULL;
78PFNGLBUFFERSUBDATAARBPROC glBufferSubDataARB = NULL;
79PFNGLGETBUFFERSUBDATAARBPROC glGetBufferSubDataARB = NULL;
80PFNGLMAPBUFFERARBPROC glMapBufferARB = NULL;
81PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB = NULL;
82PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB = NULL;
83PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB = NULL;
84
85// vertex object prototypes
86PFNGLNEWOBJECTBUFFERATIPROC glNewObjectBufferATI = NULL;
87PFNGLISOBJECTBUFFERATIPROC glIsObjectBufferATI = NULL;
88PFNGLUPDATEOBJECTBUFFERATIPROC glUpdateObjectBufferATI = NULL;
89PFNGLGETOBJECTBUFFERFVATIPROC glGetObjectBufferfvATI = NULL;
90PFNGLGETOBJECTBUFFERIVATIPROC glGetObjectBufferivATI = NULL;
91PFNGLFREEOBJECTBUFFERATIPROC glFreeObjectBufferATI = NULL;
92PFNGLARRAYOBJECTATIPROC glArrayObjectATI = NULL;
93PFNGLVERTEXATTRIBARRAYOBJECTATIPROC glVertexAttribArrayObjectATI = NULL;
94PFNGLGETARRAYOBJECTFVATIPROC glGetArrayObjectfvATI = NULL;
95PFNGLGETARRAYOBJECTIVATIPROC glGetArrayObjectivATI = NULL;
96PFNGLVARIANTARRAYOBJECTATIPROC glVariantObjectArrayATI = NULL;
97PFNGLGETVARIANTARRAYOBJECTFVATIPROC glGetVariantArrayObjectfvATI = NULL;
98PFNGLGETVARIANTARRAYOBJECTIVATIPROC glGetVariantArrayObjectivATI = NULL;
99
100// GL_ARB_occlusion_query
101PFNGLGENQUERIESARBPROC glGenQueriesARB = NULL;
102PFNGLDELETEQUERIESARBPROC glDeleteQueriesARB = NULL;
103PFNGLISQUERYARBPROC glIsQueryARB = NULL;
104PFNGLBEGINQUERYARBPROC glBeginQueryARB = NULL;
105PFNGLENDQUERYARBPROC glEndQueryARB = NULL;
106PFNGLGETQUERYIVARBPROC glGetQueryivARB = NULL;
107PFNGLGETQUERYOBJECTIVARBPROC glGetQueryObjectivARB = NULL;
108PFNGLGETQUERYOBJECTUIVARBPROC glGetQueryObjectuivARB = NULL;
109
110// GL_ARB_point_parameters
111PFNGLPOINTPARAMETERFARBPROC glPointParameterfARB = NULL;
112PFNGLPOINTPARAMETERFVARBPROC glPointParameterfvARB = NULL;
113
114// GL_EXT_framebuffer_object
115PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT = NULL;
116PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT = NULL;
117PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT = NULL;
118PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT = NULL;
119PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT = NULL;
120PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT = NULL;
121PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT = NULL;
122PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT = NULL;
123PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT = NULL;
124PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT = NULL;
125PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT = NULL;
126PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT = NULL;
127PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT = NULL;
128PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT = NULL;
129PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT = NULL;
130PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT = NULL;
131PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT = NULL;
132
133//shader object prototypes
134PFNGLDELETEOBJECTARBPROC glDeleteObjectARB = NULL;
135PFNGLGETHANDLEARBPROC glGetHandleARB = NULL;
136PFNGLDETACHOBJECTARBPROC glDetachObjectARB = NULL;
137PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB = NULL;
138PFNGLSHADERSOURCEARBPROC glShaderSourceARB = NULL;
139PFNGLCOMPILESHADERARBPROC glCompileShaderARB = NULL;
140PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB = NULL;
141PFNGLATTACHOBJECTARBPROC glAttachObjectARB = NULL;
142PFNGLLINKPROGRAMARBPROC glLinkProgramARB = NULL;
143PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB = NULL;
144PFNGLVALIDATEPROGRAMARBPROC glValidateProgramARB = NULL;
145PFNGLUNIFORM1FARBPROC glUniform1fARB = NULL;
146PFNGLUNIFORM2FARBPROC glUniform2fARB = NULL;
147PFNGLUNIFORM3FARBPROC glUniform3fARB = NULL;
148PFNGLUNIFORM4FARBPROC glUniform4fARB = NULL;
149PFNGLUNIFORM1IARBPROC glUniform1iARB = NULL;
150PFNGLUNIFORM2IARBPROC glUniform2iARB = NULL;
151PFNGLUNIFORM3IARBPROC glUniform3iARB = NULL;
152PFNGLUNIFORM4IARBPROC glUniform4iARB = NULL;
153PFNGLUNIFORM1FVARBPROC glUniform1fvARB = NULL;
154PFNGLUNIFORM2FVARBPROC glUniform2fvARB = NULL;
155PFNGLUNIFORM3FVARBPROC glUniform3fvARB = NULL;
156PFNGLUNIFORM4FVARBPROC glUniform4fvARB = NULL;
157PFNGLUNIFORM1IVARBPROC glUniform1ivARB = NULL;
158PFNGLUNIFORM2IVARBPROC glUniform2ivARB = NULL;
159PFNGLUNIFORM3IVARBPROC glUniform3ivARB = NULL;
160PFNGLUNIFORM4IVARBPROC glUniform4ivARB = NULL;
161PFNGLUNIFORMMATRIX2FVARBPROC glUniformMatrix2fvARB = NULL;
162PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fvARB = NULL;
163PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fvARB = NULL;
164PFNGLGETOBJECTPARAMETERFVARBPROC glGetObjectParameterfvARB = NULL;
165PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB = NULL;
166PFNGLGETINFOLOGARBPROC glGetInfoLogARB = NULL;
167PFNGLGETATTACHEDOBJECTSARBPROC glGetAttachedObjectsARB = NULL;
168PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB = NULL;
169PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniformARB = NULL;
170PFNGLGETUNIFORMFVARBPROC glGetUniformfvARB = NULL;
171PFNGLGETUNIFORMIVARBPROC glGetUniformivARB = NULL;
172PFNGLGETSHADERSOURCEARBPROC glGetShaderSourceARB = NULL;
173
174// vertex shader prototypes
175#if LL_LINUX
176PFNGLVERTEXATTRIB1DARBPROC glVertexAttrib1dARB = NULL;
177PFNGLVERTEXATTRIB1DVARBPROC glVertexAttrib1dvARB = NULL;
178PFNGLVERTEXATTRIB1FARBPROC glVertexAttrib1fARB = NULL;
179PFNGLVERTEXATTRIB1FVARBPROC glVertexAttrib1fvARB = NULL;
180PFNGLVERTEXATTRIB1SARBPROC glVertexAttrib1sARB = NULL;
181PFNGLVERTEXATTRIB1SVARBPROC glVertexAttrib1svARB = NULL;
182PFNGLVERTEXATTRIB2DARBPROC glVertexAttrib2dARB = NULL;
183PFNGLVERTEXATTRIB2DVARBPROC glVertexAttrib2dvARB = NULL;
184PFNGLVERTEXATTRIB2FARBPROC glVertexAttrib2fARB = NULL;
185PFNGLVERTEXATTRIB2FVARBPROC glVertexAttrib2fvARB = NULL;
186PFNGLVERTEXATTRIB2SARBPROC glVertexAttrib2sARB = NULL;
187PFNGLVERTEXATTRIB2SVARBPROC glVertexAttrib2svARB = NULL;
188PFNGLVERTEXATTRIB3DARBPROC glVertexAttrib3dARB = NULL;
189PFNGLVERTEXATTRIB3DVARBPROC glVertexAttrib3dvARB = NULL;
190PFNGLVERTEXATTRIB3FARBPROC glVertexAttrib3fARB = NULL;
191PFNGLVERTEXATTRIB3FVARBPROC glVertexAttrib3fvARB = NULL;
192PFNGLVERTEXATTRIB3SARBPROC glVertexAttrib3sARB = NULL;
193PFNGLVERTEXATTRIB3SVARBPROC glVertexAttrib3svARB = NULL;
194#endif // LL_LINUX
195PFNGLVERTEXATTRIB4NBVARBPROC glVertexAttrib4nbvARB = NULL;
196PFNGLVERTEXATTRIB4NIVARBPROC glVertexAttrib4nivARB = NULL;
197PFNGLVERTEXATTRIB4NSVARBPROC glVertexAttrib4nsvARB = NULL;
198PFNGLVERTEXATTRIB4NUBARBPROC glVertexAttrib4nubARB = NULL;
199PFNGLVERTEXATTRIB4NUBVARBPROC glVertexAttrib4nubvARB = NULL;
200PFNGLVERTEXATTRIB4NUIVARBPROC glVertexAttrib4nuivARB = NULL;
201PFNGLVERTEXATTRIB4NUSVARBPROC glVertexAttrib4nusvARB = NULL;
202#if LL_LINUX
203PFNGLVERTEXATTRIB4BVARBPROC glVertexAttrib4bvARB = NULL;
204PFNGLVERTEXATTRIB4DARBPROC glVertexAttrib4dARB = NULL;
205PFNGLVERTEXATTRIB4DVARBPROC glVertexAttrib4dvARB = NULL;
206PFNGLVERTEXATTRIB4FARBPROC glVertexAttrib4fARB = NULL;
207PFNGLVERTEXATTRIB4FVARBPROC glVertexAttrib4fvARB = NULL;
208PFNGLVERTEXATTRIB4IVARBPROC glVertexAttrib4ivARB = NULL;
209PFNGLVERTEXATTRIB4SARBPROC glVertexAttrib4sARB = NULL;
210PFNGLVERTEXATTRIB4SVARBPROC glVertexAttrib4svARB = NULL;
211PFNGLVERTEXATTRIB4UBVARBPROC glVertexAttrib4ubvARB = NULL;
212PFNGLVERTEXATTRIB4UIVARBPROC glVertexAttrib4uivARB = NULL;
213PFNGLVERTEXATTRIB4USVARBPROC glVertexAttrib4usvARB = NULL;
214PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB = NULL;
215PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB = NULL;
216PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB = NULL;
217PFNGLPROGRAMSTRINGARBPROC glProgramStringARB = NULL;
218PFNGLBINDPROGRAMARBPROC glBindProgramARB = NULL;
219PFNGLDELETEPROGRAMSARBPROC glDeleteProgramsARB = NULL;
220PFNGLGENPROGRAMSARBPROC glGenProgramsARB = NULL;
221PFNGLPROGRAMENVPARAMETER4DARBPROC glProgramEnvParameter4dARB = NULL;
222PFNGLPROGRAMENVPARAMETER4DVARBPROC glProgramEnvParameter4dvARB = NULL;
223PFNGLPROGRAMENVPARAMETER4FARBPROC glProgramEnvParameter4fARB = NULL;
224PFNGLPROGRAMENVPARAMETER4FVARBPROC glProgramEnvParameter4fvARB = NULL;
225PFNGLPROGRAMLOCALPARAMETER4DARBPROC glProgramLocalParameter4dARB = NULL;
226PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glProgramLocalParameter4dvARB = NULL;
227PFNGLPROGRAMLOCALPARAMETER4FARBPROC glProgramLocalParameter4fARB = NULL;
228PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glProgramLocalParameter4fvARB = NULL;
229PFNGLGETPROGRAMENVPARAMETERDVARBPROC glGetProgramEnvParameterdvARB = NULL;
230PFNGLGETPROGRAMENVPARAMETERFVARBPROC glGetProgramEnvParameterfvARB = NULL;
231PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glGetProgramLocalParameterdvARB = NULL;
232PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glGetProgramLocalParameterfvARB = NULL;
233PFNGLGETPROGRAMIVARBPROC glGetProgramivARB = NULL;
234PFNGLGETPROGRAMSTRINGARBPROC glGetProgramStringARB = NULL;
235PFNGLGETVERTEXATTRIBDVARBPROC glGetVertexAttribdvARB = NULL;
236PFNGLGETVERTEXATTRIBFVARBPROC glGetVertexAttribfvARB = NULL;
237PFNGLGETVERTEXATTRIBIVARBPROC glGetVertexAttribivARB = NULL;
238PFNGLGETVERTEXATTRIBPOINTERVARBPROC glGetVertexAttribPointervARB = NULL;
239PFNGLISPROGRAMARBPROC glIsProgramARB = NULL;
240#endif // LL_LINUX
241PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB = NULL;
242PFNGLGETACTIVEATTRIBARBPROC glGetActiveAttribARB = NULL;
243PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB = NULL;
244
245#if LL_WINDOWS
246PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT = NULL;
247#endif
248
249#if LL_LINUX
250PFNGLCOLORTABLEEXTPROC glColorTableEXT = NULL;
251#endif // LL_LINUX
252
253#endif
254
255LLGLManager gGLManager;
256
257LLGLManager::LLGLManager() :
258 mInited(FALSE),
259 mIsDisabled(FALSE),
260
261 mHasMultitexture(FALSE),
262 mNumTextureUnits(1),
263 mHasMipMapGeneration(FALSE),
264 mHasPalettedTextures(FALSE),
265 mHasCompressedTextures(FALSE),
266 mHasFramebufferObject(FALSE),
267
268 mHasVertexBufferObject(FALSE),
269 mHasPBuffer(FALSE),
270 mHasShaderObjects(FALSE),
271 mHasVertexShader(FALSE),
272 mHasFragmentShader(FALSE),
273 mHasOcclusionQuery(FALSE),
274 mHasPointParameters(FALSE),
275
276 mHasAnisotropic(FALSE),
277 mHasARBEnvCombine(FALSE),
278 mHasCubeMap(FALSE),
279
280 mIsATI(FALSE),
281 mIsNVIDIA(FALSE),
282 mIsIntel(FALSE),
283 mIsGF2or4MX(FALSE),
284 mIsGF3(FALSE),
285 mIsGFFX(FALSE),
286 mATIOffsetVerticalLines(FALSE),
287
288 mHasRequirements(TRUE),
289
290 mHasSeparateSpecularColor(FALSE),
291
292 mDriverVersionMajor(1),
293 mDriverVersionMinor(0),
294 mDriverVersionRelease(0),
295 mGLVersion(1.0f),
296
297 mVRAM(0),
298 mGLMaxVertexRange(0),
299 mGLMaxIndexRange(0)
300{
301}
302
303//---------------------------------------------------------------------
304// Global initialization for GL
305//---------------------------------------------------------------------
306void LLGLManager::initWGL()
307{
308 mHasPBuffer = FALSE;
309#if LL_WINDOWS && !LL_MESA_HEADLESS
310 if (!glh_init_extensions("WGL_ARB_pixel_format"))
311 {
312 LL_WARNS("RenderInit") << "No ARB pixel format extensions" << LL_ENDL;
313 }
314
315 if (ExtensionExists("WGL_EXT_swap_control", gGLHExts.mSysExts))
316 {
317 GLH_EXT_NAME(wglSwapIntervalEXT) = (PFNWGLSWAPINTERVALEXTPROC)GLH_EXT_GET_PROC_ADDRESS("wglSwapIntervalEXT");
318 }
319
320 if( !glh_init_extensions("WGL_ARB_pbuffer") )
321 {
322 LL_WARNS("RenderInit") << "No ARB WGL PBuffer extensions" << LL_ENDL;
323 }
324
325 if( !glh_init_extensions("WGL_ARB_render_texture") )
326 {
327 LL_WARNS("RenderInit") << "No ARB WGL render texture extensions" << LL_ENDL;
328 }
329
330 mHasPBuffer = ExtensionExists("WGL_ARB_pbuffer", gGLHExts.mSysExts) &&
331 ExtensionExists("WGL_ARB_render_texture", gGLHExts.mSysExts) &&
332 ExtensionExists("WGL_ARB_pixel_format", gGLHExts.mSysExts);
333#endif
334}
335
336// return false if unable (or unwilling due to old drivers) to init GL
337bool LLGLManager::initGL()
338{
339 if (mInited)
340 {
341 LL_ERRS("RenderInit") << "Calling init on LLGLManager after already initialized!" << LL_ENDL;
342 }
343
344 GLint alpha_bits;
345 glGetIntegerv( GL_ALPHA_BITS, &alpha_bits );
346 if( 8 != alpha_bits )
347 {
348 LL_WARNS("RenderInit") << "Frame buffer has less than 8 bits of alpha. Avatar texture compositing will fail." << LL_ENDL;
349 }
350
351 // Extract video card strings and convert to upper case to
352 // work around driver-to-driver variation in capitalization.
353 mGLVendor = LLString((const char *)glGetString(GL_VENDOR));
354 LLString::toUpper(mGLVendor);
355
356 mGLRenderer = LLString((const char *)glGetString(GL_RENDERER));
357 LLString::toUpper(mGLRenderer);
358
359 parse_gl_version( &mDriverVersionMajor,
360 &mDriverVersionMinor,
361 &mDriverVersionRelease,
362 &mDriverVersionVendorString );
363
364 mGLVersion = mDriverVersionMajor + mDriverVersionMinor * .1f;
365
366 // Trailing space necessary to keep "nVidia Corpor_ati_on" cards
367 // from being recognized as ATI.
368 if (mGLVendor.substr(0,4) == "ATI ")
369 {
370 mGLVendorShort = "ATI";
371 BOOL mobile = FALSE;
372 if (mGLRenderer.find("MOBILITY") != LLString::npos)
373 {
374 mobile = TRUE;
375 }
376 mIsATI = TRUE;
377
378#if LL_WINDOWS && !LL_MESA_HEADLESS
379 if (mDriverVersionRelease < 3842)
380 {
381 mATIOffsetVerticalLines = TRUE;
382 }
383#endif // LL_WINDOWS
384 }
385 else if (mGLVendor.find("NVIDIA ") != LLString::npos)
386 {
387 mGLVendorShort = "NVIDIA";
388 mIsNVIDIA = TRUE;
389 if ( mGLRenderer.find("GEFORCE4 MX") != LLString::npos
390 || mGLRenderer.find("GEFORCE2") != LLString::npos
391 || mGLRenderer.find("GEFORCE 2") != LLString::npos
392 || mGLRenderer.find("GEFORCE4 460 GO") != LLString::npos
393 || mGLRenderer.find("GEFORCE4 440 GO") != LLString::npos
394 || mGLRenderer.find("GEFORCE4 420 GO") != LLString::npos)
395 {
396 mIsGF2or4MX = TRUE;
397 }
398 else if (mGLRenderer.find("GEFORCE FX") != LLString::npos
399 || mGLRenderer.find("QUADRO FX") != LLString::npos
400 || mGLRenderer.find("NV34") != LLString::npos)
401 {
402 mIsGFFX = TRUE;
403 }
404 else if(mGLRenderer.find("GEFORCE3") != LLString::npos)
405 {
406 mIsGF3 = TRUE;
407 }
408
409 }
410 else if (mGLVendor.find("INTEL") != LLString::npos
411#if LL_LINUX
412 // The Mesa-based drivers put this in the Renderer string,
413 // not the Vendor string.
414 || mGLRenderer.find("INTEL") != LLString::npos
415#endif //LL_LINUX
416 )
417 {
418 mGLVendorShort = "INTEL";
419 mIsIntel = TRUE;
420 }
421 else
422 {
423 mGLVendorShort = "MISC";
424 }
425
426 // This is called here because it depends on the setting of mIsGF2or4MX, and sets up mHasMultitexture.
427 initExtensions();
428
429 if (mHasMultitexture)
430 {
431 GLint num_tex_units;
432 glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &num_tex_units);
433 mNumTextureUnits = llmin(num_tex_units, (GLint)MAX_GL_TEXTURE_UNITS);
434 if (mIsIntel)
435 {
436 mNumTextureUnits = llmin(mNumTextureUnits, 2);
437 }
438 }
439 else
440 {
441 mHasRequirements = FALSE;
442
443 // We don't support cards that don't support the GL_ARB_multitexture extension
444 LL_WARNS("RenderInit") << "GL Drivers do not support GL_ARB_multitexture" << LL_ENDL;
445 return false;
446 }
447
448
449 initGLStates();
450 return true;
451}
452
453void LLGLManager::getGLInfo(LLSD& info)
454{
455 info["GLInfo"]["GLVendor"] = LLString((const char *)glGetString(GL_VENDOR));
456 info["GLInfo"]["GLRenderer"] = LLString((const char *)glGetString(GL_RENDERER));
457 info["GLInfo"]["GLVersion"] = LLString((const char *)glGetString(GL_VERSION));
458
459#if !LL_MESA_HEADLESS
460 LLString all_exts = (const char *)gGLHExts.mSysExts;
461 boost::char_separator<char> sep(" ");
462 boost::tokenizer<boost::char_separator<char> > tok(all_exts, sep);
463 for(boost::tokenizer<boost::char_separator<char> >::iterator i = tok.begin(); i != tok.end(); ++i)
464 {
465 info["GLInfo"]["GLExtensions"].append(*i);
466 }
467#endif
468}
469
470LLString LLGLManager::getGLInfoString()
471{
472 LLString info_str;
473 LLString all_exts, line;
474
475 info_str += LLString("GL_VENDOR ") + LLString((const char *)glGetString(GL_VENDOR)) + LLString("\n");
476 info_str += LLString("GL_RENDERER ") + LLString((const char *)glGetString(GL_RENDERER)) + LLString("\n");
477 info_str += LLString("GL_VERSION ") + LLString((const char *)glGetString(GL_VERSION)) + LLString("\n");
478
479#if !LL_MESA_HEADLESS
480 all_exts = (const char *)gGLHExts.mSysExts;
481 LLString::replaceChar(all_exts, ' ', '\n');
482 info_str += LLString("GL_EXTENSIONS:\n") + all_exts + LLString("\n");
483#endif
484
485 return info_str;
486}
487
488void LLGLManager::printGLInfoString()
489{
490 LLString info_str;
491 LLString all_exts, line;
492
493 LL_INFOS("RenderInit") << "GL_VENDOR: " << ((const char *)glGetString(GL_VENDOR)) << LL_ENDL;
494 LL_INFOS("RenderInit") << "GL_RENDERER: " << ((const char *)glGetString(GL_RENDERER)) << LL_ENDL;
495 LL_INFOS("RenderInit") << "GL_VERSION: " << ((const char *)glGetString(GL_VERSION)) << LL_ENDL;
496
497#if !LL_MESA_HEADLESS
498 all_exts = (const char *)gGLHExts.mSysExts;
499 LLString::replaceChar(all_exts, ' ', '\n');
500 LL_DEBUGS("RenderInit") << "GL_EXTENSIONS:\n" << all_exts << LL_ENDL;
501#endif
502}
503
504LLString LLGLManager::getRawGLString()
505{
506 LLString gl_string;
507 gl_string.assign((char*)glGetString(GL_VENDOR));
508 gl_string.append(" ");
509 gl_string.append((char*)glGetString(GL_RENDERER));
510 return gl_string;
511}
512
513void LLGLManager::shutdownGL()
514{
515 if (mInited)
516 {
517 glFinish();
518 stop_glerror();
519 mInited = FALSE;
520 }
521}
522
523// these are used to turn software blending on. They appear in the Debug/Avatar menu
524// presence of vertex skinning/blending or vertex programs will set these to FALSE by default.
525
526extern LLCPUInfo gSysCPU;
527
528void LLGLManager::initExtensions()
529{
530#if LL_MESA_HEADLESS
531# if GL_ARB_multitexture
532 mHasMultitexture = TRUE;
533# else
534 mHasMultitexture = FALSE;
535# endif
536# if GL_ARB_texture_env_combine
537 mHasARBEnvCombine = TRUE;
538# else
539 mHasARBEnvCombine = FALSE;
540# endif
541# if GL_ARB_texture_compression
542 mHasCompressedTextures = TRUE;
543# else
544 mHasCompressedTextures = FALSE;
545# endif
546# if GL_ARB_vertex_buffer_object
547 mHasVertexBufferObject = TRUE;
548# else
549 mHasVertexBufferObject = FALSE;
550# endif
551# if GL_EXT_framebuffer_object
552 mHasFramebufferObject = TRUE;
553# else
554 mHasFramebufferObject = FALSE;
555# endif
556 mHasMipMapGeneration = FALSE;
557 mHasPalettedTextures = FALSE;
558 mHasSeparateSpecularColor = FALSE;
559 mHasAnisotropic = FALSE;
560 mHasCubeMap = FALSE;
561 mHasOcclusionQuery = FALSE;
562 mHasPointParameters = FALSE;
563 mHasShaderObjects = FALSE;
564 mHasVertexShader = FALSE;
565 mHasFragmentShader = FALSE;
566#else // LL_MESA_HEADLESS
567 mHasMultitexture = glh_init_extensions("GL_ARB_multitexture");
568 mHasMipMapGeneration = glh_init_extensions("GL_SGIS_generate_mipmap");
569 mHasPalettedTextures = glh_init_extension("GL_EXT_paletted_texture");
570 mHasSeparateSpecularColor = glh_init_extensions("GL_EXT_separate_specular_color");
571 mHasAnisotropic = glh_init_extensions("GL_EXT_texture_filter_anisotropic");
572 glh_init_extensions("GL_ARB_texture_cube_map");
573 mHasCubeMap = ExtensionExists("GL_ARB_texture_cube_map", gGLHExts.mSysExts);
574 mHasARBEnvCombine = ExtensionExists("GL_ARB_texture_env_combine", gGLHExts.mSysExts);
575 mHasCompressedTextures = glh_init_extensions("GL_ARB_texture_compression");
576 mHasOcclusionQuery = ExtensionExists("GL_ARB_occlusion_query", gGLHExts.mSysExts);
577 mHasVertexBufferObject = ExtensionExists("GL_ARB_vertex_buffer_object", gGLHExts.mSysExts);
578 // mask out FBO support when packed_depth_stencil isn't there 'cause we need it for LLRenderTarget -Brad
579 mHasFramebufferObject = ExtensionExists("GL_EXT_framebuffer_object", gGLHExts.mSysExts)
580 && ExtensionExists("GL_EXT_packed_depth_stencil", gGLHExts.mSysExts);
581#if !LL_DARWIN
582 mHasPointParameters = !mIsATI && ExtensionExists("GL_ARB_point_parameters", gGLHExts.mSysExts);
583#endif
584 mHasShaderObjects = ExtensionExists("GL_ARB_shader_objects", gGLHExts.mSysExts) && ExtensionExists("GL_ARB_shading_language_100", gGLHExts.mSysExts);
585 mHasVertexShader = ExtensionExists("GL_ARB_vertex_program", gGLHExts.mSysExts) && ExtensionExists("GL_ARB_vertex_shader", gGLHExts.mSysExts)
586 && ExtensionExists("GL_ARB_shading_language_100", gGLHExts.mSysExts);
587 mHasFragmentShader = ExtensionExists("GL_ARB_fragment_shader", gGLHExts.mSysExts) && ExtensionExists("GL_ARB_shading_language_100", gGLHExts.mSysExts);
588#endif
589
590#if LL_LINUX
591 // Our extension support for the Linux Client is very young with some
592 // potential driver gotchas, so offer a semi-secret way to turn it off.
593 if (getenv("LL_GL_NOEXT")) /* Flawfinder: ignore */
594 {
595 //mHasMultitexture = FALSE; // NEEDED!
596 mHasARBEnvCombine = FALSE;
597 mHasCompressedTextures = FALSE;
598 mHasVertexBufferObject = FALSE;
599 mHasFramebufferObject = FALSE;
600 mHasMipMapGeneration = FALSE;
601 mHasPalettedTextures = FALSE;
602 mHasSeparateSpecularColor = FALSE;
603 mHasAnisotropic = FALSE;
604 mHasCubeMap = FALSE;
605 mHasOcclusionQuery = FALSE;
606 mHasPointParameters = FALSE;
607 mHasShaderObjects = FALSE;
608 mHasVertexShader = FALSE;
609 mHasFragmentShader = FALSE;
610 LL_WARNS("RenderInit") << "GL extension support DISABLED via LL_GL_NOEXT" << LL_ENDL;
611 }
612 else if (getenv("LL_GL_BASICEXT")) /* Flawfinder: ignore */
613 {
614 // This switch attempts to turn off all support for exotic
615 // extensions which I believe correspond to fatal driver
616 // bug reports. This should be the default until we get a
617 // proper blacklist/whitelist on Linux.
618 mHasMipMapGeneration = FALSE;
619 mHasPalettedTextures = FALSE;
620 mHasAnisotropic = FALSE;
621 //mHasCubeMap = FALSE; // apparently fatal on Intel 915 & similar
622 //mHasOcclusionQuery = FALSE; // source of many ATI system hangs
623 mHasShaderObjects = FALSE;
624 mHasVertexShader = FALSE;
625 mHasFragmentShader = FALSE;
626 LL_WARNS("RenderInit") << "GL extension support forced to SIMPLE level via LL_GL_BASICEXT" << LL_ENDL;
627 }
628 if (getenv("LL_GL_BLACKLIST")) /* Flawfinder: ignore */
629 {
630 // This lets advanced troubleshooters disable specific
631 // GL extensions to isolate problems with their hardware.
632 // SL-28126
633 const char *const blacklist = getenv("LL_GL_BLACKLIST"); /* Flawfinder: ignore */
634 LL_WARNS("RenderInit") << "GL extension support partially disabled via LL_GL_BLACKLIST: " << blacklist << LL_ENDL;
635 if (strchr(blacklist,'a')) mHasARBEnvCombine = FALSE;
636 if (strchr(blacklist,'b')) mHasCompressedTextures = FALSE;
637 if (strchr(blacklist,'c')) mHasVertexBufferObject = FALSE;
638 if (strchr(blacklist,'d')) mHasMipMapGeneration = FALSE;//S
639 if (strchr(blacklist,'e')) mHasPalettedTextures = FALSE;//S
640// if (strchr(blacklist,'f')) mHasNVVertexArrayRange = FALSE;//S
641// if (strchr(blacklist,'g')) mHasNVFence = FALSE;//S
642 if (strchr(blacklist,'h')) mHasSeparateSpecularColor = FALSE;
643 if (strchr(blacklist,'i')) mHasAnisotropic = FALSE;//S
644 if (strchr(blacklist,'j')) mHasCubeMap = FALSE;//S
645// if (strchr(blacklist,'k')) mHasATIVAO = FALSE;//S
646 if (strchr(blacklist,'l')) mHasOcclusionQuery = FALSE;
647 if (strchr(blacklist,'m')) mHasShaderObjects = FALSE;//S
648 if (strchr(blacklist,'n')) mHasVertexShader = FALSE;//S
649 if (strchr(blacklist,'o')) mHasFragmentShader = FALSE;//S
650 if (strchr(blacklist,'p')) mHasPointParameters = FALSE;//S
651 if (strchr(blacklist,'q')) mHasFramebufferObject = FALSE;//S
652 }
653#endif // LL_LINUX
654
655#if LL_DARWIN || LL_LINUX
656 // MBW -- 12/4/2003 -- Using paletted textures causes a bunch of avatar rendering problems on the Mac.
657 // Not sure if this is due to driver problems or incorrect use of the extension, but I'm disabling it for now.
658 // Tofu - 2006-10-03 -- Same problem on Linux.
659 mHasPalettedTextures = false;
660#endif
661
662 if (!mHasMultitexture)
663 {
664 LL_INFOS("RenderInit") << "Couldn't initialize multitexturing" << LL_ENDL;
665 }
666 if (!mHasMipMapGeneration)
667 {
668 LL_INFOS("RenderInit") << "Couldn't initialize mipmap generation" << LL_ENDL;
669 }
670 if (!mHasARBEnvCombine)
671 {
672 LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_texture_env_combine" << LL_ENDL;
673 }
674 if (!mHasPalettedTextures)
675 {
676 LL_INFOS("RenderInit") << "Couldn't initialize GL_EXT_paletted_texture" << LL_ENDL;
677 }
678 if (!mHasSeparateSpecularColor)
679 {
680 LL_INFOS("RenderInit") << "Couldn't initialize separate specular color" << LL_ENDL;
681 }
682 if (!mHasAnisotropic)
683 {
684 LL_INFOS("RenderInit") << "Couldn't initialize anisotropic filtering" << LL_ENDL;
685 }
686 if (!mHasCompressedTextures)
687 {
688 LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_texture_compression" << LL_ENDL;
689 }
690 if (!mHasOcclusionQuery)
691 {
692 LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_occlusion_query" << LL_ENDL;
693 }
694 if (!mHasPointParameters)
695 {
696 LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_point_parameters" << LL_ENDL;
697 }
698 if (!mHasShaderObjects)
699 {
700 LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_shader_objects" << LL_ENDL;
701 }
702 if (!mHasVertexShader)
703 {
704 LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_vertex_shader" << LL_ENDL;
705 }
706 if (!mHasFragmentShader)
707 {
708 LL_INFOS("RenderInit") << "Couldn't initialize GL_ARB_fragment_shader" << LL_ENDL;
709 }
710
711 // Disable certain things due to known bugs
712 if (mIsIntel && mHasMipMapGeneration)
713 {
714 LL_INFOS("RenderInit") << "Disabling mip-map generation for Intel GPUs" << LL_ENDL;
715 mHasMipMapGeneration = FALSE;
716 }
717 if (mIsATI && mHasMipMapGeneration)
718 {
719 LL_INFOS("RenderInit") << "Disabling mip-map generation for ATI GPUs (performance opt)" << LL_ENDL;
720 mHasMipMapGeneration = FALSE;
721 }
722
723 // Misc
724 glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, (GLint*) &mGLMaxVertexRange);
725 glGetIntegerv(GL_MAX_ELEMENTS_INDICES, (GLint*) &mGLMaxIndexRange);
726
727#if (LL_WINDOWS || LL_LINUX) && !LL_MESA_HEADLESS
728 LL_DEBUGS("RenderInit") << "GL Probe: Getting symbols" << LL_ENDL;
729 if (mHasVertexBufferObject)
730 {
731 glBindBufferARB = (PFNGLBINDBUFFERARBPROC)GLH_EXT_GET_PROC_ADDRESS("glBindBufferARB");
732 if (glBindBufferARB)
733 {
734 glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC)GLH_EXT_GET_PROC_ADDRESS("glDeleteBuffersARB");
735 glGenBuffersARB = (PFNGLGENBUFFERSARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGenBuffersARB");
736 glIsBufferARB = (PFNGLISBUFFERARBPROC)GLH_EXT_GET_PROC_ADDRESS("glIsBufferARB");
737 glBufferDataARB = (PFNGLBUFFERDATAARBPROC)GLH_EXT_GET_PROC_ADDRESS("glBufferDataARB");
738 glBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC)GLH_EXT_GET_PROC_ADDRESS("glBufferSubDataARB");
739 glGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetBufferSubDataARB");
740 glMapBufferARB = (PFNGLMAPBUFFERARBPROC)GLH_EXT_GET_PROC_ADDRESS("glMapBufferARB");
741 glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC)GLH_EXT_GET_PROC_ADDRESS("glUnmapBufferARB");
742 glGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetBufferParameterivARB");
743 glGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetBufferPointervARB");
744 }
745 else
746 {
747 mHasVertexBufferObject = FALSE;
748 }
749 }
750 if (mHasFramebufferObject)
751 {
752 glIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC) GLH_EXT_GET_PROC_ADDRESS("glIsRenderbufferEXT");
753 glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC) GLH_EXT_GET_PROC_ADDRESS("glBindRenderbufferEXT");
754 glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glDeleteRenderbuffersEXT");
755 glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glGenRenderbuffersEXT");
756 glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glRenderbufferStorageEXT");
757 glGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glGetRenderbufferParameterivEXT");
758 glIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC) GLH_EXT_GET_PROC_ADDRESS("glIsFramebufferEXT");
759 glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) GLH_EXT_GET_PROC_ADDRESS("glBindFramebufferEXT");
760 glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glDeleteFramebuffersEXT");
761 glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glGenFramebuffersEXT");
762 glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glCheckFramebufferStatusEXT");
763 glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glFramebufferTexture1DEXT");
764 glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glFramebufferTexture2DEXT");
765 glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glFramebufferTexture3DEXT");
766 glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) GLH_EXT_GET_PROC_ADDRESS("glFramebufferRenderbufferEXT");
767 glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glGetFramebufferAttachmentParameterivEXT");
768 glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC) GLH_EXT_GET_PROC_ADDRESS("glGenerateMipmapEXT");
769 }
770#if !LL_LINUX
771 // This is expected to be a static symbol on Linux GL implementations
772 glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)GLH_EXT_GET_PROC_ADDRESS("glDrawRangeElements");
773 if (!glDrawRangeElements)
774 {
775 mGLMaxVertexRange = 0;
776 mGLMaxIndexRange = 0;
777 }
778#endif // !LL_LINUX
779#if LL_LINUX
780 // On Linux we need to get glColorTableEXT dynamically.
781 if (mHasPalettedTextures)
782 {
783 glColorTableEXT = (PFNGLCOLORTABLEEXTPROC)GLH_EXT_GET_PROC_ADDRESS("glColorTableEXT");
784 }
785#endif // LL_LINUX
786 if (mHasOcclusionQuery)
787 {
788 glGenQueriesARB = (PFNGLGENQUERIESARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGenQueriesARB");
789 glDeleteQueriesARB = (PFNGLDELETEQUERIESARBPROC)GLH_EXT_GET_PROC_ADDRESS("glDeleteQueriesARB");
790 glIsQueryARB = (PFNGLISQUERYARBPROC)GLH_EXT_GET_PROC_ADDRESS("glIsQueryARB");
791 glBeginQueryARB = (PFNGLBEGINQUERYARBPROC)GLH_EXT_GET_PROC_ADDRESS("glBeginQueryARB");
792 glEndQueryARB = (PFNGLENDQUERYARBPROC)GLH_EXT_GET_PROC_ADDRESS("glEndQueryARB");
793 glGetQueryivARB = (PFNGLGETQUERYIVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetQueryivARB");
794 glGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetQueryObjectivARB");
795 glGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetQueryObjectuivARB");
796 }
797 if (mHasPointParameters)
798 {
799 glPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC)GLH_EXT_GET_PROC_ADDRESS("glPointParameterfARB");
800 glPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glPointParameterfvARB");
801 }
802 if (mHasShaderObjects)
803 {
804 glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC) GLH_EXT_GET_PROC_ADDRESS("glDeleteObjectARB");
805 glGetHandleARB = (PFNGLGETHANDLEARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetHandleARB");
806 glDetachObjectARB = (PFNGLDETACHOBJECTARBPROC) GLH_EXT_GET_PROC_ADDRESS("glDetachObjectARB");
807 glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC) GLH_EXT_GET_PROC_ADDRESS("glCreateShaderObjectARB");
808 glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC) GLH_EXT_GET_PROC_ADDRESS("glShaderSourceARB");
809 glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC) GLH_EXT_GET_PROC_ADDRESS("glCompileShaderARB");
810 glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) GLH_EXT_GET_PROC_ADDRESS("glCreateProgramObjectARB");
811 glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) GLH_EXT_GET_PROC_ADDRESS("glAttachObjectARB");
812 glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC) GLH_EXT_GET_PROC_ADDRESS("glLinkProgramARB");
813 glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUseProgramObjectARB");
814 glValidateProgramARB = (PFNGLVALIDATEPROGRAMARBPROC) GLH_EXT_GET_PROC_ADDRESS("glValidateProgramARB");
815 glUniform1fARB = (PFNGLUNIFORM1FARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform1fARB");
816 glUniform2fARB = (PFNGLUNIFORM2FARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform2fARB");
817 glUniform3fARB = (PFNGLUNIFORM3FARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform3fARB");
818 glUniform4fARB = (PFNGLUNIFORM4FARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform4fARB");
819 glUniform1iARB = (PFNGLUNIFORM1IARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform1iARB");
820 glUniform2iARB = (PFNGLUNIFORM2IARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform2iARB");
821 glUniform3iARB = (PFNGLUNIFORM3IARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform3iARB");
822 glUniform4iARB = (PFNGLUNIFORM4IARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform4iARB");
823 glUniform1fvARB = (PFNGLUNIFORM1FVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform1fvARB");
824 glUniform2fvARB = (PFNGLUNIFORM2FVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform2fvARB");
825 glUniform3fvARB = (PFNGLUNIFORM3FVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform3fvARB");
826 glUniform4fvARB = (PFNGLUNIFORM4FVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform4fvARB");
827 glUniform1ivARB = (PFNGLUNIFORM1IVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform1ivARB");
828 glUniform2ivARB = (PFNGLUNIFORM2IVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform2ivARB");
829 glUniform3ivARB = (PFNGLUNIFORM3IVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform3ivARB");
830 glUniform4ivARB = (PFNGLUNIFORM4IVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniform4ivARB");
831 glUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniformMatrix2fvARB");
832 glUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniformMatrix3fvARB");
833 glUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glUniformMatrix4fvARB");
834 glGetObjectParameterfvARB = (PFNGLGETOBJECTPARAMETERFVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetObjectParameterfvARB");
835 glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetObjectParameterivARB");
836 glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetInfoLogARB");
837 glGetAttachedObjectsARB = (PFNGLGETATTACHEDOBJECTSARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetAttachedObjectsARB");
838 glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetUniformLocationARB");
839 glGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetActiveUniformARB");
840 glGetUniformfvARB = (PFNGLGETUNIFORMFVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetUniformfvARB");
841 glGetUniformivARB = (PFNGLGETUNIFORMIVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetUniformivARB");
842 glGetShaderSourceARB = (PFNGLGETSHADERSOURCEARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetShaderSourceARB");
843 }
844 if (mHasVertexShader)
845 {
846 glGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetAttribLocationARB");
847 glBindAttribLocationARB = (PFNGLBINDATTRIBLOCATIONARBPROC) GLH_EXT_GET_PROC_ADDRESS("glBindAttribLocationARB");
848 glGetActiveAttribARB = (PFNGLGETACTIVEATTRIBARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetActiveAttribARB");
849 glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1dARB");
850 glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1dvARB");
851 glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1fARB");
852 glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1fvARB");
853 glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1sARB");
854 glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib1svARB");
855 glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2dARB");
856 glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2dvARB");
857 glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2fARB");
858 glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2fvARB");
859 glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2sARB");
860 glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib2svARB");
861 glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3dARB");
862 glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3dvARB");
863 glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3fARB");
864 glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3fvARB");
865 glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3sARB");
866 glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib3svARB");
867 glVertexAttrib4nbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4nbvARB");
868 glVertexAttrib4nivARB = (PFNGLVERTEXATTRIB4NIVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4nivARB");
869 glVertexAttrib4nsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4nsvARB");
870 glVertexAttrib4nubARB = (PFNGLVERTEXATTRIB4NUBARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4nubARB");
871 glVertexAttrib4nubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4nubvARB");
872 glVertexAttrib4nuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4nuivARB");
873 glVertexAttrib4nusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4nusvARB");
874 glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4bvARB");
875 glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4dARB");
876 glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4dvARB");
877 glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4fARB");
878 glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4fvARB");
879 glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4ivARB");
880 glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4sARB");
881 glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4svARB");
882 glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4ubvARB");
883 glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4uivARB");
884 glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttrib4usvARB");
885 glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC) GLH_EXT_GET_PROC_ADDRESS("glVertexAttribPointerARB");
886 glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC) GLH_EXT_GET_PROC_ADDRESS("glEnableVertexAttribArrayARB");
887 glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) GLH_EXT_GET_PROC_ADDRESS("glDisableVertexAttribArrayARB");
888 glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC) GLH_EXT_GET_PROC_ADDRESS("glProgramStringARB");
889 glBindProgramARB = (PFNGLBINDPROGRAMARBPROC) GLH_EXT_GET_PROC_ADDRESS("glBindProgramARB");
890 glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC) GLH_EXT_GET_PROC_ADDRESS("glDeleteProgramsARB");
891 glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGenProgramsARB");
892 glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC) GLH_EXT_GET_PROC_ADDRESS("glProgramEnvParameter4dARB");
893 glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glProgramEnvParameter4dvARB");
894 glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC) GLH_EXT_GET_PROC_ADDRESS("glProgramEnvParameter4fARB");
895 glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glProgramEnvParameter4fvARB");
896 glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC) GLH_EXT_GET_PROC_ADDRESS("glProgramLocalParameter4dARB");
897 glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glProgramLocalParameter4dvARB");
898 glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC) GLH_EXT_GET_PROC_ADDRESS("glProgramLocalParameter4fARB");
899 glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glProgramLocalParameter4fvARB");
900 glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetProgramEnvParameterdvARB");
901 glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetProgramEnvParameterfvARB");
902 glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetProgramLocalParameterdvARB");
903 glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetProgramLocalParameterfvARB");
904 glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetProgramivARB");
905 glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetProgramStringARB");
906 glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetVertexAttribdvARB");
907 glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetVertexAttribfvARB");
908 glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glGetVertexAttribivARB");
909 glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC) GLH_EXT_GET_PROC_ADDRESS("glgetVertexAttribPointervARB");
910 glIsProgramARB = (PFNGLISPROGRAMARBPROC) GLH_EXT_GET_PROC_ADDRESS("glIsProgramARB");
911 }
912 LL_DEBUGS("RenderInit") << "GL Probe: Got symbols" << LL_ENDL;
913#endif
914
915 mInited = TRUE;
916}
917
918void rotate_quat(LLQuaternion& rotation)
919{
920 F32 angle_radians, x, y, z;
921 rotation.getAngleAxis(&angle_radians, &x, &y, &z);
922 glRotatef(angle_radians * RAD_TO_DEG, x, y, z);
923}
924
925void flush_glerror()
926{
927 glGetError();
928}
929
930void assert_glerror()
931{
932 if (gNoRender || !gDebugGL)
933 {
934 return;
935 }
936 if (!gGLManager.mInited)
937 {
938 LL_ERRS("RenderInit") << "GL not initialized" << LL_ENDL;
939 }
940 // Create or update texture to be used with this data
941 GLenum error;
942 error = glGetError();
943 BOOL quit = FALSE;
944 while (error)
945 {
946 quit = TRUE;
947#ifndef LL_LINUX // *FIX: ! This should be an error for linux as well.
948 GLubyte const * gl_error_msg = gluErrorString(error);
949 if (NULL != gl_error_msg)
950 {
951 LL_WARNS("RenderState") << "GL Error:" << gl_error_msg << LL_ENDL;
952 }
953 else
954 {
955 // gluErrorString returns NULL for some extensions' error codes.
956 // you'll probably have to grep for the number in glext.h.
957 LL_WARNS("RenderState") << "GL Error: UNKNOWN 0x" << std::hex << error << LL_ENDL;
958 }
959 error = glGetError();
960#endif
961 }
962
963 if (quit)
964 {
965 llerrs << "One or more unhandled GL errors." << llendl;
966 }
967}
968
969void clear_glerror()
970{
971 // Create or update texture to be used with this data
972 GLenum error;
973 error = glGetError();
974}
975
976///////////////////////////////////////////////////////////////
977//
978// LLGLState
979//
980
981// Static members
982std::map<LLGLenum, LLGLboolean> LLGLState::sStateMap;
983
984GLboolean LLGLDepthTest::sDepthEnabled = GL_FALSE; // OpenGL default
985GLenum LLGLDepthTest::sDepthFunc = GL_LESS; // OpenGL default
986GLboolean LLGLDepthTest::sWriteEnabled = GL_TRUE; // OpenGL default
987
988//static
989void LLGLState::initClass()
990{
991 sStateMap[GL_DITHER] = GL_TRUE;
992 sStateMap[GL_TEXTURE_2D] = GL_TRUE;
993
994 //make sure vertex arrays are enabled
995 glEnableClientState(GL_VERTEX_ARRAY);
996
997 //make sure multi sampling is disabled by default
998 glDisable(GL_MULTISAMPLE_ARB);
999}
1000
1001//static
1002void LLGLState::restoreGL()
1003{
1004 sStateMap.clear();
1005 initClass();
1006}
1007
1008//static
1009// Really shouldn't be needed, but seems we sometimes do.
1010void LLGLState::resetTextureStates()
1011{
1012 gGL.flush();
1013 GLint maxTextureUnits;
1014
1015 glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &maxTextureUnits);
1016 for (S32 j = maxTextureUnits-1; j >=0; j--)
1017 {
1018 gGL.getTexUnit(j)->activate();
1019 glClientActiveTextureARB(GL_TEXTURE0_ARB+j);
1020 j == 0 ? glEnable(GL_TEXTURE_2D) : glDisable(GL_TEXTURE_2D);
1021 }
1022}
1023
1024void LLGLState::dumpStates()
1025{
1026 LL_INFOS("RenderState") << "GL States:" << LL_ENDL;
1027 for (std::map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin();
1028 iter != sStateMap.end(); ++iter)
1029 {
1030 LL_INFOS("RenderState") << llformat(" 0x%04x : %s",(S32)iter->first,iter->second?"TRUE":"FALSE") << LL_ENDL;
1031 }
1032}
1033
1034void LLGLState::checkStates()
1035{
1036 if (!gDebugGL)
1037 {
1038 return;
1039 }
1040
1041 stop_glerror();
1042
1043 GLint activeTexture;
1044 glGetIntegerv(GL_ACTIVE_TEXTURE_ARB, &activeTexture);
1045
1046 if (activeTexture != GL_TEXTURE0_ARB)
1047 {
1048 LL_GL_ERRS << "Texture channel corrupted. " << LL_ENDL;
1049 }
1050
1051 GLint src;
1052 GLint dst;
1053 glGetIntegerv(GL_BLEND_SRC, &src);
1054 glGetIntegerv(GL_BLEND_DST, &dst);
1055
1056 if (src != GL_SRC_ALPHA || dst != GL_ONE_MINUS_SRC_ALPHA)
1057 {
1058 LL_GL_ERRS << "Blend function corrupted: " << std::hex << src << " " << std::hex << dst << LL_ENDL;
1059 }
1060
1061 for (std::map<LLGLenum, LLGLboolean>::iterator iter = sStateMap.begin();
1062 iter != sStateMap.end(); ++iter)
1063 {
1064 LLGLenum state = iter->first;
1065 LLGLboolean cur_state = iter->second;
1066 LLGLboolean gl_state = glIsEnabled(state);
1067 if(cur_state != gl_state)
1068 {
1069 dumpStates();
1070 LL_GL_ERRS << llformat("LLGLState error. State: 0x%04x",state) << LL_ENDL;
1071 }
1072 }
1073
1074 stop_glerror();
1075}
1076
1077void LLGLState::checkTextureChannels()
1078{
1079 if (!gDebugGL)
1080 {
1081 return;
1082 }
1083
1084 GLint activeTexture;
1085 glGetIntegerv(GL_ACTIVE_TEXTURE_ARB, &activeTexture);
1086
1087 BOOL error = FALSE;
1088
1089 if (activeTexture != GL_TEXTURE0_ARB)
1090 {
1091 error = TRUE;
1092 LL_WARNS("RenderState") << "Active texture channel corrupted. " << LL_ENDL;
1093 }
1094 else if (!glIsEnabled(GL_TEXTURE_2D))
1095 {
1096 error = TRUE;
1097 LL_WARNS("RenderState") << "GL_TEXTURE_2D not enabled on texture channel 0." << LL_ENDL;
1098 }
1099 else
1100 {
1101 GLint tex_env_mode = 0;
1102
1103 glGetTexEnviv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, &tex_env_mode);
1104 if (tex_env_mode != GL_MODULATE)
1105 {
1106 error = TRUE;
1107 LL_WARNS("RenderState") << "GL_TEXTURE_ENV_MODE invalid: " << std::hex << tex_env_mode << LL_ENDL;
1108 }
1109 }
1110
1111 GLint maxTextureUnits;
1112 glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &maxTextureUnits);
1113
1114 static const char* label[] =
1115 {
1116 "GL_TEXTURE_2D",
1117 "GL_TEXTURE_COORD_ARRAY",
1118 "GL_TEXTURE_1D",
1119 "GL_TEXTURE_CUBE_MAP_ARB",
1120 "GL_TEXTURE_GEN_S",
1121 "GL_TEXTURE_GEN_T",
1122 "GL_TEXTURE_GEN_Q",
1123 "GL_TEXTURE_GEN_R"
1124 };
1125
1126 static GLint value[] =
1127 {
1128 GL_TEXTURE_2D,
1129 GL_TEXTURE_COORD_ARRAY,
1130 GL_TEXTURE_1D,
1131 GL_TEXTURE_CUBE_MAP_ARB,
1132 GL_TEXTURE_GEN_S,
1133 GL_TEXTURE_GEN_T,
1134 GL_TEXTURE_GEN_Q,
1135 GL_TEXTURE_GEN_R
1136 };
1137
1138 GLint stackDepth = 0;
1139 LLMatrix4 identity;
1140 LLMatrix4 matrix;
1141
1142 for (GLint i = 0; i < maxTextureUnits; i++)
1143 {
1144 gGL.getTexUnit(i)->activate();
1145 glClientActiveTextureARB(GL_TEXTURE0_ARB+i);
1146
1147 glGetIntegerv(GL_TEXTURE_STACK_DEPTH, &stackDepth);
1148
1149 if (stackDepth != 1)
1150 {
1151 error = TRUE;
1152 LL_WARNS("RenderState") << "Texture matrix stack corrupted." << LL_ENDL;
1153 }
1154
1155 glGetFloatv(GL_TEXTURE_MATRIX, (GLfloat*) matrix.mMatrix);
1156
1157 if (matrix != identity)
1158 {
1159 error = TRUE;
1160 LL_WARNS("RenderState") << "Texture matrix in channel " << i << " corrupt." << LL_ENDL;
1161 }
1162
1163 for (S32 j = (i == 0 ? 1 : 0); j < 8; j++)
1164 {
1165 if (glIsEnabled(value[j]))
1166 {
1167 error = TRUE;
1168 LL_WARNS("RenderState") << "Texture channel " << i << " still has " << label[j] << " enabled." << LL_ENDL;
1169 }
1170 }
1171 }
1172
1173 gGL.getTexUnit(0)->activate();
1174 glClientActiveTextureARB(GL_TEXTURE0_ARB);
1175
1176 if (error)
1177 {
1178 LL_GL_ERRS << "GL texture state corruption detected." << LL_ENDL;
1179 }
1180}
1181
1182void LLGLState::checkClientArrays(U32 data_mask)
1183{
1184 if (!gDebugGL)
1185 {
1186 return;
1187 }
1188
1189 stop_glerror();
1190 BOOL error = FALSE;
1191
1192 GLint active_texture;
1193 glGetIntegerv(GL_CLIENT_ACTIVE_TEXTURE_ARB, &active_texture);
1194
1195 if (active_texture != GL_TEXTURE0_ARB)
1196 {
1197 llwarns << "Client active texture corrupted: " << active_texture << llendl;
1198 error = TRUE;
1199 }
1200
1201 glGetIntegerv(GL_ACTIVE_TEXTURE_ARB, &active_texture);
1202 if (active_texture != GL_TEXTURE0_ARB)
1203 {
1204 llwarns << "Active texture corrupted: " << active_texture << llendl;
1205 error = TRUE;
1206 }
1207
1208 static const char* label[] =
1209 {
1210 "GL_VERTEX_ARRAY",
1211 "GL_NORMAL_ARRAY",
1212 "GL_COLOR_ARRAY",
1213 "GL_TEXTURE_COORD_ARRAY"
1214 };
1215
1216 static GLint value[] =
1217 {
1218 GL_VERTEX_ARRAY,
1219 GL_NORMAL_ARRAY,
1220 GL_COLOR_ARRAY,
1221 GL_TEXTURE_COORD_ARRAY
1222 };
1223
1224 U32 mask[] =
1225 { //copied from llvertexbuffer.h
1226 0x0001, //MAP_VERTEX,
1227 0x0002, //MAP_NORMAL,
1228 0x0010, //MAP_COLOR,
1229 0x0004, //MAP_TEXCOORD
1230 };
1231
1232
1233 for (S32 j = 0; j < 4; j++)
1234 {
1235 if (glIsEnabled(value[j]))
1236 {
1237 if (!(mask[j] & data_mask))
1238 {
1239 error = TRUE;
1240 LL_WARNS("RenderState") << "GL still has " << label[j] << " enabled." << LL_ENDL;
1241 }
1242 }
1243 else
1244 {
1245 if (mask[j] & data_mask)
1246 {
1247 error = TRUE;
1248 LL_WARNS("RenderState") << "GL does not have " << label[j] << " enabled." << LL_ENDL;
1249 }
1250 }
1251 }
1252
1253 glClientActiveTextureARB(GL_TEXTURE1_ARB);
1254 gGL.getTexUnit(1)->activate();
1255 if (glIsEnabled(GL_TEXTURE_COORD_ARRAY))
1256 {
1257 if (!(data_mask & 0x0008))
1258 {
1259 error = TRUE;
1260 LL_WARNS("RenderState") << "GL still has GL_TEXTURE_COORD_ARRAY enabled on channel 1." << LL_ENDL;
1261 }
1262 }
1263 else
1264 {
1265 if (data_mask & 0x0008)
1266 {
1267 error = TRUE;
1268 LL_WARNS("RenderState") << "GL does not have GL_TEXTURE_COORD_ARRAY enabled on channel 1." << LL_ENDL;
1269 }
1270 }
1271
1272 if (glIsEnabled(GL_TEXTURE_2D))
1273 {
1274 if (!(data_mask & 0x0008))
1275 {
1276 error = TRUE;
1277 LL_WARNS("RenderState") << "GL still has GL_TEXTURE_2D enabled on channel 1." << LL_ENDL;
1278 }
1279 }
1280 else
1281 {
1282 if (data_mask & 0x0008)
1283 {
1284 error = TRUE;
1285 LL_WARNS("RenderState") << "GL does not have GL_TEXTURE_2D enabled on channel 1." << LL_ENDL;
1286 }
1287 }
1288
1289 glClientActiveTextureARB(GL_TEXTURE0_ARB);
1290 gGL.getTexUnit(0)->activate();
1291
1292 if (error)
1293 {
1294 LL_GL_ERRS << "GL client array corruption detected." << LL_ENDL;
1295 }
1296}
1297
1298///////////////////////////////////////////////////////////////////////
1299
1300LLGLState::LLGLState(LLGLenum state, S32 enabled) :
1301 mState(state), mWasEnabled(FALSE), mIsEnabled(FALSE)
1302{
1303 stop_glerror();
1304 if (state)
1305 {
1306 mWasEnabled = sStateMap[state];
1307 llassert(mWasEnabled == glIsEnabled(state));
1308 setEnabled(enabled);
1309 stop_glerror();
1310 }
1311}
1312
1313void LLGLState::setEnabled(S32 enabled)
1314{
1315 if (!mState)
1316 {
1317 return;
1318 }
1319 if (enabled == CURRENT_STATE)
1320 {
1321 enabled = sStateMap[mState] == GL_TRUE ? TRUE : FALSE;
1322 }
1323 else if (enabled == TRUE && sStateMap[mState] != GL_TRUE)
1324 {
1325 gGL.flush();
1326 glEnable(mState);
1327 sStateMap[mState] = GL_TRUE;
1328 }
1329 else if (enabled == FALSE && sStateMap[mState] != GL_FALSE)
1330 {
1331 gGL.flush();
1332 glDisable(mState);
1333 sStateMap[mState] = GL_FALSE;
1334 }
1335 mIsEnabled = enabled;
1336}
1337
1338LLGLState::~LLGLState()
1339{
1340 stop_glerror();
1341 if (mState)
1342 {
1343 if (gDebugGL)
1344 {
1345 llassert_always(sStateMap[mState] == glIsEnabled(mState));
1346 }
1347
1348 if (mIsEnabled != mWasEnabled)
1349 {
1350 gGL.flush();
1351 if (mWasEnabled)
1352 {
1353 glEnable(mState);
1354 sStateMap[mState] = GL_TRUE;
1355 }
1356 else
1357 {
1358 glDisable(mState);
1359 sStateMap[mState] = GL_FALSE;
1360 }
1361 }
1362 }
1363 stop_glerror();
1364}
1365
1366////////////////////////////////////////////////////////////////////////////////
1367
1368void LLGLManager::initGLStates()
1369{
1370 //gl states moved to classes in llglstates.h
1371 LLGLState::initClass();
1372}
1373
1374////////////////////////////////////////////////////////////////////////////////
1375
1376void enable_vertex_weighting(const S32 index)
1377{
1378#if GL_ARB_vertex_program
1379 if (index > 0) glEnableVertexAttribArrayARB(index); // vertex weights
1380#endif
1381}
1382
1383void disable_vertex_weighting(const S32 index)
1384{
1385#if GL_ARB_vertex_program
1386 if (index > 0) glDisableVertexAttribArrayARB(index); // vertex weights
1387#endif
1388}
1389
1390void enable_binormals(const S32 index)
1391{
1392#if GL_ARB_vertex_program
1393 if (index > 0)
1394 {
1395 glEnableVertexAttribArrayARB(index); // binormals
1396 }
1397#endif
1398}
1399
1400void disable_binormals(const S32 index)
1401{
1402#if GL_ARB_vertex_program
1403 if (index > 0)
1404 {
1405 glDisableVertexAttribArrayARB(index); // binormals
1406 }
1407#endif
1408}
1409
1410
1411void enable_cloth_weights(const S32 index)
1412{
1413#if GL_ARB_vertex_program
1414 if (index > 0) glEnableVertexAttribArrayARB(index);
1415#endif
1416}
1417
1418void disable_cloth_weights(const S32 index)
1419{
1420#if GL_ARB_vertex_program
1421 if (index > 0) glDisableVertexAttribArrayARB(index);
1422#endif
1423}
1424
1425void set_vertex_weights(const S32 index, const U32 stride, const F32 *weights)
1426{
1427#if GL_ARB_vertex_program
1428 if (index > 0) glVertexAttribPointerARB(index, 1, GL_FLOAT, FALSE, stride, weights);
1429 stop_glerror();
1430#endif
1431}
1432
1433void set_vertex_clothing_weights(const S32 index, const U32 stride, const LLVector4 *weights)
1434{
1435#if GL_ARB_vertex_program
1436 if (index > 0) glVertexAttribPointerARB(index, 4, GL_FLOAT, TRUE, stride, weights);
1437 stop_glerror();
1438#endif
1439}
1440
1441void set_binormals(const S32 index, const U32 stride,const LLVector3 *binormals)
1442{
1443#if GL_ARB_vertex_program
1444 if (index > 0) glVertexAttribPointerARB(index, 3, GL_FLOAT, FALSE, stride, binormals);
1445 stop_glerror();
1446#endif
1447}
1448
1449
1450void set_palette(U8 *palette_data)
1451{
1452 if (gGLManager.mHasPalettedTextures)
1453 {
1454 glColorTableEXT(GL_TEXTURE_2D, GL_RGBA8, 256, GL_RGBA, GL_UNSIGNED_BYTE, palette_data);
1455 }
1456}
1457
1458
1459void parse_gl_version( S32* major, S32* minor, S32* release, LLString* vendor_specific )
1460{
1461 // GL_VERSION returns a null-terminated string with the format:
1462 // <major>.<minor>[.<release>] [<vendor specific>]
1463
1464 const char* version = (const char*) glGetString(GL_VERSION);
1465 *major = 0;
1466 *minor = 0;
1467 *release = 0;
1468 vendor_specific->assign("");
1469
1470 if( !version )
1471 {
1472 return;
1473 }
1474
1475 LLString ver_copy( version );
1476 S32 len = (S32)strlen( version ); /* Flawfinder: ignore */
1477 S32 i = 0;
1478 S32 start;
1479 // Find the major version
1480 start = i;
1481 for( ; i < len; i++ )
1482 {
1483 if( '.' == version[i] )
1484 {
1485 break;
1486 }
1487 }
1488 LLString major_str = ver_copy.substr(start,i-start);
1489 LLString::convertToS32(major_str, *major);
1490
1491 if( '.' == version[i] )
1492 {
1493 i++;
1494 }
1495
1496 // Find the minor version
1497 start = i;
1498 for( ; i < len; i++ )
1499 {
1500 if( ('.' == version[i]) || isspace(version[i]) )
1501 {
1502 break;
1503 }
1504 }
1505 LLString minor_str = ver_copy.substr(start,i-start);
1506 LLString::convertToS32(minor_str, *minor);
1507
1508 // Find the release number (optional)
1509 if( '.' == version[i] )
1510 {
1511 i++;
1512
1513 start = i;
1514 for( ; i < len; i++ )
1515 {
1516 if( isspace(version[i]) )
1517 {
1518 break;
1519 }
1520 }
1521
1522 LLString release_str = ver_copy.substr(start,i-start);
1523 LLString::convertToS32(release_str, *release);
1524 }
1525
1526 // Skip over any white space
1527 while( version[i] && isspace( version[i] ) )
1528 {
1529 i++;
1530 }
1531
1532 // Copy the vendor-specific string (optional)
1533 if( version[i] )
1534 {
1535 vendor_specific->assign( version + i );
1536 }
1537}
1538
1539LLGLUserClipPlane::LLGLUserClipPlane(const LLPlane& p, const glh::matrix4f& modelview, const glh::matrix4f& projection)
1540{
1541 mModelview = modelview;
1542 mProjection = projection;
1543
1544 setPlane(p.mV[0], p.mV[1], p.mV[2], p.mV[3]);
1545}
1546
1547void LLGLUserClipPlane::setPlane(F32 a, F32 b, F32 c, F32 d)
1548{
1549 glh::matrix4f& P = mProjection;
1550 glh::matrix4f& M = mModelview;
1551
1552 glh::matrix4f invtrans_MVP = (P * M).inverse().transpose();
1553 glh::vec4f oplane(a,b,c,d);
1554 glh::vec4f cplane;
1555 invtrans_MVP.mult_matrix_vec(oplane, cplane);
1556
1557 cplane /= fabs(cplane[2]); // normalize such that depth is not scaled
1558 cplane[3] -= 1;
1559
1560 if(cplane[2] < 0)
1561 cplane *= -1;
1562
1563 glh::matrix4f suffix;
1564 suffix.set_row(2, cplane);
1565 glh::matrix4f newP = suffix * P;
1566 glMatrixMode(GL_PROJECTION);
1567 glPushMatrix();
1568 glLoadMatrixf(newP.m);
1569 gGLObliqueProjectionInverse = LLMatrix4(newP.inverse().transpose().m);
1570 glMatrixMode(GL_MODELVIEW);
1571}
1572
1573LLGLUserClipPlane::~LLGLUserClipPlane()
1574{
1575 glMatrixMode(GL_PROJECTION);
1576 glPopMatrix();
1577 glMatrixMode(GL_MODELVIEW);
1578}
1579
1580LLGLNamePool::LLGLNamePool()
1581{
1582}
1583
1584void LLGLNamePool::registerPool(LLGLNamePool* pool)
1585{
1586 pool_list_t::iterator iter = std::find(sInstances.begin(), sInstances.end(), pool);
1587 if (iter == sInstances.end())
1588 {
1589 sInstances.push_back(pool);
1590 }
1591}
1592
1593LLGLNamePool::~LLGLNamePool()
1594{
1595 pool_list_t::iterator iter = std::find(sInstances.begin(), sInstances.end(), this);
1596 if (iter != sInstances.end())
1597 {
1598 sInstances.erase(iter);
1599 }
1600}
1601
1602void LLGLNamePool::upkeep()
1603{
1604 std::sort(mNameList.begin(), mNameList.end(), CompareUsed());
1605}
1606
1607void LLGLNamePool::cleanup()
1608{
1609 for (name_list_t::iterator iter = mNameList.begin(); iter != mNameList.end(); ++iter)
1610 {
1611 releaseName(iter->name);
1612 }
1613
1614 mNameList.clear();
1615}
1616
1617GLuint LLGLNamePool::allocate()
1618{
1619 for (name_list_t::iterator iter = mNameList.begin(); iter != mNameList.end(); ++iter)
1620 {
1621 if (!iter->used)
1622 {
1623 iter->used = TRUE;
1624 return iter->name;
1625 }
1626 }
1627
1628 NameEntry entry;
1629 entry.name = allocateName();
1630 entry.used = TRUE;
1631 mNameList.push_back(entry);
1632
1633 return entry.name;
1634}
1635
1636void LLGLNamePool::release(GLuint name)
1637{
1638 for (name_list_t::iterator iter = mNameList.begin(); iter != mNameList.end(); ++iter)
1639 {
1640 if (iter->name == name)
1641 {
1642 iter->used = FALSE;
1643 return;
1644 }
1645 }
1646}
1647
1648//static
1649void LLGLNamePool::upkeepPools()
1650{
1651 for (pool_list_t::iterator iter = sInstances.begin(); iter != sInstances.end(); ++iter)
1652 {
1653 LLGLNamePool* pool = *iter;
1654 pool->upkeep();
1655 }
1656}
1657
1658//static
1659void LLGLNamePool::cleanupPools()
1660{
1661 for (pool_list_t::iterator iter = sInstances.begin(); iter != sInstances.end(); ++iter)
1662 {
1663 LLGLNamePool* pool = *iter;
1664 pool->cleanup();
1665 }
1666}
1667
1668LLGLDepthTest::LLGLDepthTest(GLboolean depth_enabled, GLboolean write_enabled, GLenum depth_func)
1669: mPrevDepthEnabled(sDepthEnabled), mPrevDepthFunc(sDepthFunc), mPrevWriteEnabled(sWriteEnabled)
1670{
1671 if (depth_enabled != sDepthEnabled)
1672 {
1673 gGL.flush();
1674 if (depth_enabled) glEnable(GL_DEPTH_TEST);
1675 else glDisable(GL_DEPTH_TEST);
1676 sDepthEnabled = depth_enabled;
1677 }
1678 if (depth_func != sDepthFunc)
1679 {
1680 gGL.flush();
1681 glDepthFunc(depth_func);
1682 sDepthFunc = depth_func;
1683 }
1684 if (write_enabled != sWriteEnabled)
1685 {
1686 gGL.flush();
1687 glDepthMask(write_enabled);
1688 sWriteEnabled = write_enabled;
1689 }
1690}
1691
1692LLGLDepthTest::~LLGLDepthTest()
1693{
1694 if (sDepthEnabled != mPrevDepthEnabled )
1695 {
1696 gGL.flush();
1697 if (mPrevDepthEnabled) glEnable(GL_DEPTH_TEST);
1698 else glDisable(GL_DEPTH_TEST);
1699 sDepthEnabled = mPrevDepthEnabled;
1700 }
1701 if (sDepthFunc != mPrevDepthFunc)
1702 {
1703 gGL.flush();
1704 glDepthFunc(mPrevDepthFunc);
1705 sDepthFunc = mPrevDepthFunc;
1706 }
1707 if (sWriteEnabled != mPrevWriteEnabled )
1708 {
1709 gGL.flush();
1710 glDepthMask(mPrevWriteEnabled);
1711 sWriteEnabled = mPrevWriteEnabled;
1712 }
1713}
1714
1715LLGLClampToFarClip::LLGLClampToFarClip(glh::matrix4f P)
1716{
1717 for (U32 i = 0; i < 4; i++)
1718 {
1719 P.element(2, i) = P.element(3, i) * 0.99999f;
1720 }
1721
1722 glMatrixMode(GL_PROJECTION);
1723 glPushMatrix();
1724 glLoadMatrixf(P.m);
1725 glMatrixMode(GL_MODELVIEW);
1726}
1727
1728LLGLClampToFarClip::~LLGLClampToFarClip()
1729{
1730 glMatrixMode(GL_PROJECTION);
1731 glPopMatrix();
1732 glMatrixMode(GL_MODELVIEW);
1733}
1734
diff --git a/linden/indra/llwindow/llgl.h b/linden/indra/llwindow/llgl.h
deleted file mode 100644
index 2618dca..0000000
--- a/linden/indra/llwindow/llgl.h
+++ /dev/null
@@ -1,377 +0,0 @@
1/**
2 * @file llgl.h
3 * @brief LLGL definition
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_LLGL_H
33#define LL_LLGL_H
34
35// This file contains various stuff for handling gl extensions and other gl related stuff.
36
37#include <string>
38#include <map>
39
40#include "llerror.h"
41#include "v4color.h"
42#include "llstring.h"
43#include "stdtypes.h"
44#include "v4math.h"
45#include "llplane.h"
46#include "llgltypes.h"
47
48#include "llglheaders.h"
49#include "glh/glh_linear.h"
50
51extern BOOL gDebugGL;
52
53#define LL_GL_ERRS LL_ERRS("RenderState")
54
55class LLSD;
56
57// Manage GL extensions...
58class LLGLManager
59{
60public:
61 LLGLManager();
62
63 bool initGL();
64 void shutdownGL();
65
66 void initWGL(); // Initializes stupid WGL extensions
67
68 LLString getRawGLString(); // For sending to simulator
69
70 BOOL mInited;
71 BOOL mIsDisabled;
72
73 // Extensions used by everyone
74 BOOL mHasMultitexture;
75 S32 mNumTextureUnits;
76 BOOL mHasMipMapGeneration;
77 BOOL mHasPalettedTextures;
78 BOOL mHasCompressedTextures;
79 BOOL mHasFramebufferObject;
80
81 // ARB Extensions
82 BOOL mHasVertexBufferObject;
83 BOOL mHasPBuffer;
84 BOOL mHasShaderObjects;
85 BOOL mHasVertexShader;
86 BOOL mHasFragmentShader;
87 BOOL mHasOcclusionQuery;
88 BOOL mHasPointParameters;
89
90 // Other extensions.
91 BOOL mHasAnisotropic;
92 BOOL mHasARBEnvCombine;
93 BOOL mHasCubeMap;
94
95 // Vendor-specific extensions
96 BOOL mIsATI;
97 BOOL mIsNVIDIA;
98 BOOL mIsIntel;
99 BOOL mIsGF2or4MX;
100 BOOL mIsGF3;
101 BOOL mIsGFFX;
102 BOOL mATIOffsetVerticalLines;
103
104 // Whether this version of GL is good enough for SL to use
105 BOOL mHasRequirements;
106
107 // Misc extensions
108 BOOL mHasSeparateSpecularColor;
109
110 S32 mDriverVersionMajor;
111 S32 mDriverVersionMinor;
112 S32 mDriverVersionRelease;
113 F32 mGLVersion; // e.g = 1.4
114 LLString mDriverVersionVendorString;
115
116 S32 mVRAM; // VRAM in MB
117 S32 mGLMaxVertexRange;
118 S32 mGLMaxIndexRange;
119
120 void getPixelFormat(); // Get the best pixel format
121
122 LLString getGLInfoString();
123 void printGLInfoString();
124 void getGLInfo(LLSD& info);
125
126 // In ALL CAPS
127 LLString mGLVendor;
128 LLString mGLVendorShort;
129
130 // In ALL CAPS
131 LLString mGLRenderer;
132
133private:
134 void initExtensions();
135 void initGLStates();
136 void initGLImages();
137};
138
139extern LLGLManager gGLManager;
140
141class LLQuaternion;
142class LLMatrix4;
143
144void rotate_quat(LLQuaternion& rotation);
145
146void flush_glerror(); // Flush GL errors when we know we're handling them correctly.
147
148void assert_glerror();
149
150void clear_glerror();
151
152//#if LL_DEBUG
153# define stop_glerror() assert_glerror()
154# define llglassertok() assert_glerror()
155//#else
156//# define stop_glerror()
157//# define llglassertok()
158//#endif
159
160#define llglassertok_always() assert_glerror()
161
162////////////////////////
163//
164// Note: U32's are GLEnum's...
165//
166
167// This is a class for GL state management
168
169/*
170 GL STATE MANAGEMENT DESCRIPTION
171
172 LLGLState and its two subclasses, LLGLEnable and LLGLDisable, manage the current
173 enable/disable states of the GL to prevent redundant setting of state within a
174 render path or the accidental corruption of what state the next path expects.
175
176 Essentially, wherever you would call glEnable set a state and then
177 subsequently reset it by calling glDisable (or vice versa), make an instance of
178 LLGLEnable with the state you want to set, and assume it will be restored to its
179 original state when that instance of LLGLEnable is destroyed. It is good practice
180 to exploit stack frame controls for optimal setting/unsetting and readability of
181 code. In llglstates.h, there are a collection of helper classes that define groups
182 of enables/disables that can cause multiple states to be set with the creation of
183 one instance.
184
185 Sample usage:
186
187 //disable lighting for rendering hud objects
188 //INCORRECT USAGE
189 LLGLEnable lighting(GL_LIGHTING);
190 renderHUD();
191 LLGLDisable lighting(GL_LIGHTING);
192
193 //CORRECT USAGE
194 {
195 LLGLEnable lighting(GL_LIGHTING);
196 renderHUD();
197 }
198
199 If a state is to be set on a conditional, the following mechanism
200 is useful:
201
202 {
203 LLGLEnable lighting(light_hud ? GL_LIGHTING : 0);
204 renderHUD();
205 }
206
207 A LLGLState initialized with a parameter of 0 does nothing.
208
209 LLGLState works by maintaining a map of the current GL states, and ignoring redundant
210 enables/disables. If a redundant call is attempted, it becomes a noop, otherwise,
211 it is set in the constructor and reset in the destructor.
212
213 For debugging GL state corruption, running with debug enabled will trigger asserts
214 if the existing GL state does not match the expected GL state.
215
216*/
217class LLGLState
218{
219public:
220 static void initClass();
221 static void restoreGL();
222
223 static void resetTextureStates();
224 static void dumpStates();
225 static void checkStates();
226 static void checkTextureChannels();
227 static void checkClientArrays(U32 data_mask = 0x0001);
228
229protected:
230 static std::map<LLGLenum, LLGLboolean> sStateMap;
231
232public:
233 enum { CURRENT_STATE = -2 };
234 LLGLState(LLGLenum state, S32 enabled = CURRENT_STATE);
235 ~LLGLState();
236 void setEnabled(S32 enabled);
237 void enable() { setEnabled(TRUE); }
238 void disable() { setEnabled(FALSE); }
239protected:
240 LLGLenum mState;
241 BOOL mWasEnabled;
242 BOOL mIsEnabled;
243};
244
245// New LLGLState class wrappers that don't depend on actual GL flags.
246class LLGLEnableBlending : public LLGLState
247{
248public:
249 LLGLEnableBlending(bool enable);
250};
251
252class LLGLEnableAlphaReject : public LLGLState
253{
254public:
255 LLGLEnableAlphaReject(bool enable);
256};
257
258/// TODO: Being deprecated.
259class LLGLEnable : public LLGLState
260{
261public:
262 LLGLEnable(LLGLenum state) : LLGLState(state, TRUE) {}
263};
264
265/// TODO: Being deprecated.
266class LLGLDisable : public LLGLState
267{
268public:
269 LLGLDisable(LLGLenum state) : LLGLState(state, FALSE) {}
270};
271
272/*
273 Store and modify projection matrix to create an oblique
274 projection that clips to the specified plane. Oblique
275 projections alter values in the depth buffer, so this
276 class should not be used mid-renderpass.
277
278 Restores projection matrix on destruction.
279 GL_MODELVIEW_MATRIX is active whenever program execution
280 leaves this class.
281 Does not stack.
282 Caches inverse of projection matrix used in gGLObliqueProjectionInverse
283*/
284class LLGLUserClipPlane
285{
286public:
287
288 LLGLUserClipPlane(const LLPlane& plane, const glh::matrix4f& modelview, const glh::matrix4f& projection);
289 ~LLGLUserClipPlane();
290
291 void setPlane(F32 a, F32 b, F32 c, F32 d);
292
293private:
294 glh::matrix4f mProjection;
295 glh::matrix4f mModelview;
296};
297
298/*
299 Modify and load projection matrix to push depth values to far clip plane.
300
301 Restores projection matrix on destruction.
302 GL_MODELVIEW_MATRIX is active whenever program execution
303 leaves this class.
304 Does not stack.
305*/
306class LLGLClampToFarClip
307{
308public:
309 LLGLClampToFarClip(glh::matrix4f projection);
310 ~LLGLClampToFarClip();
311};
312
313/*
314 Generic pooling scheme for things which use GL names (used for occlusion queries and vertex buffer objects).
315 Prevents thrashing of GL name caches by avoiding calls to glGenFoo and glDeleteFoo.
316*/
317class LLGLNamePool
318{
319public:
320 typedef struct
321 {
322 GLuint name;
323 BOOL used;
324 } NameEntry;
325
326 struct CompareUsed
327 {
328 bool operator()(const NameEntry& lhs, const NameEntry& rhs)
329 {
330 return lhs.used < rhs.used; //FALSE entries first
331 }
332 };
333
334 typedef std::vector<NameEntry> name_list_t;
335 name_list_t mNameList;
336
337 LLGLNamePool();
338 virtual ~LLGLNamePool();
339
340 void upkeep();
341 void cleanup();
342
343 GLuint allocate();
344 void release(GLuint name);
345
346 static void registerPool(LLGLNamePool* pool);
347 static void upkeepPools();
348 static void cleanupPools();
349
350protected:
351 typedef std::vector<LLGLNamePool*> pool_list_t;
352 static pool_list_t sInstances;
353
354 virtual GLuint allocateName() = 0;
355 virtual void releaseName(GLuint name) = 0;
356};
357
358extern LLMatrix4 gGLObliqueProjectionInverse;
359
360#include "llglstates.h"
361
362void init_glstates();
363void enable_vertex_weighting(const S32 index);
364void disable_vertex_weighting(const S32 index);
365void enable_binormals(const S32 index);
366void disable_binormals(const S32 index);
367void enable_cloth_weights(const S32 index);
368void disable_cloth_weights(const S32 index);
369void set_vertex_weights(const S32 index, const U32 stride, const F32 *weights);
370void set_vertex_clothing_weights(const S32 index, const U32 stride, const LLVector4 *weights);
371void set_binormals(const S32 index, const U32 stride, const LLVector3 *binormals);
372void set_palette(U8* palette_data);
373void parse_gl_version( S32* major, S32* minor, S32* release, LLString* vendor_specific );
374
375extern BOOL gClothRipple;
376extern BOOL gNoRender;
377#endif // LL_LLGL_H
diff --git a/linden/indra/llwindow/llglheaders.h b/linden/indra/llwindow/llglheaders.h
deleted file mode 100644
index d66fbe4..0000000
--- a/linden/indra/llwindow/llglheaders.h
+++ /dev/null
@@ -1,597 +0,0 @@
1/**
2 * @file llglheaders.h
3 * @brief LLGL definitions
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_LLGLHEADERS_H
33#define LL_LLGLHEADERS_H
34
35#if LL_LINUX
36# ifndef LL_MESA
37# define LL_MESA 1 // force MESA
38# endif
39# ifndef LL_MESA_HEADLESS
40# define LL_MESA_HEADLESS 1 // force MESA HEADLESS
41# endif
42#endif
43
44#if LL_MESA
45//----------------------------------------------------------------------------
46// MESA headers
47// quotes so we get libraries/.../GL/ version
48#define GL_GLEXT_PROTOTYPES
49#include "GL/gl.h"
50#include "GL/glext.h"
51#include "GL/glu.h"
52
53// The __APPLE__ kludge is to make glh_extensions.h not symbol-clash horribly
54# define __APPLE__
55# include "GL/glh_extensions.h"
56# undef __APPLE__
57
58#elif LL_LINUX
59//----------------------------------------------------------------------------
60// Linux, MESA headers, but not necessarily assuming MESA runtime.
61// quotes so we get libraries/.../GL/ version
62#include "GL/gl.h"
63#include "GL/glext.h"
64#include "GL/glu.h"
65
66
67#if LL_LINUX && !LL_MESA_HEADLESS
68// The __APPLE__ kludge is to make glh_extensions.h not symbol-clash horribly
69# define __APPLE__
70# include "GL/glh_extensions.h"
71# undef __APPLE__
72
73/* Although SDL very likely ends up calling glXGetProcAddress() itself,
74 if we use SDL_GL_GetProcAddress() then we get bogus addresses back on
75 some systems. Weird. */
76/*# include "SDL/SDL.h"
77 # define GLH_EXT_GET_PROC_ADDRESS(p) SDL_GL_GetProcAddress(p) */
78#define GLX_GLXEXT_PROTOTYPES 1
79# include "GL/glx.h"
80# include "GL/glxext.h"
81// Use glXGetProcAddressARB instead of glXGetProcAddress - the ARB symbol
82// is considered 'legacy' but works on more machines.
83# define GLH_EXT_GET_PROC_ADDRESS(p) glXGetProcAddressARB((const GLubyte*)(p))
84// Whee, the X headers define 'Status'. Undefine to avoid confusion.
85#undef Status
86#endif // LL_LINUX && !LL_MESA_HEADLESS
87
88
89// GL_ARB_vertex_buffer_object
90extern PFNGLBINDBUFFERARBPROC glBindBufferARB;
91extern PFNGLDELETEBUFFERSARBPROC glDeleteBuffersARB;
92extern PFNGLGENBUFFERSARBPROC glGenBuffersARB;
93extern PFNGLISBUFFERARBPROC glIsBufferARB;
94extern PFNGLBUFFERDATAARBPROC glBufferDataARB;
95extern PFNGLBUFFERSUBDATAARBPROC glBufferSubDataARB;
96extern PFNGLGETBUFFERSUBDATAARBPROC glGetBufferSubDataARB;
97extern PFNGLMAPBUFFERARBPROC glMapBufferARB;
98extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB;
99extern PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB;
100extern PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB;
101
102// GL_ATI_vertex_array_object
103extern PFNGLNEWOBJECTBUFFERATIPROC glNewObjectBufferATI;
104extern PFNGLISOBJECTBUFFERATIPROC glIsObjectBufferATI;
105extern PFNGLUPDATEOBJECTBUFFERATIPROC glUpdateObjectBufferATI;
106extern PFNGLGETOBJECTBUFFERFVATIPROC glGetObjectBufferfvATI;
107extern PFNGLGETOBJECTBUFFERIVATIPROC glGetObjectBufferivATI;
108extern PFNGLFREEOBJECTBUFFERATIPROC glFreeObjectBufferATI;
109extern PFNGLARRAYOBJECTATIPROC glArrayObjectATI;
110extern PFNGLVERTEXATTRIBARRAYOBJECTATIPROC glVertexAttribArrayObjectATI;
111extern PFNGLGETARRAYOBJECTFVATIPROC glGetArrayObjectfvATI;
112extern PFNGLGETARRAYOBJECTIVATIPROC glGetArrayObjectivATI;
113extern PFNGLVARIANTARRAYOBJECTATIPROC glVariantObjectArrayATI;
114extern PFNGLGETVARIANTARRAYOBJECTFVATIPROC glGetVariantArrayObjectfvATI;
115extern PFNGLGETVARIANTARRAYOBJECTIVATIPROC glGetVariantArrayObjectivATI;
116
117// GL_ARB_occlusion_query
118extern PFNGLGENQUERIESARBPROC glGenQueriesARB;
119extern PFNGLDELETEQUERIESARBPROC glDeleteQueriesARB;
120extern PFNGLISQUERYARBPROC glIsQueryARB;
121extern PFNGLBEGINQUERYARBPROC glBeginQueryARB;
122extern PFNGLENDQUERYARBPROC glEndQueryARB;
123extern PFNGLGETQUERYIVARBPROC glGetQueryivARB;
124extern PFNGLGETQUERYOBJECTIVARBPROC glGetQueryObjectivARB;
125extern PFNGLGETQUERYOBJECTUIVARBPROC glGetQueryObjectuivARB;
126
127// GL_ARB_point_parameters
128extern PFNGLPOINTPARAMETERFARBPROC glPointParameterfARB;
129extern PFNGLPOINTPARAMETERFVARBPROC glPointParameterfvARB;
130
131// GL_ARB_shader_objects
132extern PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
133extern PFNGLGETHANDLEARBPROC glGetHandleARB;
134extern PFNGLDETACHOBJECTARBPROC glDetachObjectARB;
135extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
136extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
137extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
138extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
139extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
140extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
141extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
142extern PFNGLVALIDATEPROGRAMARBPROC glValidateProgramARB;
143extern PFNGLUNIFORM1FARBPROC glUniform1fARB;
144extern PFNGLUNIFORM2FARBPROC glUniform2fARB;
145extern PFNGLUNIFORM3FARBPROC glUniform3fARB;
146extern PFNGLUNIFORM4FARBPROC glUniform4fARB;
147extern PFNGLUNIFORM1IARBPROC glUniform1iARB;
148extern PFNGLUNIFORM2IARBPROC glUniform2iARB;
149extern PFNGLUNIFORM3IARBPROC glUniform3iARB;
150extern PFNGLUNIFORM4IARBPROC glUniform4iARB;
151extern PFNGLUNIFORM1FVARBPROC glUniform1fvARB;
152extern PFNGLUNIFORM2FVARBPROC glUniform2fvARB;
153extern PFNGLUNIFORM3FVARBPROC glUniform3fvARB;
154extern PFNGLUNIFORM4FVARBPROC glUniform4fvARB;
155extern PFNGLUNIFORM1IVARBPROC glUniform1ivARB;
156extern PFNGLUNIFORM2IVARBPROC glUniform2ivARB;
157extern PFNGLUNIFORM3IVARBPROC glUniform3ivARB;
158extern PFNGLUNIFORM4IVARBPROC glUniform4ivARB;
159extern PFNGLUNIFORMMATRIX2FVARBPROC glUniformMatrix2fvARB;
160extern PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fvARB;
161extern PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fvARB;
162extern PFNGLGETOBJECTPARAMETERFVARBPROC glGetObjectParameterfvARB;
163extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
164extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
165extern PFNGLGETATTACHEDOBJECTSARBPROC glGetAttachedObjectsARB;
166extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
167extern PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniformARB;
168extern PFNGLGETUNIFORMFVARBPROC glGetUniformfvARB;
169extern PFNGLGETUNIFORMIVARBPROC glGetUniformivARB;
170extern PFNGLGETSHADERSOURCEARBPROC glGetShaderSourceARB;
171
172// GL_ARB_vertex_shader
173extern PFNGLVERTEXATTRIB1DARBPROC glVertexAttrib1dARB;
174extern PFNGLVERTEXATTRIB1DVARBPROC glVertexAttrib1dvARB;
175extern PFNGLVERTEXATTRIB1FARBPROC glVertexAttrib1fARB;
176extern PFNGLVERTEXATTRIB1FVARBPROC glVertexAttrib1fvARB;
177extern PFNGLVERTEXATTRIB1SARBPROC glVertexAttrib1sARB;
178extern PFNGLVERTEXATTRIB1SVARBPROC glVertexAttrib1svARB;
179extern PFNGLVERTEXATTRIB2DARBPROC glVertexAttrib2dARB;
180extern PFNGLVERTEXATTRIB2DVARBPROC glVertexAttrib2dvARB;
181extern PFNGLVERTEXATTRIB2FARBPROC glVertexAttrib2fARB;
182extern PFNGLVERTEXATTRIB2FVARBPROC glVertexAttrib2fvARB;
183extern PFNGLVERTEXATTRIB2SARBPROC glVertexAttrib2sARB;
184extern PFNGLVERTEXATTRIB2SVARBPROC glVertexAttrib2svARB;
185extern PFNGLVERTEXATTRIB3DARBPROC glVertexAttrib3dARB;
186extern PFNGLVERTEXATTRIB3DVARBPROC glVertexAttrib3dvARB;
187extern PFNGLVERTEXATTRIB3FARBPROC glVertexAttrib3fARB;
188extern PFNGLVERTEXATTRIB3FVARBPROC glVertexAttrib3fvARB;
189extern PFNGLVERTEXATTRIB3SARBPROC glVertexAttrib3sARB;
190extern PFNGLVERTEXATTRIB3SVARBPROC glVertexAttrib3svARB;
191extern PFNGLVERTEXATTRIB4NBVARBPROC glVertexAttrib4nbvARB;
192extern PFNGLVERTEXATTRIB4NIVARBPROC glVertexAttrib4nivARB;
193extern PFNGLVERTEXATTRIB4NSVARBPROC glVertexAttrib4nsvARB;
194extern PFNGLVERTEXATTRIB4NUBARBPROC glVertexAttrib4nubARB;
195extern PFNGLVERTEXATTRIB4NUBVARBPROC glVertexAttrib4nubvARB;
196extern PFNGLVERTEXATTRIB4NUIVARBPROC glVertexAttrib4nuivARB;
197extern PFNGLVERTEXATTRIB4NUSVARBPROC glVertexAttrib4nusvARB;
198extern PFNGLVERTEXATTRIB4BVARBPROC glVertexAttrib4bvARB;
199extern PFNGLVERTEXATTRIB4DARBPROC glVertexAttrib4dARB;
200extern PFNGLVERTEXATTRIB4DVARBPROC glVertexAttrib4dvARB;
201extern PFNGLVERTEXATTRIB4FARBPROC glVertexAttrib4fARB;
202extern PFNGLVERTEXATTRIB4FVARBPROC glVertexAttrib4fvARB;
203extern PFNGLVERTEXATTRIB4IVARBPROC glVertexAttrib4ivARB;
204extern PFNGLVERTEXATTRIB4SARBPROC glVertexAttrib4sARB;
205extern PFNGLVERTEXATTRIB4SVARBPROC glVertexAttrib4svARB;
206extern PFNGLVERTEXATTRIB4UBVARBPROC glVertexAttrib4ubvARB;
207extern PFNGLVERTEXATTRIB4UIVARBPROC glVertexAttrib4uivARB;
208extern PFNGLVERTEXATTRIB4USVARBPROC glVertexAttrib4usvARB;
209extern PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB;
210extern PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB;
211extern PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB;
212extern PFNGLPROGRAMSTRINGARBPROC glProgramStringARB;
213extern PFNGLBINDPROGRAMARBPROC glBindProgramARB;
214extern PFNGLDELETEPROGRAMSARBPROC glDeleteProgramsARB;
215extern PFNGLGENPROGRAMSARBPROC glGenProgramsARB;
216extern PFNGLPROGRAMENVPARAMETER4DARBPROC glProgramEnvParameter4dARB;
217extern PFNGLPROGRAMENVPARAMETER4DVARBPROC glProgramEnvParameter4dvARB;
218extern PFNGLPROGRAMENVPARAMETER4FARBPROC glProgramEnvParameter4fARB;
219extern PFNGLPROGRAMENVPARAMETER4FVARBPROC glProgramEnvParameter4fvARB;
220extern PFNGLPROGRAMLOCALPARAMETER4DARBPROC glProgramLocalParameter4dARB;
221extern PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glProgramLocalParameter4dvARB;
222extern PFNGLPROGRAMLOCALPARAMETER4FARBPROC glProgramLocalParameter4fARB;
223extern PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glProgramLocalParameter4fvARB;
224extern PFNGLGETPROGRAMENVPARAMETERDVARBPROC glGetProgramEnvParameterdvARB;
225extern PFNGLGETPROGRAMENVPARAMETERFVARBPROC glGetProgramEnvParameterfvARB;
226extern PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glGetProgramLocalParameterdvARB;
227extern PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glGetProgramLocalParameterfvARB;
228extern PFNGLGETPROGRAMIVARBPROC glGetProgramivARB;
229extern PFNGLGETPROGRAMSTRINGARBPROC glGetProgramStringARB;
230extern PFNGLGETVERTEXATTRIBDVARBPROC glGetVertexAttribdvARB;
231extern PFNGLGETVERTEXATTRIBFVARBPROC glGetVertexAttribfvARB;
232extern PFNGLGETVERTEXATTRIBIVARBPROC glGetVertexAttribivARB;
233extern PFNGLGETVERTEXATTRIBPOINTERVARBPROC glGetVertexAttribPointervARB;
234extern PFNGLISPROGRAMARBPROC glIsProgramARB;
235extern PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB;
236extern PFNGLGETACTIVEATTRIBARBPROC glGetActiveAttribARB;
237extern PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB;
238
239extern PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glCompressedTexImage2DARB;
240extern PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glGetCompressedTexImageARB;
241
242extern PFNGLCOLORTABLEEXTPROC glColorTableEXT;
243
244//GL_EXT_framebuffer_object
245extern PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT;
246extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
247extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT;
248extern PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT;
249extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT;
250extern PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT;
251extern PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT;
252extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
253extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
254extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
255extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
256extern PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT;
257extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
258extern PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT;
259extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT;
260extern PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT;
261extern PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT;
262
263
264#elif LL_WINDOWS
265
266// windows gl headers depend on things like APIENTRY, so include windows.
267#define WIN32_LEAN_AND_MEAN
268#include <winsock2.h>
269#include <windows.h>
270
271//----------------------------------------------------------------------------
272#include <GL/gl.h>
273#include <GL/glu.h>
274
275// quotes so we get libraries/.../GL/ version
276#include "GL/glext.h"
277#include "GL/glh_extensions.h"
278
279
280// GL_ARB_vertex_buffer_object
281extern PFNGLBINDBUFFERARBPROC glBindBufferARB;
282extern PFNGLDELETEBUFFERSARBPROC glDeleteBuffersARB;
283extern PFNGLGENBUFFERSARBPROC glGenBuffersARB;
284extern PFNGLISBUFFERARBPROC glIsBufferARB;
285extern PFNGLBUFFERDATAARBPROC glBufferDataARB;
286extern PFNGLBUFFERSUBDATAARBPROC glBufferSubDataARB;
287extern PFNGLGETBUFFERSUBDATAARBPROC glGetBufferSubDataARB;
288extern PFNGLMAPBUFFERARBPROC glMapBufferARB;
289extern PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB;
290extern PFNGLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB;
291extern PFNGLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB;
292
293// GL_ATI_vertex_array_object
294extern PFNGLNEWOBJECTBUFFERATIPROC glNewObjectBufferATI;
295extern PFNGLISOBJECTBUFFERATIPROC glIsObjectBufferATI;
296extern PFNGLUPDATEOBJECTBUFFERATIPROC glUpdateObjectBufferATI;
297extern PFNGLGETOBJECTBUFFERFVATIPROC glGetObjectBufferfvATI;
298extern PFNGLGETOBJECTBUFFERIVATIPROC glGetObjectBufferivATI;
299extern PFNGLFREEOBJECTBUFFERATIPROC glFreeObjectBufferATI;
300extern PFNGLARRAYOBJECTATIPROC glArrayObjectATI;
301extern PFNGLVERTEXATTRIBARRAYOBJECTATIPROC glVertexAttribArrayObjectATI;
302extern PFNGLGETARRAYOBJECTFVATIPROC glGetArrayObjectfvATI;
303extern PFNGLGETARRAYOBJECTIVATIPROC glGetArrayObjectivATI;
304extern PFNGLVARIANTARRAYOBJECTATIPROC glVariantObjectArrayATI;
305extern PFNGLGETVARIANTARRAYOBJECTFVATIPROC glGetVariantArrayObjectfvATI;
306extern PFNGLGETVARIANTARRAYOBJECTIVATIPROC glGetVariantArrayObjectivATI;
307
308extern PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT;
309
310// GL_ARB_occlusion_query
311extern PFNGLGENQUERIESARBPROC glGenQueriesARB;
312extern PFNGLDELETEQUERIESARBPROC glDeleteQueriesARB;
313extern PFNGLISQUERYARBPROC glIsQueryARB;
314extern PFNGLBEGINQUERYARBPROC glBeginQueryARB;
315extern PFNGLENDQUERYARBPROC glEndQueryARB;
316extern PFNGLGETQUERYIVARBPROC glGetQueryivARB;
317extern PFNGLGETQUERYOBJECTIVARBPROC glGetQueryObjectivARB;
318extern PFNGLGETQUERYOBJECTUIVARBPROC glGetQueryObjectuivARB;
319
320// GL_ARB_point_parameters
321extern PFNGLPOINTPARAMETERFARBPROC glPointParameterfARB;
322extern PFNGLPOINTPARAMETERFVARBPROC glPointParameterfvARB;
323
324// GL_ARB_shader_objects
325extern PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
326extern PFNGLGETHANDLEARBPROC glGetHandleARB;
327extern PFNGLDETACHOBJECTARBPROC glDetachObjectARB;
328extern PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
329extern PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
330extern PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
331extern PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
332extern PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
333extern PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
334extern PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
335extern PFNGLVALIDATEPROGRAMARBPROC glValidateProgramARB;
336extern PFNGLUNIFORM1FARBPROC glUniform1fARB;
337extern PFNGLUNIFORM2FARBPROC glUniform2fARB;
338extern PFNGLUNIFORM3FARBPROC glUniform3fARB;
339extern PFNGLUNIFORM4FARBPROC glUniform4fARB;
340extern PFNGLUNIFORM1IARBPROC glUniform1iARB;
341extern PFNGLUNIFORM2IARBPROC glUniform2iARB;
342extern PFNGLUNIFORM3IARBPROC glUniform3iARB;
343extern PFNGLUNIFORM4IARBPROC glUniform4iARB;
344extern PFNGLUNIFORM1FVARBPROC glUniform1fvARB;
345extern PFNGLUNIFORM2FVARBPROC glUniform2fvARB;
346extern PFNGLUNIFORM3FVARBPROC glUniform3fvARB;
347extern PFNGLUNIFORM4FVARBPROC glUniform4fvARB;
348extern PFNGLUNIFORM1IVARBPROC glUniform1ivARB;
349extern PFNGLUNIFORM2IVARBPROC glUniform2ivARB;
350extern PFNGLUNIFORM3IVARBPROC glUniform3ivARB;
351extern PFNGLUNIFORM4IVARBPROC glUniform4ivARB;
352extern PFNGLUNIFORMMATRIX2FVARBPROC glUniformMatrix2fvARB;
353extern PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fvARB;
354extern PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fvARB;
355extern PFNGLGETOBJECTPARAMETERFVARBPROC glGetObjectParameterfvARB;
356extern PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
357extern PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
358extern PFNGLGETATTACHEDOBJECTSARBPROC glGetAttachedObjectsARB;
359extern PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
360extern PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniformARB;
361extern PFNGLGETUNIFORMFVARBPROC glGetUniformfvARB;
362extern PFNGLGETUNIFORMIVARBPROC glGetUniformivARB;
363extern PFNGLGETSHADERSOURCEARBPROC glGetShaderSourceARB;
364
365// GL_ARB_vertex_shader
366extern PFNGLVERTEXATTRIB1DARBPROC glVertexAttrib1dARB;
367extern PFNGLVERTEXATTRIB1DVARBPROC glVertexAttrib1dvARB;
368extern PFNGLVERTEXATTRIB1FARBPROC glVertexAttrib1fARB;
369extern PFNGLVERTEXATTRIB1FVARBPROC glVertexAttrib1fvARB;
370extern PFNGLVERTEXATTRIB1SARBPROC glVertexAttrib1sARB;
371extern PFNGLVERTEXATTRIB1SVARBPROC glVertexAttrib1svARB;
372extern PFNGLVERTEXATTRIB2DARBPROC glVertexAttrib2dARB;
373extern PFNGLVERTEXATTRIB2DVARBPROC glVertexAttrib2dvARB;
374extern PFNGLVERTEXATTRIB2FARBPROC glVertexAttrib2fARB;
375extern PFNGLVERTEXATTRIB2FVARBPROC glVertexAttrib2fvARB;
376extern PFNGLVERTEXATTRIB2SARBPROC glVertexAttrib2sARB;
377extern PFNGLVERTEXATTRIB2SVARBPROC glVertexAttrib2svARB;
378extern PFNGLVERTEXATTRIB3DARBPROC glVertexAttrib3dARB;
379extern PFNGLVERTEXATTRIB3DVARBPROC glVertexAttrib3dvARB;
380extern PFNGLVERTEXATTRIB3FARBPROC glVertexAttrib3fARB;
381extern PFNGLVERTEXATTRIB3FVARBPROC glVertexAttrib3fvARB;
382extern PFNGLVERTEXATTRIB3SARBPROC glVertexAttrib3sARB;
383extern PFNGLVERTEXATTRIB3SVARBPROC glVertexAttrib3svARB;
384extern PFNGLVERTEXATTRIB4NBVARBPROC glVertexAttrib4nbvARB;
385extern PFNGLVERTEXATTRIB4NIVARBPROC glVertexAttrib4nivARB;
386extern PFNGLVERTEXATTRIB4NSVARBPROC glVertexAttrib4nsvARB;
387extern PFNGLVERTEXATTRIB4NUBARBPROC glVertexAttrib4nubARB;
388extern PFNGLVERTEXATTRIB4NUBVARBPROC glVertexAttrib4nubvARB;
389extern PFNGLVERTEXATTRIB4NUIVARBPROC glVertexAttrib4nuivARB;
390extern PFNGLVERTEXATTRIB4NUSVARBPROC glVertexAttrib4nusvARB;
391extern PFNGLVERTEXATTRIB4BVARBPROC glVertexAttrib4bvARB;
392extern PFNGLVERTEXATTRIB4DARBPROC glVertexAttrib4dARB;
393extern PFNGLVERTEXATTRIB4DVARBPROC glVertexAttrib4dvARB;
394extern PFNGLVERTEXATTRIB4FARBPROC glVertexAttrib4fARB;
395extern PFNGLVERTEXATTRIB4FVARBPROC glVertexAttrib4fvARB;
396extern PFNGLVERTEXATTRIB4IVARBPROC glVertexAttrib4ivARB;
397extern PFNGLVERTEXATTRIB4SARBPROC glVertexAttrib4sARB;
398extern PFNGLVERTEXATTRIB4SVARBPROC glVertexAttrib4svARB;
399extern PFNGLVERTEXATTRIB4UBVARBPROC glVertexAttrib4ubvARB;
400extern PFNGLVERTEXATTRIB4UIVARBPROC glVertexAttrib4uivARB;
401extern PFNGLVERTEXATTRIB4USVARBPROC glVertexAttrib4usvARB;
402extern PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB;
403extern PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB;
404extern PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB;
405extern PFNGLPROGRAMSTRINGARBPROC glProgramStringARB;
406extern PFNGLBINDPROGRAMARBPROC glBindProgramARB;
407extern PFNGLDELETEPROGRAMSARBPROC glDeleteProgramsARB;
408extern PFNGLGENPROGRAMSARBPROC glGenProgramsARB;
409extern PFNGLPROGRAMENVPARAMETER4DARBPROC glProgramEnvParameter4dARB;
410extern PFNGLPROGRAMENVPARAMETER4DVARBPROC glProgramEnvParameter4dvARB;
411extern PFNGLPROGRAMENVPARAMETER4FARBPROC glProgramEnvParameter4fARB;
412extern PFNGLPROGRAMENVPARAMETER4FVARBPROC glProgramEnvParameter4fvARB;
413extern PFNGLPROGRAMLOCALPARAMETER4DARBPROC glProgramLocalParameter4dARB;
414extern PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glProgramLocalParameter4dvARB;
415extern PFNGLPROGRAMLOCALPARAMETER4FARBPROC glProgramLocalParameter4fARB;
416extern PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glProgramLocalParameter4fvARB;
417extern PFNGLGETPROGRAMENVPARAMETERDVARBPROC glGetProgramEnvParameterdvARB;
418extern PFNGLGETPROGRAMENVPARAMETERFVARBPROC glGetProgramEnvParameterfvARB;
419extern PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glGetProgramLocalParameterdvARB;
420extern PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glGetProgramLocalParameterfvARB;
421extern PFNGLGETPROGRAMIVARBPROC glGetProgramivARB;
422extern PFNGLGETPROGRAMSTRINGARBPROC glGetProgramStringARB;
423extern PFNGLGETVERTEXATTRIBDVARBPROC glGetVertexAttribdvARB;
424extern PFNGLGETVERTEXATTRIBFVARBPROC glGetVertexAttribfvARB;
425extern PFNGLGETVERTEXATTRIBIVARBPROC glGetVertexAttribivARB;
426extern PFNGLGETVERTEXATTRIBPOINTERVARBPROC glGetVertexAttribPointervARB;
427extern PFNGLISPROGRAMARBPROC glIsProgramARB;
428extern PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB;
429extern PFNGLGETACTIVEATTRIBARBPROC glGetActiveAttribARB;
430extern PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB;
431
432//GL_EXT_framebuffer_object
433extern PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT;
434extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
435extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT;
436extern PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT;
437extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT;
438extern PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT;
439extern PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT;
440extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
441extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
442extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
443extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
444extern PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT;
445extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
446extern PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT;
447extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT;
448extern PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT;
449extern PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT;
450
451
452#elif LL_DARWIN
453//----------------------------------------------------------------------------
454// LL_DARWIN
455
456#include <OpenGL/gl.h>
457#include <OpenGL/glu.h>
458
459#define GL_EXT_separate_specular_color 1
460#include <OpenGL/glext.h>
461
462#include "GL/glh_extensions.h"
463
464// These symbols don't exist on 10.3.9, so they have to be declared weak. Redeclaring them here fixes the problem.
465// Note that they also must not be called on 10.3.9. This should be taken care of by a runtime check for the existence of the GL extension.
466#include <AvailabilityMacros.h>
467
468// GL_EXT_framebuffer_object
469extern GLboolean glIsRenderbufferEXT(GLuint renderbuffer) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
470extern void glBindRenderbufferEXT(GLenum target, GLuint renderbuffer) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
471extern void glDeleteRenderbuffersEXT(GLsizei n, const GLuint *renderbuffers) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
472extern void glGenRenderbuffersEXT(GLsizei n, GLuint *renderbuffers) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
473extern void glRenderbufferStorageEXT(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
474extern void glGetRenderbufferParameterivEXT(GLenum target, GLenum pname, GLint *params) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
475extern GLboolean glIsFramebufferEXT(GLuint framebuffer) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
476extern void glBindFramebufferEXT(GLenum target, GLuint framebuffer) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
477extern void glDeleteFramebuffersEXT(GLsizei n, const GLuint *framebuffers) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
478extern void glGenFramebuffersEXT(GLsizei n, GLuint *framebuffers) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
479extern GLenum glCheckFramebufferStatusEXT(GLenum target) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
480extern void glFramebufferTexture1DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
481extern void glFramebufferTexture2DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
482extern void glFramebufferTexture3DEXT(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
483extern void glFramebufferRenderbufferEXT(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
484extern void glGetFramebufferAttachmentParameterivEXT(GLenum target, GLenum attachment, GLenum pname, GLint *params) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
485extern void glGenerateMipmapEXT(GLenum target) AVAILABLE_MAC_OS_X_VERSION_10_4_AND_LATER;
486
487
488#ifdef __cplusplus
489extern "C" {
490#endif
491//
492// Define vertex buffer object headers on Mac
493//
494#ifndef GL_ARB_vertex_buffer_object
495#define GL_BUFFER_SIZE_ARB 0x8764
496#define GL_BUFFER_USAGE_ARB 0x8765
497#define GL_ARRAY_BUFFER_ARB 0x8892
498#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893
499#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894
500#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
501#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
502#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
503#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
504#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
505#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A
506#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B
507#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C
508#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D
509#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E
510#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F
511#define GL_READ_ONLY_ARB 0x88B8
512#define GL_WRITE_ONLY_ARB 0x88B9
513#define GL_READ_WRITE_ARB 0x88BA
514#define GL_BUFFER_ACCESS_ARB 0x88BB
515#define GL_BUFFER_MAPPED_ARB 0x88BC
516#define GL_BUFFER_MAP_POINTER_ARB 0x88BD
517#define GL_STREAM_DRAW_ARB 0x88E0
518#define GL_STREAM_READ_ARB 0x88E1
519#define GL_STREAM_COPY_ARB 0x88E2
520#define GL_STATIC_DRAW_ARB 0x88E4
521#define GL_STATIC_READ_ARB 0x88E5
522#define GL_STATIC_COPY_ARB 0x88E6
523#define GL_DYNAMIC_DRAW_ARB 0x88E8
524#define GL_DYNAMIC_READ_ARB 0x88E9
525#define GL_DYNAMIC_COPY_ARB 0x88EA
526#endif
527
528
529
530#ifndef GL_ARB_vertex_buffer_object
531/* GL types for handling large vertex buffer objects */
532typedef intptr_t GLintptrARB;
533typedef intptr_t GLsizeiptrARB;
534#endif
535
536
537#ifndef GL_ARB_vertex_buffer_object
538#define GL_ARB_vertex_buffer_object 1
539#ifdef GL_GLEXT_FUNCTION_POINTERS
540typedef void (* glBindBufferARBProcPtr) (GLenum target, GLuint buffer);
541typedef void (* glDeleteBufferARBProcPtr) (GLsizei n, const GLuint *buffers);
542typedef void (* glGenBuffersARBProcPtr) (GLsizei n, GLuint *buffers);
543typedef GLboolean (* glIsBufferARBProcPtr) (GLuint buffer);
544typedef void (* glBufferDataARBProcPtr) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);
545typedef void (* glBufferSubDataARBProcPtr) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);
546typedef void (* glGetBufferSubDataARBProcPtr) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);
547typedef GLvoid* (* glMapBufferARBProcPtr) (GLenum target, GLenum access); /* Flawfinder: ignore */
548typedef GLboolean (* glUnmapBufferARBProcPtr) (GLenum target);
549typedef void (* glGetBufferParameterivARBProcPtr) (GLenum target, GLenum pname, GLint *params);
550typedef void (* glGetBufferPointervARBProcPtr) (GLenum target, GLenum pname, GLvoid* *params);
551#else
552extern void glBindBufferARB (GLenum, GLuint);
553extern void glDeleteBuffersARB (GLsizei, const GLuint *);
554extern void glGenBuffersARB (GLsizei, GLuint *);
555extern GLboolean glIsBufferARB (GLuint);
556extern void glBufferDataARB (GLenum, GLsizeiptrARB, const GLvoid *, GLenum);
557extern void glBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, const GLvoid *);
558extern void glGetBufferSubDataARB (GLenum, GLintptrARB, GLsizeiptrARB, GLvoid *);
559extern GLvoid* glMapBufferARB (GLenum, GLenum);
560extern GLboolean glUnmapBufferARB (GLenum);
561extern void glGetBufferParameterivARB (GLenum, GLenum, GLint *);
562extern void glGetBufferPointervARB (GLenum, GLenum, GLvoid* *);
563#endif /* GL_GLEXT_FUNCTION_POINTERS */
564#endif
565
566// May be needed for DARWIN...
567// #ifndef GL_ARB_compressed_tex_image
568// #define GL_ARB_compressed_tex_image 1
569// #ifdef GL_GLEXT_FUNCTION_POINTERS
570// typedef void (* glCompressedTexImage1D) (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid*);
571// typedef void (* glCompressedTexImage2D) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid*);
572// typedef void (* glCompressedTexImage3D) (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid*);
573// typedef void (* glCompressedTexSubImage1D) (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid*);
574// typedef void (* glCompressedTexSubImage2D) (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid*);
575// typedef void (* glCompressedTexSubImage3D) (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid*);
576// typedef void (* glGetCompressedTexImage) (GLenum, GLint, GLvoid*);
577// #else
578// extern void glCompressedTexImage1D (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid*);
579// extern void glCompressedTexImage2D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid*);
580// extern void glCompressedTexImage3D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid*);
581// extern void glCompressedTexSubImage1D (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid*);
582// extern void glCompressedTexSubImage2D (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid*);
583// extern void glCompressedTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid*);
584// extern void glGetCompressedTexImage (GLenum, GLint, GLvoid*);
585// #endif /* GL_GLEXT_FUNCTION_POINTERS */
586// #endif
587
588#ifdef __cplusplus
589}
590#endif
591
592#include <AGL/gl.h>
593
594#endif // LL_MESA / LL_WINDOWS / LL_DARWIN
595
596
597#endif // LL_LLGLHEADERS_H
diff --git a/linden/indra/llwindow/llglstates.h b/linden/indra/llwindow/llglstates.h
deleted file mode 100644
index e53640c..0000000
--- a/linden/indra/llwindow/llglstates.h
+++ /dev/null
@@ -1,302 +0,0 @@
1/**
2 * @file llglstates.h
3 * @brief LLGL states definitions
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32//THIS HEADER SHOULD ONLY BE INCLUDED FROM llgl.h
33#ifndef LL_LLGLSTATES_H
34#define LL_LLGLSTATES_H
35
36#include "llimagegl.h"
37
38//----------------------------------------------------------------------------
39
40class LLGLDepthTest
41{
42 // Enabled by default
43public:
44 LLGLDepthTest(GLboolean depth_enabled, GLboolean write_enabled = GL_TRUE, GLenum depth_func = GL_LEQUAL);
45
46 ~LLGLDepthTest();
47
48 GLboolean mPrevDepthEnabled;
49 GLenum mPrevDepthFunc;
50 GLboolean mPrevWriteEnabled;
51private:
52 static GLboolean sDepthEnabled; // defaults to GL_FALSE
53 static GLenum sDepthFunc; // defaults to GL_LESS
54 static GLboolean sWriteEnabled; // defaults to GL_TRUE
55};
56
57//----------------------------------------------------------------------------
58
59class LLGLSDefault
60{
61protected:
62 LLGLEnable mColorMaterial;
63 LLGLDisable mAlphaTest, mBlend, mCullFace, mDither, mFog,
64 mLineSmooth, mLineStipple, mNormalize, mPolygonSmooth,
65 mTextureGenQ, mTextureGenR, mTextureGenS, mTextureGenT,
66 mGLMultisample;
67public:
68 LLGLSDefault()
69 :
70 // Enable
71 mColorMaterial(GL_COLOR_MATERIAL),
72 // Disable
73 mAlphaTest(GL_ALPHA_TEST),
74 mBlend(GL_BLEND),
75 mCullFace(GL_CULL_FACE),
76 mDither(GL_DITHER),
77 mFog(GL_FOG),
78 mLineSmooth(GL_LINE_SMOOTH),
79 mLineStipple(GL_LINE_STIPPLE),
80 mNormalize(GL_NORMALIZE),
81 mPolygonSmooth(GL_POLYGON_SMOOTH),
82 mTextureGenQ(GL_TEXTURE_GEN_Q),
83 mTextureGenR(GL_TEXTURE_GEN_R),
84 mTextureGenS(GL_TEXTURE_GEN_S),
85 mTextureGenT(GL_TEXTURE_GEN_T),
86 mGLMultisample(GL_MULTISAMPLE_ARB)
87 { }
88};
89
90class LLGLSNoTexture
91{
92public:
93 LLGLSNoTexture()
94 { LLImageGL::unbindTexture(0); }
95};
96
97class LLGLSObjectSelect
98{
99protected:
100 LLGLDisable mBlend, mFog, mAlphaTest;
101 LLGLEnable mCullFace;
102public:
103 LLGLSObjectSelect()
104 : mBlend(GL_BLEND), mFog(GL_FOG),
105 mAlphaTest(GL_ALPHA_TEST),
106 mCullFace(GL_CULL_FACE)
107 { LLImageGL::unbindTexture(0); }
108};
109
110class LLGLSObjectSelectAlpha
111{
112protected:
113 LLGLEnable mAlphaTest;
114public:
115 LLGLSObjectSelectAlpha()
116 : mAlphaTest(GL_ALPHA_TEST)
117 {}
118};
119
120//----------------------------------------------------------------------------
121
122class LLGLSUIDefault
123{
124protected:
125 LLGLEnable mBlend, mAlphaTest;
126 LLGLDisable mCullFace;
127 LLGLDepthTest mDepthTest;
128public:
129 LLGLSUIDefault()
130 : mBlend(GL_BLEND), mAlphaTest(GL_ALPHA_TEST),
131 mCullFace(GL_CULL_FACE),
132 mDepthTest(GL_FALSE, GL_TRUE, GL_LEQUAL)
133 {}
134};
135
136class LLGLSNoAlphaTest // : public LLGLSUIDefault
137{
138protected:
139 LLGLDisable mAlphaTest;
140public:
141 LLGLSNoAlphaTest()
142 : mAlphaTest(GL_ALPHA_TEST)
143 {}
144};
145
146class LLGLSNoTextureNoAlphaTest // : public LLGLSUIDefault
147{
148protected:
149 LLGLDisable mAlphaTest;
150public:
151 LLGLSNoTextureNoAlphaTest()
152 : mAlphaTest(GL_ALPHA_TEST)
153
154 { LLImageGL::unbindTexture(0); }
155};
156
157//----------------------------------------------------------------------------
158
159class LLGLSFog
160{
161protected:
162 LLGLEnable mFog;
163public:
164 LLGLSFog()
165 : mFog(GL_FOG)
166 {}
167};
168
169class LLGLSNoFog
170{
171protected:
172 LLGLDisable mFog;
173public:
174 LLGLSNoFog()
175 : mFog(GL_FOG)
176 {}
177};
178
179//----------------------------------------------------------------------------
180
181class LLGLSPipeline
182{
183protected:
184 LLGLEnable mCullFace;
185 LLGLDepthTest mDepthTest;
186public:
187 LLGLSPipeline()
188 : mCullFace(GL_CULL_FACE),
189 mDepthTest(GL_TRUE, GL_TRUE, GL_LEQUAL)
190 { }
191};
192
193class LLGLSPipelineAlpha // : public LLGLSPipeline
194{
195protected:
196 LLGLEnable mBlend, mAlphaTest;
197public:
198 LLGLSPipelineAlpha()
199 : mBlend(GL_BLEND),
200 mAlphaTest(GL_ALPHA_TEST)
201 { }
202};
203
204class LLGLSPipelineEmbossBump
205{
206protected:
207 LLGLDisable mFog;
208public:
209 LLGLSPipelineEmbossBump()
210 : mFog(GL_FOG)
211 { }
212};
213
214class LLGLSPipelineSelection
215{
216protected:
217 LLGLDisable mCullFace;
218public:
219 LLGLSPipelineSelection()
220 : mCullFace(GL_CULL_FACE)
221 {}
222};
223
224class LLGLSPipelineAvatar
225{
226protected:
227 LLGLEnable mNormalize;
228public:
229 LLGLSPipelineAvatar()
230 : mNormalize(GL_NORMALIZE)
231 {}
232};
233
234class LLGLSPipelineSkyBox
235{
236protected:
237 LLGLDisable mAlphaTest, mCullFace, mFog;
238public:
239 LLGLSPipelineSkyBox()
240 : mAlphaTest(GL_ALPHA_TEST), mCullFace(GL_CULL_FACE), mFog(GL_FOG)
241 { }
242};
243
244class LLGLSTracker
245{
246protected:
247 LLGLEnable mCullFace, mBlend, mAlphaTest;
248public:
249 LLGLSTracker() :
250 mCullFace(GL_CULL_FACE),
251 mBlend(GL_BLEND),
252 mAlphaTest(GL_ALPHA_TEST)
253
254 { LLImageGL::unbindTexture(0); }
255};
256
257//----------------------------------------------------------------------------
258
259class LLGLSSpecular
260{
261public:
262 LLGLSSpecular(const LLColor4& color, F32 shininess)
263 {
264 if (shininess > 0.0f)
265 {
266 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, color.mV);
267 S32 shiny = (S32)(shininess*128.f);
268 shiny = llclamp(shiny,0,128);
269 glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, shiny);
270 }
271 }
272 ~LLGLSSpecular()
273 {
274 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, LLColor4(0.f,0.f,0.f,0.f).mV);
275 glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 0);
276 }
277};
278
279//----------------------------------------------------------------------------
280
281
282class LLGLSBlendFunc : public LLGLSPipeline {
283protected:
284 GLint mSavedSrc, mSavedDst;
285 LLGLEnable mBlend;
286
287public:
288 LLGLSBlendFunc(GLenum srcFunc, GLenum dstFunc) :
289 mBlend(GL_BLEND)
290 {
291 glGetIntegerv(GL_BLEND_SRC, &mSavedSrc);
292 glGetIntegerv(GL_BLEND_DST, &mSavedDst);
293 glBlendFunc(srcFunc, dstFunc);
294 }
295
296 ~LLGLSBlendFunc(void) {
297 glBlendFunc(mSavedSrc, mSavedDst);
298 }
299};
300
301
302#endif
diff --git a/linden/indra/llwindow/llgltypes.h b/linden/indra/llwindow/llgltypes.h
deleted file mode 100644
index d22d5fa..0000000
--- a/linden/indra/llwindow/llgltypes.h
+++ /dev/null
@@ -1,44 +0,0 @@
1/**
2 * @file llgltypes.h
3 * @brief LLGL definition
4 *
5 * $LicenseInfo:firstyear=2006&license=viewergpl$
6 *
7 * Copyright (c) 2006-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LLGLTYPES_H
33#define LLGLTYPES_H
34
35#define MAX_GL_TEXTURE_UNITS 16
36
37typedef U32 LLGLenum;
38typedef U32 LLGLuint;
39typedef S32 LLGLint;
40typedef F32 LLGLfloat;
41typedef F64 LLGLdouble;
42typedef U8 LLGLboolean;
43
44#endif
diff --git a/linden/indra/llwindow/llkeyboard.cpp b/linden/indra/llwindow/llkeyboard.cpp
index c6502ed..cc6f73b 100644
--- a/linden/indra/llwindow/llkeyboard.cpp
+++ b/linden/indra/llwindow/llkeyboard.cpp
@@ -43,8 +43,8 @@
43LLKeyboard *gKeyboard = NULL; 43LLKeyboard *gKeyboard = NULL;
44 44
45//static 45//static
46std::map<KEY,LLString> LLKeyboard::sKeysToNames; 46std::map<KEY,std::string> LLKeyboard::sKeysToNames;
47std::map<LLString,KEY> LLKeyboard::sNamesToKeys; 47std::map<std::string,KEY> LLKeyboard::sNamesToKeys;
48 48
49// 49//
50// Class Implementation 50// Class Implementation
@@ -67,6 +67,7 @@ LLKeyboard::LLKeyboard() : mCallbacks(NULL), mNumpadDistinct(ND_NUMLOCK_OFF)
67 67
68 mInsertMode = LL_KIM_INSERT; 68 mInsertMode = LL_KIM_INSERT;
69 mCurTranslatedKey = KEY_NONE; 69 mCurTranslatedKey = KEY_NONE;
70 mCurScanKey = KEY_NONE;
70 71
71 addKeyName(' ', "Space" ); 72 addKeyName(' ', "Space" );
72 addKeyName(KEY_RETURN, "Enter" ); 73 addKeyName(KEY_RETURN, "Enter" );
@@ -143,11 +144,11 @@ LLKeyboard::~LLKeyboard()
143 // nothing 144 // nothing
144} 145}
145 146
146void LLKeyboard::addKeyName(KEY key, const LLString& name) 147void LLKeyboard::addKeyName(KEY key, const std::string& name)
147{ 148{
148 sKeysToNames[key] = name; 149 sKeysToNames[key] = name;
149 LLString nameuc = name; 150 std::string nameuc = name;
150 LLString::toUpper(nameuc); 151 LLStringUtil::toUpper(nameuc);
151 sNamesToKeys[nameuc] = key; 152 sNamesToKeys[nameuc] = key;
152} 153}
153 154
@@ -293,9 +294,9 @@ S32 LLKeyboard::getKeyElapsedFrameCount(KEY key)
293} 294}
294 295
295// static 296// static
296BOOL LLKeyboard::keyFromString(const LLString& str, KEY *key) 297BOOL LLKeyboard::keyFromString(const std::string& str, KEY *key)
297{ 298{
298 LLString instring(str); 299 std::string instring(str);
299 size_t length = instring.size(); 300 size_t length = instring.size();
300 301
301 if (length < 1) 302 if (length < 1)
@@ -317,7 +318,7 @@ BOOL LLKeyboard::keyFromString(const LLString& str, KEY *key)
317 } 318 }
318 } 319 }
319 320
320 LLString::toUpper(instring); 321 LLStringUtil::toUpper(instring);
321 KEY res = get_if_there(sNamesToKeys, instring, (KEY)0); 322 KEY res = get_if_there(sNamesToKeys, instring, (KEY)0);
322 if (res != 0) 323 if (res != 0)
323 { 324 {
@@ -330,15 +331,15 @@ BOOL LLKeyboard::keyFromString(const LLString& str, KEY *key)
330 331
331 332
332// static 333// static
333LLString LLKeyboard::stringFromKey(KEY key) 334std::string LLKeyboard::stringFromKey(KEY key)
334{ 335{
335 LLString res = get_if_there(sKeysToNames, key, LLString::null); 336 std::string res = get_if_there(sKeysToNames, key, std::string());
336 if (res.empty()) 337 if (res.empty())
337 { 338 {
338 char buffer[2]; /* Flawfinder: ignore */ 339 char buffer[2]; /* Flawfinder: ignore */
339 buffer[0] = key; 340 buffer[0] = key;
340 buffer[1] = '\0'; 341 buffer[1] = '\0';
341 res = LLString(buffer); 342 res = std::string(buffer);
342 } 343 }
343 return res; 344 return res;
344} 345}
@@ -346,9 +347,9 @@ LLString LLKeyboard::stringFromKey(KEY key)
346 347
347 348
348//static 349//static
349BOOL LLKeyboard::maskFromString(const LLString& str, MASK *mask) 350BOOL LLKeyboard::maskFromString(const std::string& str, MASK *mask)
350{ 351{
351 LLString instring(str); 352 std::string instring(str);
352 if (instring == "NONE") 353 if (instring == "NONE")
353 { 354 {
354 *mask = MASK_NONE; 355 *mask = MASK_NONE;
diff --git a/linden/indra/llwindow/llkeyboard.h b/linden/indra/llwindow/llkeyboard.h
index d9ce376..4d0b86d 100644
--- a/linden/indra/llwindow/llkeyboard.h
+++ b/linden/indra/llwindow/llkeyboard.h
@@ -107,9 +107,9 @@ public:
107 EKeyboardInsertMode getInsertMode() { return mInsertMode; } 107 EKeyboardInsertMode getInsertMode() { return mInsertMode; }
108 void toggleInsertMode(); 108 void toggleInsertMode();
109 109
110 static BOOL maskFromString(const LLString& str, MASK *mask); // False on failure 110 static BOOL maskFromString(const std::string& str, MASK *mask); // False on failure
111 static BOOL keyFromString(const LLString& str, KEY *key); // False on failure 111 static BOOL keyFromString(const std::string& str, KEY *key); // False on failure
112 static LLString stringFromKey(KEY key); 112 static std::string stringFromKey(KEY key);
113 113
114 e_numpad_distinct getNumpadDistinct() { return mNumpadDistinct; } 114 e_numpad_distinct getNumpadDistinct() { return mNumpadDistinct; }
115 void setNumpadDistinct(e_numpad_distinct val) { mNumpadDistinct = val; } 115 void setNumpadDistinct(e_numpad_distinct val) { mNumpadDistinct = val; }
@@ -119,7 +119,7 @@ public:
119 S32 getKeyElapsedFrameCount( KEY key ); // Returns time in frames since key was pressed. 119 S32 getKeyElapsedFrameCount( KEY key ); // Returns time in frames since key was pressed.
120 120
121protected: 121protected:
122 void addKeyName(KEY key, const LLString& name); 122 void addKeyName(KEY key, const std::string& name);
123 123
124protected: 124protected:
125 std::map<U16, KEY> mTranslateKeyMap; // Map of translations from OS keys to Linden KEYs 125 std::map<U16, KEY> mTranslateKeyMap; // Map of translations from OS keys to Linden KEYs
@@ -139,8 +139,8 @@ protected:
139 139
140 EKeyboardInsertMode mInsertMode; 140 EKeyboardInsertMode mInsertMode;
141 141
142 static std::map<KEY,LLString> sKeysToNames; 142 static std::map<KEY,std::string> sKeysToNames;
143 static std::map<LLString,KEY> sNamesToKeys; 143 static std::map<std::string,KEY> sNamesToKeys;
144}; 144};
145 145
146extern LLKeyboard *gKeyboard; 146extern LLKeyboard *gKeyboard;
diff --git a/linden/indra/llwindow/lllogitechlcd.cpp b/linden/indra/llwindow/lllogitechlcd.cpp
deleted file mode 100644
index 81e97a0..0000000
--- a/linden/indra/llwindow/lllogitechlcd.cpp
+++ /dev/null
@@ -1,296 +0,0 @@
1/**
2 * @file lcd.cpp
3 * @brief cLcd panel class
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#include "linden_common.h"
33
34#if LL_LCD_COMPILE
35
36#include "EZ_LCD.h"
37#include "../newview/res/resource.h"
38#include "llcontrol.h"
39extern LLControlGroup gSavedSettings;
40
41#ifndef LL_LOGITECH_LCD_H
42#include "lllogitechlcd.h"
43#endif
44
45#define WAIT_DURATION 7
46#define DEBOUNCE_DURATION 0.3f
47
48LLLCDPageGroup::LLLCDPageGroup(CEzLcd *LCD, int type, HICON SLIcon):
49mType(type),
50mHandle(NULL),
51mSLIcon(SLIcon),
52mDisplayPage(false),
53mLCD(LCD)
54{
55 mPageArray.clear();
56}
57
58LLLCDPageGroup::~LLLCDPageGroup()
59{
60 mPageArray.clear();
61}
62
63void llDefaultPageGroup::UpdateDetails()
64{
65 mLCD->ModifyControlsOnPage(mPageArray[0].mPageIndex);
66}
67
68void llDefaultPageGroup::GetDisplayable()
69{
70
71}
72
73llDefaultPageGroup::llDefaultPageGroup(CEzLcd *LCD, int type, HICON SLIcon)
74:LLLCDPageGroup(LCD, type, SLIcon)
75{
76 // create a new specific page
77 LLLCDSpecificPage newPage;
78 newPage.mPageIndex = mLCD->AddNewPage() - 1;
79 mLCD->ModifyControlsOnPage(newPage.mPageIndex);
80
81 // add in all the display parts for this specific page
82
83 // add in the icon - all pages have this - we don't need to track this because we never update it
84 HANDLE m_rightIcon = mLCD->AddIcon(mSLIcon, 32, 32);
85 mLCD->SetOrigin(m_rightIcon, 0, 0);
86
87 // add Title
88 HANDLE title = mLCD->AddText(LG_STATIC_TEXT, LG_MEDIUM, DT_CENTER, 128);
89 mLCD->SetOrigin(title, 32, 20);
90 mLCD->SetText(title, _T("Second Life Display"));
91 newPage.mDisplayItemArray.push_back(title);
92
93 // and then insert it
94 mPageArray.push_back(newPage);
95}
96
97LLLCD::LLLCD(HINSTANCE instance):
98mInited(false),
99mDisplayTimer(),
100mDebounceTimer(),
101mPageToShow(-1),
102mInstance(instance),
103mDestinationLCD(-1),
104mFirstTimeThru(true),
105mCurrentGroupBeingShown(NULL),
106mSLIcon(NULL)
107{
108 HRESULT res_ = S_OK;
109
110 // Create instance of EzLcd.
111 mLCD = new CEzLcd();
112
113 // Have it initialize itself
114 res_ = mLCD->InitYourself(_T("Second Life"));
115
116 if (res_ != S_OK)
117 {
118 // Something went wrong, when connecting to the LCD Manager software. We need to get out now
119 delete mLCD;
120 return;
121 }
122 mInited = true;
123
124 // preload the Second Life Icon
125 mSLIcon = static_cast<HICON>(LoadImage(mInstance,
126 MAKEINTRESOURCE(IDI_LCD_LL_ICON),
127 IMAGE_ICON,
128 32,
129 32,
130 LR_MONOCHROME));
131
132 // have to do this first so screens are added to the list and updateDisplay actually does something.
133 mLCD->Update();
134}
135
136LLLCD::~LLLCD()
137{
138 // remove the instance of the LCD controller
139 if (mInited == true)
140 {
141 delete mLCD;
142
143 // free up the used pages
144 int loopSize = mPageGroupArray.size();
145 for(int i= 0; i<loopSize; i++)
146 {
147 free (mPageGroupArray[i]);
148 }
149 }
150}
151
152LLLCDPageGroup *LLLCD::GetNextPageToDisplay()
153{
154 // find group with current page in it.
155
156 int groupSize = mPageGroupArray.size();
157 for(int x=1; x< groupSize; x++)
158 {
159 if (mPageGroupArray[x]->mDisplayPage)
160 {
161 // now walk all the pages in the page group we are looking at
162 int numPages = mPageGroupArray[x]->mPageArray.size();
163 for (int zx = 0; zx< numPages; zx++)
164 {
165 // found it.
166 if (mPageToShow == mPageGroupArray[x]->mPageArray[zx].mPageIndex)
167 {
168 // move to the next one
169 if (zx < numPages-1)
170 {
171 mPageToShow = mPageGroupArray[x]->mPageArray[zx+1].mPageIndex;
172 return mPageGroupArray[x];
173 }
174 else
175 {
176 for(int y=x+1; y< groupSize; y++)
177 {
178 if (mPageGroupArray[y]->mDisplayPage)
179 {
180 mPageToShow = mPageGroupArray[y]->mPageArray[0].mPageIndex;
181 return mPageGroupArray[y];
182 }
183 }
184 }
185 }
186 }
187 }
188 }
189
190 // ok, didn't find it. Start again at the beginning and find the first group that's enabled
191 for(int x=1; x< groupSize; x++)
192 {
193 if (mPageGroupArray[x]->mDisplayPage)
194 {
195 mPageToShow = mPageGroupArray[x]->mPageArray[0].mPageIndex;
196 return mPageGroupArray[x];
197 }
198 }
199 // if we got this far, we should display the default screen
200 mPageToShow = mPageGroupArray[0]->mPageArray[0].mPageIndex;
201 return mPageGroupArray[0];
202}
203
204void LLLCD::SetUpDisplayPages()
205{
206 // work out if destination has changed
207 int destinationLCD = gSavedSettings.getS32("LCDDestination");
208 switch(destinationLCD)
209 {
210 case 0:
211 destinationLCD = LGLCD_DEVICE_FAMILY_KEYBOARD_G15;
212 break;
213 case 1:
214 destinationLCD = LGLCD_DEVICE_FAMILY_SPEAKERS_Z10;
215 break;
216 }
217 // set destination if it's changed
218 if (mDestinationLCD != destinationLCD)
219 {
220 mDestinationLCD = destinationLCD;
221 mLCD->SetDeviceFamilyToUse(destinationLCD);
222 }
223 int loopSize = mPageGroupArray.size();
224 for(int i= 0; i<loopSize; i++)
225 {
226 mPageGroupArray[i]->GetDisplayable();
227 }
228}
229
230void LLLCD::UpdateDisplay()
231{
232 if (mInited)
233 {
234 // reset pages if anything has changed
235 SetUpDisplayPages();
236 if (mLCD->IsConnected())
237 {
238 // Switching back and forth between the pages that we've created
239 if (mDisplayTimer.getElapsedTimeF32() > WAIT_DURATION || mFirstTimeThru)
240 {
241 mCurrentGroupBeingShown = GetNextPageToDisplay();
242 mDisplayTimer.reset();
243 mFirstTimeThru = false;
244 }
245
246 // Check if button 1 triggered
247 if ((mLCD->ButtonIsPressed(LG_BUTTON_1)
248 || mLCD->ButtonIsPressed(LG_BUTTON_2)
249 || mLCD->ButtonIsPressed(LG_BUTTON_3)
250 || mLCD->ButtonIsPressed(LG_BUTTON_4)
251 ) && mDebounceTimer.getElapsedTimeF32() > DEBOUNCE_DURATION)
252 {
253 // if so, move us on a page
254 mCurrentGroupBeingShown = GetNextPageToDisplay();
255 mDisplayTimer.reset();
256 mDebounceTimer.reset();
257 }
258
259 // update that which is being show
260 mCurrentGroupBeingShown->UpdateDetails();
261
262 // set which page is shown
263 mLCD->ShowPage(mPageToShow);
264
265 // Must run the following every loop.
266 mLCD->Update();
267 }
268 }
269}
270
271
272// accessor functions
273bool LLLCD::Enabled()
274{
275 return mInited;
276}
277
278BOOL LLLCD::AreZ10Available()
279{
280 if (mInited == true)
281 {
282 return mLCD->AnyDeviceOfThisFamilyPresent(LGLCD_DEVICE_FAMILY_SPEAKERS_Z10);
283 }
284 return false;
285}
286
287BOOL LLLCD::IsG15Available()
288{
289 if (mInited == true)
290 {
291 return mLCD->AnyDeviceOfThisFamilyPresent(LGLCD_DEVICE_FAMILY_KEYBOARD_G15);
292 }
293 return false;
294}
295
296#endif
diff --git a/linden/indra/llwindow/lllogitechlcd.h b/linden/indra/llwindow/lllogitechlcd.h
deleted file mode 100644
index 47a6acd..0000000
--- a/linden/indra/llwindow/lllogitechlcd.h
+++ /dev/null
@@ -1,135 +0,0 @@
1/**
2 * @file lcd.h
3 * @brief Description of the LCD owner class.
4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 *
7 * Copyright (c) 2001-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
10 * The source code in this file ("Source Code") is provided by Linden Lab
11 * to you under the terms of the GNU General Public License, version 2.0
12 * ("GPL"), unless you have obtained a separate licensing agreement
13 * ("Other License"), formally executed by you and Linden Lab. Terms of
14 * the GPL can be found in doc/GPL-license.txt in this distribution, or
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
17 * There are special exceptions to the terms and conditions of the GPL as
18 * it is applied to this Source Code. View the full text of the exception
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_LOGITECH_LCD_H
33#define LL_LOGITECH_LCD_H
34
35#include <vector>
36#include "llFrametimer.h"
37
38class CEzLcd;
39
40// TO Add a new display page groups, duplicate the Region or Debug or Chat class, then modify what's actually displayed (ie how many pages and whats in them)
41// in the constructor and update display functions.
42// Remember to add in a new enum type for the new display type, and add in functions to actually create/update or remove this page in the SetupDisplayPages function
43// And, of course, add the new option to the Menu in llpanelLCDoption.xml, and save details (duplicate the ones for debug or region).
44
45// this defines one pages worth of display items.
46class LLLCDSpecificPage
47{
48public:
49 int mPageIndex;
50 typedef std::vector<HANDLE> displayItemArray_t;
51 // array of indexes that come from the lcd display sdk for specific items being displayed on a given page
52 displayItemArray_t mDisplayItemArray;
53};
54
55// this defines a group of pages - associated with a specific type of display, like Debug, Linden Account info, region etc
56// NOTE this can have more than one page associated with it - so it has an array of cLCDSpecificPage for each page.
57class LLLCDPageGroup
58{
59public:
60 LLLCDPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
61 virtual ~LLLCDPageGroup();
62 virtual void UpdateDetails() = 0;
63 virtual void GetDisplayable() = 0;
64 int mType;
65 HANDLE mHandle;
66 typedef std::vector<LLLCDSpecificPage> pageArray_t;
67 pageArray_t mPageArray;
68 BOOL mDisplayPage;
69protected:
70
71 CEzLcd *mLCD;
72 HICON mSLIcon;
73};
74
75
76// class that defines the Default page - used if nothing else is enabled
77class llDefaultPageGroup : public LLLCDPageGroup
78{
79public:
80 llDefaultPageGroup(CEzLcd *LCD, int type, HICON SLIcon);
81 virtual void UpdateDetails();
82 virtual void GetDisplayable();
83};
84
85// Root class - contains pointers to actual LCD display object, and arrays of page groups to be displayed
86class LLLCD
87{
88public:
89 enum
90 {
91 kLCDDefault,
92 kLCDDebug,
93 kLCDChat,
94 kLCDRegion,
95 kLCDLinden,
96 kLCDIM,
97 kLCDDebugConsole,
98 kMaxLCDPageGroups
99 };
100 LLLCD(HINSTANCE instance);
101 ~LLLCD();
102 void UpdateDisplay();
103 bool Enabled();
104 BOOL AreZ10Available();
105 BOOL IsG15Available();
106
107 typedef std::vector<LLLCDPageGroup *> pageGroupArray_t;
108 pageGroupArray_t mPageGroupArray;
109 HICON mSLIcon;
110 CEzLcd *mLCD;
111private:
112
113 // member functions to display data
114 void SetUpDisplayPages();
115 LLLCDPageGroup *GetNextPageToDisplay();
116
117 LLLCDPageGroup *mCurrentGroupBeingShown;
118
119 // members
120 bool mInited;
121
122 int mPageToShow;
123 LLFrameTimer mDisplayTimer;
124 LLFrameTimer mDebounceTimer;
125 HINSTANCE mInstance; // necessary for loading some icons for the dot matrix LCD display to use
126 bool mFirstTimeThru;
127
128
129 // actual display set up variables
130 int mDestinationLCD;
131};
132
133
134
135#endif
diff --git a/linden/indra/llwindow/llmousehandler.h b/linden/indra/llwindow/llmousehandler.h
index b511dcd..119197f 100644
--- a/linden/indra/llwindow/llmousehandler.h
+++ b/linden/indra/llwindow/llmousehandler.h
@@ -43,7 +43,11 @@ class LLMouseHandler
43public: 43public:
44 LLMouseHandler() {} 44 LLMouseHandler() {}
45 virtual ~LLMouseHandler() {} 45 virtual ~LLMouseHandler() {}
46 46 typedef enum {
47 SHOW_NEVER,
48 SHOW_IF_NOT_BLOCKED,
49 SHOW_ALWAYS,
50 } EShowToolTip;
47 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) = 0; 51 virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) = 0;
48 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) = 0; 52 virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) = 0;
49 virtual BOOL handleHover(S32 x, S32 y, MASK mask) = 0; 53 virtual BOOL handleHover(S32 x, S32 y, MASK mask) = 0;
@@ -51,8 +55,9 @@ public:
51 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) = 0; 55 virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) = 0;
52 virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) = 0; 56 virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) = 0;
53 virtual BOOL handleRightMouseUp(S32 x, S32 y, MASK mask) = 0; 57 virtual BOOL handleRightMouseUp(S32 x, S32 y, MASK mask) = 0;
54 virtual BOOL handleToolTip(S32 x, S32 y, LLString& msg, LLRect* sticky_rect_screen) = 0; 58 virtual BOOL handleToolTip(S32 x, S32 y, std::string& msg, LLRect* sticky_rect_screen) = 0;
55 virtual const LLString& getName() const = 0; 59 virtual EShowToolTip getShowToolTip() { return SHOW_IF_NOT_BLOCKED; };
60 virtual const std::string& getName() const = 0;
56 61
57 virtual void onMouseCaptureLost() = 0; 62 virtual void onMouseCaptureLost() = 0;
58 63
diff --git a/linden/indra/llwindow/llwindow.cpp b/linden/indra/llwindow/llwindow.cpp
index ffb6393..f4ee8cc 100644
--- a/linden/indra/llwindow/llwindow.cpp
+++ b/linden/indra/llwindow/llwindow.cpp
@@ -58,13 +58,13 @@ BOOL gDebugClicks = FALSE;
58BOOL gDebugWindowProc = FALSE; 58BOOL gDebugWindowProc = FALSE;
59 59
60const S32 gURLProtocolWhitelistCount = 3; 60const S32 gURLProtocolWhitelistCount = 3;
61const char* gURLProtocolWhitelist[] = { "file", "http", "https" }; 61const std::string gURLProtocolWhitelist[] = { "file:", "http:", "https:" };
62 62
63// CP: added a handler list - this is what's used to open the protocol and is based on registry entry 63// CP: added a handler list - this is what's used to open the protocol and is based on registry entry
64// only meaningful difference currently is that file: protocols are opened using http: 64// only meaningful difference currently is that file: protocols are opened using http:
65// since no protocol handler exists in registry for file: 65// since no protocol handler exists in registry for file:
66// Important - these lists should match - protocol to handler 66// Important - these lists should match - protocol to handler
67const char* gURLProtocolWhitelistHandler[] = { "http", "http", "https" }; 67const std::string gURLProtocolWhitelistHandler[] = { "http", "http", "https" };
68 68
69BOOL LLWindowCallbacks::handleTranslatedKeyDown(const KEY key, const MASK mask, BOOL repeated) 69BOOL LLWindowCallbacks::handleTranslatedKeyDown(const KEY key, const MASK mask, BOOL repeated)
70{ 70{
@@ -203,7 +203,12 @@ BOOL LLWindowCallbacks::handleDeviceChange(LLWindow *window)
203 return FALSE; 203 return FALSE;
204} 204}
205 205
206S32 OSMessageBox(const char* text, const char* caption, U32 type) 206void LLWindowCallbacks::handlePingWatchdog(LLWindow *window, const char * msg)
207{
208
209}
210
211S32 OSMessageBox(const std::string& text, const std::string& caption, U32 type)
207{ 212{
208 // Properly hide the splash screen when displaying the message box 213 // Properly hide the splash screen when displaying the message box
209 BOOL was_visible = FALSE; 214 BOOL was_visible = FALSE;
@@ -285,6 +290,12 @@ void LLWindow::setCallbacks(LLWindowCallbacks *callbacks)
285 } 290 }
286} 291}
287 292
293void *LLWindow::getMediaWindow()
294{
295 // Default to returning the platform window.
296 return getPlatformWindow();
297}
298
288// static 299// static
289std::string LLWindow::getFontListSans() 300std::string LLWindow::getFontListSans()
290{ 301{
@@ -389,7 +400,7 @@ void LLSplashScreen::show()
389} 400}
390 401
391//static 402//static
392void LLSplashScreen::update(const char* str) 403void LLSplashScreen::update(const std::string& str)
393{ 404{
394 LLSplashScreen::show(); 405 LLSplashScreen::show();
395 if (gSplashScreenp) 406 if (gSplashScreenp)
@@ -417,8 +428,8 @@ void LLSplashScreen::hide()
417static std::set<LLWindow*> sWindowList; 428static std::set<LLWindow*> sWindowList;
418 429
419LLWindow* LLWindowManager::createWindow( 430LLWindow* LLWindowManager::createWindow(
420 char *title, 431 const std::string& title,
421 char *name, 432 const std::string& name,
422 LLCoordScreen upper_left, 433 LLCoordScreen upper_left,
423 LLCoordScreen size, 434 LLCoordScreen size,
424 U32 flags, 435 U32 flags,
@@ -434,7 +445,7 @@ LLWindow* LLWindowManager::createWindow(
434} 445}
435 446
436LLWindow* LLWindowManager::createWindow( 447LLWindow* LLWindowManager::createWindow(
437 char *title, char *name, S32 x, S32 y, S32 width, S32 height, U32 flags, 448 const std::string& title, const std::string& name, S32 x, S32 y, S32 width, S32 height, U32 flags,
438 BOOL fullscreen, 449 BOOL fullscreen,
439 BOOL clearBg, 450 BOOL clearBg,
440 BOOL disable_vsync, 451 BOOL disable_vsync,
diff --git a/linden/indra/llwindow/llwindow.h b/linden/indra/llwindow/llwindow.h
index a63c8d5..cee83b9 100644
--- a/linden/indra/llwindow/llwindow.h
+++ b/linden/indra/llwindow/llwindow.h
@@ -32,8 +32,6 @@
32#ifndef LL_LLWINDOW_H 32#ifndef LL_LLWINDOW_H
33#define LL_LLWINDOW_H 33#define LL_LLWINDOW_H
34 34
35#include <sys/stat.h>
36
37#include "llrect.h" 35#include "llrect.h"
38#include "llcoord.h" 36#include "llcoord.h"
39#include "llstring.h" 37#include "llstring.h"
@@ -121,6 +119,7 @@ public:
121 virtual void handleDataCopy(LLWindow *window, S32 data_type, void *data); 119 virtual void handleDataCopy(LLWindow *window, S32 data_type, void *data);
122 virtual BOOL handleTimerEvent(LLWindow *window); 120 virtual BOOL handleTimerEvent(LLWindow *window);
123 virtual BOOL handleDeviceChange(LLWindow *window); 121 virtual BOOL handleDeviceChange(LLWindow *window);
122 virtual void handlePingWatchdog(LLWindow *window, const char * msg);
124}; 123};
125 124
126// Refer to llwindow_test in test/common/llwindow for usage example 125// Refer to llwindow_test in test/common/llwindow for usage example
@@ -197,10 +196,6 @@ public:
197 virtual void bringToFront() = 0; 196 virtual void bringToFront() = 0;
198 virtual void focusClient() { }; // this may not have meaning or be required on other platforms, therefore, it's not abstract 197 virtual void focusClient() { }; // this may not have meaning or be required on other platforms, therefore, it's not abstract
199 198
200 virtual S32 stat( const char* file_name, struct stat* stat_info ) = 0;
201 virtual BOOL sendEmail(const char* address,const char* subject,const char* body_text, const char* attachment=NULL, const char* attachment_displayed_name=NULL ) = 0;
202
203
204 // handy coordinate space conversion routines 199 // handy coordinate space conversion routines
205 // NB: screen to window and vice verse won't work on width/height coordinate pairs, 200 // NB: screen to window and vice verse won't work on width/height coordinate pairs,
206 // as the conversion must take into account left AND right border widths, etc. 201 // as the conversion must take into account left AND right border widths, etc.
@@ -225,14 +220,18 @@ public:
225// opens system default color picker 220// opens system default color picker
226 virtual BOOL dialog_color_picker (F32 *r, F32 *g, F32 *b) { return FALSE; }; 221 virtual BOOL dialog_color_picker (F32 *r, F32 *g, F32 *b) { return FALSE; };
227 222
228// return a platform-specific window reference (HWND on Windows, WindowRef on the Mac) 223// return a platform-specific window reference (HWND on Windows, WindowRef on the Mac, Gtk window on Linux)
229 virtual void *getPlatformWindow() = 0; 224 virtual void *getPlatformWindow() = 0;
225
226// return the platform-specific window reference we use to initialize llmozlib (HWND on Windows, WindowRef on the Mac, Gtk window on Linux)
227 virtual void *getMediaWindow();
230 228
231 // control platform's Language Text Input mechanisms. 229 // control platform's Language Text Input mechanisms.
232 virtual void allowLanguageTextInput(LLPreeditor *preeditor, BOOL b) {} 230 virtual void allowLanguageTextInput(LLPreeditor *preeditor, BOOL b) {}
233 virtual void setLanguageTextInput( const LLCoordGL & pos ) {}; 231 virtual void setLanguageTextInput( const LLCoordGL & pos ) {};
234 virtual void updateLanguageTextInputArea() {} 232 virtual void updateLanguageTextInputArea() {}
235 virtual void interruptLanguageTextInput() {} 233 virtual void interruptLanguageTextInput() {}
234 virtual void spawnWebBrowser(const std::string& escaped_url) {};
236 235
237 static std::string getFontListSans(); 236 static std::string getFontListSans();
238 237
@@ -293,13 +292,13 @@ public:
293 static LLSplashScreen * create(); 292 static LLSplashScreen * create();
294 static void show(); 293 static void show();
295 static void hide(); 294 static void hide();
296 static void update(const char* string); 295 static void update(const std::string& string);
297 296
298 static bool isVisible(); 297 static bool isVisible();
299protected: 298protected:
300 // These are overridden by the platform implementation 299 // These are overridden by the platform implementation
301 virtual void showImpl() = 0; 300 virtual void showImpl() = 0;
302 virtual void updateImpl(const char* string) = 0; 301 virtual void updateImpl(const std::string& string) = 0;
303 virtual void hideImpl() = 0; 302 virtual void hideImpl() = 0;
304 303
305 static BOOL sVisible; 304 static BOOL sVisible;
@@ -307,7 +306,7 @@ protected:
307}; 306};
308 307
309// Platform-neutral for accessing the platform specific message box 308// Platform-neutral for accessing the platform specific message box
310S32 OSMessageBox(const char* text, const char* caption, U32 type); 309S32 OSMessageBox(const std::string& text, const std::string& caption, U32 type);
311const U32 OSMB_OK = 0; 310const U32 OSMB_OK = 0;
312const U32 OSMB_OKCANCEL = 1; 311const U32 OSMB_OKCANCEL = 1;
313const U32 OSMB_YESNO = 2; 312const U32 OSMB_YESNO = 2;
@@ -325,8 +324,8 @@ class LLWindowManager
325{ 324{
326public: 325public:
327 static LLWindow* createWindow( 326 static LLWindow* createWindow(
328 char *title, 327 const std::string& title,
329 char *name, 328 const std::string& name,
330 LLCoordScreen upper_left = LLCoordScreen(10, 10), 329 LLCoordScreen upper_left = LLCoordScreen(10, 10),
331 LLCoordScreen size = LLCoordScreen(320, 240), 330 LLCoordScreen size = LLCoordScreen(320, 240),
332 U32 flags = 0, 331 U32 flags = 0,
@@ -336,7 +335,7 @@ public:
336 BOOL use_gl = TRUE, 335 BOOL use_gl = TRUE,
337 BOOL ignore_pixel_depth = FALSE); 336 BOOL ignore_pixel_depth = FALSE);
338 static LLWindow *createWindow( 337 static LLWindow *createWindow(
339 char* title, char* name, S32 x, S32 y, S32 width, S32 height, 338 const std::string& title, const std::string& name, S32 x, S32 y, S32 width, S32 height,
340 U32 flags = 0, 339 U32 flags = 0,
341 BOOL fullscreen = FALSE, 340 BOOL fullscreen = FALSE,
342 BOOL clearBg = FALSE, 341 BOOL clearBg = FALSE,
@@ -355,11 +354,8 @@ extern BOOL gDebugWindowProc;
355 354
356// Protocols, like "http" and "https" we support in URLs 355// Protocols, like "http" and "https" we support in URLs
357extern const S32 gURLProtocolWhitelistCount; 356extern const S32 gURLProtocolWhitelistCount;
358extern const char* gURLProtocolWhitelist[]; 357extern const std::string gURLProtocolWhitelist[];
359extern const char* gURLProtocolWhitelistHandler[]; 358extern const std::string gURLProtocolWhitelistHandler[];
360
361// Loads a URL with the user's default browser
362void spawn_web_browser(const char* escaped_url);
363 359
364void simpleEscapeString ( std::string& stringIn ); 360void simpleEscapeString ( std::string& stringIn );
365 361
diff --git a/linden/indra/llwindow/llwindow.vcproj b/linden/indra/llwindow/llwindow.vcproj
deleted file mode 100644
index 0243c72..0000000
--- a/linden/indra/llwindow/llwindow.vcproj
+++ /dev/null
@@ -1,281 +0,0 @@
1<?xml version="1.0" encoding="Windows-1252"?>
2<VisualStudioProject
3 ProjectType="Visual C++"
4 Version="7.10"
5 Name="llwindow"
6 ProjectGUID="{B5B53617-416F-404A-BF10-22EBCCA0E4FB}"
7 Keyword="Win32Proj">
8 <Platforms>
9 <Platform
10 Name="Win32"/>
11 </Platforms>
12 <Configurations>
13 <Configuration
14 Name="Debug|Win32"
15 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
16 IntermediateDirectory="Debug"
17 ConfigurationType="4"
18 CharacterSet="1">
19 <Tool
20 Name="VCCLCompilerTool"
21 Optimization="0"
22 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llxml;..\llvfs;..\llmessage;..\llscene;..\llimage;..\llrender;..\..\libraries\i686-win32\include;..\..\libraries\include\;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
23 PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LL_WINDOWS;LL_DEBUG"
24 MinimalRebuild="TRUE"
25 BasicRuntimeChecks="3"
26 RuntimeLibrary="1"
27 StructMemberAlignment="4"
28 ForceConformanceInForLoopScope="TRUE"
29 UsePrecompiledHeader="0"
30 WarningLevel="3"
31 WarnAsError="TRUE"
32 Detect64BitPortabilityProblems="FALSE"
33 DebugInformationFormat="4"/>
34 <Tool
35 Name="VCCustomBuildTool"/>
36 <Tool
37 Name="VCLibrarianTool"
38 OutputFile="$(OutDir)/llwindow.lib"/>
39 <Tool
40 Name="VCMIDLTool"/>
41 <Tool
42 Name="VCPostBuildEventTool"/>
43 <Tool
44 Name="VCPreBuildEventTool"/>
45 <Tool
46 Name="VCPreLinkEventTool"/>
47 <Tool
48 Name="VCResourceCompilerTool"/>
49 <Tool
50 Name="VCWebServiceProxyGeneratorTool"/>
51 <Tool
52 Name="VCXMLDataGeneratorTool"/>
53 <Tool
54 Name="VCManagedWrapperGeneratorTool"/>
55 <Tool
56 Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
57 </Configuration>
58 <Configuration
59 Name="Release|Win32"
60 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
61 IntermediateDirectory="Release"
62 ConfigurationType="4"
63 CharacterSet="1">
64 <Tool
65 Name="VCCLCompilerTool"
66 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llxml;..\llvfs;..\llmessage;..\llscene;..\llimage;..\llrender;..\..\libraries\i686-win32\include;..\..\libraries\include\;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
67 AdditionalOptions="/Oy-"
68 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;LL_RELEASE"
69 RuntimeLibrary="0"
70 StructMemberAlignment="0"
71 ForceConformanceInForLoopScope="TRUE"
72 UsePrecompiledHeader="0"
73 WarningLevel="3"
74 WarnAsError="TRUE"
75 Detect64BitPortabilityProblems="FALSE"
76 DebugInformationFormat="3"/>
77 <Tool
78 Name="VCCustomBuildTool"/>
79 <Tool
80 Name="VCLibrarianTool"
81 OutputFile="$(OutDir)/llwindow.lib"/>
82 <Tool
83 Name="VCMIDLTool"/>
84 <Tool
85 Name="VCPostBuildEventTool"/>
86 <Tool
87 Name="VCPreBuildEventTool"/>
88 <Tool
89 Name="VCPreLinkEventTool"/>
90 <Tool
91 Name="VCResourceCompilerTool"/>
92 <Tool
93 Name="VCWebServiceProxyGeneratorTool"/>
94 <Tool
95 Name="VCXMLDataGeneratorTool"/>
96 <Tool
97 Name="VCManagedWrapperGeneratorTool"/>
98 <Tool
99 Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
100 </Configuration>
101 <Configuration
102 Name="DebugMesaHeadless|Win32"
103 OutputDirectory="../lib_debug/i686-win32"
104 IntermediateDirectory="$(ConfigurationName)"
105 ConfigurationType="4"
106 CharacterSet="1">
107 <Tool
108 Name="VCCLCompilerTool"
109 Optimization="0"
110 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llxml;..\llvfs;..\llmessage;..\llscene;..\llimage;..\llrender;..\..\libraries\i686-win32\include;..\..\libraries\include\GLMESA;..\..\libraries\i686-win32\include;..\..\libraries\include\;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
111 PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LL_WINDOWS;LL_DEBUG;LL_MESA;LL_MESA_HEADLESS"
112 MinimalRebuild="TRUE"
113 BasicRuntimeChecks="3"
114 RuntimeLibrary="1"
115 StructMemberAlignment="4"
116 ForceConformanceInForLoopScope="TRUE"
117 UsePrecompiledHeader="0"
118 WarningLevel="3"
119 WarnAsError="TRUE"
120 Detect64BitPortabilityProblems="FALSE"
121 DebugInformationFormat="4"/>
122 <Tool
123 Name="VCCustomBuildTool"/>
124 <Tool
125 Name="VCLibrarianTool"
126 OutputFile="$(OutDir)/llwindow_mesaheadless.lib"/>
127 <Tool
128 Name="VCMIDLTool"/>
129 <Tool
130 Name="VCPostBuildEventTool"/>
131 <Tool
132 Name="VCPreBuildEventTool"/>
133 <Tool
134 Name="VCPreLinkEventTool"/>
135 <Tool
136 Name="VCResourceCompilerTool"/>
137 <Tool
138 Name="VCWebServiceProxyGeneratorTool"/>
139 <Tool
140 Name="VCXMLDataGeneratorTool"/>
141 <Tool
142 Name="VCManagedWrapperGeneratorTool"/>
143 <Tool
144 Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
145 </Configuration>
146 <Configuration
147 Name="ReleaseNoOpt|Win32"
148 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
149 IntermediateDirectory="$(ConfigurationName)"
150 ConfigurationType="4"
151 CharacterSet="1">
152 <Tool
153 Name="VCCLCompilerTool"
154 AdditionalOptions="/Oy-"
155 Optimization="0"
156 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llxml;..\llvfs;..\llmessage;..\llscene;..\llimage;..\llrender;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
157 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;LL_RELEASE"
158 RuntimeLibrary="0"
159 StructMemberAlignment="0"
160 ForceConformanceInForLoopScope="TRUE"
161 UsePrecompiledHeader="0"
162 WarningLevel="3"
163 WarnAsError="TRUE"
164 Detect64BitPortabilityProblems="FALSE"
165 DebugInformationFormat="3"/>
166 <Tool
167 Name="VCCustomBuildTool"/>
168 <Tool
169 Name="VCLibrarianTool"
170 OutputFile="$(OutDir)/llwindow.lib"/>
171 <Tool
172 Name="VCMIDLTool"/>
173 <Tool
174 Name="VCPostBuildEventTool"/>
175 <Tool
176 Name="VCPreBuildEventTool"/>
177 <Tool
178 Name="VCPreLinkEventTool"/>
179 <Tool
180 Name="VCResourceCompilerTool"/>
181 <Tool
182 Name="VCWebServiceProxyGeneratorTool"/>
183 <Tool
184 Name="VCXMLDataGeneratorTool"/>
185 <Tool
186 Name="VCManagedWrapperGeneratorTool"/>
187 <Tool
188 Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
189 </Configuration>
190 </Configurations>
191 <References>
192 </References>
193 <Files>
194 <Filter
195 Name="Source Files"
196 Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
197 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
198 <File
199 RelativePath=".\lldxhardware.cpp">
200 </File>
201 <File
202 RelativePath=".\llgl.cpp">
203 </File>
204 <File
205 RelativePath=".\llkeyboard.cpp">
206 </File>
207 <File
208 RelativePath=".\llkeyboardwin32.cpp">
209 </File>
210 <File
211 RelativePath=".\lllogitechlcd.cpp">
212 </File>
213 <File
214 RelativePath=".\llwindow.cpp">
215 </File>
216 <File
217 RelativePath=".\llwindowheadless.cpp">
218 </File>
219 <File
220 RelativePath=".\llwindowmesaheadless.cpp">
221 </File>
222 <File
223 RelativePath=".\llwindowwin32.cpp">
224 </File>
225 </Filter>
226 <Filter
227 Name="Header Files"
228 Filter="h;hpp;hxx;hm;inl;inc;xsd"
229 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
230 <File
231 RelativePath=".\lldxhardware.h">
232 </File>
233 <File
234 RelativePath=".\llgl.h">
235 </File>
236 <File
237 RelativePath=".\llglheaders.h">
238 </File>
239 <File
240 RelativePath=".\llglstates.h">
241 </File>
242 <File
243 RelativePath=".\llgltypes.h">
244 </File>
245 <File
246 RelativePath=".\llkeyboard.h">
247 </File>
248 <File
249 RelativePath=".\llkeyboardwin32.h">
250 </File>
251 <File
252 RelativePath=".\lllogitechlcd.h">
253 </File>
254 <File
255 RelativePath=".\llmousehandler.h">
256 </File>
257 <File
258 RelativePath=".\llpreeditor.h">
259 </File>
260 <File
261 RelativePath=".\llwindow.h">
262 </File>
263 <File
264 RelativePath=".\llwindowheadless.h">
265 </File>
266 <File
267 RelativePath=".\llwindowmesaheadless.h">
268 </File>
269 <File
270 RelativePath=".\llwindowwin32.h">
271 </File>
272 </Filter>
273 <Filter
274 Name="Resource Files"
275 Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
276 UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
277 </Filter>
278 </Files>
279 <Globals>
280 </Globals>
281</VisualStudioProject>
diff --git a/linden/indra/llwindow/llwindow_vc8.vcproj b/linden/indra/llwindow/llwindow_vc8.vcproj
deleted file mode 100644
index 69ec460..0000000
--- a/linden/indra/llwindow/llwindow_vc8.vcproj
+++ /dev/null
@@ -1,395 +0,0 @@
1<?xml version="1.0" encoding="Windows-1252"?>
2<VisualStudioProject
3 ProjectType="Visual C++"
4 Version="8.00"
5 Name="llwindow"
6 ProjectGUID="{B5B53617-416F-404A-BF10-22EBCCA0E4FB}"
7 RootNamespace="llwindow"
8 Keyword="Win32Proj"
9 >
10 <Platforms>
11 <Platform
12 Name="Win32"
13 />
14 </Platforms>
15 <ToolFiles>
16 </ToolFiles>
17 <Configurations>
18 <Configuration
19 Name="Debug|Win32"
20 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
21 IntermediateDirectory="Debug"
22 ConfigurationType="4"
23 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
24 CharacterSet="1"
25 >
26 <Tool
27 Name="VCPreBuildEventTool"
28 />
29 <Tool
30 Name="VCCustomBuildTool"
31 />
32 <Tool
33 Name="VCXMLDataGeneratorTool"
34 />
35 <Tool
36 Name="VCWebServiceProxyGeneratorTool"
37 />
38 <Tool
39 Name="VCMIDLTool"
40 />
41 <Tool
42 Name="VCCLCompilerTool"
43 Optimization="0"
44 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llxml;..\llvfs;..\llmessage;..\llscene;..\llimage;..\llrender;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
45 PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_DEBUG"
46 MinimalRebuild="true"
47 BasicRuntimeChecks="3"
48 RuntimeLibrary="1"
49 StructMemberAlignment="4"
50 TreatWChar_tAsBuiltInType="false"
51 ForceConformanceInForLoopScope="true"
52 UsePrecompiledHeader="0"
53 WarningLevel="3"
54 Detect64BitPortabilityProblems="false"
55 DebugInformationFormat="4"
56 />
57 <Tool
58 Name="VCManagedResourceCompilerTool"
59 />
60 <Tool
61 Name="VCResourceCompilerTool"
62 />
63 <Tool
64 Name="VCPreLinkEventTool"
65 />
66 <Tool
67 Name="VCLibrarianTool"
68 OutputFile="$(OutDir)/llwindow.lib"
69 />
70 <Tool
71 Name="VCALinkTool"
72 />
73 <Tool
74 Name="VCXDCMakeTool"
75 />
76 <Tool
77 Name="VCBscMakeTool"
78 />
79 <Tool
80 Name="VCFxCopTool"
81 />
82 <Tool
83 Name="VCPostBuildEventTool"
84 />
85 </Configuration>
86 <Configuration
87 Name="Release|Win32"
88 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
89 IntermediateDirectory="Release"
90 ConfigurationType="4"
91 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
92 CharacterSet="1"
93 >
94 <Tool
95 Name="VCPreBuildEventTool"
96 />
97 <Tool
98 Name="VCCustomBuildTool"
99 />
100 <Tool
101 Name="VCXMLDataGeneratorTool"
102 />
103 <Tool
104 Name="VCWebServiceProxyGeneratorTool"
105 />
106 <Tool
107 Name="VCMIDLTool"
108 />
109 <Tool
110 Name="VCCLCompilerTool"
111 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llxml;..\llvfs;..\llmessage;..\llscene;..\llimage;..\llrender;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
112 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE"
113 TreatWChar_tAsBuiltInType="false"
114 ForceConformanceInForLoopScope="true"
115 WarningLevel="3"
116 WarnAsError="true"
117 DebugInformationFormat="3"
118 />
119 <Tool
120 Name="VCManagedResourceCompilerTool"
121 />
122 <Tool
123 Name="VCResourceCompilerTool"
124 />
125 <Tool
126 Name="VCPreLinkEventTool"
127 />
128 <Tool
129 Name="VCLibrarianTool"
130 OutputFile="$(OutDir)/llwindow.lib"
131 />
132 <Tool
133 Name="VCALinkTool"
134 />
135 <Tool
136 Name="VCXDCMakeTool"
137 />
138 <Tool
139 Name="VCBscMakeTool"
140 />
141 <Tool
142 Name="VCFxCopTool"
143 />
144 <Tool
145 Name="VCPostBuildEventTool"
146 />
147 </Configuration>
148 <Configuration
149 Name="DebugMesaHeadless|Win32"
150 OutputDirectory="../lib_debug/i686-win32"
151 IntermediateDirectory="$(ConfigurationName)"
152 ConfigurationType="4"
153 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
154 CharacterSet="1"
155 >
156 <Tool
157 Name="VCPreBuildEventTool"
158 />
159 <Tool
160 Name="VCCustomBuildTool"
161 />
162 <Tool
163 Name="VCXMLDataGeneratorTool"
164 />
165 <Tool
166 Name="VCWebServiceProxyGeneratorTool"
167 />
168 <Tool
169 Name="VCMIDLTool"
170 />
171 <Tool
172 Name="VCCLCompilerTool"
173 Optimization="0"
174 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llxml;..\llvfs;..\llmessage;..\llscene;..\llimage;..\llrender;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\GLMESA;..\..\libraries\include\;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
175 PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_DEBUG;LL_MESA;LL_MESA_HEADLESS"
176 MinimalRebuild="true"
177 BasicRuntimeChecks="3"
178 RuntimeLibrary="1"
179 StructMemberAlignment="4"
180 TreatWChar_tAsBuiltInType="false"
181 ForceConformanceInForLoopScope="true"
182 UsePrecompiledHeader="0"
183 WarningLevel="3"
184 Detect64BitPortabilityProblems="false"
185 DebugInformationFormat="4"
186 />
187 <Tool
188 Name="VCManagedResourceCompilerTool"
189 />
190 <Tool
191 Name="VCResourceCompilerTool"
192 />
193 <Tool
194 Name="VCPreLinkEventTool"
195 />
196 <Tool
197 Name="VCLibrarianTool"
198 OutputFile="$(OutDir)/llwindow_mesaheadless.lib"
199 />
200 <Tool
201 Name="VCALinkTool"
202 />
203 <Tool
204 Name="VCXDCMakeTool"
205 />
206 <Tool
207 Name="VCBscMakeTool"
208 />
209 <Tool
210 Name="VCFxCopTool"
211 />
212 <Tool
213 Name="VCPostBuildEventTool"
214 />
215 </Configuration>
216 <Configuration
217 Name="ReleaseNoOpt|Win32"
218 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
219 IntermediateDirectory="$(ConfigurationName)"
220 ConfigurationType="4"
221 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
222 CharacterSet="1"
223 >
224 <Tool
225 Name="VCPreBuildEventTool"
226 />
227 <Tool
228 Name="VCCustomBuildTool"
229 />
230 <Tool
231 Name="VCXMLDataGeneratorTool"
232 />
233 <Tool
234 Name="VCWebServiceProxyGeneratorTool"
235 />
236 <Tool
237 Name="VCMIDLTool"
238 />
239 <Tool
240 Name="VCCLCompilerTool"
241 Optimization="0"
242 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llxml;..\llvfs;..\llmessage;..\llscene;..\llimage;..\llrender;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
243 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE"
244 RuntimeLibrary="0"
245 StructMemberAlignment="0"
246 TreatWChar_tAsBuiltInType="false"
247 ForceConformanceInForLoopScope="true"
248 UsePrecompiledHeader="0"
249 WarningLevel="3"
250 Detect64BitPortabilityProblems="false"
251 DebugInformationFormat="3"
252 />
253 <Tool
254 Name="VCManagedResourceCompilerTool"
255 />
256 <Tool
257 Name="VCResourceCompilerTool"
258 />
259 <Tool
260 Name="VCPreLinkEventTool"
261 />
262 <Tool
263 Name="VCLibrarianTool"
264 OutputFile="$(OutDir)/llwindow.lib"
265 />
266 <Tool
267 Name="VCALinkTool"
268 />
269 <Tool
270 Name="VCXDCMakeTool"
271 />
272 <Tool
273 Name="VCBscMakeTool"
274 />
275 <Tool
276 Name="VCFxCopTool"
277 />
278 <Tool
279 Name="VCPostBuildEventTool"
280 />
281 </Configuration>
282 </Configurations>
283 <References>
284 </References>
285 <Files>
286 <Filter
287 Name="Source Files"
288 Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
289 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
290 >
291 <File
292 RelativePath=".\lldxhardware.cpp"
293 >
294 </File>
295 <File
296 RelativePath=".\llgl.cpp"
297 >
298 </File>
299 <File
300 RelativePath=".\llkeyboard.cpp"
301 >
302 </File>
303 <File
304 RelativePath=".\llkeyboardwin32.cpp"
305 >
306 </File>
307 <File
308 RelativePath=".\lllogitechlcd.cpp"
309 >
310 </File>
311 <File
312 RelativePath=".\llwindow.cpp"
313 >
314 </File>
315 <File
316 RelativePath=".\llwindowheadless.cpp"
317 >
318 </File>
319 <File
320 RelativePath=".\llwindowmesaheadless.cpp"
321 >
322 </File>
323 <File
324 RelativePath=".\llwindowwin32.cpp"
325 >
326 </File>
327 </Filter>
328 <Filter
329 Name="Header Files"
330 Filter="h;hpp;hxx;hm;inl;inc;xsd"
331 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
332 >
333 <File
334 RelativePath=".\lldxhardware.h"
335 >
336 </File>
337 <File
338 RelativePath=".\llgl.h"
339 >
340 </File>
341 <File
342 RelativePath=".\llglheaders.h"
343 >
344 </File>
345 <File
346 RelativePath=".\llglstates.h"
347 >
348 </File>
349 <File
350 RelativePath=".\llgltypes.h"
351 >
352 </File>
353 <File
354 RelativePath=".\llkeyboard.h"
355 >
356 </File>
357 <File
358 RelativePath=".\llkeyboardwin32.h"
359 >
360 </File>
361 <File
362 RelativePath=".\lllogitechlcd.h"
363 >
364 </File>
365 <File
366 RelativePath=".\llmousehandler.h"
367 >
368 </File>
369 <File
370 RelativePath=".\llwindow.h"
371 >
372 </File>
373 <File
374 RelativePath=".\llwindowheadless.h"
375 >
376 </File>
377 <File
378 RelativePath=".\llwindowmesaheadless.h"
379 >
380 </File>
381 <File
382 RelativePath=".\llwindowwin32.h"
383 >
384 </File>
385 </Filter>
386 <Filter
387 Name="Resource Files"
388 Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
389 UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
390 >
391 </Filter>
392 </Files>
393 <Globals>
394 </Globals>
395</VisualStudioProject>
diff --git a/linden/indra/llwindow/llwindow_vc9.vcproj b/linden/indra/llwindow/llwindow_vc9.vcproj
deleted file mode 100644
index 991c296..0000000
--- a/linden/indra/llwindow/llwindow_vc9.vcproj
+++ /dev/null
@@ -1,398 +0,0 @@
1<?xml version="1.0" encoding="Windows-1252"?>
2<VisualStudioProject
3 ProjectType="Visual C++"
4 Version="9.00"
5 Name="llwindow"
6 ProjectGUID="{B5B53617-416F-404A-BF10-22EBCCA0E4FB}"
7 RootNamespace="llwindow"
8 Keyword="Win32Proj"
9 TargetFrameworkVersion="131072"
10 >
11 <Platforms>
12 <Platform
13 Name="Win32"
14 />
15 </Platforms>
16 <ToolFiles>
17 </ToolFiles>
18 <Configurations>
19 <Configuration
20 Name="Debug|Win32"
21 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
22 IntermediateDirectory="Debug"
23 ConfigurationType="4"
24 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
25 CharacterSet="1"
26 >
27 <Tool
28 Name="VCPreBuildEventTool"
29 />
30 <Tool
31 Name="VCCustomBuildTool"
32 />
33 <Tool
34 Name="VCXMLDataGeneratorTool"
35 />
36 <Tool
37 Name="VCWebServiceProxyGeneratorTool"
38 />
39 <Tool
40 Name="VCMIDLTool"
41 />
42 <Tool
43 Name="VCCLCompilerTool"
44 Optimization="0"
45 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llxml;..\llvfs;..\llmessage;..\llscene;..\llimage;..\llrender;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
46 PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_DEBUG"
47 MinimalRebuild="true"
48 BasicRuntimeChecks="3"
49 RuntimeLibrary="1"
50 StructMemberAlignment="4"
51 TreatWChar_tAsBuiltInType="false"
52 ForceConformanceInForLoopScope="true"
53 UsePrecompiledHeader="0"
54 WarningLevel="3"
55 Detect64BitPortabilityProblems="false"
56 DebugInformationFormat="4"
57 />
58 <Tool
59 Name="VCManagedResourceCompilerTool"
60 />
61 <Tool
62 Name="VCResourceCompilerTool"
63 />
64 <Tool
65 Name="VCPreLinkEventTool"
66 />
67 <Tool
68 Name="VCLibrarianTool"
69 OutputFile="$(OutDir)/llwindow.lib"
70 />
71 <Tool
72 Name="VCALinkTool"
73 />
74 <Tool
75 Name="VCXDCMakeTool"
76 />
77 <Tool
78 Name="VCBscMakeTool"
79 />
80 <Tool
81 Name="VCFxCopTool"
82 />
83 <Tool
84 Name="VCPostBuildEventTool"
85 />
86 </Configuration>
87 <Configuration
88 Name="Release|Win32"
89 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
90 IntermediateDirectory="Release"
91 ConfigurationType="4"
92 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
93 CharacterSet="1"
94 >
95 <Tool
96 Name="VCPreBuildEventTool"
97 />
98 <Tool
99 Name="VCCustomBuildTool"
100 />
101 <Tool
102 Name="VCXMLDataGeneratorTool"
103 />
104 <Tool
105 Name="VCWebServiceProxyGeneratorTool"
106 />
107 <Tool
108 Name="VCMIDLTool"
109 />
110 <Tool
111 Name="VCCLCompilerTool"
112 AdditionalOptions="/Oy-"
113 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llxml;..\llvfs;..\llmessage;..\llscene;..\llimage;..\llrender;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
114 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE"
115 TreatWChar_tAsBuiltInType="false"
116 ForceConformanceInForLoopScope="true"
117 WarningLevel="3"
118 WarnAsError="true"
119 DebugInformationFormat="3"
120 />
121 <Tool
122 Name="VCManagedResourceCompilerTool"
123 />
124 <Tool
125 Name="VCResourceCompilerTool"
126 />
127 <Tool
128 Name="VCPreLinkEventTool"
129 />
130 <Tool
131 Name="VCLibrarianTool"
132 OutputFile="$(OutDir)/llwindow.lib"
133 />
134 <Tool
135 Name="VCALinkTool"
136 />
137 <Tool
138 Name="VCXDCMakeTool"
139 />
140 <Tool
141 Name="VCBscMakeTool"
142 />
143 <Tool
144 Name="VCFxCopTool"
145 />
146 <Tool
147 Name="VCPostBuildEventTool"
148 />
149 </Configuration>
150 <Configuration
151 Name="DebugMesaHeadless|Win32"
152 OutputDirectory="../lib_debug/i686-win32"
153 IntermediateDirectory="$(ConfigurationName)"
154 ConfigurationType="4"
155 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
156 CharacterSet="1"
157 >
158 <Tool
159 Name="VCPreBuildEventTool"
160 />
161 <Tool
162 Name="VCCustomBuildTool"
163 />
164 <Tool
165 Name="VCXMLDataGeneratorTool"
166 />
167 <Tool
168 Name="VCWebServiceProxyGeneratorTool"
169 />
170 <Tool
171 Name="VCMIDLTool"
172 />
173 <Tool
174 Name="VCCLCompilerTool"
175 Optimization="0"
176 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llxml;..\llvfs;..\llmessage;..\llscene;..\llimage;..\llrender;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\GLMESA;..\..\libraries\include\;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
177 PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_DEBUG;LL_MESA;LL_MESA_HEADLESS"
178 MinimalRebuild="true"
179 BasicRuntimeChecks="3"
180 RuntimeLibrary="1"
181 StructMemberAlignment="4"
182 TreatWChar_tAsBuiltInType="false"
183 ForceConformanceInForLoopScope="true"
184 UsePrecompiledHeader="0"
185 WarningLevel="3"
186 Detect64BitPortabilityProblems="false"
187 DebugInformationFormat="4"
188 />
189 <Tool
190 Name="VCManagedResourceCompilerTool"
191 />
192 <Tool
193 Name="VCResourceCompilerTool"
194 />
195 <Tool
196 Name="VCPreLinkEventTool"
197 />
198 <Tool
199 Name="VCLibrarianTool"
200 OutputFile="$(OutDir)/llwindow_mesaheadless.lib"
201 />
202 <Tool
203 Name="VCALinkTool"
204 />
205 <Tool
206 Name="VCXDCMakeTool"
207 />
208 <Tool
209 Name="VCBscMakeTool"
210 />
211 <Tool
212 Name="VCFxCopTool"
213 />
214 <Tool
215 Name="VCPostBuildEventTool"
216 />
217 </Configuration>
218 <Configuration
219 Name="ReleaseNoOpt|Win32"
220 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
221 IntermediateDirectory="$(ConfigurationName)"
222 ConfigurationType="4"
223 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
224 CharacterSet="1"
225 >
226 <Tool
227 Name="VCPreBuildEventTool"
228 />
229 <Tool
230 Name="VCCustomBuildTool"
231 />
232 <Tool
233 Name="VCXMLDataGeneratorTool"
234 />
235 <Tool
236 Name="VCWebServiceProxyGeneratorTool"
237 />
238 <Tool
239 Name="VCMIDLTool"
240 />
241 <Tool
242 Name="VCCLCompilerTool"
243 AdditionalOptions="/Oy-"
244 Optimization="0"
245 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llxml;..\llvfs;..\llmessage;..\llscene;..\llimage;..\llrender;&quot;..\..\libraries\i686-win32\include&quot;;..\..\libraries\include\;..\..\libraries\include\Logitech_LCD;..\..\libraries\include\Logitech_LCD\LCDUI"
246 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE"
247 RuntimeLibrary="0"
248 StructMemberAlignment="0"
249 TreatWChar_tAsBuiltInType="false"
250 ForceConformanceInForLoopScope="true"
251 UsePrecompiledHeader="0"
252 WarningLevel="3"
253 Detect64BitPortabilityProblems="false"
254 DebugInformationFormat="3"
255 />
256 <Tool
257 Name="VCManagedResourceCompilerTool"
258 />
259 <Tool
260 Name="VCResourceCompilerTool"
261 />
262 <Tool
263 Name="VCPreLinkEventTool"
264 />
265 <Tool
266 Name="VCLibrarianTool"
267 OutputFile="$(OutDir)/llwindow.lib"
268 />
269 <Tool
270 Name="VCALinkTool"
271 />
272 <Tool
273 Name="VCXDCMakeTool"
274 />
275 <Tool
276 Name="VCBscMakeTool"
277 />
278 <Tool
279 Name="VCFxCopTool"
280 />
281 <Tool
282 Name="VCPostBuildEventTool"
283 />
284 </Configuration>
285 </Configurations>
286 <References>
287 </References>
288 <Files>
289 <Filter
290 Name="Source Files"
291 Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
292 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
293 >
294 <File
295 RelativePath=".\lldxhardware.cpp"
296 >
297 </File>
298 <File
299 RelativePath=".\llgl.cpp"
300 >
301 </File>
302 <File
303 RelativePath=".\llkeyboard.cpp"
304 >
305 </File>
306 <File
307 RelativePath=".\llkeyboardwin32.cpp"
308 >
309 </File>
310 <File
311 RelativePath=".\lllogitechlcd.cpp"
312 >
313 </File>
314 <File
315 RelativePath=".\llwindow.cpp"
316 >
317 </File>
318 <File
319 RelativePath=".\llwindowheadless.cpp"
320 >
321 </File>
322 <File
323 RelativePath=".\llwindowmesaheadless.cpp"
324 >
325 </File>
326 <File
327 RelativePath=".\llwindowwin32.cpp"
328 >
329 </File>
330 </Filter>
331 <Filter
332 Name="Header Files"
333 Filter="h;hpp;hxx;hm;inl;inc;xsd"
334 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
335 >
336 <File
337 RelativePath=".\lldxhardware.h"
338 >
339 </File>
340 <File
341 RelativePath=".\llgl.h"
342 >
343 </File>
344 <File
345 RelativePath=".\llglheaders.h"
346 >
347 </File>
348 <File
349 RelativePath=".\llglstates.h"
350 >
351 </File>
352 <File
353 RelativePath=".\llgltypes.h"
354 >
355 </File>
356 <File
357 RelativePath=".\llkeyboard.h"
358 >
359 </File>
360 <File
361 RelativePath=".\llkeyboardwin32.h"
362 >
363 </File>
364 <File
365 RelativePath=".\lllogitechlcd.h"
366 >
367 </File>
368 <File
369 RelativePath=".\llmousehandler.h"
370 >
371 </File>
372 <File
373 RelativePath=".\llwindow.h"
374 >
375 </File>
376 <File
377 RelativePath=".\llwindowheadless.h"
378 >
379 </File>
380 <File
381 RelativePath=".\llwindowmesaheadless.h"
382 >
383 </File>
384 <File
385 RelativePath=".\llwindowwin32.h"
386 >
387 </File>
388 </Filter>
389 <Filter
390 Name="Resource Files"
391 Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
392 UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
393 >
394 </Filter>
395 </Files>
396 <Globals>
397 </Globals>
398</VisualStudioProject>
diff --git a/linden/indra/llwindow/llwindowheadless.cpp b/linden/indra/llwindow/llwindowheadless.cpp
index 441b4e9..c8f0c5c 100644
--- a/linden/indra/llwindow/llwindowheadless.cpp
+++ b/linden/indra/llwindow/llwindowheadless.cpp
@@ -37,7 +37,7 @@
37// 37//
38// LLWindowHeadless 38// LLWindowHeadless
39// 39//
40LLWindowHeadless::LLWindowHeadless(char *title, char *name, S32 x, S32 y, S32 width, S32 height, 40LLWindowHeadless::LLWindowHeadless(const std::string& title, const std::string& name, S32 x, S32 y, S32 width, S32 height,
41 U32 flags, BOOL fullscreen, BOOL clearBg, 41 U32 flags, BOOL fullscreen, BOOL clearBg,
42 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth) 42 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth)
43 : LLWindow(fullscreen, flags) 43 : LLWindow(fullscreen, flags)
diff --git a/linden/indra/llwindow/llwindowheadless.h b/linden/indra/llwindow/llwindowheadless.h
index 7cef7d8..fffb2ed 100644
--- a/linden/indra/llwindow/llwindowheadless.h
+++ b/linden/indra/llwindow/llwindowheadless.h
@@ -77,12 +77,6 @@ public:
77 /*virtual*/ void delayInputProcessing() {}; 77 /*virtual*/ void delayInputProcessing() {};
78 /*virtual*/ void swapBuffers(); 78 /*virtual*/ void swapBuffers();
79 79
80 /*virtual*/ LLString getTempFileName() {return LLString(""); };
81 /*virtual*/ void deleteFile( const char* file_name ) {};
82 /*virtual*/ S32 stat( const char* file_name, struct stat* stat_info ) {return 0; };
83 /*virtual*/ BOOL sendEmail(const char* address,const char* subject,const char* body_text,const char* attachment=NULL, const char* attachment_displayed_name=NULL) { return FALSE; };
84
85
86 // handy coordinate space conversion routines 80 // handy coordinate space conversion routines
87 /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to) { return FALSE; }; 81 /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to) { return FALSE; };
88 /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to) { return FALSE; }; 82 /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to) { return FALSE; };
@@ -99,7 +93,7 @@ public:
99 /*virtual*/ void *getPlatformWindow() { return 0; }; 93 /*virtual*/ void *getPlatformWindow() { return 0; };
100 /*virtual*/ void bringToFront() {}; 94 /*virtual*/ void bringToFront() {};
101 95
102 LLWindowHeadless(char *title, char *name, S32 x, S32 y, S32 width, S32 height, 96 LLWindowHeadless(const std::string& title, const std::string& name, S32 x, S32 y, S32 width, S32 height,
103 U32 flags, BOOL fullscreen, BOOL clearBg, 97 U32 flags, BOOL fullscreen, BOOL clearBg,
104 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth); 98 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth);
105 virtual ~LLWindowHeadless(); 99 virtual ~LLWindowHeadless();
@@ -114,7 +108,7 @@ public:
114 virtual ~LLSplashScreenHeadless() {}; 108 virtual ~LLSplashScreenHeadless() {};
115 109
116 /*virtual*/ void showImpl() {}; 110 /*virtual*/ void showImpl() {};
117 /*virtual*/ void updateImpl(const char* mesg) {}; 111 /*virtual*/ void updateImpl(const std::string& mesg) {};
118 /*virtual*/ void hideImpl() {}; 112 /*virtual*/ void hideImpl() {};
119 113
120}; 114};
diff --git a/linden/indra/llwindow/llwindowmacosx.cpp b/linden/indra/llwindow/llwindowmacosx.cpp
index 5ab0ba6..5102173 100644
--- a/linden/indra/llwindow/llwindowmacosx.cpp
+++ b/linden/indra/llwindow/llwindowmacosx.cpp
@@ -29,8 +29,6 @@
29 * $/LicenseInfo$ 29 * $/LicenseInfo$
30 */ 30 */
31 31
32#if LL_DARWIN
33
34#include "linden_common.h" 32#include "linden_common.h"
35 33
36#include <Carbon/Carbon.h> 34#include <Carbon/Carbon.h>
@@ -42,10 +40,6 @@
42#include "llgl.h" 40#include "llgl.h"
43#include "llstring.h" 41#include "llstring.h"
44#include "lldir.h" 42#include "lldir.h"
45#include "llviewercontrol.h"
46
47#include "llglheaders.h"
48
49#include "indra_constants.h" 43#include "indra_constants.h"
50 44
51#include "llwindowmacosx-objc.h" 45#include "llwindowmacosx-objc.h"
@@ -66,37 +60,16 @@ const S32 MAX_NUM_RESOLUTIONS = 32;
66// LLWindowMacOSX 60// LLWindowMacOSX
67// 61//
68 62
69// Cross-platform bits: 63BOOL LLWindowMacOSX::sUseMultGL = FALSE;
64WindowRef LLWindowMacOSX::sMediaWindow = NULL;
70 65
71void show_window_creation_error(const char* title) 66// Cross-platform bits:
72{
73 llwarns << title << llendl;
74 /*
75 OSMessageBox(
76 "Second Life is unable to run because it can't set up your display.\n"
77 "We need to be able to make a 32-bit color window at 1024x768, with\n"
78 "an 8 bit alpha channel.\n"
79 "\n"
80 "First, be sure your monitor is set to True Color (32-bit) in\n"
81 "Start -> Control Panels -> Display -> Settings.\n"
82 "\n"
83 "Otherwise, this may be due to video card driver issues.\n"
84 "Please make sure you have the latest video card drivers installed.\n"
85 "ATI drivers are available at http://www.ati.com/\n"
86 "nVidia drivers are available at http://www.nvidia.com/\n"
87 "\n"
88 "If you continue to receive this message, contact customer service.",
89 title,
90 OSMB_OK);
91 */
92}
93 67
94BOOL check_for_card(const char* RENDERER, const char* bad_card) 68BOOL check_for_card(const char* RENDERER, const char* bad_card)
95{ 69{
96 if (!strnicmp(RENDERER, bad_card, strlen(bad_card))) 70 if (!strnicmp(RENDERER, bad_card, strlen(bad_card)))
97 { 71 {
98 char buffer[1024];/* Flawfinder: ignore */ 72 std::string buffer = llformat(
99 snprintf(buffer, sizeof(buffer),
100 "Your video card appears to be a %s, which Second Life does not support.\n" 73 "Your video card appears to be a %s, which Second Life does not support.\n"
101 "\n" 74 "\n"
102 "Second Life requires a video card with 32 Mb of memory or more, as well as\n" 75 "Second Life requires a video card with 32 Mb of memory or more, as well as\n"
@@ -110,7 +83,7 @@ BOOL check_for_card(const char* RENDERER, const char* bad_card)
110 "You can try to run Second Life, but it will probably crash or run\n" 83 "You can try to run Second Life, but it will probably crash or run\n"
111 "very slowly. Try anyway?", 84 "very slowly. Try anyway?",
112 bad_card); 85 bad_card);
113 S32 button = OSMessageBox(buffer, "Unsupported video card", OSMB_YESNO); 86 S32 button = OSMessageBox(buffer.c_str(), "Unsupported video card", OSMB_YESNO);
114 if (OSBTN_YES == button) 87 if (OSBTN_YES == button)
115 { 88 {
116 return FALSE; 89 return FALSE;
@@ -124,8 +97,6 @@ BOOL check_for_card(const char* RENDERER, const char* bad_card)
124 return FALSE; 97 return FALSE;
125} 98}
126 99
127
128
129// Switch to determine whether we capture all displays, or just the main one. 100// Switch to determine whether we capture all displays, or just the main one.
130// We may want to base this on the setting of _DEBUG... 101// We may want to base this on the setting of _DEBUG...
131 102
@@ -242,7 +213,7 @@ static LLWindowMacOSX *gWindowImplementation = NULL;
242 213
243 214
244 215
245LLWindowMacOSX::LLWindowMacOSX(char *title, char *name, S32 x, S32 y, S32 width, 216LLWindowMacOSX::LLWindowMacOSX(const std::string& title, const std::string& name, S32 x, S32 y, S32 width,
246 S32 height, U32 flags, 217 S32 height, U32 flags,
247 BOOL fullscreen, BOOL clearBg, 218 BOOL fullscreen, BOOL clearBg,
248 BOOL disable_vsync, BOOL use_gl, 219 BOOL disable_vsync, BOOL use_gl,
@@ -289,10 +260,11 @@ LLWindowMacOSX::LLWindowMacOSX(char *title, char *name, S32 x, S32 y, S32 width,
289 mOriginalAspectRatio = (double)CGDisplayPixelsWide(mDisplay) / (double)CGDisplayPixelsHigh(mDisplay); 260 mOriginalAspectRatio = (double)CGDisplayPixelsWide(mDisplay) / (double)CGDisplayPixelsHigh(mDisplay);
290 261
291 // Stash the window title 262 // Stash the window title
292 strcpy((char*)mWindowTitle + 1, title); /* Flawfinder: ignore */ 263 strcpy((char*)mWindowTitle + 1, title.c_str()); /* Flawfinder: ignore */
293 mWindowTitle[0] = strlen(title); /* Flawfinder: ignore */ 264 mWindowTitle[0] = title.length();
294 265
295 mEventHandlerUPP = NewEventHandlerUPP(staticEventHandler); 266 mEventHandlerUPP = NewEventHandlerUPP(staticEventHandler);
267 mMoveEventCampartorUPP = NewEventComparatorUPP(staticMoveEventComparator);
296 mGlobalHandlerRef = NULL; 268 mGlobalHandlerRef = NULL;
297 mWindowHandlerRef = NULL; 269 mWindowHandlerRef = NULL;
298 270
@@ -467,8 +439,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
467 mFullscreenBits = -1; 439 mFullscreenBits = -1;
468 mFullscreenRefresh = -1; 440 mFullscreenRefresh = -1;
469 441
470 char error[256]; /* Flawfinder: ignore */ 442 std::string error= llformat("Unable to run fullscreen at %d x %d.\nRunning in window.", width, height);
471 snprintf(error, sizeof(error), "Unable to run fullscreen at %d x %d.\nRunning in window.", width, height);
472 OSMessageBox(error, "Error", OSMB_OK); 443 OSMessageBox(error, "Error", OSMB_OK);
473 } 444 }
474 } 445 }
@@ -809,7 +780,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
809 aglSetInteger(mContext, AGL_SWAP_INTERVAL, &frames_per_swap); 780 aglSetInteger(mContext, AGL_SWAP_INTERVAL, &frames_per_swap);
810 781
811 //enable multi-threaded OpenGL 782 //enable multi-threaded OpenGL
812 if (gSavedSettings.getBOOL("RenderAppleUseMultGL")) 783 if (sUseMultGL)
813 { 784 {
814 CGLError cgl_err; 785 CGLError cgl_err;
815 CGLContextObj ctx = CGLGetCurrentContext(); 786 CGLContextObj ctx = CGLGetCurrentContext();
@@ -826,9 +797,6 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
826 } 797 }
827 } 798 }
828 799
829 //make sure multisample starts off disabled
830 glDisable(GL_MULTISAMPLE_ARB);
831
832 // Don't need to get the current gamma, since there's a call that restores it to the system defaults. 800 // Don't need to get the current gamma, since there's a call that restores it to the system defaults.
833 return TRUE; 801 return TRUE;
834} 802}
@@ -1445,6 +1413,11 @@ BOOL LLWindowMacOSX::setCursorPosition(const LLCoordWindow position)
1445 // Under certain circumstances, this will trigger us to decouple the cursor. 1413 // Under certain circumstances, this will trigger us to decouple the cursor.
1446 adjustCursorDecouple(true); 1414 adjustCursorDecouple(true);
1447 1415
1416 // trigger mouse move callback
1417 LLCoordGL gl_pos;
1418 convertCoords(position, &gl_pos);
1419 mCallbacks->handleMouseMove(this, gl_pos, (MASK)0);
1420
1448 return result; 1421 return result;
1449} 1422}
1450 1423
@@ -1515,6 +1488,7 @@ void LLWindowMacOSX::adjustCursorDecouple(bool warpingMouse)
1515 // llinfos << "adjustCursorDecouple: decoupling cursor" << llendl; 1488 // llinfos << "adjustCursorDecouple: decoupling cursor" << llendl;
1516 CGAssociateMouseAndMouseCursorPosition(false); 1489 CGAssociateMouseAndMouseCursorPosition(false);
1517 mCursorDecoupled = true; 1490 mCursorDecoupled = true;
1491 FlushSpecificEventsFromQueue(GetCurrentEventQueue(), mMoveEventCampartorUPP, NULL);
1518 mCursorIgnoreNextDelta = TRUE; 1492 mCursorIgnoreNextDelta = TRUE;
1519 } 1493 }
1520 } 1494 }
@@ -1610,11 +1584,6 @@ void LLWindowMacOSX::afterDialog()
1610} 1584}
1611 1585
1612 1586
1613S32 LLWindowMacOSX::stat(const char* file_name, struct stat* stat_info)
1614{
1615 return ::stat( file_name, stat_info );
1616}
1617
1618void LLWindowMacOSX::flashIcon(F32 seconds) 1587void LLWindowMacOSX::flashIcon(F32 seconds)
1619{ 1588{
1620 // Don't do this if we're already started, since this would try to install the NMRec twice. 1589 // Don't do this if we're already started, since this would try to install the NMRec twice.
@@ -1744,15 +1713,6 @@ BOOL LLWindowMacOSX::copyTextToClipboard(const LLWString &s)
1744} 1713}
1745 1714
1746 1715
1747BOOL LLWindowMacOSX::sendEmail(const char* address, const char* subject, const char* body_text,
1748 const char* attachment, const char* attachment_displayed_name )
1749{
1750 // MBW -- XXX -- Um... yeah. I'll get to this later.
1751
1752 return false;
1753}
1754
1755
1756// protected 1716// protected
1757BOOL LLWindowMacOSX::resetDisplayResolution() 1717BOOL LLWindowMacOSX::resetDisplayResolution()
1758{ 1718{
@@ -1949,13 +1909,30 @@ BOOL LLWindowMacOSX::convertCoords(LLCoordGL from, LLCoordScreen *to)
1949 1909
1950 1910
1951 1911
1952void LLWindowMacOSX::setupFailure(const char* text, const char* caption, U32 type) 1912void LLWindowMacOSX::setupFailure(const std::string& text, const std::string& caption, U32 type)
1953{ 1913{
1954 destroyContext(); 1914 destroyContext();
1955 1915
1956 OSMessageBox(text, caption, type); 1916 OSMessageBox(text, caption, type);
1957} 1917}
1958 1918
1919pascal Boolean LLWindowMacOSX::staticMoveEventComparator( EventRef event, void* data)
1920{
1921 UInt32 evtClass = GetEventClass (event);
1922 UInt32 evtKind = GetEventKind (event);
1923
1924 if ((evtClass == kEventClassMouse) && ((evtKind == kEventMouseDragged) || (evtKind == kEventMouseMoved)))
1925 {
1926 return true;
1927 }
1928
1929 else
1930 {
1931 return false;
1932 }
1933}
1934
1935
1959pascal OSStatus LLWindowMacOSX::staticEventHandler(EventHandlerCallRef myHandler, EventRef event, void* userData) 1936pascal OSStatus LLWindowMacOSX::staticEventHandler(EventHandlerCallRef myHandler, EventRef event, void* userData)
1960{ 1937{
1961 LLWindowMacOSX *self = (LLWindowMacOSX*)userData; 1938 LLWindowMacOSX *self = (LLWindowMacOSX*)userData;
@@ -3020,20 +2997,13 @@ void LLSplashScreenMacOSX::showImpl()
3020#endif 2997#endif
3021} 2998}
3022 2999
3023void LLSplashScreenMacOSX::updateImpl(const char* mesg) 3000void LLSplashScreenMacOSX::updateImpl(const std::string& mesg)
3024{ 3001{
3025 if(mWindow != NULL) 3002 if(mWindow != NULL)
3026 { 3003 {
3027 CFStringRef string = NULL; 3004 CFStringRef string = NULL;
3028 3005
3029 if(mesg != NULL) 3006 string = CFStringCreateWithCString(NULL, mesg.c_str(), kCFStringEncodingUTF8);
3030 {
3031 string = CFStringCreateWithCString(NULL, mesg, kCFStringEncodingUTF8);
3032 }
3033 else
3034 {
3035 string = CFStringCreateWithCString(NULL, "", kCFStringEncodingUTF8);
3036 }
3037 3007
3038 if(string != NULL) 3008 if(string != NULL)
3039 { 3009 {
@@ -3068,7 +3038,7 @@ void LLSplashScreenMacOSX::hideImpl()
3068 3038
3069 3039
3070 3040
3071S32 OSMessageBoxMacOSX(const char* text, const char* caption, U32 type) 3041S32 OSMessageBoxMacOSX(const std::string& text, const std::string& caption, U32 type)
3072{ 3042{
3073 S32 result = OSBTN_CANCEL; 3043 S32 result = OSBTN_CANCEL;
3074 SInt16 retval_mac = 1; 3044 SInt16 retval_mac = 1;
@@ -3079,23 +3049,8 @@ S32 OSMessageBoxMacOSX(const char* text, const char* caption, U32 type)
3079 AlertType alertType = kAlertCautionAlert; 3049 AlertType alertType = kAlertCautionAlert;
3080 OSStatus err; 3050 OSStatus err;
3081 3051
3082 if(text != NULL) 3052 explanationString = CFStringCreateWithCString(NULL, text.c_str(), kCFStringEncodingUTF8);
3083 { 3053 errorString = CFStringCreateWithCString(NULL, caption.c_str(), kCFStringEncodingUTF8);
3084 explanationString = CFStringCreateWithCString(NULL, text, kCFStringEncodingUTF8);
3085 }
3086 else
3087 {
3088 explanationString = CFStringCreateWithCString(NULL, "", kCFStringEncodingUTF8);
3089 }
3090
3091 if(caption != NULL)
3092 {
3093 errorString = CFStringCreateWithCString(NULL, caption, kCFStringEncodingUTF8);
3094 }
3095 else
3096 {
3097 errorString = CFStringCreateWithCString(NULL, "", kCFStringEncodingUTF8);
3098 }
3099 3054
3100 params.version = kStdCFStringAlertVersionOne; 3055 params.version = kStdCFStringAlertVersionOne;
3101 params.movable = false; 3056 params.movable = false;
@@ -3179,15 +3134,13 @@ S32 OSMessageBoxMacOSX(const char* text, const char* caption, U32 type)
3179 3134
3180// Open a URL with the user's default web browser. 3135// Open a URL with the user's default web browser.
3181// Must begin with protocol identifier. 3136// Must begin with protocol identifier.
3182void spawn_web_browser(const char* escaped_url) 3137void LLWindowMacOSX::spawnWebBrowser(const std::string& escaped_url)
3183{ 3138{
3184 bool found = false; 3139 bool found = false;
3185 S32 i; 3140 S32 i;
3186 for (i = 0; i < gURLProtocolWhitelistCount; i++) 3141 for (i = 0; i < gURLProtocolWhitelistCount; i++)
3187 { 3142 {
3188 S32 len = strlen(gURLProtocolWhitelist[i]); /* Flawfinder: ignore */ 3143 if (escaped_url.find(gURLProtocolWhitelist[i]) != std::string::npos)
3189 if (!strncmp(escaped_url, gURLProtocolWhitelist[i], len)
3190 && escaped_url[len] == ':')
3191 { 3144 {
3192 found = true; 3145 found = true;
3193 break; 3146 break;
@@ -3196,7 +3149,7 @@ void spawn_web_browser(const char* escaped_url)
3196 3149
3197 if (!found) 3150 if (!found)
3198 { 3151 {
3199 llwarns << "spawn_web_browser() called for url with protocol not on whitelist: " << escaped_url << llendl; 3152 llwarns << "spawn_web_browser called for url with protocol not on whitelist: " << escaped_url << llendl;
3200 return; 3153 return;
3201 } 3154 }
3202 3155
@@ -3205,7 +3158,7 @@ void spawn_web_browser(const char* escaped_url)
3205 3158
3206 llinfos << "Opening URL " << escaped_url << llendl; 3159 llinfos << "Opening URL " << escaped_url << llendl;
3207 3160
3208 CFStringRef stringRef = CFStringCreateWithCString(NULL, escaped_url, kCFStringEncodingUTF8); 3161 CFStringRef stringRef = CFStringCreateWithCString(NULL, escaped_url.c_str(), kCFStringEncodingUTF8);
3209 if (stringRef) 3162 if (stringRef)
3210 { 3163 {
3211 // This will succeed if the string is a full URL, including the http:// 3164 // This will succeed if the string is a full URL, including the http://
@@ -3268,25 +3221,34 @@ BOOL LLWindowMacOSX::dialog_color_picker ( F32 *r, F32 *g, F32 *b)
3268 return (retval); 3221 return (retval);
3269} 3222}
3270 3223
3271static WindowRef dummywindowref = NULL;
3272 3224
3273void *LLWindowMacOSX::getPlatformWindow() 3225void *LLWindowMacOSX::getPlatformWindow()
3274{ 3226{
3275 if(mWindow != NULL) 3227 // NOTE: this will be NULL in fullscreen mode. Plan accordingly.
3276 return (void*)mWindow; 3228 return (void*)mWindow;
3229}
3230
3231void *LLWindowMacOSX::getMediaWindow()
3232{
3233 /*
3234 Mozilla needs to be initialized with a WindowRef to function properly.
3235 (There's no good reason for this, since it shouldn't be interacting with our window in any way, but that's another issue.)
3236 If we're in windowed mode, we _could_ hand it our actual window pointer, but a subsequent switch to fullscreen will destroy that window,
3237 which trips up Mozilla.
3238 Instead of using our actual window, we create an invisible window which will persist for the lifetime of the application and pass that to Mozilla.
3239 This satisfies its deep-seated need to latch onto a WindowRef and solves the issue with switching between fullscreen and windowed modes.
3277 3240
3278 // If we're in fullscreen mode, there's no window pointer available. 3241 Note that we will never destroy this window (by design!), but since only one will ever be created per run of the application, that's okay.
3279 // Since Mozilla needs one to function, create a dummy window here. 3242 */
3280 // Note that we will never destroy it, but since only one will be created per run of the application, that's okay.
3281 3243
3282 if(dummywindowref == NULL) 3244 if(sMediaWindow == NULL)
3283 { 3245 {
3284 Rect window_rect = {100, 100, 200, 200}; 3246 Rect window_rect = {100, 100, 200, 200};
3285 3247
3286 dummywindowref = NewCWindow( 3248 sMediaWindow = NewCWindow(
3287 NULL, 3249 NULL,
3288 &window_rect, 3250 &window_rect,
3289 "\p", 3251 (ConstStr255Param) "\p",
3290 false, // Create the window invisible. 3252 false, // Create the window invisible.
3291 zoomDocProc, // Window with a grow box and a zoom box 3253 zoomDocProc, // Window with a grow box and a zoom box
3292 kLastWindowOfClass, // create it behind other windows 3254 kLastWindowOfClass, // create it behind other windows
@@ -3294,7 +3256,7 @@ void *LLWindowMacOSX::getPlatformWindow()
3294 0); 3256 0);
3295 } 3257 }
3296 3258
3297 return (void*)dummywindowref; 3259 return (void*)sMediaWindow;
3298} 3260}
3299 3261
3300void LLWindowMacOSX::stopDockTileBounce() 3262void LLWindowMacOSX::stopDockTileBounce()
@@ -3402,5 +3364,3 @@ std::string LLWindowMacOSX::getFontListSans()
3402 // The third filename is in UTF8, but it shows up in the font menu as "STHeiti Light" 3364 // The third filename is in UTF8, but it shows up in the font menu as "STHeiti Light"
3403 return "\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 Pro W3.otf;\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 ProN W3.otf;AppleGothic.dfont;AppleGothic.ttf;\xe5\x8d\x8e\xe6\x96\x87\xe7\xbb\x86\xe9\xbb\x91.ttf"; 3365 return "\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 Pro W3.otf;\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 ProN W3.otf;AppleGothic.dfont;AppleGothic.ttf;\xe5\x8d\x8e\xe6\x96\x87\xe7\xbb\x86\xe9\xbb\x91.ttf";
3404} 3366}
3405
3406#endif // LL_DARWIN
diff --git a/linden/indra/llwindow/llwindowmacosx.h b/linden/indra/llwindow/llwindowmacosx.h
index d8a0788..bc0b7d4 100644
--- a/linden/indra/llwindow/llwindowmacosx.h
+++ b/linden/indra/llwindow/llwindowmacosx.h
@@ -86,12 +86,6 @@ public:
86 /*virtual*/ void delayInputProcessing() {}; 86 /*virtual*/ void delayInputProcessing() {};
87 /*virtual*/ void swapBuffers(); 87 /*virtual*/ void swapBuffers();
88 88
89 /*virtual*/ LLString getTempFileName();
90 /*virtual*/ void deleteFile( const char* file_name );
91 /*virtual*/ S32 stat( const char* file_name, struct stat* stat_info );
92 /*virtual*/ BOOL sendEmail(const char* address,const char* subject,const char* body_text,const char* attachment=NULL, const char* attachment_displayed_name=NULL);
93
94
95 // handy coordinate space conversion routines 89 // handy coordinate space conversion routines
96 /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to); 90 /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to);
97 /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to); 91 /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to);
@@ -111,16 +105,18 @@ public:
111 /*virtual*/ BOOL dialog_color_picker(F32 *r, F32 *g, F32 *b); 105 /*virtual*/ BOOL dialog_color_picker(F32 *r, F32 *g, F32 *b);
112 106
113 /*virtual*/ void *getPlatformWindow(); 107 /*virtual*/ void *getPlatformWindow();
108 /*virtual*/ void *getMediaWindow();
114 /*virtual*/ void bringToFront() {}; 109 /*virtual*/ void bringToFront() {};
115 110
116 /*virtual*/ void allowLanguageTextInput(LLPreeditor *preeditor, BOOL b); 111 /*virtual*/ void allowLanguageTextInput(LLPreeditor *preeditor, BOOL b);
117 /*virtual*/ void interruptLanguageTextInput(); 112 /*virtual*/ void interruptLanguageTextInput();
113 /*virtual*/ void spawnWebBrowser(const std::string& escaped_url);
118 114
119 static std::string getFontListSans(); 115 static std::string getFontListSans();
120 116
121protected: 117protected:
122 LLWindowMacOSX( 118 LLWindowMacOSX(
123 char *title, char *name, int x, int y, int width, int height, U32 flags, 119 const std::string& title, const std::string& name, int x, int y, int width, int height, U32 flags,
124 BOOL fullscreen, BOOL clearBg, BOOL disable_vsync, BOOL use_gl, 120 BOOL fullscreen, BOOL clearBg, BOOL disable_vsync, BOOL use_gl,
125 BOOL ignore_pixel_depth, 121 BOOL ignore_pixel_depth,
126 U32 fsaa_samples); 122 U32 fsaa_samples);
@@ -154,8 +150,9 @@ protected:
154 // create or re-create the GL context/window. Called from the constructor and switchContext(). 150 // create or re-create the GL context/window. Called from the constructor and switchContext().
155 BOOL createContext(int x, int y, int width, int height, int bits, BOOL fullscreen, BOOL disable_vsync); 151 BOOL createContext(int x, int y, int width, int height, int bits, BOOL fullscreen, BOOL disable_vsync);
156 void destroyContext(); 152 void destroyContext();
157 void setupFailure(const char* text, const char* caption, U32 type); 153 void setupFailure(const std::string& text, const std::string& caption, U32 type);
158 static pascal OSStatus staticEventHandler (EventHandlerCallRef myHandler, EventRef event, void* userData); 154 static pascal OSStatus staticEventHandler (EventHandlerCallRef myHandler, EventRef event, void* userData);
155 static pascal Boolean staticMoveEventComparator( EventRef event, void* data);
159 OSStatus eventHandler (EventHandlerCallRef myHandler, EventRef event); 156 OSStatus eventHandler (EventHandlerCallRef myHandler, EventRef event);
160 void adjustCursorDecouple(bool warpingMouse = false); 157 void adjustCursorDecouple(bool warpingMouse = false);
161 void fixWindowSize(void); 158 void fixWindowSize(void);
@@ -174,6 +171,8 @@ protected:
174 EventHandlerUPP mEventHandlerUPP; 171 EventHandlerUPP mEventHandlerUPP;
175 EventHandlerRef mGlobalHandlerRef; 172 EventHandlerRef mGlobalHandlerRef;
176 EventHandlerRef mWindowHandlerRef; 173 EventHandlerRef mWindowHandlerRef;
174 EventComparatorUPP mMoveEventCampartorUPP;
175
177 Rect mOldMouseClip; // Screen rect to which the mouse cursor was globally constrained before we changed it in clipMouse() 176 Rect mOldMouseClip; // Screen rect to which the mouse cursor was globally constrained before we changed it in clipMouse()
178 Str255 mWindowTitle; 177 Str255 mWindowTitle;
179 double mOriginalAspectRatio; 178 double mOriginalAspectRatio;
@@ -203,7 +202,11 @@ protected:
203 LangCode mTSMLangCode; 202 LangCode mTSMLangCode;
204 LLPreeditor* mPreeditor; 203 LLPreeditor* mPreeditor;
205 204
205 static BOOL sUseMultGL;
206
206 friend class LLWindowManager; 207 friend class LLWindowManager;
208 static WindowRef sMediaWindow;
209
207}; 210};
208 211
209 212
@@ -214,14 +217,14 @@ public:
214 virtual ~LLSplashScreenMacOSX(); 217 virtual ~LLSplashScreenMacOSX();
215 218
216 /*virtual*/ void showImpl(); 219 /*virtual*/ void showImpl();
217 /*virtual*/ void updateImpl(const char* mesg); 220 /*virtual*/ void updateImpl(const std::string& mesg);
218 /*virtual*/ void hideImpl(); 221 /*virtual*/ void hideImpl();
219 222
220private: 223private:
221 WindowRef mWindow; 224 WindowRef mWindow;
222}; 225};
223 226
224S32 OSMessageBoxMacOSX(const char* text, const char* caption, U32 type); 227S32 OSMessageBoxMacOSX(const std::string& text, const std::string& caption, U32 type);
225 228
226void load_url_external(const char* url); 229void load_url_external(const char* url);
227 230
diff --git a/linden/indra/llwindow/llwindowmesaheadless.cpp b/linden/indra/llwindow/llwindowmesaheadless.cpp
index 01b00af..0ffd4e3 100644
--- a/linden/indra/llwindow/llwindowmesaheadless.cpp
+++ b/linden/indra/llwindow/llwindowmesaheadless.cpp
@@ -29,14 +29,11 @@
29 * $/LicenseInfo$ 29 * $/LicenseInfo$
30 */ 30 */
31 31
32#if LL_MESA_HEADLESS
33
34#include "linden_common.h" 32#include "linden_common.h"
35#include "indra_constants.h" 33#include "indra_constants.h"
36 34
37#include "llwindowmesaheadless.h" 35#include "llwindowmesaheadless.h"
38#include "llgl.h" 36#include "llgl.h"
39#include "llglheaders.h"
40 37
41#define MESA_CHANNEL_TYPE GL_UNSIGNED_SHORT 38#define MESA_CHANNEL_TYPE GL_UNSIGNED_SHORT
42#define MESA_CHANNEL_SIZE 2 39#define MESA_CHANNEL_SIZE 2
@@ -46,7 +43,7 @@ U16 *gMesaBuffer = NULL;
46// 43//
47// LLWindowMesaHeadless 44// LLWindowMesaHeadless
48// 45//
49LLWindowMesaHeadless::LLWindowMesaHeadless(char *title, char *name, S32 x, S32 y, S32 width, S32 height, 46LLWindowMesaHeadless::LLWindowMesaHeadless(const std::string& title, const std::string& name, S32 x, S32 y, S32 width, S32 height,
50 U32 flags, BOOL fullscreen, BOOL clearBg, 47 U32 flags, BOOL fullscreen, BOOL clearBg,
51 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth) 48 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth)
52 : LLWindow(fullscreen, flags) 49 : LLWindow(fullscreen, flags)
@@ -83,5 +80,3 @@ void LLWindowMesaHeadless::swapBuffers()
83{ 80{
84 glFinish(); 81 glFinish();
85} 82}
86
87#endif
diff --git a/linden/indra/llwindow/llwindowmesaheadless.h b/linden/indra/llwindow/llwindowmesaheadless.h
index fb32e38..86d8372 100644
--- a/linden/indra/llwindow/llwindowmesaheadless.h
+++ b/linden/indra/llwindow/llwindowmesaheadless.h
@@ -81,12 +81,6 @@ public:
81 /*virtual*/ void delayInputProcessing() {}; 81 /*virtual*/ void delayInputProcessing() {};
82 /*virtual*/ void swapBuffers(); 82 /*virtual*/ void swapBuffers();
83 83
84 /*virtual*/ LLString getTempFileName() {return LLString(""); };
85 /*virtual*/ void deleteFile( const char* file_name ) {};
86 /*virtual*/ S32 stat( const char* file_name, struct stat* stat_info ) {return 0; };
87 /*virtual*/ BOOL sendEmail(const char* address,const char* subject,const char* body_text,const char* attachment=NULL, const char* attachment_displayed_name=NULL) { return FALSE; };
88
89
90 // handy coordinate space conversion routines 84 // handy coordinate space conversion routines
91 /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to) { return FALSE; }; 85 /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to) { return FALSE; };
92 /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to) { return FALSE; }; 86 /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to) { return FALSE; };
@@ -103,7 +97,7 @@ public:
103 /*virtual*/ void *getPlatformWindow() { return 0; }; 97 /*virtual*/ void *getPlatformWindow() { return 0; };
104 /*virtual*/ void bringToFront() {}; 98 /*virtual*/ void bringToFront() {};
105 99
106 LLWindowMesaHeadless(char *title, char *name, S32 x, S32 y, S32 width, S32 height, 100 LLWindowMesaHeadless(const std::string& title, const std::string& name, S32 x, S32 y, S32 width, S32 height,
107 U32 flags, BOOL fullscreen, BOOL clearBg, 101 U32 flags, BOOL fullscreen, BOOL clearBg,
108 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth); 102 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth);
109 ~LLWindowMesaHeadless(); 103 ~LLWindowMesaHeadless();
@@ -120,7 +114,7 @@ public:
120 virtual ~LLSplashScreenMesaHeadless() {}; 114 virtual ~LLSplashScreenMesaHeadless() {};
121 115
122 /*virtual*/ void showImpl() {}; 116 /*virtual*/ void showImpl() {};
123 /*virtual*/ void updateImpl(const char* mesg) {}; 117 /*virtual*/ void updateImpl(const std::string& mesg) {};
124 /*virtual*/ void hideImpl() {}; 118 /*virtual*/ void hideImpl() {};
125 119
126}; 120};
diff --git a/linden/indra/llwindow/llwindowsdl.cpp b/linden/indra/llwindow/llwindowsdl.cpp
index 0d1d622..e5d15c4 100644
--- a/linden/indra/llwindow/llwindowsdl.cpp
+++ b/linden/indra/llwindow/llwindowsdl.cpp
@@ -41,8 +41,6 @@
41#include "lldir.h" 41#include "lldir.h"
42#include "llfindlocale.h" 42#include "llfindlocale.h"
43 43
44#include "llglheaders.h"
45
46#include "indra_constants.h" 44#include "indra_constants.h"
47 45
48#if LL_GTK 46#if LL_GTK
@@ -66,7 +64,10 @@ extern "C" {
66 64
67extern BOOL gDebugWindowProc; 65extern BOOL gDebugWindowProc;
68 66
69const S32 MAX_NUM_RESOLUTIONS = 32; 67const S32 MAX_NUM_RESOLUTIONS = 200;
68
69// static variable for ATI mouse cursor crash work-around:
70static bool ATIbug = false;
70 71
71// 72//
72// LLWindowSDL 73// LLWindowSDL
@@ -183,43 +184,7 @@ Display* get_SDL_Display(void)
183#endif // LL_X11 184#endif // LL_X11
184 185
185 186
186BOOL check_for_card(const char* RENDERER, const char* bad_card) 187LLWindowSDL::LLWindowSDL(const std::string& title, S32 x, S32 y, S32 width,
187{
188 if (!strncasecmp(RENDERER, bad_card, strlen(bad_card)))
189 {
190 char buffer[1024]; /* Flawfinder: ignore */
191 snprintf(buffer, sizeof(buffer),
192 "Your video card appears to be a %s, which Second Life does not support.\n"
193 "\n"
194 "Second Life requires a video card with 32 Mb of memory or more, as well as\n"
195 "multitexture support. We explicitly support nVidia GeForce 2 or better, \n"
196 "and ATI Radeon 8500 or better.\n"
197 "\n"
198 "If you own a supported card and continue to receive this message, try \n"
199 "updating to the latest video card drivers. Otherwise look in the\n"
200 "secondlife.com support section or e-mail technical support\n"
201 "\n"
202 "You can try to run Second Life, but it will probably crash or run\n"
203 "very slowly. Try anyway?",
204 bad_card);
205 S32 button = OSMessageBox(buffer, "Unsupported video card", OSMB_YESNO);
206 if (OSBTN_YES == button)
207 {
208 return FALSE;
209 }
210 else
211 {
212 return TRUE;
213 }
214 }
215
216 return FALSE;
217}
218
219
220
221
222LLWindowSDL::LLWindowSDL(char *title, S32 x, S32 y, S32 width,
223 S32 height, U32 flags, 188 S32 height, U32 flags,
224 BOOL fullscreen, BOOL clearBg, 189 BOOL fullscreen, BOOL clearBg,
225 BOOL disable_vsync, BOOL use_gl, 190 BOOL disable_vsync, BOOL use_gl,
@@ -260,18 +225,11 @@ LLWindowSDL::LLWindowSDL(char *title, S32 x, S32 y, S32 width,
260 // Get the original aspect ratio of the main device. 225 // Get the original aspect ratio of the main device.
261 mOriginalAspectRatio = 1024.0 / 768.0; // !!! *FIX: ? //(double)CGDisplayPixelsWide(mDisplay) / (double)CGDisplayPixelsHigh(mDisplay); 226 mOriginalAspectRatio = 1024.0 / 768.0; // !!! *FIX: ? //(double)CGDisplayPixelsWide(mDisplay) / (double)CGDisplayPixelsHigh(mDisplay);
262 227
263 if (!title) 228 if (title.empty())
264 title = "SDL Window"; // *FIX: (???) 229 mWindowTitle = "SDL Window"; // *FIX: (???)
265 230 else
266 // Stash the window title 231 mWindowTitle = title;
267 mWindowTitle = new char[strlen(title) + 1]; /* Flawfinder: ignore */
268 if(mWindowTitle == NULL)
269 {
270 llwarns << "Memory allocation failure" << llendl;
271 return;
272 }
273 232
274 strcpy(mWindowTitle, title); /* Flawfinder: ignore */
275 // Create the GL context and set it up for windowed or fullscreen, as appropriate. 233 // Create the GL context and set it up for windowed or fullscreen, as appropriate.
276 if(createContext(x, y, width, height, 32, fullscreen, disable_vsync)) 234 if(createContext(x, y, width, height, 32, fullscreen, disable_vsync))
277 { 235 {
@@ -485,7 +443,7 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B
485 } 443 }
486 444
487 SDL_EnableUNICODE(1); 445 SDL_EnableUNICODE(1);
488 SDL_WM_SetCaption(mWindowTitle, mWindowTitle); 446 SDL_WM_SetCaption(mWindowTitle.c_str(), mWindowTitle.c_str());
489 447
490 // Set the application icon. 448 // Set the application icon.
491 SDL_Surface *bmpsurface; 449 SDL_Surface *bmpsurface;
@@ -635,8 +593,7 @@ BOOL LLWindowSDL::createContext(int x, int y, int width, int height, int bits, B
635 mFullscreenBits = -1; 593 mFullscreenBits = -1;
636 mFullscreenRefresh = -1; 594 mFullscreenRefresh = -1;
637 595
638 char error[256]; /* Flawfinder: ignore */ 596 std::string error = llformat("Unable to run fullscreen at %d x %d.\nRunning in window.", width, height);
639 snprintf(error, sizeof(error), "Unable to run fullscreen at %d x %d.\nRunning in window.", width, height);
640 OSMessageBox(error, "Error", OSMB_OK); 597 OSMessageBox(error, "Error", OSMB_OK);
641 } 598 }
642 } 599 }
@@ -826,8 +783,6 @@ LLWindowSDL::~LLWindowSDL()
826 delete []mSupportedResolutions; 783 delete []mSupportedResolutions;
827 } 784 }
828 785
829 delete[] mWindowTitle;
830
831 gWindowImplementation = NULL; 786 gWindowImplementation = NULL;
832} 787}
833 788
@@ -1208,11 +1163,6 @@ void LLWindowSDL::afterDialog()
1208} 1163}
1209 1164
1210 1165
1211S32 LLWindowSDL::stat(const char* file_name, struct stat* stat_info)
1212{
1213 return ::stat( file_name, stat_info );
1214}
1215
1216#if LL_X11 1166#if LL_X11
1217// set/reset the XWMHints flag for 'urgency' that usually makes the icon flash 1167// set/reset the XWMHints flag for 'urgency' that usually makes the icon flash
1218void LLWindowSDL::x11_set_urgent(BOOL urgent) 1168void LLWindowSDL::x11_set_urgent(BOOL urgent)
@@ -1777,15 +1727,6 @@ BOOL LLWindowSDL::copyTextToClipboard(const LLWString &s)
1777} 1727}
1778#endif // LL_X11 1728#endif // LL_X11
1779 1729
1780BOOL LLWindowSDL::sendEmail(const char* address, const char* subject, const char* body_text,
1781 const char* attachment, const char* attachment_displayed_name )
1782{
1783 // MBW -- XXX -- Um... yeah. I'll get to this later.
1784
1785 return FALSE;
1786}
1787
1788
1789LLWindow::LLWindowResolution* LLWindowSDL::getSupportedResolutions(S32 &num_resolutions) 1730LLWindow::LLWindowResolution* LLWindowSDL::getSupportedResolutions(S32 &num_resolutions)
1790{ 1731{
1791 if (!mSupportedResolutions) 1732 if (!mSupportedResolutions)
@@ -1797,7 +1738,7 @@ LLWindow::LLWindowResolution* LLWindowSDL::getSupportedResolutions(S32 &num_reso
1797 if ( (modes != NULL) && (modes != ((SDL_Rect **) -1)) ) 1738 if ( (modes != NULL) && (modes != ((SDL_Rect **) -1)) )
1798 { 1739 {
1799 int count = 0; 1740 int count = 0;
1800 while (*modes) // they're sorted biggest to smallest, so find end... 1741 while (*modes && count<MAX_NUM_RESOLUTIONS) // they're sorted biggest to smallest, so find end...
1801 { 1742 {
1802 modes++; 1743 modes++;
1803 count++; 1744 count++;
@@ -1890,7 +1831,7 @@ BOOL LLWindowSDL::convertCoords(LLCoordGL from, LLCoordScreen *to)
1890 1831
1891 1832
1892 1833
1893void LLWindowSDL::setupFailure(const char* text, const char* caption, U32 type) 1834void LLWindowSDL::setupFailure(const std::string& text, const std::string& caption, U32 type)
1894{ 1835{
1895 destroyContext(); 1836 destroyContext();
1896 1837
@@ -2337,6 +2278,12 @@ static SDL_Cursor *makeSDLCursorFromBMP(const char *filename, int hotx, int hoty
2337 2278
2338void LLWindowSDL::setCursor(ECursorType cursor) 2279void LLWindowSDL::setCursor(ECursorType cursor)
2339{ 2280{
2281 if (ATIbug) {
2282 // cursor-updating is very flaky when this bug is
2283 // present; do nothing.
2284 return;
2285 }
2286
2340 if (mCurrentCursor != cursor) 2287 if (mCurrentCursor != cursor)
2341 { 2288 {
2342 if (cursor < UI_CURSOR_COUNT) 2289 if (cursor < UI_CURSOR_COUNT)
@@ -2409,6 +2356,11 @@ void LLWindowSDL::initCursors()
2409 mSDLCursors[UI_CURSOR_TOOLPAUSE] = makeSDLCursorFromBMP("toolpause.BMP",0,0); 2356 mSDLCursors[UI_CURSOR_TOOLPAUSE] = makeSDLCursorFromBMP("toolpause.BMP",0,0);
2410 mSDLCursors[UI_CURSOR_TOOLMEDIAOPEN] = makeSDLCursorFromBMP("toolmediaopen.BMP",0,0); 2357 mSDLCursors[UI_CURSOR_TOOLMEDIAOPEN] = makeSDLCursorFromBMP("toolmediaopen.BMP",0,0);
2411 mSDLCursors[UI_CURSOR_PIPETTE] = makeSDLCursorFromBMP("lltoolpipette.BMP",2,28); 2358 mSDLCursors[UI_CURSOR_PIPETTE] = makeSDLCursorFromBMP("lltoolpipette.BMP",2,28);
2359
2360 if (getenv("LL_ATI_MOUSE_CURSOR_BUG") != NULL) {
2361 llinfos << "Disabling cursor updating due to LL_ATI_MOUSE_CURSOR_BUG" << llendl;
2362 ATIbug = true;
2363 }
2412} 2364}
2413 2365
2414void LLWindowSDL::quitCursors() 2366void LLWindowSDL::quitCursors()
@@ -2520,7 +2472,7 @@ void LLSplashScreenSDL::showImpl()
2520{ 2472{
2521} 2473}
2522 2474
2523void LLSplashScreenSDL::updateImpl(const char* mesg) 2475void LLSplashScreenSDL::updateImpl(const std::string& mesg)
2524{ 2476{
2525} 2477}
2526 2478
@@ -2541,7 +2493,7 @@ static void response_callback (GtkDialog *dialog,
2541 gtk_main_quit(); 2493 gtk_main_quit();
2542} 2494}
2543 2495
2544S32 OSMessageBoxSDL(const char* text, const char* caption, U32 type) 2496S32 OSMessageBoxSDL(const std::string& text, const std::string& caption, U32 type)
2545{ 2497{
2546 S32 rtn = OSBTN_CANCEL; 2498 S32 rtn = OSBTN_CANCEL;
2547 2499
@@ -2578,9 +2530,7 @@ S32 OSMessageBoxSDL(const char* text, const char* caption, U32 type)
2578 buttons = GTK_BUTTONS_YES_NO; 2530 buttons = GTK_BUTTONS_YES_NO;
2579 break; 2531 break;
2580 } 2532 }
2581 win = gtk_message_dialog_new(NULL, 2533 win = gtk_message_dialog_new(NULL,flags, messagetype, buttons, text.c_str());
2582 flags, messagetype, buttons,
2583 text);
2584 2534
2585# if LL_X11 2535# if LL_X11
2586 // Make GTK tell the window manager to associate this 2536 // Make GTK tell the window manager to associate this
@@ -2602,8 +2552,8 @@ S32 OSMessageBoxSDL(const char* text, const char* caption, U32 type)
2602 gtk_window_set_type_hint(GTK_WINDOW(win), 2552 gtk_window_set_type_hint(GTK_WINDOW(win),
2603 GDK_WINDOW_TYPE_HINT_DIALOG); 2553 GDK_WINDOW_TYPE_HINT_DIALOG);
2604 2554
2605 if (caption) 2555 if (!caption.empty())
2606 gtk_window_set_title(GTK_WINDOW(win), caption); 2556 gtk_window_set_title(GTK_WINDOW(win), caption.c_str());
2607 2557
2608 gint response = GTK_RESPONSE_NONE; 2558 gint response = GTK_RESPONSE_NONE;
2609 g_signal_connect (win, 2559 g_signal_connect (win,
@@ -2727,7 +2677,7 @@ BOOL LLWindowSDL::dialog_color_picker ( F32 *r, F32 *g, F32 *b)
2727 return rtn; 2677 return rtn;
2728} 2678}
2729#else 2679#else
2730S32 OSMessageBoxSDL(const char* text, const char* caption, U32 type) 2680S32 OSMessageBoxSDL(const std::string& text, const std::string& caption, U32 type)
2731{ 2681{
2732 llinfos << "MSGBOX: " << caption << ": " << text << llendl; 2682 llinfos << "MSGBOX: " << caption << ": " << text << llendl;
2733 return 0; 2683 return 0;
@@ -2739,29 +2689,12 @@ BOOL LLWindowSDL::dialog_color_picker ( F32 *r, F32 *g, F32 *b)
2739} 2689}
2740#endif // LL_GTK 2690#endif // LL_GTK
2741 2691
2742// Open a URL with the user's default web browser.
2743// Must begin with protocol identifier.
2744void spawn_web_browser(const char* escaped_url)
2745{
2746 llinfos << "spawn_web_browser: " << escaped_url << llendl;
2747
2748#if LL_LINUX || LL_SOLARIS 2692#if LL_LINUX || LL_SOLARIS
2749# if LL_X11 2693// extracted from spawnWebBrowser for clarity and to eliminate
2750 if (gWindowImplementation && gWindowImplementation->mSDL_Display) 2694// compiler confusion regarding close(int fd) vs. LLWindow::close()
2751 { 2695void exec_cmd(const std::string& cmd, const std::string& arg)
2752 maybe_lock_display(); 2696{
2753 // Just in case - before forking. 2697 char* const argv[] = {(char*)cmd.c_str(), (char*)arg.c_str(), NULL};
2754 XSync(gWindowImplementation->mSDL_Display, False);
2755 maybe_unlock_display();
2756 }
2757# endif // LL_X11
2758
2759 std::string cmd;
2760 cmd = gDirUtilp->getAppRODataDir();
2761 cmd += gDirUtilp->getDirDelimiter();
2762 cmd += "launch_url.sh";
2763 char* const argv[] = {(char*)cmd.c_str(), (char*)escaped_url, NULL};
2764
2765 fflush(NULL); 2698 fflush(NULL);
2766 pid_t pid = fork(); 2699 pid_t pid = fork();
2767 if (pid == 0) 2700 if (pid == 0)
@@ -2786,6 +2719,32 @@ void spawn_web_browser(const char* escaped_url)
2786 llwarns << "fork failure." << llendl; 2719 llwarns << "fork failure." << llendl;
2787 } 2720 }
2788 } 2721 }
2722}
2723#endif
2724
2725// Open a URL with the user's default web browser.
2726// Must begin with protocol identifier.
2727void LLWindowSDL::spawnWebBrowser(const std::string& escaped_url)
2728{
2729 llinfos << "spawn_web_browser: " << escaped_url << llendl;
2730
2731#if LL_LINUX || LL_SOLARIS
2732# if LL_X11
2733 if (mSDL_Display)
2734 {
2735 maybe_lock_display();
2736 // Just in case - before forking.
2737 XSync(mSDL_Display, False);
2738 maybe_unlock_display();
2739 }
2740# endif // LL_X11
2741
2742 std::string cmd, arg;
2743 cmd = gDirUtilp->getAppRODataDir().c_str();
2744 cmd += gDirUtilp->getDirDelimiter().c_str();
2745 cmd += "launch_url.sh";
2746 arg = escaped_url;
2747 exec_cmd(cmd, arg);
2789#endif // LL_LINUX || LL_SOLARIS 2748#endif // LL_LINUX || LL_SOLARIS
2790 2749
2791 llinfos << "spawn_web_browser returning." << llendl; 2750 llinfos << "spawn_web_browser returning." << llendl;
@@ -2871,14 +2830,18 @@ std::string LLWindowSDL::getFontListSans()
2871 { 2830 {
2872 if (success >= 2 && locale->lang) // confident! 2831 if (success >= 2 && locale->lang) // confident!
2873 { 2832 {
2833 LL_INFOS("AppInit") << "Language " << locale->lang << LL_ENDL;
2834 LL_INFOS("AppInit") << "Location " << locale->country << LL_ENDL;
2835 LL_INFOS("AppInit") << "Variant " << locale->variant << LL_ENDL;
2836
2874 llinfos << "Preferring fonts of language: " 2837 llinfos << "Preferring fonts of language: "
2875 << locale->lang 2838 << locale->lang
2876 << llendl; 2839 << llendl;
2877 sort_order = "lang=" + std::string(locale->lang) + ":" 2840 sort_order = "lang=" + std::string(locale->lang) + ":"
2878 + sort_order; 2841 + sort_order;
2879 } 2842 }
2880 FL_FreeLocale(&locale);
2881 } 2843 }
2844 FL_FreeLocale(&locale);
2882 2845
2883 if (!FcInit()) 2846 if (!FcInit())
2884 { 2847 {
diff --git a/linden/indra/llwindow/llwindowsdl.h b/linden/indra/llwindow/llwindowsdl.h
index 5aed4e6..a395ccd 100644
--- a/linden/indra/llwindow/llwindowsdl.h
+++ b/linden/indra/llwindow/llwindowsdl.h
@@ -92,11 +92,6 @@ public:
92 /*virtual*/ void gatherInput(); 92 /*virtual*/ void gatherInput();
93 /*virtual*/ void swapBuffers(); 93 /*virtual*/ void swapBuffers();
94 94
95 /*virtual*/ LLString getTempFileName();
96 /*virtual*/ void deleteFile( const char* file_name );
97 /*virtual*/ S32 stat( const char* file_name, struct stat* stat_info );
98 /*virtual*/ BOOL sendEmail(const char* address,const char* subject,const char* body_text,const char* attachment=NULL, const char* attachment_displayed_name=NULL);
99
100 /*virtual*/ void delayInputProcessing() { }; 95 /*virtual*/ void delayInputProcessing() { };
101 96
102 // handy coordinate space conversion routines 97 // handy coordinate space conversion routines
@@ -120,6 +115,8 @@ public:
120 /*virtual*/ void *getPlatformWindow(); 115 /*virtual*/ void *getPlatformWindow();
121 /*virtual*/ void bringToFront(); 116 /*virtual*/ void bringToFront();
122 117
118 /*virtual*/ void spawnWebBrowser(const std::string& escaped_url);
119
123 static std::string getFontListSans(); 120 static std::string getFontListSans();
124 121
125 // Not great that these are public, but they have to be accessible 122 // Not great that these are public, but they have to be accessible
@@ -134,7 +131,7 @@ public:
134 131
135protected: 132protected:
136 LLWindowSDL( 133 LLWindowSDL(
137 char *title, int x, int y, int width, int height, U32 flags, 134 const std::string& title, int x, int y, int width, int height, U32 flags,
138 BOOL fullscreen, BOOL clearBg, BOOL disable_vsync, BOOL use_gl, 135 BOOL fullscreen, BOOL clearBg, BOOL disable_vsync, BOOL use_gl,
139 BOOL ignore_pixel_depth, U32 fsaa_samples); 136 BOOL ignore_pixel_depth, U32 fsaa_samples);
140 ~LLWindowSDL(); 137 ~LLWindowSDL();
@@ -164,7 +161,7 @@ protected:
164 // create or re-create the GL context/window. Called from the constructor and switchContext(). 161 // create or re-create the GL context/window. Called from the constructor and switchContext().
165 BOOL createContext(int x, int y, int width, int height, int bits, BOOL fullscreen, BOOL disable_vsync); 162 BOOL createContext(int x, int y, int width, int height, int bits, BOOL fullscreen, BOOL disable_vsync);
166 void destroyContext(); 163 void destroyContext();
167 void setupFailure(const char* text, const char* caption, U32 type); 164 void setupFailure(const std::string& text, const std::string& caption, U32 type);
168 void adjustCursorDecouple(bool warpingMouse = false); 165 void adjustCursorDecouple(bool warpingMouse = false);
169 void fixWindowSize(void); 166 void fixWindowSize(void);
170 U32 SDLCheckGrabbyKeys(SDLKey keysym, BOOL gain); 167 U32 SDLCheckGrabbyKeys(SDLKey keysym, BOOL gain);
@@ -176,7 +173,7 @@ protected:
176 U32 mGrabbyKeyFlags; 173 U32 mGrabbyKeyFlags;
177 int mReallyCapturedCount; 174 int mReallyCapturedCount;
178 SDL_Surface * mWindow; 175 SDL_Surface * mWindow;
179 char * mWindowTitle; 176 std::string mWindowTitle;
180 double mOriginalAspectRatio; 177 double mOriginalAspectRatio;
181 BOOL mCursorDecoupled; 178 BOOL mCursorDecoupled;
182 S32 mCursorLastEventDeltaX; 179 S32 mCursorLastEventDeltaX;
@@ -220,11 +217,11 @@ public:
220 virtual ~LLSplashScreenSDL(); 217 virtual ~LLSplashScreenSDL();
221 218
222 /*virtual*/ void showImpl(); 219 /*virtual*/ void showImpl();
223 /*virtual*/ void updateImpl(const char* mesg); 220 /*virtual*/ void updateImpl(const std::string& mesg);
224 /*virtual*/ void hideImpl(); 221 /*virtual*/ void hideImpl();
225}; 222};
226 223
227S32 OSMessageBoxSDL(const char* text, const char* caption, U32 type); 224S32 OSMessageBoxSDL(const std::string& text, const std::string& caption, U32 type);
228 225
229void load_url_external(const char* url); 226void load_url_external(const char* url);
230 227
diff --git a/linden/indra/llwindow/llwindowwin32.cpp b/linden/indra/llwindow/llwindowwin32.cpp
index 2001899..3729a71 100644
--- a/linden/indra/llwindow/llwindowwin32.cpp
+++ b/linden/indra/llwindow/llwindowwin32.cpp
@@ -54,8 +54,6 @@
54#include "llstring.h" 54#include "llstring.h"
55#include "lldir.h" 55#include "lldir.h"
56 56
57#include "llglheaders.h"
58
59#include "indra_constants.h" 57#include "indra_constants.h"
60 58
61#include "llpreeditor.h" 59#include "llpreeditor.h"
@@ -82,7 +80,7 @@ LLW32MsgCallback gAsyncMsgCallback = NULL;
82// LLWindowWin32 80// LLWindowWin32
83// 81//
84 82
85void show_window_creation_error(const char* title) 83void show_window_creation_error(const std::string& title)
86{ 84{
87 LL_WARNS("Window") << title << LL_ENDL; 85 LL_WARNS("Window") << title << LL_ENDL;
88} 86}
@@ -359,7 +357,7 @@ LLWinImm::~LLWinImm()
359} 357}
360 358
361 359
362LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width, 360LLWindowWin32::LLWindowWin32(const std::string& title, const std::string& name, S32 x, S32 y, S32 width,
363 S32 height, U32 flags, 361 S32 height, U32 flags,
364 BOOL fullscreen, BOOL clearBg, 362 BOOL fullscreen, BOOL clearBg,
365 BOOL disable_vsync, BOOL use_gl, 363 BOOL disable_vsync, BOOL use_gl,
@@ -386,7 +384,7 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
386 RECT window_rect; 384 RECT window_rect;
387 385
388 // Set the window title 386 // Set the window title
389 if (!title) 387 if (title.empty())
390 { 388 {
391 mWindowTitle = new WCHAR[50]; 389 mWindowTitle = new WCHAR[50];
392 wsprintf(mWindowTitle, L"OpenGL Window"); 390 wsprintf(mWindowTitle, L"OpenGL Window");
@@ -394,12 +392,12 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
394 else 392 else
395 { 393 {
396 mWindowTitle = new WCHAR[256]; // Assume title length < 255 chars. 394 mWindowTitle = new WCHAR[256]; // Assume title length < 255 chars.
397 mbstowcs(mWindowTitle, title, 255); 395 mbstowcs(mWindowTitle, title.c_str(), 255);
398 mWindowTitle[255] = 0; 396 mWindowTitle[255] = 0;
399 } 397 }
400 398
401 // Set the window class name 399 // Set the window class name
402 if (!name) 400 if (name.empty())
403 { 401 {
404 mWindowClassName = new WCHAR[50]; 402 mWindowClassName = new WCHAR[50];
405 wsprintf(mWindowClassName, L"OpenGL Window"); 403 wsprintf(mWindowClassName, L"OpenGL Window");
@@ -407,7 +405,7 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
407 else 405 else
408 { 406 {
409 mWindowClassName = new WCHAR[256]; // Assume title length < 255 chars. 407 mWindowClassName = new WCHAR[256]; // Assume title length < 255 chars.
410 mbstowcs(mWindowClassName, name, 255); 408 mbstowcs(mWindowClassName, name.c_str(), 255);
411 mWindowClassName[255] = 0; 409 mWindowClassName[255] = 0;
412 } 410 }
413 411
@@ -571,8 +569,7 @@ LLWindowWin32::LLWindowWin32(char *title, char *name, S32 x, S32 y, S32 width,
571 mFullscreenBits = -1; 569 mFullscreenBits = -1;
572 mFullscreenRefresh = -1; 570 mFullscreenRefresh = -1;
573 571
574 char error[256]; /* Flawfinder: ignore */ 572 std::string error = llformat("Unable to run fullscreen at %d x %d.\nRunning in window.", width, height);
575 snprintf(error, sizeof(error), "Unable to run fullscreen at %d x %d.\nRunning in window.", width, height); /* Flawfinder: ignore */
576 OSMessageBox(error, "Error", OSMB_OK); 573 OSMessageBox(error, "Error", OSMB_OK);
577 } 574 }
578 } 575 }
@@ -1390,6 +1387,20 @@ BOOL LLWindowWin32::setCursorPosition(const LLCoordWindow position)
1390 return FALSE; 1387 return FALSE;
1391 } 1388 }
1392 1389
1390 // Inform the application of the new mouse position (needed for per-frame
1391 // hover/picking to function).
1392 LLCoordGL gl_pos;
1393 convertCoords(position, &gl_pos);
1394 mCallbacks->handleMouseMove(this, gl_pos, (MASK)0);
1395
1396 // DEV-18951 VWR-8524 Camera moves wildly when alt-clicking.
1397 // Because we have preemptively notified the application of the new
1398 // mouse position via handleMouseMove() above, we need to clear out
1399 // any stale mouse move events. RN/JC
1400 MSG msg;
1401 while (PeekMessage(&msg, NULL, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_REMOVE))
1402 { }
1403
1393 return SetCursorPos(screen_pos.mX, screen_pos.mY); 1404 return SetCursorPos(screen_pos.mX, screen_pos.mY);
1394} 1405}
1395 1406
@@ -1564,7 +1575,9 @@ void LLWindowWin32::gatherInput()
1564 1575
1565 while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) && msg_count < MAX_MESSAGE_PER_UPDATE) 1576 while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) && msg_count < MAX_MESSAGE_PER_UPDATE)
1566 { 1577 {
1578 mCallbacks->handlePingWatchdog(this, "Main:TranslateGatherInput");
1567 TranslateMessage(&msg); 1579 TranslateMessage(&msg);
1580 mCallbacks->handlePingWatchdog(this, "Main:DispatchGatherInput");
1568 DispatchMessage(&msg); 1581 DispatchMessage(&msg);
1569 msg_count++; 1582 msg_count++;
1570 1583
@@ -1591,7 +1604,7 @@ void LLWindowWin32::gatherInput()
1591 } 1604 }
1592 } 1605 }
1593 */ 1606 */
1594 1607 mCallbacks->handlePingWatchdog(this, "Main:AsyncCallbackGatherInput");
1595 // For async host by name support. Really hacky. 1608 // For async host by name support. Really hacky.
1596 if (gAsyncMsgCallback && (LL_WM_HOST_RESOLVED == msg.message)) 1609 if (gAsyncMsgCallback && (LL_WM_HOST_RESOLVED == msg.message))
1597 { 1610 {
@@ -1942,6 +1955,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
1942 window_imp->convertCoords(window_coord, &gl_coord); 1955 window_imp->convertCoords(window_coord, &gl_coord);
1943 } 1956 }
1944 MASK mask = gKeyboard->currentMask(TRUE); 1957 MASK mask = gKeyboard->currentMask(TRUE);
1958 // generate move event to update mouse coordinates
1959 window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
1945 if (window_imp->mCallbacks->handleMouseDown(window_imp, gl_coord, mask)) 1960 if (window_imp->mCallbacks->handleMouseDown(window_imp, gl_coord, mask))
1946 { 1961 {
1947 return 0; 1962 return 0;
@@ -1969,6 +1984,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
1969 window_imp->convertCoords(window_coord, &gl_coord); 1984 window_imp->convertCoords(window_coord, &gl_coord);
1970 } 1985 }
1971 MASK mask = gKeyboard->currentMask(TRUE); 1986 MASK mask = gKeyboard->currentMask(TRUE);
1987 // generate move event to update mouse coordinates
1988 window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
1972 if (window_imp->mCallbacks->handleDoubleClick(window_imp, gl_coord, mask) ) 1989 if (window_imp->mCallbacks->handleDoubleClick(window_imp, gl_coord, mask) )
1973 { 1990 {
1974 return 0; 1991 return 0;
@@ -1999,6 +2016,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
1999 window_imp->convertCoords(window_coord, &gl_coord); 2016 window_imp->convertCoords(window_coord, &gl_coord);
2000 } 2017 }
2001 MASK mask = gKeyboard->currentMask(TRUE); 2018 MASK mask = gKeyboard->currentMask(TRUE);
2019 // generate move event to update mouse coordinates
2020 window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
2002 if (window_imp->mCallbacks->handleMouseUp(window_imp, gl_coord, mask)) 2021 if (window_imp->mCallbacks->handleMouseUp(window_imp, gl_coord, mask))
2003 { 2022 {
2004 return 0; 2023 return 0;
@@ -2015,7 +2034,7 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2015 window_imp->interruptLanguageTextInput(); 2034 window_imp->interruptLanguageTextInput();
2016 } 2035 }
2017 2036
2018 // Because we move the cursor position in tllviewerhe app, we need to query 2037 // Because we move the cursor position in the llviewerapp, we need to query
2019 // to find out where the cursor at the time the event is handled. 2038 // to find out where the cursor at the time the event is handled.
2020 // If we don't do this, many clicks could get buffered up, and if the 2039 // If we don't do this, many clicks could get buffered up, and if the
2021 // first click changes the cursor position, all subsequent clicks 2040 // first click changes the cursor position, all subsequent clicks
@@ -2031,6 +2050,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2031 window_imp->convertCoords(window_coord, &gl_coord); 2050 window_imp->convertCoords(window_coord, &gl_coord);
2032 } 2051 }
2033 MASK mask = gKeyboard->currentMask(TRUE); 2052 MASK mask = gKeyboard->currentMask(TRUE);
2053 // generate move event to update mouse coordinates
2054 window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
2034 if (window_imp->mCallbacks->handleRightMouseDown(window_imp, gl_coord, mask)) 2055 if (window_imp->mCallbacks->handleRightMouseDown(window_imp, gl_coord, mask))
2035 { 2056 {
2036 return 0; 2057 return 0;
@@ -2057,6 +2078,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2057 window_imp->convertCoords(window_coord, &gl_coord); 2078 window_imp->convertCoords(window_coord, &gl_coord);
2058 } 2079 }
2059 MASK mask = gKeyboard->currentMask(TRUE); 2080 MASK mask = gKeyboard->currentMask(TRUE);
2081 // generate move event to update mouse coordinates
2082 window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
2060 if (window_imp->mCallbacks->handleRightMouseUp(window_imp, gl_coord, mask)) 2083 if (window_imp->mCallbacks->handleRightMouseUp(window_imp, gl_coord, mask))
2061 { 2084 {
2062 return 0; 2085 return 0;
@@ -2089,6 +2112,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2089 window_imp->convertCoords(window_coord, &gl_coord); 2112 window_imp->convertCoords(window_coord, &gl_coord);
2090 } 2113 }
2091 MASK mask = gKeyboard->currentMask(TRUE); 2114 MASK mask = gKeyboard->currentMask(TRUE);
2115 // generate move event to update mouse coordinates
2116 window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
2092 if (window_imp->mCallbacks->handleMiddleMouseDown(window_imp, gl_coord, mask)) 2117 if (window_imp->mCallbacks->handleMiddleMouseDown(window_imp, gl_coord, mask))
2093 { 2118 {
2094 return 0; 2119 return 0;
@@ -2115,6 +2140,8 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
2115 window_imp->convertCoords(window_coord, &gl_coord); 2140 window_imp->convertCoords(window_coord, &gl_coord);
2116 } 2141 }
2117 MASK mask = gKeyboard->currentMask(TRUE); 2142 MASK mask = gKeyboard->currentMask(TRUE);
2143 // generate move event to update mouse coordinates
2144 window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
2118 if (window_imp->mCallbacks->handleMiddleMouseUp(window_imp, gl_coord, mask)) 2145 if (window_imp->mCallbacks->handleMiddleMouseUp(window_imp, gl_coord, mask))
2119 { 2146 {
2120 return 0; 2147 return 0;
@@ -2376,7 +2403,7 @@ BOOL LLWindowWin32::pasteTextFromClipboard(LLWString &dst)
2376 if (utf16str) 2403 if (utf16str)
2377 { 2404 {
2378 dst = utf16str_to_wstring(utf16str); 2405 dst = utf16str_to_wstring(utf16str);
2379 LLWString::removeCRLF(dst); 2406 LLWStringUtil::removeCRLF(dst);
2380 GlobalUnlock(h_data); 2407 GlobalUnlock(h_data);
2381 success = TRUE; 2408 success = TRUE;
2382 } 2409 }
@@ -2399,7 +2426,7 @@ BOOL LLWindowWin32::copyTextToClipboard(const LLWString& wstr)
2399 2426
2400 // Provide a copy of the data in Unicode format. 2427 // Provide a copy of the data in Unicode format.
2401 LLWString sanitized_string(wstr); 2428 LLWString sanitized_string(wstr);
2402 LLWString::addCRLF(sanitized_string); 2429 LLWStringUtil::addCRLF(sanitized_string);
2403 llutf16string out_utf16 = wstring_to_utf16str(sanitized_string); 2430 llutf16string out_utf16 = wstring_to_utf16str(sanitized_string);
2404 const size_t size_utf16 = (out_utf16.length() + 1) * sizeof(WCHAR); 2431 const size_t size_utf16 = (out_utf16.length() + 1) * sizeof(WCHAR);
2405 2432
@@ -2486,86 +2513,6 @@ BOOL LLWindowWin32::getClientRectInScreenSpace( RECT* rectp )
2486 return success; 2513 return success;
2487} 2514}
2488 2515
2489
2490BOOL LLWindowWin32::sendEmail(const char* address, const char* subject, const char* body_text,
2491 const char* attachment, const char* attachment_displayed_name )
2492{
2493 // Based on "A SendMail() DLL" by Greg Turner, Windows Developer Magazine, Nov. 1997.
2494 // See article for use of GetProcAddress
2495 // No restrictions on use.
2496
2497 enum SendResult
2498 {
2499 LL_EMAIL_SUCCESS,
2500 LL_EMAIL_MAPI_NOT_INSTALLED, // No MAPI Server (eg Microsoft Exchange) installed
2501 LL_EMAIL_MAPILOAD_FAILED, // Load of MAPI32.DLL failed
2502 LL_EMAIL_SEND_FAILED // The message send itself failed
2503 };
2504
2505 SendResult result = LL_EMAIL_SUCCESS;
2506
2507 U32 mapi_installed = GetProfileInt(L"Mail", L"MAPI", 0);
2508 if( !mapi_installed)
2509 {
2510 result = LL_EMAIL_MAPI_NOT_INSTALLED;
2511 }
2512 else
2513 {
2514 HINSTANCE hMAPIInst = LoadLibrary(L"MAPI32.DLL"); /* Flawfinder: ignore */
2515 if(!hMAPIInst)
2516 {
2517 result = LL_EMAIL_MAPILOAD_FAILED;
2518 }
2519 else
2520 {
2521 LPMAPISENDMAIL pMAPISendMail = (LPMAPISENDMAIL) GetProcAddress(hMAPIInst, "MAPISendMail");
2522
2523 // Send the message
2524 MapiRecipDesc recipients[1];
2525 recipients[0].ulReserved = 0;
2526 recipients[0].ulRecipClass = MAPI_TO;
2527 recipients[0].lpszName = (char*)address;
2528 recipients[0].lpszAddress = (char*)address;
2529 recipients[0].ulEIDSize = 0;
2530 recipients[0].lpEntryID = 0;
2531
2532 MapiFileDesc files[1];
2533 files[0].ulReserved = 0;
2534 files[0].flFlags = 0; // non-OLE file
2535 files[0].nPosition = -1; // Leave file location in email unspecified.
2536 files[0].lpszPathName = (char*)attachment; // Must be fully qualified name, including drive letter.
2537 files[0].lpszFileName = (char*)attachment_displayed_name; // If NULL, uses attachment as displayed name.
2538 files[0].lpFileType = NULL; // Recipient will have to figure out what kind of file this is.
2539
2540 MapiMessage msg;
2541 memset(&msg, 0, sizeof(msg));
2542 msg.lpszSubject = (char*)subject; // may be NULL
2543 msg.lpszNoteText = (char*)body_text;
2544 msg.nRecipCount = address ? 1 : 0;
2545 msg.lpRecips = address ? recipients : NULL;
2546 msg.nFileCount = attachment ? 1 : 0;
2547 msg.lpFiles = attachment ? files : NULL;
2548
2549 U32 success = pMAPISendMail(0, (U32) mWindowHandle, &msg, MAPI_DIALOG|MAPI_LOGON_UI|MAPI_NEW_SESSION, 0);
2550 if(success != SUCCESS_SUCCESS)
2551 {
2552 result = LL_EMAIL_SEND_FAILED;
2553 }
2554
2555 FreeLibrary(hMAPIInst);
2556 }
2557 }
2558
2559 return result == LL_EMAIL_SUCCESS;
2560}
2561
2562
2563S32 LLWindowWin32::stat(const char* file_name, struct stat* stat_info)
2564{
2565 llassert( sizeof(struct stat) == sizeof(struct _stat) ); // They are defined identically in sys/stat.h, but I'm paranoid.
2566 return LLFile::stat( file_name, (struct _stat*) stat_info );
2567}
2568
2569void LLWindowWin32::flashIcon(F32 seconds) 2516void LLWindowWin32::flashIcon(F32 seconds)
2570{ 2517{
2571 FLASHWINFO flash_info; 2518 FLASHWINFO flash_info;
@@ -2803,12 +2750,12 @@ void LLSplashScreenWin32::showImpl()
2803} 2750}
2804 2751
2805 2752
2806void LLSplashScreenWin32::updateImpl(const char *mesg) 2753void LLSplashScreenWin32::updateImpl(const std::string& mesg)
2807{ 2754{
2808 if (!mWindow) return; 2755 if (!mWindow) return;
2809 2756
2810 WCHAR w_mesg[1024]; 2757 WCHAR w_mesg[1024];
2811 mbstowcs(w_mesg, mesg, 1024); 2758 mbstowcs(w_mesg, mesg.c_str(), 1024);
2812 2759
2813 SendDlgItemMessage(mWindow, 2760 SendDlgItemMessage(mWindow,
2814 666, // HACK: text id 2761 666, // HACK: text id
@@ -2840,7 +2787,7 @@ LRESULT CALLBACK LLSplashScreenWin32::windowProc(HWND h_wnd, UINT u_msg,
2840// Helper Funcs 2787// Helper Funcs
2841// 2788//
2842 2789
2843S32 OSMessageBoxWin32(const char* text, const char* caption, U32 type) 2790S32 OSMessageBoxWin32(const std::string& text, const std::string& caption, U32 type)
2844{ 2791{
2845 UINT uType; 2792 UINT uType;
2846 2793
@@ -2861,7 +2808,7 @@ S32 OSMessageBoxWin32(const char* text, const char* caption, U32 type)
2861 } 2808 }
2862 2809
2863 // HACK! Doesn't properly handle wide strings! 2810 // HACK! Doesn't properly handle wide strings!
2864 int retval_win = MessageBoxA(NULL, text, caption, uType); 2811 int retval_win = MessageBoxA(NULL, text.c_str(), caption.c_str(), uType);
2865 S32 retval; 2812 S32 retval;
2866 2813
2867 switch(retval_win) 2814 switch(retval_win)
@@ -2887,15 +2834,13 @@ S32 OSMessageBoxWin32(const char* text, const char* caption, U32 type)
2887} 2834}
2888 2835
2889 2836
2890void spawn_web_browser(const char* escaped_url ) 2837void LLWindowWin32::spawnWebBrowser(const std::string& escaped_url )
2891{ 2838{
2892 bool found = false; 2839 bool found = false;
2893 S32 i; 2840 S32 i;
2894 for (i = 0; i < gURLProtocolWhitelistCount; i++) 2841 for (i = 0; i < gURLProtocolWhitelistCount; i++)
2895 { 2842 {
2896 S32 len = strlen(gURLProtocolWhitelist[i]); /* Flawfinder: ignore */ 2843 if (escaped_url.find(gURLProtocolWhitelist[i]) == 0)
2897 if (!strncmp(escaped_url, gURLProtocolWhitelist[i], len)
2898 && escaped_url[len] == ':')
2899 { 2844 {
2900 found = true; 2845 found = true;
2901 break; 2846 break;
@@ -2931,10 +2876,9 @@ void spawn_web_browser(const char* escaped_url )
2931 // Figure out the user's default web browser 2876 // Figure out the user's default web browser
2932 // HKEY_CLASSES_ROOT\http\shell\open\command 2877 // HKEY_CLASSES_ROOT\http\shell\open\command
2933 /* 2878 /*
2934 char reg_path_str[256]; // Flawfinder: ignore 2879 std::string reg_path_str = gURLProtocolWhitelistHandler[i] + "\\shell\\open\\command";
2935 snprintf(reg_path_str, sizeof(reg_path_str), "%s\\shell\\open\\command", gURLProtocolWhitelistHandler[i]); // Flawfinder: ignore
2936 WCHAR reg_path_wstr[256]; 2880 WCHAR reg_path_wstr[256];
2937 mbstowcs(reg_path_wstr, reg_path_str, sizeof(reg_path_wstr)/sizeof(reg_path_wstr[0])); 2881 mbstowcs(reg_path_wstr, reg_path_str.c_str(), sizeof(reg_path_wstr)/sizeof(reg_path_wstr[0]));
2938 2882
2939 HKEY key; 2883 HKEY key;
2940 WCHAR browser_open_wstr[1024]; 2884 WCHAR browser_open_wstr[1024];
diff --git a/linden/indra/llwindow/llwindowwin32.h b/linden/indra/llwindow/llwindowwin32.h
index feb1c74..ebabcae 100644
--- a/linden/indra/llwindow/llwindowwin32.h
+++ b/linden/indra/llwindow/llwindowwin32.h
@@ -86,12 +86,6 @@ public:
86 /*virtual*/ void delayInputProcessing(); 86 /*virtual*/ void delayInputProcessing();
87 /*virtual*/ void swapBuffers(); 87 /*virtual*/ void swapBuffers();
88 88
89 /*virtual*/ LLString getTempFileName();
90 /*virtual*/ void deleteFile( const char* file_name );
91 /*virtual*/ S32 stat( const char* file_name, struct stat* stat_info );
92 /*virtual*/ BOOL sendEmail(const char* address,const char* subject,const char* body_text,const char* attachment=NULL, const char* attachment_displayed_name=NULL);
93
94
95 // handy coordinate space conversion routines 89 // handy coordinate space conversion routines
96 /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to); 90 /*virtual*/ BOOL convertCoords(LLCoordScreen from, LLCoordWindow *to);
97 /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to); 91 /*virtual*/ BOOL convertCoords(LLCoordWindow from, LLCoordScreen *to);
@@ -115,12 +109,13 @@ public:
115 /*virtual*/ void setLanguageTextInput( const LLCoordGL & pos ); 109 /*virtual*/ void setLanguageTextInput( const LLCoordGL & pos );
116 /*virtual*/ void updateLanguageTextInputArea(); 110 /*virtual*/ void updateLanguageTextInputArea();
117 /*virtual*/ void interruptLanguageTextInput(); 111 /*virtual*/ void interruptLanguageTextInput();
112 /*virtual*/ void spawnWebBrowser(const std::string& escaped_url);
118 113
119 static std::string getFontListSans(); 114 static std::string getFontListSans();
120 115
121protected: 116protected:
122 LLWindowWin32( 117 LLWindowWin32(
123 char *title, char *name, int x, int y, int width, int height, U32 flags, 118 const std::string& title, const std::string& name, int x, int y, int width, int height, U32 flags,
124 BOOL fullscreen, BOOL clearBg, BOOL disable_vsync, BOOL use_gl, 119 BOOL fullscreen, BOOL clearBg, BOOL disable_vsync, BOOL use_gl,
125 BOOL ignore_pixel_depth, U32 fsaa_samples); 120 BOOL ignore_pixel_depth, U32 fsaa_samples);
126 ~LLWindowWin32(); 121 ~LLWindowWin32();
@@ -220,7 +215,7 @@ public:
220 virtual ~LLSplashScreenWin32(); 215 virtual ~LLSplashScreenWin32();
221 216
222 /*virtual*/ void showImpl(); 217 /*virtual*/ void showImpl();
223 /*virtual*/ void updateImpl(const char* mesg); 218 /*virtual*/ void updateImpl(const std::string& mesg);
224 /*virtual*/ void hideImpl(); 219 /*virtual*/ void hideImpl();
225 220
226#if LL_WINDOWS 221#if LL_WINDOWS
@@ -239,6 +234,6 @@ extern LPWSTR gIconResource;
239 234
240static void handleMessage( const MSG& msg ); 235static void handleMessage( const MSG& msg );
241 236
242S32 OSMessageBoxWin32(const char* text, const char* caption, U32 type); 237S32 OSMessageBoxWin32(const std::string& text, const std::string& caption, U32 type);
243 238
244#endif //LL_LLWINDOWWIN32_H 239#endif //LL_LLWINDOWWIN32_H