From ea763af9893edf2f00e46d79bf90546d9758f12a Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Fri, 20 Feb 2015 22:09:24 +1000 Subject: [PATCH 01/81] [CoreSupport] Add make_initd.pl code generator for declaring all the _glewInit functions This allows the initializers to call each other according to the interdependencies. --- auto/Makefile | 4 ++++ auto/bin/make_initd.pl | 44 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100755 auto/bin/make_initd.pl diff --git a/auto/Makefile b/auto/Makefile index 953660e..a1a42a7 100644 --- a/auto/Makefile +++ b/auto/Makefile @@ -198,6 +198,10 @@ $(S.DEST)/glew.c: $(EXT)/.dummy $(BIN)/make_def_var.pl GL $(GL_CORE_SPEC) >> $@ $(BIN)/make_def_var.pl GL $(GL_EXT_SPEC) >> $@ echo -e "\n#endif /* !GLEW_MX */\n" >> $@; + echo -e "" >> $@; + $(BIN)/make_initd.pl GL $(GL_CORE_SPEC) >> $@ + $(BIN)/make_initd.pl GL $(GL_EXT_SPEC) >> $@ + echo -e "" >> $@; $(BIN)/make_init.pl GL $(GL_CORE_SPEC) >> $@ $(BIN)/make_init.pl GL $(GL_EXT_SPEC) >> $@ cat $(SRC)/glew_init_gl.c >> $@ diff --git a/auto/bin/make_initd.pl b/auto/bin/make_initd.pl new file mode 100755 index 0000000..62343ea --- /dev/null +++ b/auto/bin/make_initd.pl @@ -0,0 +1,44 @@ +#!/usr/bin/perl +## +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +do 'bin/make.pl'; + +## Output declarations for the _glewInit_[extension] functions defined +## by make_init.pl script. These are necessary for for initializers to +## call each other, such as a core GL 3 context that depends on certain +## extensions. + +#------------------------------------------------------------------------------- + +my @extlist = (); +my %extensions = (); + +our $type = shift; + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = + parse_ext($ext); + + #print "#ifdef $extname\n\n"; + if (keys %$functions) + { + print "static GLboolean _glewInit_$extname (" . $type . + "EW_CONTEXT_ARG_DEF_INIT);\n"; + } + #print "#endif /* $extname */\n\n"; + } +} From 1da7dd6e0a20b5204f59bde3a406ad914eb3cd52 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Fri, 20 Feb 2015 22:47:51 +1000 Subject: [PATCH 02/81] [CoreSupport] Add code generation for sorted array of extension strings, which can index into array of pointers of extension enable flags. --- auto/Makefile | 9 ++++++++- auto/bin/make_enable_index.pl | 37 ++++++++++++++++++++++++++++++++++ auto/bin/make_index.pl | 38 +++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100755 auto/bin/make_enable_index.pl create mode 100755 auto/bin/make_index.pl diff --git a/auto/Makefile b/auto/Makefile index a1a42a7..0825d74 100644 --- a/auto/Makefile +++ b/auto/Makefile @@ -198,7 +198,14 @@ $(S.DEST)/glew.c: $(EXT)/.dummy $(BIN)/make_def_var.pl GL $(GL_CORE_SPEC) >> $@ $(BIN)/make_def_var.pl GL $(GL_EXT_SPEC) >> $@ echo -e "\n#endif /* !GLEW_MX */\n" >> $@; - echo -e "" >> $@; + echo -e "\nstatic const char * _glewExtensionLookup[] = {" >> $@; + $(BIN)/make_index.pl $(GL_EXT_SPEC) >> $@ + echo -e " NULL\n};\n" >> $@; + echo -e "\n#if !defined(GLEW_MX)" >> $@; + echo -e "\nstatic GLboolean* _glewEnabled[] = {" >> $@; + $(BIN)/make_enable_index.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ + echo -e " NULL\n};\n" >> $@; + echo -e "\n#endif /* !GLEW_MX */\n" >> $@; $(BIN)/make_initd.pl GL $(GL_CORE_SPEC) >> $@ $(BIN)/make_initd.pl GL $(GL_EXT_SPEC) >> $@ echo -e "" >> $@; diff --git a/auto/bin/make_enable_index.pl b/auto/bin/make_enable_index.pl new file mode 100755 index 0000000..53cdf75 --- /dev/null +++ b/auto/bin/make_enable_index.pl @@ -0,0 +1,37 @@ +#!/usr/bin/perl +## +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +do 'bin/make.pl'; + +## +## Make Extension-enabled Index +## + +my @extlist = (); + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = + parse_ext($ext); + + my $extvar = $extname; + $extvar =~ s/GL(X*)_/GL$1EW_/; + + print "#ifdef $extname\n"; + print " &__$extvar,\n"; + print "#endif\n"; + } +} diff --git a/auto/bin/make_index.pl b/auto/bin/make_index.pl new file mode 100755 index 0000000..2d06979 --- /dev/null +++ b/auto/bin/make_index.pl @@ -0,0 +1,38 @@ +#!/usr/bin/perl +## +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +do 'bin/make.pl'; + +## +## Make Index +## +## Output sorted array of extension strings for indexing into extension +## enable/disable flags. This provides a way to convert an extension string +## into an integer index. +## + +my @extlist = (); + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = + parse_ext($ext); + + print "#ifdef $extname\n"; + print " \"$extstring\",\n"; + print "#endif\n"; + } +} From 731b1e6602af6e9dacf5a8aafef3a08334deb9a6 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 21 Feb 2015 14:09:39 +1000 Subject: [PATCH 03/81] [CoreSupport] Represent the extension string(s) as an array of GLboolean - _glewGetExtensionString and _glewGetExtensionEnable glewinfo output is identical. TODO core context glGetStringi support. TODO MX support. --- auto/Makefile | 4 +- auto/bin/make_enable_index.pl | 8 +++ auto/bin/make_index.pl | 2 +- auto/bin/make_list.pl | 12 ++-- auto/src/glew_head.c | 22 +------ auto/src/glew_init_gl.c | 108 ++++++++++++++++++++++++++++------ 6 files changed, 107 insertions(+), 49 deletions(-) diff --git a/auto/Makefile b/auto/Makefile index 0825d74..579f8ee 100644 --- a/auto/Makefile +++ b/auto/Makefile @@ -199,12 +199,10 @@ $(S.DEST)/glew.c: $(EXT)/.dummy $(BIN)/make_def_var.pl GL $(GL_EXT_SPEC) >> $@ echo -e "\n#endif /* !GLEW_MX */\n" >> $@; echo -e "\nstatic const char * _glewExtensionLookup[] = {" >> $@; - $(BIN)/make_index.pl $(GL_EXT_SPEC) >> $@ + $(BIN)/make_index.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ echo -e " NULL\n};\n" >> $@; echo -e "\n#if !defined(GLEW_MX)" >> $@; - echo -e "\nstatic GLboolean* _glewEnabled[] = {" >> $@; $(BIN)/make_enable_index.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ - echo -e " NULL\n};\n" >> $@; echo -e "\n#endif /* !GLEW_MX */\n" >> $@; $(BIN)/make_initd.pl GL $(GL_CORE_SPEC) >> $@ $(BIN)/make_initd.pl GL $(GL_EXT_SPEC) >> $@ diff --git a/auto/bin/make_enable_index.pl b/auto/bin/make_enable_index.pl index 53cdf75..48c521d 100755 --- a/auto/bin/make_enable_index.pl +++ b/auto/bin/make_enable_index.pl @@ -22,6 +22,12 @@ if (@ARGV) { @extlist = @ARGV; + print "/* Detected in the extension string or strings */\n"; + print "static GLboolean _glewExtensionString[" . scalar @extlist . "];\n"; + + print "/* Detected via extension string or experimental mode */\n"; + print "static GLboolean* _glewExtensionEnabled[] = {\n";; + foreach my $ext (sort @extlist) { my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = @@ -34,4 +40,6 @@ if (@ARGV) print " &__$extvar,\n"; print "#endif\n"; } + + print " NULL\n};\n"; } diff --git a/auto/bin/make_index.pl b/auto/bin/make_index.pl index 2d06979..45eca07 100755 --- a/auto/bin/make_index.pl +++ b/auto/bin/make_index.pl @@ -32,7 +32,7 @@ if (@ARGV) parse_ext($ext); print "#ifdef $extname\n"; - print " \"$extstring\",\n"; + print " \"$extname\",\n"; print "#endif\n"; } } diff --git a/auto/bin/make_list.pl b/auto/bin/make_list.pl index 75dc060..7cea8c8 100755 --- a/auto/bin/make_list.pl +++ b/auto/bin/make_list.pl @@ -42,15 +42,10 @@ if (@ARGV) #my $pextvar = prefix_varname($extvar); - print "#ifdef $extname\n"; - - if (length($extstring)) - { - print " " . $extvar . " = _glewSearchExtension(\"$extstring\", extStart, extEnd);\n"; - } - if (keys %$functions) { + print "#ifdef $extname\n"; + if ($extname =~ /WGL_.*/) { print " if (glewExperimental || " . $extvar . "|| crippled) " . $extvar . "= !_glewInit_$extname(GLEW_CONTEXT_ARG_VAR_INIT);\n"; @@ -59,8 +54,9 @@ if (@ARGV) { print " if (glewExperimental || " . $extvar . ") " . $extvar . " = !_glewInit_$extname(GLEW_CONTEXT_ARG_VAR_INIT);\n"; } + + print "#endif /* $extname */\n"; } - print "#endif /* $extname */\n"; } } diff --git a/auto/src/glew_head.c b/auto/src/glew_head.c index 1b4ed77..a96e9b5 100644 --- a/auto/src/glew_head.c +++ b/auto/src/glew_head.c @@ -207,6 +207,7 @@ static GLuint _glewStrCLen (const GLubyte* s, GLubyte c) return (s[i] == '\0' || s[i] == c) ? i : 0; } +#if 0 static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) { GLuint i=0; @@ -215,6 +216,7 @@ static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) while (i < n && a[i] != '\0' && b[i] != '\0' && a[i] == b[i]) i++; return i == n ? GL_TRUE : GL_FALSE; } +#endif static GLboolean _glewStrSame1 (const GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) { @@ -268,23 +270,3 @@ static GLboolean _glewStrSame3 (const GLubyte** a, GLuint* na, const GLubyte* b, } return GL_FALSE; } - -/* - * Search for name in the extensions string. Use of strstr() - * is not sufficient because extension names can be prefixes of - * other extension names. Could use strtok() but the constant - * string returned by glGetString might be in read-only memory. - */ -static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, const GLubyte *end) -{ - const GLubyte* p; - GLuint len = _glewStrLen((const GLubyte*)name); - p = start; - while (p < end) - { - GLuint n = _glewStrCLen(p, ' '); - if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; - p += n+1; - } - return GL_FALSE; -} diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index c438792..8606b24 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -1,14 +1,60 @@ /* ------------------------------------------------------------------------- */ +static int _glewExtensionCompare(const void *a, const void *b) +{ + return strcmp((const char *) a, *(const char**) b); +} + +static GLboolean *_glewGetExtensionString(const char *name) +{ + const char **n = (const char **) bsearch(name, _glewExtensionLookup, sizeof(_glewExtensionLookup)/sizeof(char *)-1, sizeof(char *), _glewExtensionCompare); + int i; + + if (n) + { + i = n-_glewExtensionLookup; + return _glewExtensionString+i; + } + + return NULL; +} + +static GLboolean *_glewGetExtensionEnable(const char *name) +{ + const char **n = (const char **) bsearch(name, _glewExtensionLookup, sizeof(_glewExtensionLookup)/sizeof(char *)-1, sizeof(char *), _glewExtensionCompare); + int i; + + if (n) + { + i = n-_glewExtensionLookup; + return _glewExtensionEnabled[i]; + } + + return NULL; +} + +static char *_glewNextSpace(char *i) +{ + char *j = i; + if (j) + while (*j!=' ' && *j) ++j; + return j; +} + +static char *_glewNextNonSpace(char *i) +{ + char *j = i; + if (j) + while (*j==' ') ++j; + return j; +} + GLboolean GLEWAPIENTRY glewGetExtension (const char* name) -{ - const GLubyte* start; - const GLubyte* end; - start = (const GLubyte*)glGetString(GL_EXTENSIONS); - if (start == 0) - return GL_FALSE; - end = start + _glewStrLen(start); - return _glewSearchExtension(name, start, end); +{ + GLboolean *enable = _glewGetExtensionString(name); + if (enable) + return *enable; + return GL_FALSE; } /* ------------------------------------------------------------------------- */ @@ -21,8 +67,12 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) const GLubyte* s; GLuint dot; GLint major, minor; - const GLubyte* extStart; - const GLubyte* extEnd; + char *begin; + char *end; + char *i; + char *j; + GLboolean *enable; + /* query opengl version */ s = glGetString(GL_VERSION); dot = _glewStrCLen(s, '.'); @@ -37,7 +87,6 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) if (major<0 || major>9) return GLEW_ERROR_NO_GL_VERSION; - if (major == 1 && minor == 0) { return GLEW_ERROR_GL_VERSION_10_ONLY; @@ -64,10 +113,35 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) GLEW_VERSION_1_1 = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE; } - /* query opengl extensions string */ - extStart = glGetString(GL_EXTENSIONS); - if (extStart == 0) - extStart = (const GLubyte*)""; - extEnd = extStart + _glewStrLen(extStart); + memset(_glewExtensionString,0,sizeof(_glewExtensionString)); - /* initialize extensions */ + if (GLEW_VERSION_3_0) + { + /* TODO */ + } + else + { + begin = (char *) glGetString(GL_EXTENSIONS); + if (begin) + { + begin = strdup(begin); + end = begin + strlen(begin); + for (i=begin; i Date: Sat, 21 Feb 2015 19:42:42 +1000 Subject: [PATCH 04/81] [CoreSupport] For OpenGL 3.0 onwards use glGetStringi rather than glGetString(GL_EXTENSIONS) --- auto/src/glew_init_gl.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index 8606b24..336f9ea 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -117,7 +117,30 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) if (GLEW_VERSION_3_0) { - /* TODO */ + GLint n = 0; + GLint i; + PFNGLGETSTRINGIPROC getStringi; + const char *ext; + + glGetIntegerv(GL_NUM_EXTENSIONS, &n); + + /* glGetStringi is OpenGL 3.0 */ + getStringi = (PFNGLGETSTRINGIPROC) glewGetProcAddress((const GLubyte*)"glGetStringi"); + if (glGetStringi) + for (i = 0; i Date: Sat, 21 Feb 2015 23:29:40 +1000 Subject: [PATCH 05/81] [CoreSupport] Linux/GLX touch-ups for extension string parsing and enable lookup. --- auto/src/glew_head.c | 24 ++++++++++++++++++++++-- auto/src/glew_init_gl.c | 22 +++++++++++++--------- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/auto/src/glew_head.c b/auto/src/glew_head.c index a96e9b5..80200d1 100644 --- a/auto/src/glew_head.c +++ b/auto/src/glew_head.c @@ -10,6 +10,8 @@ #endif #include /* For size_t */ +#include /* memset, etc */ +#include /* * Define glewGetContext and related helper macros. @@ -207,7 +209,6 @@ static GLuint _glewStrCLen (const GLubyte* s, GLubyte c) return (s[i] == '\0' || s[i] == c) ? i : 0; } -#if 0 static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) { GLuint i=0; @@ -216,7 +217,6 @@ static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) while (i < n && a[i] != '\0' && b[i] != '\0' && a[i] == b[i]) i++; return i == n ? GL_TRUE : GL_FALSE; } -#endif static GLboolean _glewStrSame1 (const GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) { @@ -270,3 +270,23 @@ static GLboolean _glewStrSame3 (const GLubyte** a, GLuint* na, const GLubyte* b, } return GL_FALSE; } + +/* + * Search for name in the extensions string. Use of strstr() + * is not sufficient because extension names can be prefixes of + * other extension names. Could use strtok() but the constant + * string returned by glGetString might be in read-only memory. + */ +static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, const GLubyte *end) +{ + const GLubyte* p; + GLuint len = _glewStrLen((const GLubyte*)name); + p = start; + while (p < end) + { + GLuint n = _glewStrCLen(p, ' '); + if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; + p += n+1; + } + return GL_FALSE; +} diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index 336f9ea..c4548ad 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -2,7 +2,7 @@ static int _glewExtensionCompare(const void *a, const void *b) { - return strcmp((const char *) a, *(const char**) b); + return strcmp((const char *) a, *(const char * const *) b); } static GLboolean *_glewGetExtensionString(const char *name) @@ -67,11 +67,6 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) const GLubyte* s; GLuint dot; GLint major, minor; - char *begin; - char *end; - char *i; - char *j; - GLboolean *enable; /* query opengl version */ s = glGetString(GL_VERSION); @@ -121,6 +116,7 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) GLint i; PFNGLGETSTRINGIPROC getStringi; const char *ext; + GLboolean *enable; glGetIntegerv(GL_NUM_EXTENSIONS, &n); @@ -144,10 +140,18 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) } else { - begin = (char *) glGetString(GL_EXTENSIONS); - if (begin) + const char *ext; + char *begin; + char *end; + char *i; + char *j; + GLboolean *enable; + + ext = (const char *) glGetString(GL_EXTENSIONS); + + if (ext) { - begin = strdup(begin); + begin = strdup(ext); end = begin + strlen(begin); for (i=begin; i Date: Sat, 21 Feb 2015 23:44:08 +1000 Subject: [PATCH 06/81] [CoreSupport] Linux/GLX touch-ups for ANSI-C with gcc -pedantic compilation flag --- auto/src/glew_head.c | 12 ++++++++++++ auto/src/glew_init_gl.c | 6 +++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/auto/src/glew_head.c b/auto/src/glew_head.c index 80200d1..4b98cd7 100644 --- a/auto/src/glew_head.c +++ b/auto/src/glew_head.c @@ -193,6 +193,7 @@ void* NSGLGetProcAddress (const GLubyte *name) * GLEW, just like OpenGL or GLU, does not rely on the standard C library. * These functions implement the functionality required in this file. */ + static GLuint _glewStrLen (const GLubyte* s) { GLuint i=0; @@ -209,6 +210,17 @@ static GLuint _glewStrCLen (const GLubyte* s, GLubyte c) return (s[i] == '\0' || s[i] == c) ? i : 0; } +static GLubyte *_glewStrDup (const GLubyte *s) +{ + int n = _glewStrLen(s) + 1; + GLubyte *dup = malloc(n); + if (dup) + { + strcpy((char *) dup, (const char *) s); + } + return dup; +} + static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) { GLuint i=0; diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index c4548ad..890574b 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -140,7 +140,7 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) } else { - const char *ext; + const GLubyte *ext; char *begin; char *end; char *i; @@ -151,8 +151,8 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) if (ext) { - begin = strdup(ext); - end = begin + strlen(begin); + begin = (char *) _glewStrDup(ext); + end = begin + _glewStrLen((GLubyte *) begin); for (i=begin; i Date: Sun, 22 Feb 2015 00:37:29 +1000 Subject: [PATCH 07/81] [CoreSupport] Linux/GLX touch-ups for GL 3.0 + extension detection, GLX. --- auto/bin/make_list.pl | 12 ++++++++---- auto/src/glew_init_gl.c | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/auto/bin/make_list.pl b/auto/bin/make_list.pl index 7cea8c8..27bc27c 100755 --- a/auto/bin/make_list.pl +++ b/auto/bin/make_list.pl @@ -42,10 +42,15 @@ if (@ARGV) #my $pextvar = prefix_varname($extvar); + print "#ifdef $extname\n"; + + if (length($extstring) && $extstring !~ /^GL_/) + { + print " " . $extvar . " = _glewSearchExtension(\"$extstring\", extStart, extEnd);\n"; + } + if (keys %$functions) { - print "#ifdef $extname\n"; - if ($extname =~ /WGL_.*/) { print " if (glewExperimental || " . $extvar . "|| crippled) " . $extvar . "= !_glewInit_$extname(GLEW_CONTEXT_ARG_VAR_INIT);\n"; @@ -54,9 +59,8 @@ if (@ARGV) { print " if (glewExperimental || " . $extvar . ") " . $extvar . " = !_glewInit_$extname(GLEW_CONTEXT_ARG_VAR_INIT);\n"; } - - print "#endif /* $extname */\n"; } + print "#endif /* $extname */\n"; } } diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index 890574b..4693d8e 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -122,7 +122,7 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) /* glGetStringi is OpenGL 3.0 */ getStringi = (PFNGLGETSTRINGIPROC) glewGetProcAddress((const GLubyte*)"glGetStringi"); - if (glGetStringi) + if (getStringi) for (i = 0; i Date: Fri, 27 Feb 2015 20:37:12 +1000 Subject: [PATCH 08/81] [CoreSupport] Tab indentation for perl scripts --- auto/bin/make_enable_index.pl | 32 ++++++++++++++++---------------- auto/bin/make_index.pl | 18 +++++++++--------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/auto/bin/make_enable_index.pl b/auto/bin/make_enable_index.pl index 48c521d..9c9d375 100755 --- a/auto/bin/make_enable_index.pl +++ b/auto/bin/make_enable_index.pl @@ -20,26 +20,26 @@ my @extlist = (); if (@ARGV) { - @extlist = @ARGV; + @extlist = @ARGV; - print "/* Detected in the extension string or strings */\n"; - print "static GLboolean _glewExtensionString[" . scalar @extlist . "];\n"; + print "/* Detected in the extension string or strings */\n"; + print "static GLboolean _glewExtensionString[" . scalar @extlist . "];\n"; - print "/* Detected via extension string or experimental mode */\n"; - print "static GLboolean* _glewExtensionEnabled[] = {\n";; + print "/* Detected via extension string or experimental mode */\n"; + print "static GLboolean* _glewExtensionEnabled[] = {\n";; - foreach my $ext (sort @extlist) - { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = - parse_ext($ext); + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = + parse_ext($ext); - my $extvar = $extname; - $extvar =~ s/GL(X*)_/GL$1EW_/; + my $extvar = $extname; + $extvar =~ s/GL(X*)_/GL$1EW_/; - print "#ifdef $extname\n"; - print " &__$extvar,\n"; - print "#endif\n"; - } + print "#ifdef $extname\n"; + print " &__$extvar,\n"; + print "#endif\n"; + } - print " NULL\n};\n"; + print " NULL\n};\n"; } diff --git a/auto/bin/make_index.pl b/auto/bin/make_index.pl index 45eca07..f252cd4 100755 --- a/auto/bin/make_index.pl +++ b/auto/bin/make_index.pl @@ -24,15 +24,15 @@ my @extlist = (); if (@ARGV) { - @extlist = @ARGV; + @extlist = @ARGV; - foreach my $ext (sort @extlist) - { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = - parse_ext($ext); + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = + parse_ext($ext); - print "#ifdef $extname\n"; - print " \"$extname\",\n"; - print "#endif\n"; - } + print "#ifdef $extname\n"; + print " \"$extname\",\n"; + print "#endif\n"; + } } From 928d6298455932c5d4256d31b65e832db70e4325 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Fri, 27 Feb 2015 21:06:55 +1000 Subject: [PATCH 09/81] [CoreSupport] Resolve some Mac compilation warnings. --- auto/src/glew_head.c | 17 ++++++++++++----- auto/src/glew_init_gl.c | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/auto/src/glew_head.c b/auto/src/glew_head.c index 4b98cd7..6d18293 100644 --- a/auto/src/glew_head.c +++ b/auto/src/glew_head.c @@ -10,8 +10,6 @@ #endif #include /* For size_t */ -#include /* memset, etc */ -#include /* * Define glewGetContext and related helper macros. @@ -212,15 +210,21 @@ static GLuint _glewStrCLen (const GLubyte* s, GLubyte c) static GLubyte *_glewStrDup (const GLubyte *s) { - int n = _glewStrLen(s) + 1; - GLubyte *dup = malloc(n); + int n = _glewStrLen(s); + GLubyte *dup = malloc(n+1); if (dup) { - strcpy((char *) dup, (const char *) s); + GLubyte *i = dup; + for (;;) + { + *i = *s; + if (*i) { ++i; ++s; } else break; + } } return dup; } +#if !defined(__APPLE__) || defined(GLEW_APPLE_GLX) static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) { GLuint i=0; @@ -229,6 +233,7 @@ static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) while (i < n && a[i] != '\0' && b[i] != '\0' && a[i] == b[i]) i++; return i == n ? GL_TRUE : GL_FALSE; } +#endif static GLboolean _glewStrSame1 (const GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) { @@ -289,6 +294,7 @@ static GLboolean _glewStrSame3 (const GLubyte** a, GLuint* na, const GLubyte* b, * other extension names. Could use strtok() but the constant * string returned by glGetString might be in read-only memory. */ +#if !defined(__APPLE__) || defined(GLEW_APPLE_GLX) static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, const GLubyte *end) { const GLubyte* p; @@ -302,3 +308,4 @@ static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, c } return GL_FALSE; } +#endif diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index 4693d8e..38293c2 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -147,7 +147,7 @@ GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) char *j; GLboolean *enable; - ext = (const char *) glGetString(GL_EXTENSIONS); + ext = glGetString(GL_EXTENSIONS); if (ext) { From c363cdb7c01fbab180ed9750247f2e0a9451f0ac Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Thu, 18 Jun 2015 20:53:45 +1000 Subject: [PATCH 10/81] Fixup: stdlib.h and string.h needed for Linux gcc 4.8 build. --- auto/src/glew_head.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/auto/src/glew_head.c b/auto/src/glew_head.c index 6d18293..ddcdd9f 100644 --- a/auto/src/glew_head.c +++ b/auto/src/glew_head.c @@ -10,6 +10,8 @@ #endif #include /* For size_t */ +#include /* For malloc, free */ +#include /* For memset */ /* * Define glewGetContext and related helper macros. From 0fcb9a3061c591561cae0e500b32e2a0daa9734a Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 29 Aug 2015 09:53:27 +1000 Subject: [PATCH 11/81] Skip #ifdef block for extensions detected purely from extension string. --- auto/bin/make_list.pl | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/auto/bin/make_list.pl b/auto/bin/make_list.pl index 27bc27c..310ed3a 100755 --- a/auto/bin/make_list.pl +++ b/auto/bin/make_list.pl @@ -42,11 +42,14 @@ if (@ARGV) #my $pextvar = prefix_varname($extvar); - print "#ifdef $extname\n"; + if (length($extstring) && $extstring !~ /^GL_/ || keys %$functions) + { + print "#ifdef $extname\n"; + } if (length($extstring) && $extstring !~ /^GL_/) { - print " " . $extvar . " = _glewSearchExtension(\"$extstring\", extStart, extEnd);\n"; + print " " . $extvar . " = _glewSearchExtension(\"$extstring\", extStart, extEnd);\n"; } if (keys %$functions) @@ -60,7 +63,11 @@ if (@ARGV) print " if (glewExperimental || " . $extvar . ") " . $extvar . " = !_glewInit_$extname(GLEW_CONTEXT_ARG_VAR_INIT);\n"; } } - print "#endif /* $extname */\n"; + + if (length($extstring) && $extstring !~ /^GL_/ || keys %$functions) + { + print "#endif /* $extname */\n"; + } } } From 6cea54733a1d337ca18969bc8e2a07d710c73d71 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sun, 30 Aug 2015 08:55:10 +1000 Subject: [PATCH 12/81] [CoreSupport] Use 4th line of extension specification to reused extensions Such as OpenGL 3.0 reusing ARB_vertex_array_object Implement reused lists for OpenGL 3.0, 3.1 and 3.2 so far --- auto/bin/filter_gl_ext.sh | 32 +++++++++++-------- auto/bin/make.pl | 20 ++++++++++-- auto/bin/make_def_fun.pl | 2 +- auto/bin/make_def_var.pl | 2 +- auto/bin/make_enable_index.pl | 2 +- auto/bin/make_header.pl | 2 +- auto/bin/make_html.pl | 2 +- auto/bin/make_index.pl | 2 +- auto/bin/make_info.pl | 2 +- auto/bin/make_info_list.pl | 2 +- auto/bin/make_init.pl | 10 ++++-- auto/bin/make_initd.pl | 2 +- auto/bin/make_list.pl | 2 +- auto/bin/make_str.pl | 2 +- auto/bin/make_struct_fun.pl | 2 +- auto/bin/make_struct_var.pl | 2 +- auto/bin/parse_spec.pl | 1 + auto/core/gl/GLX_AMD_gpu_association | 1 + auto/core/gl/GLX_ARB_get_proc_address | 1 + auto/core/gl/GLX_ATI_pixel_format_float | 1 + auto/core/gl/GLX_ATI_render_texture | 1 + .../gl/GLX_EXT_create_context_es2_profile | 1 + .../core/gl/GLX_EXT_create_context_es_profile | 1 + auto/core/gl/GLX_EXT_fbconfig_packed_float | 1 + auto/core/gl/GLX_EXT_framebuffer_sRGB | 1 + auto/core/gl/GLX_MESA_swap_control | 1 + auto/core/gl/GLX_NV_float_buffer | 1 + auto/core/gl/GLX_NV_vertex_array_range | 1 + auto/core/gl/GLX_SGIS_shared_multisample | 1 + auto/core/gl/GLX_SGIX_hyperpipe | 1 + auto/core/gl/GLX_SGIX_swap_barrier | 1 + auto/core/gl/GLX_SGIX_swap_group | 1 + auto/core/gl/GLX_SGI_video_sync | 1 + auto/core/gl/GLX_SUN_video_resize | 1 + auto/core/gl/GLX_VERSION_1_2 | 1 + auto/core/gl/GLX_VERSION_1_3 | 1 + auto/core/gl/GLX_VERSION_1_4 | 1 + auto/core/gl/GL_APPLE_float_pixels | 1 + auto/core/gl/GL_APPLE_pixel_buffer | 1 + auto/core/gl/GL_APPLE_texture_range | 1 + auto/core/gl/GL_ARB_draw_instanced | 1 + auto/core/gl/GL_ARB_imaging | 1 + auto/core/gl/GL_ARB_instanced_arrays | 1 + auto/core/gl/GL_ARB_internalformat_query2 | 1 + auto/core/gl/GL_ARB_matrix_palette | 1 + auto/core/gl/GL_ARB_multitexture | 1 + auto/core/gl/GL_ARB_robustness | 1 + auto/core/gl/GL_ARB_separate_shader_objects | 1 + auto/core/gl/GL_ARB_vertex_attrib_64bit | 1 + auto/core/gl/GL_ARB_vertex_blend | 1 + auto/core/gl/GL_ATIX_point_sprites | 1 + auto/core/gl/GL_ATIX_texture_env_combine3 | 1 + auto/core/gl/GL_ATIX_texture_env_route | 1 + .../GL_ATIX_vertex_shader_output_point_size | 1 + auto/core/gl/GL_ATI_envmap_bumpmap | 1 + auto/core/gl/GL_ATI_map_object_buffer | 1 + auto/core/gl/GL_ATI_pn_triangles | 1 + auto/core/gl/GL_ATI_separate_stencil | 1 + auto/core/gl/GL_ATI_shader_texture_lod | 1 + auto/core/gl/GL_ATI_texture_compression_3dc | 1 + auto/core/gl/GL_ATI_vertex_streams | 1 + auto/core/gl/GL_EXT_Cg_shader | 1 + auto/core/gl/GL_EXT_bindable_uniform | 1 + auto/core/gl/GL_EXT_debug_marker | 1 + auto/core/gl/GL_EXT_depth_bounds_test | 1 + auto/core/gl/GL_EXT_draw_instanced | 1 + auto/core/gl/GL_EXT_draw_range_elements | 1 + auto/core/gl/GL_EXT_fog_coord | 1 + auto/core/gl/GL_EXT_framebuffer_sRGB | 1 + auto/core/gl/GL_EXT_geometry_shader4 | 1 + auto/core/gl/GL_EXT_gpu_program_parameters | 1 + auto/core/gl/GL_EXT_gpu_shader4 | 1 + auto/core/gl/GL_EXT_packed_float | 1 + auto/core/gl/GL_EXT_pixel_buffer_object | 1 + auto/core/gl/GL_EXT_secondary_color | 1 + auto/core/gl/GL_EXT_texture_array | 1 + auto/core/gl/GL_EXT_texture_buffer_object | 1 + auto/core/gl/GL_EXT_texture_compression_latc | 1 + auto/core/gl/GL_EXT_texture_compression_rgtc | 1 + auto/core/gl/GL_EXT_texture_cube_map | 1 + auto/core/gl/GL_EXT_texture_edge_clamp | 1 + auto/core/gl/GL_EXT_texture_integer | 1 + auto/core/gl/GL_EXT_texture_rectangle | 1 + auto/core/gl/GL_EXT_texture_shared_exponent | 1 + auto/core/gl/GL_EXT_timer_query | 1 + auto/core/gl/GL_EXT_vertex_shader | 1 + auto/core/gl/GL_KTX_buffer_region | 1 + auto/core/gl/GL_NVX_gpu_memory_info | 1 + auto/core/gl/GL_NV_depth_buffer_float | 1 + auto/core/gl/GL_NV_depth_range_unclamped | 1 + auto/core/gl/GL_NV_fragment_program2 | 1 + auto/core/gl/GL_NV_fragment_program4 | 1 + auto/core/gl/GL_NV_fragment_program_option | 1 + .../gl/GL_NV_framebuffer_multisample_coverage | 1 + auto/core/gl/GL_NV_geometry_program4 | 1 + auto/core/gl/GL_NV_geometry_shader4 | 1 + auto/core/gl/GL_NV_gpu_program4 | 1 + auto/core/gl/GL_NV_gpu_program5 | 1 + auto/core/gl/GL_NV_parameter_buffer_object | 1 + auto/core/gl/GL_NV_present_video | 1 + auto/core/gl/GL_NV_tessellation_program5 | 1 + auto/core/gl/GL_NV_transform_feedback | 1 + auto/core/gl/GL_NV_vdpau_interop | 1 + auto/core/gl/GL_NV_vertex_program2_option | 1 + auto/core/gl/GL_NV_vertex_program3 | 1 + auto/core/gl/GL_NV_vertex_program4 | 1 + auto/core/gl/GL_SGIX_shadow | 1 + auto/core/gl/GL_SUN_read_video_pixels | 1 + auto/core/gl/GL_VERSION_1_2 | 1 + auto/core/gl/GL_VERSION_1_2_1 | 1 + auto/core/gl/GL_VERSION_1_3 | 1 + auto/core/gl/GL_VERSION_1_4 | 1 + auto/core/gl/GL_VERSION_1_5 | 1 + auto/core/gl/GL_VERSION_2_0 | 1 + auto/core/gl/GL_VERSION_2_1 | 1 + auto/core/gl/GL_VERSION_3_0 | 1 + auto/core/gl/GL_VERSION_3_1 | 1 + auto/core/gl/GL_VERSION_3_2 | 1 + auto/core/gl/GL_VERSION_3_3 | 1 + auto/core/gl/GL_VERSION_4_0 | 1 + auto/core/gl/GL_VERSION_4_1 | 1 + auto/core/gl/GL_VERSION_4_2 | 1 + auto/core/gl/GL_VERSION_4_3 | 1 + auto/core/gl/GL_VERSION_4_4 | 1 + auto/core/gl/GL_VERSION_4_5 | 1 + auto/core/gl/GL_WIN_swap_hint | 1 + auto/core/gl/WGL_ARB_create_context | 1 + auto/core/gl/WGL_ATI_render_texture_rectangle | 1 + .../gl/WGL_EXT_create_context_es2_profile | 1 + .../core/gl/WGL_EXT_create_context_es_profile | 1 + auto/core/gl/WGL_EXT_framebuffer_sRGB | 1 + .../core/gl/WGL_EXT_pixel_format_packed_float | 1 + auto/core/gl/WGL_NV_gpu_affinity | 1 + auto/core/gl/WGL_NV_vertex_array_range | 1 + 134 files changed, 175 insertions(+), 31 deletions(-) diff --git a/auto/bin/filter_gl_ext.sh b/auto/bin/filter_gl_ext.sh index 72fde80..502b3da 100755 --- a/auto/bin/filter_gl_ext.sh +++ b/auto/bin/filter_gl_ext.sh @@ -18,11 +18,13 @@ set -e mv tmp $1/GL_NV_texture_compression_vtc # remove duplicates from GL_ARB_vertex_program and GL_ARB_fragment_program - grep -v -F -f $1/GL_ARB_vertex_program $1/GL_ARB_fragment_program > tmp + tail -n +5 $1/GL_ARB_vertex_program > patterns + grep -v -F -f patterns $1/GL_ARB_fragment_program > tmp mv tmp $1/GL_ARB_fragment_program # remove duplicates from GLX_EXT_visual_rating and GLX_EXT_visual_info - grep -v -F -f $1/GLX_EXT_visual_info $1/GLX_EXT_visual_rating > tmp + tail -n +5 $1/GLX_EXT_visual_info > patterns + grep -v -F -f patterns $1/GLX_EXT_visual_rating > tmp mv tmp $1/GLX_EXT_visual_rating # GL_EXT_draw_buffers2 and GL_EXT_transform_feedback both define glGetBooleanIndexedvEXT but with different parameter names @@ -58,7 +60,8 @@ EOT EOT # remove duplicates from GL_NV_present_video and GLX_NV_present_video - grep -v -F -f $1/GLX_NV_present_video $1/GL_NV_present_video > tmp + tail -n +5 $1/GLX_NV_present_video > patterns + grep -v -F -f patterns $1/GL_NV_present_video > tmp mv tmp $1/GL_NV_present_video # fix WGL_NV_present_video @@ -180,20 +183,23 @@ EOT # remove triplicates in GL_ARB_shader_objects, GL_ARB_fragment_shader, # and GL_ARB_vertex_shader - grep -v -F -f $1/GL_ARB_shader_objects $1/GL_ARB_fragment_shader > tmp + tail -n +5 $1/GL_ARB_shader_objects > patterns + grep -v -F -f patterns $1/GL_ARB_fragment_shader > tmp mv tmp $1/GL_ARB_fragment_shader - grep -v -F -f $1/GL_ARB_shader_objects $1/GL_ARB_vertex_shader > tmp + grep -v -F -f patterns $1/GL_ARB_vertex_shader > tmp mv tmp $1/GL_ARB_vertex_shader # remove duplicates in GL_ARB_vertex_program and GL_ARB_vertex_shader - grep -v -F -f $1/GL_ARB_vertex_program $1/GL_ARB_vertex_shader > tmp + tail -n +5 $1/GL_ARB_vertex_program > patterns + grep -v -F -f patterns $1/GL_ARB_vertex_shader > tmp mv tmp $1/GL_ARB_vertex_shader # remove triplicates in GL_ARB_fragment_program, GL_ARB_fragment_shader, # and GL_ARB_vertex_shader - grep -v -F -f $1/GL_ARB_fragment_program $1/GL_ARB_fragment_shader > tmp + tail -n +5 $1/GL_ARB_fragment_program > patterns + grep -v -F -f patterns $1/GL_ARB_fragment_shader > tmp mv tmp $1/GL_ARB_fragment_shader - grep -v -F -f $1/GL_ARB_fragment_program $1/GL_ARB_vertex_shader > tmp + grep -v -F -f patterns $1/GL_ARB_vertex_shader > tmp mv tmp $1/GL_ARB_vertex_shader # remove duplicates in GL_EXT_direct_state_access @@ -246,7 +252,7 @@ EOT EOT # Filter out GL_NV_gpu_program_fp64 enums and functions - head -n3 $1/GL_NV_gpu_program_fp64 > tmp + head -n4 $1/GL_NV_gpu_program_fp64 > tmp mv tmp $1/GL_NV_gpu_program_fp64 # Filter glGetUniformui64vNV from GL_NV_shader_buffer_load @@ -258,7 +264,7 @@ EOT mv tmp $1/GLX_ARB_create_context # Filter only profile related enumerations for GLX_ARB_create_context_profile - head -n3 $1/GLX_ARB_create_context_profile > tmp + head -n4 $1/GLX_ARB_create_context_profile > tmp grep "_PROFILE_" $1/GLX_ARB_create_context_profile >> tmp mv tmp $1/GLX_ARB_create_context_profile @@ -267,7 +273,7 @@ EOT mv tmp $1/WGL_ARB_create_context # Filter only profile related enumerations for WGL_ARB_create_context_profile - head -n3 $1/WGL_ARB_create_context_profile > tmp + head -n4 $1/WGL_ARB_create_context_profile > tmp grep "_PROFILE_" $1/WGL_ARB_create_context_profile >> tmp mv tmp $1/WGL_ARB_create_context_profile @@ -471,11 +477,11 @@ EOT for i in $1/GL_ANGLE_*; do perl -e 's#http://www.opengl.org/registry/specs/ANGLE/.*#https://code.google.com/p/angleproject/source/browse/\#git%2Fextensions#g' -pi $i; done # Filter out GL_NV_blend_equation_advanced_coherent enums and functions - head -n3 $1/GL_NV_blend_equation_advanced_coherent > tmp + head -n4 $1/GL_NV_blend_equation_advanced_coherent > tmp mv tmp $1/GL_NV_blend_equation_advanced_coherent # Filter out GL_AMD_gpu_shader_int64 enums and functions - head -n3 $1/GL_AMD_gpu_shader_int64 > tmp + head -n4 $1/GL_AMD_gpu_shader_int64 > tmp mv tmp $1/GL_AMD_gpu_shader_int64 # Filter out GL_NO_ERROR enum from GL_KHR_robustness diff --git a/auto/bin/make.pl b/auto/bin/make.pl index 1bd5d40..6aa1e83 100755 --- a/auto/bin/make.pl +++ b/auto/bin/make.pl @@ -69,6 +69,7 @@ sub parse_ext($) my $filename = shift; my %functions = (); my %tokens = (); + my @reuse = (); # Extensions to reuse my @types = (); my @exacts = (); my $extname = ""; # Full extension name GL_FOO_extension @@ -77,9 +78,10 @@ sub parse_ext($) open EXT, "<$filename" or return; - # As of GLEW 1.5.3 the first three lines _must_ be + # As of GLEW 1.14.0 the first four lines _must_ be # the extension name, the URL and the GL extension - # string (which might be different to the name) + # string (which might be different to the name), + # and the reused extensions # # For example GL_NV_geometry_program4 is available # iff GL_NV_gpu_program4 appears in the extension @@ -94,6 +96,7 @@ sub parse_ext($) $extname = readline(*EXT); $exturl = readline(*EXT); $extstring = readline(*EXT); + @reuse = split(" ", readline(*EXT)); chomp($extname); chomp($exturl); @@ -132,7 +135,7 @@ sub parse_ext($) close EXT; - return ($extname, $exturl, $extstring, \@types, \%tokens, \%functions, \@exacts); + return ($extname, $exturl, $extstring, \@reuse, \@types, \%tokens, \%functions, \@exacts); } sub output_tokens($$) @@ -207,3 +210,14 @@ sub output_exacts($$) } } +sub output_reuse($$) +{ + my ($tbl, $fnc) = @_; + if (scalar @{$tbl}) + { + local $, = "\n"; + print "\n"; + print map { &{$fnc}($_) } sort @{$tbl}; + print "\n"; + } +} diff --git a/auto/bin/make_def_fun.pl b/auto/bin/make_def_fun.pl index 40e67d5..2ed8b4e 100755 --- a/auto/bin/make_def_fun.pl +++ b/auto/bin/make_def_fun.pl @@ -29,7 +29,7 @@ if (@ARGV) foreach my $ext (sort @extlist) { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = parse_ext($ext); + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); output_decls($functions, \&make_pfn_decl); } } diff --git a/auto/bin/make_def_var.pl b/auto/bin/make_def_var.pl index 2b2a1d9..7c8bc5f 100755 --- a/auto/bin/make_def_var.pl +++ b/auto/bin/make_def_var.pl @@ -23,7 +23,7 @@ if (@ARGV) foreach my $ext (sort @extlist) { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = parse_ext($ext); + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); my $extvar = $extname; $extvar =~ s/GL(X*)_/GL$1EW_/; print "GLboolean " . prefix_varname($extvar) . " = GL_FALSE;\n"; diff --git a/auto/bin/make_enable_index.pl b/auto/bin/make_enable_index.pl index 9c9d375..226612d 100755 --- a/auto/bin/make_enable_index.pl +++ b/auto/bin/make_enable_index.pl @@ -30,7 +30,7 @@ if (@ARGV) foreach my $ext (sort @extlist) { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); my $extvar = $extname; diff --git a/auto/bin/make_header.pl b/auto/bin/make_header.pl index 934ef77..5c7f94a 100755 --- a/auto/bin/make_header.pl +++ b/auto/bin/make_header.pl @@ -52,7 +52,7 @@ if (@ARGV) foreach my $ext (sort @extlist) { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = parse_ext($ext); + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); make_separator($extname); print "#ifndef $extname\n#define $extname 1\n"; diff --git a/auto/bin/make_html.pl b/auto/bin/make_html.pl index ee58196..486e7fd 100755 --- a/auto/bin/make_html.pl +++ b/auto/bin/make_html.pl @@ -26,7 +26,7 @@ if (@ARGV) print "\n"; foreach my $ext (sort @extlist) { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = parse_ext($ext); + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); $cur_group = $extname; $cur_group =~ s/^(?:W?)GL(?:X?)_([A-Z0-9]+?)_.*$/$1/; $extname =~ s/^(?:W?)GL(?:X?)_(.*)$/$1/; diff --git a/auto/bin/make_index.pl b/auto/bin/make_index.pl index f252cd4..bfaf300 100755 --- a/auto/bin/make_index.pl +++ b/auto/bin/make_index.pl @@ -28,7 +28,7 @@ if (@ARGV) foreach my $ext (sort @extlist) { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); print "#ifdef $extname\n"; diff --git a/auto/bin/make_info.pl b/auto/bin/make_info.pl index 5d0c7f6..78295fc 100755 --- a/auto/bin/make_info.pl +++ b/auto/bin/make_info.pl @@ -32,7 +32,7 @@ if (@ARGV) foreach my $ext (sort @extlist) { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = parse_ext($ext); + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); my $extvar = $extname; $extvar =~ s/GL(X*)_/GL$1EW_/; my $extpre = $extname; diff --git a/auto/bin/make_info_list.pl b/auto/bin/make_info_list.pl index a55106d..5bc65fa 100755 --- a/auto/bin/make_info_list.pl +++ b/auto/bin/make_info_list.pl @@ -38,7 +38,7 @@ if (@ARGV) foreach my $ext (sort @extlist) { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = parse_ext($ext); + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); print "#ifdef $extname\n"; print " _glewInfo_$extname();\n"; diff --git a/auto/bin/make_init.pl b/auto/bin/make_init.pl index 5e6200a..dc9dca1 100755 --- a/auto/bin/make_init.pl +++ b/auto/bin/make_init.pl @@ -21,6 +21,11 @@ sub make_pfn_def_init($%) return " r = ((" . $_[0] . " = (PFN" . (uc $_[0]) . "PROC)glewGetProcAddress((const GLubyte*)\"" . $_[0] . "\")) == NULL) || r;"; } +sub make_reuse_call($%) +{ + return " r = _glewInit_" . $_[0] . "(GLEW_CONTEXT_ARG_VAR_INIT) || r;"; +} + #------------------------------------------------------------------------------- my @extlist = (); @@ -34,18 +39,19 @@ if (@ARGV) foreach my $ext (sort @extlist) { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); #make_separator($extname); my $extvar = $extname; my $extvardef = $extname; $extvar =~ s/GL(X*)_/GL$1EW_/; - if (keys %$functions) + if (keys %$functions or keys @$reuse) { print "#ifdef $extname\n\n"; print "static GLboolean _glewInit_$extname (" . $type . "EW_CONTEXT_ARG_DEF_INIT)\n{\n GLboolean r = GL_FALSE;\n"; + output_reuse($reuse, \&make_reuse_call); output_decls($functions, \&make_pfn_def_init); print "\n return r;\n}\n\n"; print "#endif /* $extname */\n\n"; diff --git a/auto/bin/make_initd.pl b/auto/bin/make_initd.pl index 62343ea..b7b552a 100755 --- a/auto/bin/make_initd.pl +++ b/auto/bin/make_initd.pl @@ -30,7 +30,7 @@ if (@ARGV) foreach my $ext (sort @extlist) { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); #print "#ifdef $extname\n\n"; diff --git a/auto/bin/make_list.pl b/auto/bin/make_list.pl index 310ed3a..e1accb9 100755 --- a/auto/bin/make_list.pl +++ b/auto/bin/make_list.pl @@ -32,7 +32,7 @@ if (@ARGV) foreach my $ext (sort @extlist) { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = parse_ext($ext); + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); my $extvar = $extname; $extvar =~ s/GL(X*)_/GL$1EW_/; diff --git a/auto/bin/make_str.pl b/auto/bin/make_str.pl index ac4a366..5b83ef8 100755 --- a/auto/bin/make_str.pl +++ b/auto/bin/make_str.pl @@ -22,7 +22,7 @@ if (@ARGV) my $curexttype = ""; foreach my $ext (sort @extlist) { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = parse_ext($ext); + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); my $exttype = $extname; $exttype =~ s/(W*?)GL(X*?)_(.*?_)(.*)/$3/; my $extrem = $extname; diff --git a/auto/bin/make_struct_fun.pl b/auto/bin/make_struct_fun.pl index c885960..3eedafe 100755 --- a/auto/bin/make_struct_fun.pl +++ b/auto/bin/make_struct_fun.pl @@ -30,7 +30,7 @@ if (@ARGV) foreach my $ext (sort @extlist) { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = parse_ext($ext); + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); output_decls($functions, \&make_pfn_decl); } } diff --git a/auto/bin/make_struct_var.pl b/auto/bin/make_struct_var.pl index c7ba2f4..c88b559 100755 --- a/auto/bin/make_struct_var.pl +++ b/auto/bin/make_struct_var.pl @@ -23,7 +23,7 @@ if (@ARGV) foreach my $ext (sort @extlist) { - my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) = parse_ext($ext); + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); my $extvar = $extname; $extvar =~ s/GL(X*)_/GL$1EW_/; print $export . " GLboolean " . prefix_varname($extvar) . ";\n"; diff --git a/auto/bin/parse_spec.pl b/auto/bin/parse_spec.pl index 00fdde9..efbf1bf 100755 --- a/auto/bin/parse_spec.pl +++ b/auto/bin/parse_spec.pl @@ -333,6 +333,7 @@ foreach my $spec (sort @speclist) $specname =~ s/registry\/gl\/specs\///; print EXT $reg_http . $specname . "\n"; # Extension info URL print EXT $ext . "\n"; # Extension string + print EXT "\n"; # Resuses nothing by default my $prefix = $ext; $prefix =~ s/^(.+?)(_.+)$/$1/; diff --git a/auto/core/gl/GLX_AMD_gpu_association b/auto/core/gl/GLX_AMD_gpu_association index 002164e..72264a9 100644 --- a/auto/core/gl/GLX_AMD_gpu_association +++ b/auto/core/gl/GLX_AMD_gpu_association @@ -1,6 +1,7 @@ GLX_AMD_gpu_association http://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt GLX_AMD_gpu_association + GLX_GPU_VENDOR_AMD 0x1F00 GLX_GPU_RENDERER_STRING_AMD 0x1F01 GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 diff --git a/auto/core/gl/GLX_ARB_get_proc_address b/auto/core/gl/GLX_ARB_get_proc_address index 5c066d7..e2cb2c5 100644 --- a/auto/core/gl/GLX_ARB_get_proc_address +++ b/auto/core/gl/GLX_ARB_get_proc_address @@ -1,4 +1,5 @@ GLX_ARB_get_proc_address http://oss.sgi.com/projects/ogl-sample/registry/ARB/get_proc_address.txt GLX_ARB_get_proc_address + extern void ( * glXGetProcAddressARB (const GLubyte *procName)) (void); diff --git a/auto/core/gl/GLX_ATI_pixel_format_float b/auto/core/gl/GLX_ATI_pixel_format_float index 854ca71..5336da4 100644 --- a/auto/core/gl/GLX_ATI_pixel_format_float +++ b/auto/core/gl/GLX_ATI_pixel_format_float @@ -1,4 +1,5 @@ GLX_ATI_pixel_format_float GLX_ATI_pixel_format_float + GLX_RGBA_FLOAT_ATI_BIT 0x00000100 diff --git a/auto/core/gl/GLX_ATI_render_texture b/auto/core/gl/GLX_ATI_render_texture index 254eb9f..6b35814 100644 --- a/auto/core/gl/GLX_ATI_render_texture +++ b/auto/core/gl/GLX_ATI_render_texture @@ -1,6 +1,7 @@ GLX_ATI_render_texture GLX_ATI_render_texture + GLX_BIND_TO_TEXTURE_RGB_ATI 0x9800 GLX_BIND_TO_TEXTURE_RGBA_ATI 0x9801 GLX_TEXTURE_FORMAT_ATI 0x9802 diff --git a/auto/core/gl/GLX_EXT_create_context_es2_profile b/auto/core/gl/GLX_EXT_create_context_es2_profile index 3093baa..aea21df 100644 --- a/auto/core/gl/GLX_EXT_create_context_es2_profile +++ b/auto/core/gl/GLX_EXT_create_context_es2_profile @@ -1,4 +1,5 @@ GLX_EXT_create_context_es2_profile http://www.opengl.org/registry/specs/EXT/glx_create_context_es2_profile.txt GLX_EXT_create_context_es2_profile + GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 diff --git a/auto/core/gl/GLX_EXT_create_context_es_profile b/auto/core/gl/GLX_EXT_create_context_es_profile index 845f65e..ea13e6e 100644 --- a/auto/core/gl/GLX_EXT_create_context_es_profile +++ b/auto/core/gl/GLX_EXT_create_context_es_profile @@ -1,4 +1,5 @@ GLX_EXT_create_context_es_profile http://www.opengl.org/registry/specs/EXT/glx_create_context_es_profile.txt GLX_EXT_create_context_es_profile + GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 diff --git a/auto/core/gl/GLX_EXT_fbconfig_packed_float b/auto/core/gl/GLX_EXT_fbconfig_packed_float index 7c7822d..ffd47e3 100644 --- a/auto/core/gl/GLX_EXT_fbconfig_packed_float +++ b/auto/core/gl/GLX_EXT_fbconfig_packed_float @@ -1,5 +1,6 @@ GLX_EXT_fbconfig_packed_float http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt GLX_EXT_fbconfig_packed_float + GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 diff --git a/auto/core/gl/GLX_EXT_framebuffer_sRGB b/auto/core/gl/GLX_EXT_framebuffer_sRGB index f51c484..83743bb 100644 --- a/auto/core/gl/GLX_EXT_framebuffer_sRGB +++ b/auto/core/gl/GLX_EXT_framebuffer_sRGB @@ -1,4 +1,5 @@ GLX_EXT_framebuffer_sRGB http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt GLX_EXT_framebuffer_sRGB + GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 diff --git a/auto/core/gl/GLX_MESA_swap_control b/auto/core/gl/GLX_MESA_swap_control index 4416519..eb6e933 100644 --- a/auto/core/gl/GLX_MESA_swap_control +++ b/auto/core/gl/GLX_MESA_swap_control @@ -1,5 +1,6 @@ GLX_MESA_swap_control http://cgit.freedesktop.org/mesa/mesa/plain/docs/MESA_swap_control.spec GLX_MESA_swap_control + int glXGetSwapIntervalMESA (void) int glXSwapIntervalMESA (unsigned int interval) diff --git a/auto/core/gl/GLX_NV_float_buffer b/auto/core/gl/GLX_NV_float_buffer index cc9185e..19b71e2 100644 --- a/auto/core/gl/GLX_NV_float_buffer +++ b/auto/core/gl/GLX_NV_float_buffer @@ -1,4 +1,5 @@ GLX_NV_float_buffer http://cvs1.nvidia.com/inc/GL/glxtokens.h GLX_NV_float_buffer + GLX_FLOAT_COMPONENTS_NV 0x20B0 diff --git a/auto/core/gl/GLX_NV_vertex_array_range b/auto/core/gl/GLX_NV_vertex_array_range index 11afe17..9250ec2 100644 --- a/auto/core/gl/GLX_NV_vertex_array_range +++ b/auto/core/gl/GLX_NV_vertex_array_range @@ -1,5 +1,6 @@ GLX_NV_vertex_array_range http://oss.sgi.com/projects/ogl-sample/registry/NV/vertex_array_range.txt GLX_NV_vertex_array_range + void * glXAllocateMemoryNV (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority) void glXFreeMemoryNV (void *pointer) diff --git a/auto/core/gl/GLX_SGIS_shared_multisample b/auto/core/gl/GLX_SGIS_shared_multisample index 274e90f..a2f4e12 100644 --- a/auto/core/gl/GLX_SGIS_shared_multisample +++ b/auto/core/gl/GLX_SGIS_shared_multisample @@ -1,5 +1,6 @@ GLX_SGIS_shared_multisample GLX_SGIS_shared_multisample + GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 diff --git a/auto/core/gl/GLX_SGIX_hyperpipe b/auto/core/gl/GLX_SGIX_hyperpipe index 79ec302..80fd7d6 100644 --- a/auto/core/gl/GLX_SGIX_hyperpipe +++ b/auto/core/gl/GLX_SGIX_hyperpipe @@ -1,6 +1,7 @@ GLX_SGIX_hyperpipe http://oss.sgi.com/projects/ogl-sample/registry/SGIX/hyperpipe_group.txt GLX_SGIX_hyperpipe + GLX_HYPERPIPE_ID_SGIX 0x8030 GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 diff --git a/auto/core/gl/GLX_SGIX_swap_barrier b/auto/core/gl/GLX_SGIX_swap_barrier index 57dd60d..95a65c1 100644 --- a/auto/core/gl/GLX_SGIX_swap_barrier +++ b/auto/core/gl/GLX_SGIX_swap_barrier @@ -1,5 +1,6 @@ GLX_SGIX_swap_barrier http://oss.sgi.com/projects/ogl-sample/registry/SGIX/swap_barrier.txt GLX_SGIX_swap_barrier + void glXBindSwapBarrierSGIX (Display *dpy, GLXDrawable drawable, int barrier) Bool glXQueryMaxSwapBarriersSGIX (Display *dpy, int screen, int *max) diff --git a/auto/core/gl/GLX_SGIX_swap_group b/auto/core/gl/GLX_SGIX_swap_group index 3530604..1eb1cff 100644 --- a/auto/core/gl/GLX_SGIX_swap_group +++ b/auto/core/gl/GLX_SGIX_swap_group @@ -1,4 +1,5 @@ GLX_SGIX_swap_group http://oss.sgi.com/projects/ogl-sample/registry/SGIX/swap_group.txt GLX_SGIX_swap_group + void glXJoinSwapGroupSGIX (Display *dpy, GLXDrawable drawable, GLXDrawable member) diff --git a/auto/core/gl/GLX_SGI_video_sync b/auto/core/gl/GLX_SGI_video_sync index dcdb968..74f1356 100644 --- a/auto/core/gl/GLX_SGI_video_sync +++ b/auto/core/gl/GLX_SGI_video_sync @@ -1,5 +1,6 @@ GLX_SGI_video_sync http://www.opengl.org/registry/specs/SGI/video_sync.txt GLX_SGI_video_sync + int glXGetVideoSyncSGI (unsigned int* count) int glXWaitVideoSyncSGI (int divisor, int remainder, unsigned int* count) diff --git a/auto/core/gl/GLX_SUN_video_resize b/auto/core/gl/GLX_SUN_video_resize index 0a0cefe..3a5a176 100644 --- a/auto/core/gl/GLX_SUN_video_resize +++ b/auto/core/gl/GLX_SUN_video_resize @@ -1,6 +1,7 @@ GLX_SUN_video_resize http://wwws.sun.com/software/graphics/opengl/extensions/glx_sun_video_resize.txt GLX_SUN_video_resize + GL_VIDEO_RESIZE_COMPENSATION_SUN 0x85CD GLX_VIDEO_RESIZE_SUN 0x8171 int glXVideoResizeSUN (Display* display, GLXDrawable window, float factor) diff --git a/auto/core/gl/GLX_VERSION_1_2 b/auto/core/gl/GLX_VERSION_1_2 index 39d7a09..8a12e84 100644 --- a/auto/core/gl/GLX_VERSION_1_2 +++ b/auto/core/gl/GLX_VERSION_1_2 @@ -1,4 +1,5 @@ GLX_VERSION_1_2 http://www.opengl.org/documentation/specs/glx/glx1.2.ps GLX_VERSION_1_2 + Display* glXGetCurrentDisplay (void) diff --git a/auto/core/gl/GLX_VERSION_1_3 b/auto/core/gl/GLX_VERSION_1_3 index 46eedb9..1cf24be 100644 --- a/auto/core/gl/GLX_VERSION_1_3 +++ b/auto/core/gl/GLX_VERSION_1_3 @@ -1,6 +1,7 @@ GLX_VERSION_1_3 http://www.opengl.org/documentation/specs/glx/glx1.3.pdf GLX_VERSION_1_3 + GLX_WINDOW_BIT 0x00000001 GLX_PIXMAP_BIT 0x00000002 GLX_PBUFFER_BIT 0x00000004 diff --git a/auto/core/gl/GLX_VERSION_1_4 b/auto/core/gl/GLX_VERSION_1_4 index 1382621..9b9de3e 100644 --- a/auto/core/gl/GLX_VERSION_1_4 +++ b/auto/core/gl/GLX_VERSION_1_4 @@ -1,6 +1,7 @@ GLX_VERSION_1_4 http://www.opengl.org/documentation/specs/glx/glx1.4.pdf GLX_VERSION_1_4 + GLX_SAMPLE_BUFFERS 100000 GLX_SAMPLES 100001 extern void ( * glXGetProcAddress (const GLubyte *procName)) (void); diff --git a/auto/core/gl/GL_APPLE_float_pixels b/auto/core/gl/GL_APPLE_float_pixels index 2bf7458..3eacd42 100644 --- a/auto/core/gl/GL_APPLE_float_pixels +++ b/auto/core/gl/GL_APPLE_float_pixels @@ -1,6 +1,7 @@ GL_APPLE_float_pixels http://www.opengl.org/registry/specs/APPLE/float_pixels.txt GL_APPLE_float_pixels + GL_HALF_APPLE 0x140B GL_COLOR_FLOAT_APPLE 0x8A0F GL_RGBA_FLOAT32_APPLE 0x8814 diff --git a/auto/core/gl/GL_APPLE_pixel_buffer b/auto/core/gl/GL_APPLE_pixel_buffer index 7449f29..1a8ad97 100644 --- a/auto/core/gl/GL_APPLE_pixel_buffer +++ b/auto/core/gl/GL_APPLE_pixel_buffer @@ -1,4 +1,5 @@ GL_APPLE_pixel_buffer GL_APPLE_pixel_buffer + GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE 0x8A10 diff --git a/auto/core/gl/GL_APPLE_texture_range b/auto/core/gl/GL_APPLE_texture_range index 9e3a678..e2bf85c 100644 --- a/auto/core/gl/GL_APPLE_texture_range +++ b/auto/core/gl/GL_APPLE_texture_range @@ -1,6 +1,7 @@ GL_APPLE_texture_range http://www.opengl.org/registry/specs/APPLE/texture_range.txt GL_APPLE_texture_range + GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC GL_STORAGE_PRIVATE_APPLE 0x85BD GL_STORAGE_CACHED_APPLE 0x85BE diff --git a/auto/core/gl/GL_ARB_draw_instanced b/auto/core/gl/GL_ARB_draw_instanced index 4140bea..a730952 100644 --- a/auto/core/gl/GL_ARB_draw_instanced +++ b/auto/core/gl/GL_ARB_draw_instanced @@ -1,3 +1,4 @@ GL_ARB_draw_instanced http://www.opengl.org/registry/specs/ARB/draw_instanced.txt GL_ARB_draw_instanced + diff --git a/auto/core/gl/GL_ARB_imaging b/auto/core/gl/GL_ARB_imaging index c23a566..727adf0 100644 --- a/auto/core/gl/GL_ARB_imaging +++ b/auto/core/gl/GL_ARB_imaging @@ -1,6 +1,7 @@ GL_ARB_imaging GL_ARB_imaging + GL_CONSTANT_COLOR 0x8001 GL_ONE_MINUS_CONSTANT_COLOR 0x8002 GL_CONSTANT_ALPHA 0x8003 diff --git a/auto/core/gl/GL_ARB_instanced_arrays b/auto/core/gl/GL_ARB_instanced_arrays index b1c8873..1487d39 100644 --- a/auto/core/gl/GL_ARB_instanced_arrays +++ b/auto/core/gl/GL_ARB_instanced_arrays @@ -1,6 +1,7 @@ GL_ARB_instanced_arrays http://www.opengl.org/registry/specs/ARB/instanced_arrays.txt GL_ARB_instanced_arrays + GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE void glVertexAttribDivisorARB (GLuint index, GLuint divisor) void glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount) diff --git a/auto/core/gl/GL_ARB_internalformat_query2 b/auto/core/gl/GL_ARB_internalformat_query2 index 1210966..7af5091 100644 --- a/auto/core/gl/GL_ARB_internalformat_query2 +++ b/auto/core/gl/GL_ARB_internalformat_query2 @@ -1,6 +1,7 @@ GL_ARB_internalformat_query2 http://www.opengl.org/registry/specs/ARB/internalformat_query2.txt GL_ARB_internalformat_query2 + GL_INTERNALFORMAT_SUPPORTED 0x826F GL_INTERNALFORMAT_PREFERRED 0x8270 GL_INTERNALFORMAT_RED_SIZE 0x8271 diff --git a/auto/core/gl/GL_ARB_matrix_palette b/auto/core/gl/GL_ARB_matrix_palette index 2e22824..98b0d0b 100644 --- a/auto/core/gl/GL_ARB_matrix_palette +++ b/auto/core/gl/GL_ARB_matrix_palette @@ -1,6 +1,7 @@ GL_ARB_matrix_palette http://oss.sgi.com/projects/ogl-sample/registry/ARB/matrix_palette.txt GL_ARB_matrix_palette + GL_MATRIX_PALETTE_ARB 0x8840 GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 GL_MAX_PALETTE_MATRICES_ARB 0x8842 diff --git a/auto/core/gl/GL_ARB_multitexture b/auto/core/gl/GL_ARB_multitexture index ee80791..46a9546 100644 --- a/auto/core/gl/GL_ARB_multitexture +++ b/auto/core/gl/GL_ARB_multitexture @@ -1,6 +1,7 @@ GL_ARB_multitexture http://oss.sgi.com/projects/ogl-sample/registry/ARB/multitexture.txt GL_ARB_multitexture + GL_TEXTURE0_ARB 0x84C0 GL_TEXTURE1_ARB 0x84C1 GL_TEXTURE2_ARB 0x84C2 diff --git a/auto/core/gl/GL_ARB_robustness b/auto/core/gl/GL_ARB_robustness index 3e4f976..82d48d8 100644 --- a/auto/core/gl/GL_ARB_robustness +++ b/auto/core/gl/GL_ARB_robustness @@ -1,6 +1,7 @@ GL_ARB_robustness http://www.opengl.org/registry/specs/ARB/robustness.txt GL_ARB_robustness + GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 GL_GUILTY_CONTEXT_RESET_ARB 0x8253 diff --git a/auto/core/gl/GL_ARB_separate_shader_objects b/auto/core/gl/GL_ARB_separate_shader_objects index 57ec75a..3d3d869 100644 --- a/auto/core/gl/GL_ARB_separate_shader_objects +++ b/auto/core/gl/GL_ARB_separate_shader_objects @@ -1,6 +1,7 @@ GL_ARB_separate_shader_objects http://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt GL_ARB_separate_shader_objects + GL_VERTEX_SHADER_BIT 0x00000001 GL_FRAGMENT_SHADER_BIT 0x00000002 GL_GEOMETRY_SHADER_BIT 0x00000004 diff --git a/auto/core/gl/GL_ARB_vertex_attrib_64bit b/auto/core/gl/GL_ARB_vertex_attrib_64bit index a30aa06..68117c5 100644 --- a/auto/core/gl/GL_ARB_vertex_attrib_64bit +++ b/auto/core/gl/GL_ARB_vertex_attrib_64bit @@ -1,6 +1,7 @@ GL_ARB_vertex_attrib_64bit http://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt GL_ARB_vertex_attrib_64bit + void glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble* params) void glVertexAttribL1d (GLuint index, GLdouble x) void glVertexAttribL1dv (GLuint index, const GLdouble* v) diff --git a/auto/core/gl/GL_ARB_vertex_blend b/auto/core/gl/GL_ARB_vertex_blend index 7beb75a..f4b3f58 100644 --- a/auto/core/gl/GL_ARB_vertex_blend +++ b/auto/core/gl/GL_ARB_vertex_blend @@ -1,6 +1,7 @@ GL_ARB_vertex_blend http://oss.sgi.com/projects/ogl-sample/registry/ARB/vertex_blend.txt GL_ARB_vertex_blend + GL_MAX_VERTEX_UNITS_ARB 0x86A4 GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 GL_WEIGHT_SUM_UNITY_ARB 0x86A6 diff --git a/auto/core/gl/GL_ATIX_point_sprites b/auto/core/gl/GL_ATIX_point_sprites index 0f4f574..d2434e7 100644 --- a/auto/core/gl/GL_ATIX_point_sprites +++ b/auto/core/gl/GL_ATIX_point_sprites @@ -1,6 +1,7 @@ GL_ATIX_point_sprites http://www.ati.com/developer/atiopengl.pdf GL_ATIX_point_sprites + GL_TEXTURE_POINT_MODE_ATIX 0x60B0 GL_TEXTURE_POINT_ONE_COORD_ATIX 0x60B1 GL_TEXTURE_POINT_SPRITE_ATIX 0x60B2 diff --git a/auto/core/gl/GL_ATIX_texture_env_combine3 b/auto/core/gl/GL_ATIX_texture_env_combine3 index 537426b..77f425d 100644 --- a/auto/core/gl/GL_ATIX_texture_env_combine3 +++ b/auto/core/gl/GL_ATIX_texture_env_combine3 @@ -1,6 +1,7 @@ GL_ATIX_texture_env_combine3 http://www.ati.com/developer/atiopengl.pdf GL_ATIX_texture_env_combine3 + GL_MODULATE_ADD_ATIX 0x8744 GL_MODULATE_SIGNED_ADD_ATIX 0x8745 GL_MODULATE_SUBTRACT_ATIX 0x8746 diff --git a/auto/core/gl/GL_ATIX_texture_env_route b/auto/core/gl/GL_ATIX_texture_env_route index 939ae09..d972fd1 100644 --- a/auto/core/gl/GL_ATIX_texture_env_route +++ b/auto/core/gl/GL_ATIX_texture_env_route @@ -1,6 +1,7 @@ GL_ATIX_texture_env_route http://www.ati.com/developer/sdk/RadeonSDK/Html/Info/ATIX_texture_env_route.txt GL_ATIX_texture_env_route + GL_SECONDARY_COLOR_ATIX 0x8747 GL_TEXTURE_OUTPUT_RGB_ATIX 0x8748 GL_TEXTURE_OUTPUT_ALPHA_ATIX 0x8749 diff --git a/auto/core/gl/GL_ATIX_vertex_shader_output_point_size b/auto/core/gl/GL_ATIX_vertex_shader_output_point_size index 277a313..85a6d58 100644 --- a/auto/core/gl/GL_ATIX_vertex_shader_output_point_size +++ b/auto/core/gl/GL_ATIX_vertex_shader_output_point_size @@ -1,4 +1,5 @@ GL_ATIX_vertex_shader_output_point_size http://www.ati.com/developer/atiopengl.pdf GL_ATIX_vertex_shader_output_point_size + GL_OUTPUT_POINT_SIZE_ATIX 0x610E diff --git a/auto/core/gl/GL_ATI_envmap_bumpmap b/auto/core/gl/GL_ATI_envmap_bumpmap index fbd9925..09a4112 100644 --- a/auto/core/gl/GL_ATI_envmap_bumpmap +++ b/auto/core/gl/GL_ATI_envmap_bumpmap @@ -1,6 +1,7 @@ GL_ATI_envmap_bumpmap http://oss.sgi.com/projects/ogl-sample/registry/ATI/envmap_bumpmap.txt GL_ATI_envmap_bumpmap + GL_BUMP_ROT_MATRIX_ATI 0x8775 GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 diff --git a/auto/core/gl/GL_ATI_map_object_buffer b/auto/core/gl/GL_ATI_map_object_buffer index f401aad..6a683d0 100644 --- a/auto/core/gl/GL_ATI_map_object_buffer +++ b/auto/core/gl/GL_ATI_map_object_buffer @@ -1,5 +1,6 @@ GL_ATI_map_object_buffer http://www.opengl.org/registry/specs/ATI/map_object_buffer.txt GL_ATI_map_object_buffer + void * glMapObjectBufferATI (GLuint buffer) void glUnmapObjectBufferATI (GLuint buffer) diff --git a/auto/core/gl/GL_ATI_pn_triangles b/auto/core/gl/GL_ATI_pn_triangles index a61e27a..ca3923d 100644 --- a/auto/core/gl/GL_ATI_pn_triangles +++ b/auto/core/gl/GL_ATI_pn_triangles @@ -1,6 +1,7 @@ GL_ATI_pn_triangles http://www.opengl.org/registry/specs/ATI/pn_triangles.txt GL_ATI_pn_triangles + GL_PN_TRIANGLES_ATI 0x87F0 GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 diff --git a/auto/core/gl/GL_ATI_separate_stencil b/auto/core/gl/GL_ATI_separate_stencil index be55bb4..b7237e5 100644 --- a/auto/core/gl/GL_ATI_separate_stencil +++ b/auto/core/gl/GL_ATI_separate_stencil @@ -1,6 +1,7 @@ GL_ATI_separate_stencil http://www.opengl.org/registry/specs/ATI/separate_stencil.txt GL_ATI_separate_stencil + GL_STENCIL_BACK_FUNC_ATI 0x8800 GL_STENCIL_BACK_FAIL_ATI 0x8801 GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 diff --git a/auto/core/gl/GL_ATI_shader_texture_lod b/auto/core/gl/GL_ATI_shader_texture_lod index 5fbc624..e6e6c04 100644 --- a/auto/core/gl/GL_ATI_shader_texture_lod +++ b/auto/core/gl/GL_ATI_shader_texture_lod @@ -1,3 +1,4 @@ GL_ATI_shader_texture_lod GL_ATI_shader_texture_lod + diff --git a/auto/core/gl/GL_ATI_texture_compression_3dc b/auto/core/gl/GL_ATI_texture_compression_3dc index 2548b30..fc3ee44 100644 --- a/auto/core/gl/GL_ATI_texture_compression_3dc +++ b/auto/core/gl/GL_ATI_texture_compression_3dc @@ -1,4 +1,5 @@ GL_ATI_texture_compression_3dc GL_ATI_texture_compression_3dc + GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 diff --git a/auto/core/gl/GL_ATI_vertex_streams b/auto/core/gl/GL_ATI_vertex_streams index 060f844..f6e64fd 100644 --- a/auto/core/gl/GL_ATI_vertex_streams +++ b/auto/core/gl/GL_ATI_vertex_streams @@ -1,6 +1,7 @@ GL_ATI_vertex_streams http://www.opengl.org/registry/specs/ATI/vertex_streams.txt GL_ATI_vertex_streams + GL_MAX_VERTEX_STREAMS_ATI 0x876B GL_VERTEX_SOURCE_ATI 0x876C GL_VERTEX_STREAM0_ATI 0x876D diff --git a/auto/core/gl/GL_EXT_Cg_shader b/auto/core/gl/GL_EXT_Cg_shader index 34d3152..b2df900 100644 --- a/auto/core/gl/GL_EXT_Cg_shader +++ b/auto/core/gl/GL_EXT_Cg_shader @@ -1,5 +1,6 @@ GL_EXT_Cg_shader http://download.nvidia.com/developer/GLSL/GLSL%20Release%20Notes%20for%20Release%2060.pdf GL_EXT_Cg_shader + GL_CG_VERTEX_SHADER_EXT 0x890E GL_CG_FRAGMENT_SHADER_EXT 0x890F diff --git a/auto/core/gl/GL_EXT_bindable_uniform b/auto/core/gl/GL_EXT_bindable_uniform index 809123b..00ec270 100644 --- a/auto/core/gl/GL_EXT_bindable_uniform +++ b/auto/core/gl/GL_EXT_bindable_uniform @@ -1,6 +1,7 @@ GL_EXT_bindable_uniform http://developer.download.nvidia.com/opengl/specs/GL_EXT_bindable_uniform.txt GL_EXT_bindable_uniform + GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 diff --git a/auto/core/gl/GL_EXT_debug_marker b/auto/core/gl/GL_EXT_debug_marker index 9d0628c..ce9ffe4 100644 --- a/auto/core/gl/GL_EXT_debug_marker +++ b/auto/core/gl/GL_EXT_debug_marker @@ -1,6 +1,7 @@ GL_EXT_debug_marker http://www.khronos.org/registry/gles/extensions/EXT/EXT_debug_marker.txt GL_EXT_debug_marker + void glInsertEventMarkerEXT (GLsizei length, const GLchar* marker) void glPushGroupMarkerEXT (GLsizei length, const GLchar* marker) void glPopGroupMarkerEXT (void) diff --git a/auto/core/gl/GL_EXT_depth_bounds_test b/auto/core/gl/GL_EXT_depth_bounds_test index 62528b7..da2a453 100644 --- a/auto/core/gl/GL_EXT_depth_bounds_test +++ b/auto/core/gl/GL_EXT_depth_bounds_test @@ -1,6 +1,7 @@ GL_EXT_depth_bounds_test http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_depth_bounds_test.txt GL_EXT_depth_bounds_test + GL_DEPTH_BOUNDS_TEST_EXT 0x8890 GL_DEPTH_BOUNDS_EXT 0x8891 void glDepthBoundsEXT (GLclampd zmin, GLclampd zmax) diff --git a/auto/core/gl/GL_EXT_draw_instanced b/auto/core/gl/GL_EXT_draw_instanced index e8e5425..ca7f17e 100644 --- a/auto/core/gl/GL_EXT_draw_instanced +++ b/auto/core/gl/GL_EXT_draw_instanced @@ -1,5 +1,6 @@ GL_EXT_draw_instanced http://developer.download.nvidia.com/opengl/specs/GL_EXT_draw_instanced.txt GL_EXT_draw_instanced + void glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount) void glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount) diff --git a/auto/core/gl/GL_EXT_draw_range_elements b/auto/core/gl/GL_EXT_draw_range_elements index d495fe7..f5346de 100644 --- a/auto/core/gl/GL_EXT_draw_range_elements +++ b/auto/core/gl/GL_EXT_draw_range_elements @@ -1,6 +1,7 @@ GL_EXT_draw_range_elements http://oss.sgi.com/projects/ogl-sample/registry/EXT/draw_range_elements.txt GL_EXT_draw_range_elements + GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 void glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices) diff --git a/auto/core/gl/GL_EXT_fog_coord b/auto/core/gl/GL_EXT_fog_coord index 5210d54..148866a 100644 --- a/auto/core/gl/GL_EXT_fog_coord +++ b/auto/core/gl/GL_EXT_fog_coord @@ -1,6 +1,7 @@ GL_EXT_fog_coord http://oss.sgi.com/projects/ogl-sample/registry/EXT/fog_coord.txt GL_EXT_fog_coord + GL_FOG_COORDINATE_SOURCE_EXT 0x8450 GL_FOG_COORDINATE_EXT 0x8451 GL_FRAGMENT_DEPTH_EXT 0x8452 diff --git a/auto/core/gl/GL_EXT_framebuffer_sRGB b/auto/core/gl/GL_EXT_framebuffer_sRGB index 4ca897b..2f4c6ff 100644 --- a/auto/core/gl/GL_EXT_framebuffer_sRGB +++ b/auto/core/gl/GL_EXT_framebuffer_sRGB @@ -1,5 +1,6 @@ GL_EXT_framebuffer_sRGB http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt GL_EXT_framebuffer_sRGB + GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA diff --git a/auto/core/gl/GL_EXT_geometry_shader4 b/auto/core/gl/GL_EXT_geometry_shader4 index f6f6785..a463c4c 100644 --- a/auto/core/gl/GL_EXT_geometry_shader4 +++ b/auto/core/gl/GL_EXT_geometry_shader4 @@ -1,6 +1,7 @@ GL_EXT_geometry_shader4 http://developer.download.nvidia.com/opengl/specs/GL_EXT_geometry_shader4.txt GL_EXT_geometry_shader4 + GL_GEOMETRY_SHADER_EXT 0x8DD9 GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE diff --git a/auto/core/gl/GL_EXT_gpu_program_parameters b/auto/core/gl/GL_EXT_gpu_program_parameters index 9048c98..298bc36 100644 --- a/auto/core/gl/GL_EXT_gpu_program_parameters +++ b/auto/core/gl/GL_EXT_gpu_program_parameters @@ -1,5 +1,6 @@ GL_EXT_gpu_program_parameters http://developer.download.nvidia.com/opengl/specs/GL_EXT_gpu_program_parameters.txt GL_EXT_gpu_program_parameters + void glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat* params) void glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat* params) diff --git a/auto/core/gl/GL_EXT_gpu_shader4 b/auto/core/gl/GL_EXT_gpu_shader4 index e6b254d..7e95dbc 100644 --- a/auto/core/gl/GL_EXT_gpu_shader4 +++ b/auto/core/gl/GL_EXT_gpu_shader4 @@ -1,6 +1,7 @@ GL_EXT_gpu_shader4 http://developer.download.nvidia.com/opengl/specs/GL_EXT_gpu_shader4.txt GL_EXT_gpu_shader4 + GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 GL_SAMPLER_BUFFER_EXT 0x8DC2 diff --git a/auto/core/gl/GL_EXT_packed_float b/auto/core/gl/GL_EXT_packed_float index bcb2255..15ac680 100644 --- a/auto/core/gl/GL_EXT_packed_float +++ b/auto/core/gl/GL_EXT_packed_float @@ -1,6 +1,7 @@ GL_EXT_packed_float http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt GL_EXT_packed_float + GL_R11F_G11F_B10F_EXT 0x8C3A GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C diff --git a/auto/core/gl/GL_EXT_pixel_buffer_object b/auto/core/gl/GL_EXT_pixel_buffer_object index a7f8f2c..f685e4c 100644 --- a/auto/core/gl/GL_EXT_pixel_buffer_object +++ b/auto/core/gl/GL_EXT_pixel_buffer_object @@ -1,6 +1,7 @@ GL_EXT_pixel_buffer_object http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_pixel_buffer_object.txt GL_EXT_pixel_buffer_object + GL_PIXEL_PACK_BUFFER_EXT 0x88EB GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED diff --git a/auto/core/gl/GL_EXT_secondary_color b/auto/core/gl/GL_EXT_secondary_color index 34a2a78..505761d 100644 --- a/auto/core/gl/GL_EXT_secondary_color +++ b/auto/core/gl/GL_EXT_secondary_color @@ -1,6 +1,7 @@ GL_EXT_secondary_color http://oss.sgi.com/projects/ogl-sample/registry/EXT/secondary_color.txt GL_EXT_secondary_color + GL_COLOR_SUM_EXT 0x8458 GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A diff --git a/auto/core/gl/GL_EXT_texture_array b/auto/core/gl/GL_EXT_texture_array index 11877f0..c5c2c9f 100644 --- a/auto/core/gl/GL_EXT_texture_array +++ b/auto/core/gl/GL_EXT_texture_array @@ -1,6 +1,7 @@ GL_EXT_texture_array http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_array.txt GL_EXT_texture_array + GL_TEXTURE_1D_ARRAY_EXT 0x8C18 GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 GL_TEXTURE_2D_ARRAY_EXT 0x8C1A diff --git a/auto/core/gl/GL_EXT_texture_buffer_object b/auto/core/gl/GL_EXT_texture_buffer_object index c00e1f3..81b5835 100644 --- a/auto/core/gl/GL_EXT_texture_buffer_object +++ b/auto/core/gl/GL_EXT_texture_buffer_object @@ -1,6 +1,7 @@ GL_EXT_texture_buffer_object http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_buffer_object.txt GL_EXT_texture_buffer_object + GL_TEXTURE_BUFFER_EXT 0x8C2A GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C diff --git a/auto/core/gl/GL_EXT_texture_compression_latc b/auto/core/gl/GL_EXT_texture_compression_latc index ddf8d26..e8fcacc 100644 --- a/auto/core/gl/GL_EXT_texture_compression_latc +++ b/auto/core/gl/GL_EXT_texture_compression_latc @@ -1,6 +1,7 @@ GL_EXT_texture_compression_latc http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_compression_latc.txt GL_EXT_texture_compression_latc + GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 diff --git a/auto/core/gl/GL_EXT_texture_compression_rgtc b/auto/core/gl/GL_EXT_texture_compression_rgtc index 7c5c57f..054b7f0 100644 --- a/auto/core/gl/GL_EXT_texture_compression_rgtc +++ b/auto/core/gl/GL_EXT_texture_compression_rgtc @@ -1,6 +1,7 @@ GL_EXT_texture_compression_rgtc http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_compression_rgtc.txt GL_EXT_texture_compression_rgtc + GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD diff --git a/auto/core/gl/GL_EXT_texture_cube_map b/auto/core/gl/GL_EXT_texture_cube_map index 5909f48..73a2c73 100644 --- a/auto/core/gl/GL_EXT_texture_cube_map +++ b/auto/core/gl/GL_EXT_texture_cube_map @@ -1,6 +1,7 @@ GL_EXT_texture_cube_map http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_texture_cube_map.txt GL_EXT_texture_cube_map + GL_NORMAL_MAP_EXT 0x8511 GL_REFLECTION_MAP_EXT 0x8512 GL_TEXTURE_CUBE_MAP_EXT 0x8513 diff --git a/auto/core/gl/GL_EXT_texture_edge_clamp b/auto/core/gl/GL_EXT_texture_edge_clamp index 4df0997..c0b3e2a 100644 --- a/auto/core/gl/GL_EXT_texture_edge_clamp +++ b/auto/core/gl/GL_EXT_texture_edge_clamp @@ -1,4 +1,5 @@ GL_EXT_texture_edge_clamp http://www.opengl.org/developers/documentation/Version1.2/1.2specs/texture_edge_clamp.txt GL_EXT_texture_edge_clamp + GL_CLAMP_TO_EDGE_EXT 0x812F diff --git a/auto/core/gl/GL_EXT_texture_integer b/auto/core/gl/GL_EXT_texture_integer index 1c57e40..43219cf 100644 --- a/auto/core/gl/GL_EXT_texture_integer +++ b/auto/core/gl/GL_EXT_texture_integer @@ -1,6 +1,7 @@ GL_EXT_texture_integer http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_integer.txt GL_EXT_texture_integer + GL_RGBA32UI_EXT 0x8D70 GL_RGB32UI_EXT 0x8D71 GL_ALPHA32UI_EXT 0x8D72 diff --git a/auto/core/gl/GL_EXT_texture_rectangle b/auto/core/gl/GL_EXT_texture_rectangle index 4028a9e..1394311 100644 --- a/auto/core/gl/GL_EXT_texture_rectangle +++ b/auto/core/gl/GL_EXT_texture_rectangle @@ -1,6 +1,7 @@ GL_EXT_texture_rectangle http://developer.apple.com/opengl/extensions/ext_texture_rectangle.html GL_EXT_texture_rectangle + GL_TEXTURE_RECTANGLE_EXT 0x84F5 GL_TEXTURE_BINDING_RECTANGLE_EXT 0x84F6 GL_PROXY_TEXTURE_RECTANGLE_EXT 0x84F7 diff --git a/auto/core/gl/GL_EXT_texture_shared_exponent b/auto/core/gl/GL_EXT_texture_shared_exponent index 4ff7efc..4c7d461 100644 --- a/auto/core/gl/GL_EXT_texture_shared_exponent +++ b/auto/core/gl/GL_EXT_texture_shared_exponent @@ -1,6 +1,7 @@ GL_EXT_texture_shared_exponent http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_shared_exponent.txt GL_EXT_texture_shared_exponent + GL_RGB9_E5_EXT 0x8C3D GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F diff --git a/auto/core/gl/GL_EXT_timer_query b/auto/core/gl/GL_EXT_timer_query index 390e6fc..530ba35 100644 --- a/auto/core/gl/GL_EXT_timer_query +++ b/auto/core/gl/GL_EXT_timer_query @@ -1,6 +1,7 @@ GL_EXT_timer_query http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_timer_query.txt GL_EXT_timer_query + GL_TIME_ELAPSED_EXT 0x88BF void glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64EXT *params) void glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64EXT *params) diff --git a/auto/core/gl/GL_EXT_vertex_shader b/auto/core/gl/GL_EXT_vertex_shader index 651fbc2..8d3314f 100644 --- a/auto/core/gl/GL_EXT_vertex_shader +++ b/auto/core/gl/GL_EXT_vertex_shader @@ -1,6 +1,7 @@ GL_EXT_vertex_shader http://oss.sgi.com/projects/ogl-sample/registry/EXT/vertex_shader.txt GL_EXT_vertex_shader + GL_VERTEX_SHADER_EXT 0x8780 GL_VERTEX_SHADER_BINDING_EXT 0x8781 GL_OP_INDEX_EXT 0x8782 diff --git a/auto/core/gl/GL_KTX_buffer_region b/auto/core/gl/GL_KTX_buffer_region index adc6c6f..ef281b1 100644 --- a/auto/core/gl/GL_KTX_buffer_region +++ b/auto/core/gl/GL_KTX_buffer_region @@ -1,6 +1,7 @@ GL_KTX_buffer_region GL_KTX_buffer_region + GL_KTX_FRONT_REGION 0x0 GL_KTX_BACK_REGION 0x1 GL_KTX_Z_REGION 0x2 diff --git a/auto/core/gl/GL_NVX_gpu_memory_info b/auto/core/gl/GL_NVX_gpu_memory_info index 6dd7bdd..a8d97b9 100644 --- a/auto/core/gl/GL_NVX_gpu_memory_info +++ b/auto/core/gl/GL_NVX_gpu_memory_info @@ -1,6 +1,7 @@ GL_NVX_gpu_memory_info http://developer.download.nvidia.com/opengl/specs/GL_NVX_gpu_memory_info.txt GL_NVX_gpu_memory_info + GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 diff --git a/auto/core/gl/GL_NV_depth_buffer_float b/auto/core/gl/GL_NV_depth_buffer_float index 493b245..421d266 100644 --- a/auto/core/gl/GL_NV_depth_buffer_float +++ b/auto/core/gl/GL_NV_depth_buffer_float @@ -1,6 +1,7 @@ GL_NV_depth_buffer_float http://developer.download.nvidia.com/opengl/specs/GL_NV_depth_buffer_float.txt GL_NV_depth_buffer_float + GL_DEPTH_COMPONENT32F_NV 0x8DAB GL_DEPTH32F_STENCIL8_NV 0x8DAC GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD diff --git a/auto/core/gl/GL_NV_depth_range_unclamped b/auto/core/gl/GL_NV_depth_range_unclamped index 62b4e59..b63a0ee 100644 --- a/auto/core/gl/GL_NV_depth_range_unclamped +++ b/auto/core/gl/GL_NV_depth_range_unclamped @@ -1,6 +1,7 @@ GL_NV_depth_range_unclamped GL_NV_depth_range_unclamped + GL_SAMPLE_COUNT_BITS_NV 0x8864 GL_CURRENT_SAMPLE_COUNT_QUERY_NV 0x8865 GL_QUERY_RESULT_NV 0x8866 diff --git a/auto/core/gl/GL_NV_fragment_program2 b/auto/core/gl/GL_NV_fragment_program2 index 7fb59ee..79d4b63 100644 --- a/auto/core/gl/GL_NV_fragment_program2 +++ b/auto/core/gl/GL_NV_fragment_program2 @@ -1,6 +1,7 @@ GL_NV_fragment_program2 http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_fragment_program2.txt GL_NV_fragment_program2 + GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 diff --git a/auto/core/gl/GL_NV_fragment_program4 b/auto/core/gl/GL_NV_fragment_program4 index 0ae2598..edd4383 100644 --- a/auto/core/gl/GL_NV_fragment_program4 +++ b/auto/core/gl/GL_NV_fragment_program4 @@ -1,3 +1,4 @@ GL_NV_fragment_program4 http://developer.download.nvidia.com/opengl/specs/GL_NV_fragment_program4.txt GL_NV_gpu_program4 + diff --git a/auto/core/gl/GL_NV_fragment_program_option b/auto/core/gl/GL_NV_fragment_program_option index 7af9731..01b8ed6 100644 --- a/auto/core/gl/GL_NV_fragment_program_option +++ b/auto/core/gl/GL_NV_fragment_program_option @@ -1,3 +1,4 @@ GL_NV_fragment_program_option http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_fragment_program_option.txt GL_NV_fragment_program_option + diff --git a/auto/core/gl/GL_NV_framebuffer_multisample_coverage b/auto/core/gl/GL_NV_framebuffer_multisample_coverage index d1d0660..526d0f0 100644 --- a/auto/core/gl/GL_NV_framebuffer_multisample_coverage +++ b/auto/core/gl/GL_NV_framebuffer_multisample_coverage @@ -1,6 +1,7 @@ GL_NV_framebuffer_multisample_coverage http://developer.download.nvidia.com/opengl/specs/GL_NV_framebuffer_multisample_coverage.txt GL_NV_framebuffer_multisample_coverage + GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 diff --git a/auto/core/gl/GL_NV_geometry_program4 b/auto/core/gl/GL_NV_geometry_program4 index 3f82b19..a6cb164 100644 --- a/auto/core/gl/GL_NV_geometry_program4 +++ b/auto/core/gl/GL_NV_geometry_program4 @@ -1,6 +1,7 @@ GL_NV_geometry_program4 http://developer.download.nvidia.com/opengl/specs/GL_NV_geometry_program4.txt GL_NV_gpu_program4 + GL_GEOMETRY_PROGRAM_NV 0x8C26 GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 diff --git a/auto/core/gl/GL_NV_geometry_shader4 b/auto/core/gl/GL_NV_geometry_shader4 index 2040c0d..1b00429 100644 --- a/auto/core/gl/GL_NV_geometry_shader4 +++ b/auto/core/gl/GL_NV_geometry_shader4 @@ -1,3 +1,4 @@ GL_NV_geometry_shader4 http://developer.download.nvidia.com/opengl/specs/GL_NV_geometry_shader4.txt GL_NV_geometry_shader4 + diff --git a/auto/core/gl/GL_NV_gpu_program4 b/auto/core/gl/GL_NV_gpu_program4 index 030f68e..19f7169 100644 --- a/auto/core/gl/GL_NV_gpu_program4 +++ b/auto/core/gl/GL_NV_gpu_program4 @@ -1,6 +1,7 @@ GL_NV_gpu_program4 http://developer.download.nvidia.com/opengl/specs/GL_NV_gpu_program4.txt GL_NV_gpu_program4 + GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 diff --git a/auto/core/gl/GL_NV_gpu_program5 b/auto/core/gl/GL_NV_gpu_program5 index 18bb28f..68079f3 100644 --- a/auto/core/gl/GL_NV_gpu_program5 +++ b/auto/core/gl/GL_NV_gpu_program5 @@ -1,6 +1,7 @@ GL_NV_gpu_program5 http://www.opengl.org/registry/specs/NV/gpu_program5.txt GL_NV_gpu_program5 + GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C diff --git a/auto/core/gl/GL_NV_parameter_buffer_object b/auto/core/gl/GL_NV_parameter_buffer_object index d2525a1..91494e3 100644 --- a/auto/core/gl/GL_NV_parameter_buffer_object +++ b/auto/core/gl/GL_NV_parameter_buffer_object @@ -1,6 +1,7 @@ GL_NV_parameter_buffer_object http://developer.download.nvidia.com/opengl/specs/GL_NV_parameter_buffer_object.txt GL_NV_parameter_buffer_object + GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 diff --git a/auto/core/gl/GL_NV_present_video b/auto/core/gl/GL_NV_present_video index 893c74c..1a5b8ce 100644 --- a/auto/core/gl/GL_NV_present_video +++ b/auto/core/gl/GL_NV_present_video @@ -1,6 +1,7 @@ GL_NV_present_video http://www.opengl.org/registry/specs/NV/present_video.txt GL_NV_present_video + GL_FRAME_NV 0x8E26 GL_FIELDS_NV 0x8E27 GL_CURRENT_TIME_NV 0x8E28 diff --git a/auto/core/gl/GL_NV_tessellation_program5 b/auto/core/gl/GL_NV_tessellation_program5 index b663c97..75fd3c7 100644 --- a/auto/core/gl/GL_NV_tessellation_program5 +++ b/auto/core/gl/GL_NV_tessellation_program5 @@ -1,6 +1,7 @@ GL_NV_tessellation_program5 http://www.opengl.org/registry/specs/NV/tessellation_program5.txt GL_NV_gpu_program5 + GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 GL_TESS_CONTROL_PROGRAM_NV 0x891E GL_TESS_EVALUATION_PROGRAM_NV 0x891F diff --git a/auto/core/gl/GL_NV_transform_feedback b/auto/core/gl/GL_NV_transform_feedback index fce4757..5f1816e 100644 --- a/auto/core/gl/GL_NV_transform_feedback +++ b/auto/core/gl/GL_NV_transform_feedback @@ -1,6 +1,7 @@ GL_NV_transform_feedback http://developer.download.nvidia.com/opengl/specs/GL_NV_transform_feedback.txt GL_NV_transform_feedback + GL_BACK_PRIMARY_COLOR_NV 0x8C77 GL_BACK_SECONDARY_COLOR_NV 0x8C78 GL_TEXTURE_COORD_NV 0x8C79 diff --git a/auto/core/gl/GL_NV_vdpau_interop b/auto/core/gl/GL_NV_vdpau_interop index 12251ad..f52949c 100644 --- a/auto/core/gl/GL_NV_vdpau_interop +++ b/auto/core/gl/GL_NV_vdpau_interop @@ -1,6 +1,7 @@ GL_NV_vdpau_interop http://www.opengl.org/registry/specs/NV/vdpau_interop.txt GL_NV_vdpau_interop + GL_SURFACE_STATE_NV 0x86EB GL_SURFACE_REGISTERED_NV 0x86FD GL_SURFACE_MAPPED_NV 0x8700 diff --git a/auto/core/gl/GL_NV_vertex_program2_option b/auto/core/gl/GL_NV_vertex_program2_option index 1fecc4c..3e3e0b7 100644 --- a/auto/core/gl/GL_NV_vertex_program2_option +++ b/auto/core/gl/GL_NV_vertex_program2_option @@ -1,5 +1,6 @@ GL_NV_vertex_program2_option http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program2_option.txt GL_NV_vertex_program2_option + GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 diff --git a/auto/core/gl/GL_NV_vertex_program3 b/auto/core/gl/GL_NV_vertex_program3 index 6510e06..fbd3899 100644 --- a/auto/core/gl/GL_NV_vertex_program3 +++ b/auto/core/gl/GL_NV_vertex_program3 @@ -1,4 +1,5 @@ GL_NV_vertex_program3 http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program3.txt GL_NV_vertex_program3 + MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C diff --git a/auto/core/gl/GL_NV_vertex_program4 b/auto/core/gl/GL_NV_vertex_program4 index c51d08a..b1ff7f8 100644 --- a/auto/core/gl/GL_NV_vertex_program4 +++ b/auto/core/gl/GL_NV_vertex_program4 @@ -1,4 +1,5 @@ GL_NV_vertex_program4 http://developer.download.nvidia.com/opengl/specs/GL_NV_vertex_program4.txt GL_NV_gpu_program4 + GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD diff --git a/auto/core/gl/GL_SGIX_shadow b/auto/core/gl/GL_SGIX_shadow index 2b34cc8..3580721 100644 --- a/auto/core/gl/GL_SGIX_shadow +++ b/auto/core/gl/GL_SGIX_shadow @@ -1,6 +1,7 @@ GL_SGIX_shadow http://oss.sgi.com/projects/ogl-sample/registry/SGIX/shadow.txt GL_SGIX_shadow + GL_TEXTURE_COMPARE_SGIX 0x819A GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B GL_TEXTURE_LEQUAL_R_SGIX 0x819C diff --git a/auto/core/gl/GL_SUN_read_video_pixels b/auto/core/gl/GL_SUN_read_video_pixels index 1de7cc8..871e6f9 100644 --- a/auto/core/gl/GL_SUN_read_video_pixels +++ b/auto/core/gl/GL_SUN_read_video_pixels @@ -1,4 +1,5 @@ GL_SUN_read_video_pixels http://wwws.sun.com/software/graphics/opengl/extensions/gl_sun_read_video_pixels.txt GL_SUN_read_video_pixels + void glReadVideoPixelsSUN (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels) diff --git a/auto/core/gl/GL_VERSION_1_2 b/auto/core/gl/GL_VERSION_1_2 index f868670..fe610b6 100644 --- a/auto/core/gl/GL_VERSION_1_2 +++ b/auto/core/gl/GL_VERSION_1_2 @@ -1,6 +1,7 @@ GL_VERSION_1_2 http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf + GL_UNSIGNED_BYTE_3_3_2 0x8032 GL_UNSIGNED_SHORT_4_4_4_4 0x8033 GL_UNSIGNED_SHORT_5_5_5_1 0x8034 diff --git a/auto/core/gl/GL_VERSION_1_2_1 b/auto/core/gl/GL_VERSION_1_2_1 index a6ecf24..42634cb 100644 --- a/auto/core/gl/GL_VERSION_1_2_1 +++ b/auto/core/gl/GL_VERSION_1_2_1 @@ -1,3 +1,4 @@ GL_VERSION_1_2_1 http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf + diff --git a/auto/core/gl/GL_VERSION_1_3 b/auto/core/gl/GL_VERSION_1_3 index 0c531d4..d6342fa 100644 --- a/auto/core/gl/GL_VERSION_1_3 +++ b/auto/core/gl/GL_VERSION_1_3 @@ -1,6 +1,7 @@ GL_VERSION_1_3 http://www.opengl.org/documentation/specs/version1.3/glspec13.pdf + GL_TEXTURE0 0x84C0 GL_TEXTURE1 0x84C1 GL_TEXTURE2 0x84C2 diff --git a/auto/core/gl/GL_VERSION_1_4 b/auto/core/gl/GL_VERSION_1_4 index 2c9ba46..8d0724a 100644 --- a/auto/core/gl/GL_VERSION_1_4 +++ b/auto/core/gl/GL_VERSION_1_4 @@ -1,6 +1,7 @@ GL_VERSION_1_4 http://www.opengl.org/documentation/specs/version1.4/glspec14.pdf + GL_GENERATE_MIPMAP 0x8191 GL_GENERATE_MIPMAP_HINT 0x8192 GL_DEPTH_COMPONENT16 0x81A5 diff --git a/auto/core/gl/GL_VERSION_1_5 b/auto/core/gl/GL_VERSION_1_5 index ad53e9f..439ecb6 100644 --- a/auto/core/gl/GL_VERSION_1_5 +++ b/auto/core/gl/GL_VERSION_1_5 @@ -1,6 +1,7 @@ GL_VERSION_1_5 http://www.opengl.org/documentation/specs/version1.5/glspec15.pdf + GL_BUFFER_SIZE 0x8764 GL_BUFFER_USAGE 0x8765 GL_QUERY_COUNTER_BITS 0x8864 diff --git a/auto/core/gl/GL_VERSION_2_0 b/auto/core/gl/GL_VERSION_2_0 index f6479d0..5bf6988 100644 --- a/auto/core/gl/GL_VERSION_2_0 +++ b/auto/core/gl/GL_VERSION_2_0 @@ -1,6 +1,7 @@ GL_VERSION_2_0 http://www.opengl.org/documentation/specs/version2.0/glspec20.pdf + GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 diff --git a/auto/core/gl/GL_VERSION_2_1 b/auto/core/gl/GL_VERSION_2_1 index 51aa95b..88ecce8 100644 --- a/auto/core/gl/GL_VERSION_2_1 +++ b/auto/core/gl/GL_VERSION_2_1 @@ -1,6 +1,7 @@ GL_VERSION_2_1 http://www.opengl.org/documentation/specs/version2.1/glspec21.pdf + GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F GL_PIXEL_PACK_BUFFER 0x88EB GL_PIXEL_UNPACK_BUFFER 0x88EC diff --git a/auto/core/gl/GL_VERSION_3_0 b/auto/core/gl/GL_VERSION_3_0 index c87cdab..4be5db0 100644 --- a/auto/core/gl/GL_VERSION_3_0 +++ b/auto/core/gl/GL_VERSION_3_0 @@ -1,6 +1,7 @@ GL_VERSION_3_0 https://www.opengl.org/registry/doc/glspec30.20080923.pdf +GL_ARB_framebuffer_object GL_ARB_map_buffer_range GL_ARB_uniform_buffer_object GL_ARB_vertex_array_object GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB GL_CLIP_DISTANCE0 GL_CLIP_PLANE0 GL_CLIP_DISTANCE1 GL_CLIP_PLANE1 diff --git a/auto/core/gl/GL_VERSION_3_1 b/auto/core/gl/GL_VERSION_3_1 index a829a77..c546704 100644 --- a/auto/core/gl/GL_VERSION_3_1 +++ b/auto/core/gl/GL_VERSION_3_1 @@ -1,6 +1,7 @@ GL_VERSION_3_1 https://www.opengl.org/registry/doc/glspec31.20090528.pdf +GL_ARB_copy_buffer GL_SAMPLER_2D_RECT 0x8B63 GL_SAMPLER_2D_RECT_SHADOW 0x8B64 GL_SAMPLER_BUFFER 0x8DC2 diff --git a/auto/core/gl/GL_VERSION_3_2 b/auto/core/gl/GL_VERSION_3_2 index 85cea08..a987541 100644 --- a/auto/core/gl/GL_VERSION_3_2 +++ b/auto/core/gl/GL_VERSION_3_2 @@ -1,6 +1,7 @@ GL_VERSION_3_2 https://www.opengl.org/registry/doc/glspec32.compatibility.20091207.pdf +GL_ARB_draw_elements_base_vertex GL_ARB_provoking_vertex GL_ARB_sync GL_ARB_texture_multisample GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 GL_LINES_ADJACENCY 0x000A diff --git a/auto/core/gl/GL_VERSION_3_3 b/auto/core/gl/GL_VERSION_3_3 index bbd6914..a80dbcc 100644 --- a/auto/core/gl/GL_VERSION_3_3 +++ b/auto/core/gl/GL_VERSION_3_3 @@ -1,6 +1,7 @@ GL_VERSION_3_3 https://www.opengl.org/registry/doc/glspec33.compatibility.20100311.pdf + GL_RGB10_A2UI 0x906F GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE void glVertexAttribDivisor (GLuint index, GLuint divisor) diff --git a/auto/core/gl/GL_VERSION_4_0 b/auto/core/gl/GL_VERSION_4_0 index a3a0dc2..3715b40 100644 --- a/auto/core/gl/GL_VERSION_4_0 +++ b/auto/core/gl/GL_VERSION_4_0 @@ -1,6 +1,7 @@ GL_VERSION_4_0 https://www.opengl.org/registry/doc/glspec40.compatibility.20100311.pdf + GL_SAMPLE_SHADING 0x8C36 GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E diff --git a/auto/core/gl/GL_VERSION_4_1 b/auto/core/gl/GL_VERSION_4_1 index 91da382..6153c27 100644 --- a/auto/core/gl/GL_VERSION_4_1 +++ b/auto/core/gl/GL_VERSION_4_1 @@ -1,2 +1,3 @@ GL_VERSION_4_1 https://www.opengl.org/registry/doc/glspec41.compatibility.20100725.pdf + diff --git a/auto/core/gl/GL_VERSION_4_2 b/auto/core/gl/GL_VERSION_4_2 index d5c1708..ff12b4c 100644 --- a/auto/core/gl/GL_VERSION_4_2 +++ b/auto/core/gl/GL_VERSION_4_2 @@ -1,6 +1,7 @@ GL_VERSION_4_2 https://www.opengl.org/registry/doc/glspec42.compatibility.20120427.pdf + GL_COPY_READ_BUFFER_BINDING 0x8F36 GL_COPY_WRITE_BUFFER_BINDING 0x8F37 GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 diff --git a/auto/core/gl/GL_VERSION_4_3 b/auto/core/gl/GL_VERSION_4_3 index dc2b408..32fc35b 100644 --- a/auto/core/gl/GL_VERSION_4_3 +++ b/auto/core/gl/GL_VERSION_4_3 @@ -1,5 +1,6 @@ GL_VERSION_4_3 https://www.opengl.org/registry/doc/glspec43.compatibility.20130214.pdf + GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 diff --git a/auto/core/gl/GL_VERSION_4_4 b/auto/core/gl/GL_VERSION_4_4 index 959c146..cf6416e 100644 --- a/auto/core/gl/GL_VERSION_4_4 +++ b/auto/core/gl/GL_VERSION_4_4 @@ -1,6 +1,7 @@ GL_VERSION_4_4 https://www.opengl.org/registry/doc/glspec44.compatibility.pdf + GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 GL_TEXTURE_BUFFER_BINDING 0x8C2A diff --git a/auto/core/gl/GL_VERSION_4_5 b/auto/core/gl/GL_VERSION_4_5 index 3c06e85..1ecda61 100644 --- a/auto/core/gl/GL_VERSION_4_5 +++ b/auto/core/gl/GL_VERSION_4_5 @@ -1,6 +1,7 @@ GL_VERSION_4_5 https://www.opengl.org/registry/doc/glspec45.compatibility.pdf + GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 GLenum glGetGraphicsResetStatus (void) void glGetnTexImage (GLenum tex, GLint level, GLenum format, GLenum type, GLsizei bufSize, GLvoid *pixels) diff --git a/auto/core/gl/GL_WIN_swap_hint b/auto/core/gl/GL_WIN_swap_hint index 6916189..9bb490b 100644 --- a/auto/core/gl/GL_WIN_swap_hint +++ b/auto/core/gl/GL_WIN_swap_hint @@ -1,4 +1,5 @@ GL_WIN_swap_hint http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc01_16zy.asp GL_WIN_swap_hint + void glAddSwapHintRectWIN (GLint x, GLint y, GLsizei width, GLsizei height) diff --git a/auto/core/gl/WGL_ARB_create_context b/auto/core/gl/WGL_ARB_create_context index 20b3119..7e7c163 100644 --- a/auto/core/gl/WGL_ARB_create_context +++ b/auto/core/gl/WGL_ARB_create_context @@ -1,6 +1,7 @@ WGL_ARB_create_context http://www.opengl.org/registry/specs/ARB/wgl_create_context.txt WGL_ARB_create_context + WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 diff --git a/auto/core/gl/WGL_ATI_render_texture_rectangle b/auto/core/gl/WGL_ATI_render_texture_rectangle index 55df114..aba7be1 100644 --- a/auto/core/gl/WGL_ATI_render_texture_rectangle +++ b/auto/core/gl/WGL_ATI_render_texture_rectangle @@ -1,4 +1,5 @@ WGL_ATI_render_texture_rectangle WGL_ATI_render_texture_rectangle + WGL_TEXTURE_RECTANGLE_ATI 0x21A5 diff --git a/auto/core/gl/WGL_EXT_create_context_es2_profile b/auto/core/gl/WGL_EXT_create_context_es2_profile index ca9881a..3105737 100644 --- a/auto/core/gl/WGL_EXT_create_context_es2_profile +++ b/auto/core/gl/WGL_EXT_create_context_es2_profile @@ -1,4 +1,5 @@ WGL_EXT_create_context_es2_profile http://www.opengl.org/registry/specs/EXT/wgl_create_context_es2_profile.txt WGL_EXT_create_context_es2_profile + WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 diff --git a/auto/core/gl/WGL_EXT_create_context_es_profile b/auto/core/gl/WGL_EXT_create_context_es_profile index 6eb7cdd..5c7ce7e 100644 --- a/auto/core/gl/WGL_EXT_create_context_es_profile +++ b/auto/core/gl/WGL_EXT_create_context_es_profile @@ -1,4 +1,5 @@ WGL_EXT_create_context_es_profile http://www.opengl.org/registry/specs/EXT/wgl_create_context_es_profile.txt WGL_EXT_create_context_es_profile + WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 diff --git a/auto/core/gl/WGL_EXT_framebuffer_sRGB b/auto/core/gl/WGL_EXT_framebuffer_sRGB index e4a4032..5f2f5b8 100644 --- a/auto/core/gl/WGL_EXT_framebuffer_sRGB +++ b/auto/core/gl/WGL_EXT_framebuffer_sRGB @@ -1,4 +1,5 @@ WGL_EXT_framebuffer_sRGB http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt WGL_EXT_framebuffer_sRGB + WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 diff --git a/auto/core/gl/WGL_EXT_pixel_format_packed_float b/auto/core/gl/WGL_EXT_pixel_format_packed_float index 30925fc..662a993 100644 --- a/auto/core/gl/WGL_EXT_pixel_format_packed_float +++ b/auto/core/gl/WGL_EXT_pixel_format_packed_float @@ -1,4 +1,5 @@ WGL_EXT_pixel_format_packed_float http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt WGL_EXT_pixel_format_packed_float + WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 diff --git a/auto/core/gl/WGL_NV_gpu_affinity b/auto/core/gl/WGL_NV_gpu_affinity index f722204..61ed3f1 100644 --- a/auto/core/gl/WGL_NV_gpu_affinity +++ b/auto/core/gl/WGL_NV_gpu_affinity @@ -1,6 +1,7 @@ WGL_NV_gpu_affinity http://developer.download.nvidia.com/opengl/specs/WGL_nv_gpu_affinity.txt WGL_NV_gpu_affinity + WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 BOOL wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu) diff --git a/auto/core/gl/WGL_NV_vertex_array_range b/auto/core/gl/WGL_NV_vertex_array_range index ca22d31..27b43ce 100644 --- a/auto/core/gl/WGL_NV_vertex_array_range +++ b/auto/core/gl/WGL_NV_vertex_array_range @@ -1,5 +1,6 @@ WGL_NV_vertex_array_range http://oss.sgi.com/projects/ogl-sample/registry/NV/vertex_array_range.txt WGL_NV_vertex_array_range + void * wglAllocateMemoryNV (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority) void wglFreeMemoryNV (void *pointer) From 01b33567e5f13968442ac661bac684c7d581d18b Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Mon, 5 Oct 2015 21:12:06 +1000 Subject: [PATCH 13/81] Workaround for core-context4 MX build break, for now --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 769a9ab..e699d32 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,10 +5,10 @@ script: - make -C auto clobber - make extensions - make dist-src -- make clean; SYSTEM=linux make -- make clean; SYSTEM=linux-osmesa make -- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' . ; make; popd -- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' -DGLEW_OSMESA=1 .; make; popd +#- make clean; SYSTEM=linux make +#- make clean; SYSTEM=linux-osmesa make +#- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' . ; make; popd +#- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' -DGLEW_OSMESA=1 .; make; popd addons: apt: packages: From a4aa9b2717bb62fbd826b960a914a30303fb07af Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Thu, 19 Nov 2015 21:12:48 +1000 Subject: [PATCH 14/81] Remove MX support due to the complexity of supporting both MX and Core contexts --- Makefile | 97 +--------- auto/Makefile | 2 +- auto/bin/make_init.pl | 5 +- auto/bin/make_initd.pl | 3 +- auto/bin/make_list.pl | 4 +- auto/doc/advanced.html | 39 ---- auto/src/glew.rc | 38 ++-- auto/src/glew_head.c | 45 +---- auto/src/glew_init_gl.c | 5 +- auto/src/glew_init_glx.c | 8 +- auto/src/glew_init_tail.c | 4 - auto/src/glew_init_wgl.c | 6 +- auto/src/glew_str_glx.c | 4 - auto/src/glew_str_head.c | 4 - auto/src/glew_str_wgl.c | 4 - auto/src/glew_tail.h | 21 --- auto/src/glewinfo.rc | 14 +- auto/src/glewinfo_head.c | 12 -- auto/src/glewinfo_tail.c | 11 -- auto/src/glxew_mid.h | 5 - auto/src/glxew_tail.h | 16 -- auto/src/visualinfo.rc | 14 +- auto/src/wglew_mid.h | 5 - auto/src/wglew_tail.h | 16 -- build/cmake/CMakeLists.txt | 20 +- doc/advanced.html | 39 ---- doc/glew.html | 365 +++++++++++++++++++------------------ 27 files changed, 224 insertions(+), 582 deletions(-) diff --git a/Makefile b/Makefile index 8bdb0e1..7f97342 100644 --- a/Makefile +++ b/Makefile @@ -81,7 +81,7 @@ endif INCLUDE = -Iinclude CFLAGS = $(OPT) $(WARN) $(INCLUDE) $(CFLAGS.EXTRA) -all debug: glew.lib glew.lib.mx glew.bin +all debug: glew.lib glew.bin # GLEW shared and static libraries @@ -96,11 +96,6 @@ LIB.OBJS := $(LIB.OBJS:.c=.o) LIB.SOBJS := $(addprefix tmp/$(SYSTEM)/default/shared/,$(LIB.SRCS.NAMES)) LIB.SOBJS := $(LIB.SOBJS:.c=.o) -LIB.OBJS.MX := $(addprefix tmp/$(SYSTEM)/mx/static/,$(LIB.SRCS.NAMES)) -LIB.OBJS.MX := $(LIB.OBJS.MX:.c=.o) -LIB.SOBJS.MX := $(addprefix tmp/$(SYSTEM)/mx/shared/,$(LIB.SRCS.NAMES)) -LIB.SOBJS.MX := $(LIB.SOBJS.MX:.c=.o) - glew.lib: lib lib/$(LIB.SHARED) lib/$(LIB.STATIC) glew.pc lib: @@ -150,54 +145,6 @@ glew.pc: glew.pc.in -e "s|@requireslib@|$(LIBGLU)|g" \ < $< > $@ -# GLEW MX static and shared libraries - -glew.lib.mx: lib lib/$(LIB.SHARED.MX) lib/$(LIB.STATIC.MX) glewmx.pc - -lib/$(LIB.STATIC.MX): $(LIB.OBJS.MX) -ifneq ($(AR),) - $(AR) $(ARFLAGS) $@ $^ -else ifneq ($(LIBTOOL),) - $(LIBTOOL) $@ $^ -endif -ifneq ($(STRIP),) - $(STRIP) -x $@ -endif - -lib/$(LIB.SHARED.MX): $(LIB.SOBJS.MX) - $(LD) $(LDFLAGS.SO.MX) -o $@ $^ $(LIB.LDFLAGS) $(LIB.LIBS) -ifneq ($(LN),) - $(LN) $(LIB.SHARED.MX) lib/$(LIB.SONAME.MX) - $(LN) $(LIB.SHARED.MX) lib/$(LIB.DEVLNK.MX) -endif -ifneq ($(STRIP),) - $(STRIP) -x $@ -endif - -tmp/$(SYSTEM)/mx/static/glew.o: src/glew.c include/GL/glew.h include/GL/wglew.h include/GL/glxew.h - @mkdir -p $(dir $@) - $(CC) -DGLEW_NO_GLU -DGLEW_MX -DGLEW_STATIC $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< - -tmp/$(SYSTEM)/mx/shared/glew.o: src/glew.c include/GL/glew.h include/GL/wglew.h include/GL/glxew.h - @mkdir -p $(dir $@) - $(CC) -DGLEW_NO_GLU -DGLEW_MX -DGLEW_BUILD $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< - -# Force re-write of glewmx.pc, GLEW_DEST can vary - -.PHONY: glewmx.pc - -glewmx.pc: glew.pc.in - sed \ - -e "s|@prefix@|$(GLEW_PREFIX)|g" \ - -e "s|@libdir@|$(LIBDIR)|g" \ - -e "s|@exec_prefix@|$(BINDIR)|g" \ - -e "s|@includedir@|$(INCDIR)|g" \ - -e "s|@version@|$(GLEW_VERSION)|g" \ - -e "s|@cflags@|-DGLEW_MX|g" \ - -e "s|@libname@|$(NAME)mx|g" \ - -e "s|@requireslib@|$(LIBGLU)|g" \ - < $< > $@ - # GLEW utility programs BIN.LIBS = -Llib $(LDFLAGS.DYNAMIC) -l$(NAME) $(LDFLAGS.EXTRA) $(LDFLAGS.GL) @@ -245,12 +192,10 @@ $(VISUALINFO.BIN.OBJ): $(VISUALINFO.BIN.SRC) include/GL/glew.h include/GL/wglew. # Install targets -install.all: install install.mx install.bin +install.all: install install.bin install: install.include install.lib install.pkgconfig -install.mx: install.include install.lib.mx install.pkgconfig.mx - install.lib: glew.lib $(INSTALL) -d -m 0755 "$(DESTDIR)$(LIBDIR)" # runtime @@ -273,27 +218,6 @@ ifneq ($(LN),) endif $(INSTALL) -m 0644 lib/$(LIB.STATIC) "$(DESTDIR)$(LIBDIR)/" -install.lib.mx: glew.lib.mx - $(INSTALL) -d -m 0755 "$(DESTDIR)$(LIBDIR)" -# runtime -ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) - $(INSTALL) -d -m 0755 "$(DESTDIR)$(BINDIR)" - $(INSTALL) -m 0755 lib/$(LIB.SHARED.MX) "$(DESTDIR)$(BINDIR)/" -else - $(INSTALL) -m 0644 lib/$(LIB.SHARED.MX) "$(DESTDIR)$(LIBDIR)/" -endif -ifneq ($(LN),) - $(LN) $(LIB.SHARED.MX) "$(DESTDIR)$(LIBDIR)/$(LIB.SONAME.MX)" -endif -# development files -ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) - $(INSTALL) -m 0644 lib/$(LIB.DEVLNK.MX) "$(DESTDIR)$(LIBDIR)/" -endif -ifneq ($(LN),) - $(LN) $(LIB.SHARED.MX) "$(DESTDIR)$(LIBDIR)/$(LIB.DEVLNK.MX)" -endif - $(INSTALL) -m 0644 lib/$(LIB.STATIC.MX) "$(DESTDIR)$(LIBDIR)/" - install.bin: glew.bin $(INSTALL) -d -m 0755 "$(DESTDIR)$(BINDIR)" $(INSTALL) -s -m 0755 bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN) "$(DESTDIR)$(BINDIR)/" @@ -309,30 +233,25 @@ install.pkgconfig: glew.pc $(INSTALL) -d -m 0755 "$(DESTDIR)$(LIBDIR)/pkgconfig" $(INSTALL) -m 0644 glew.pc "$(DESTDIR)$(LIBDIR)/pkgconfig/" -install.pkgconfig.mx: glewmx.pc - $(INSTALL) -d -m 0755 "$(DESTDIR)$(LIBDIR)" - $(INSTALL) -d -m 0755 "$(DESTDIR)$(LIBDIR)/pkgconfig" - $(INSTALL) -m 0644 glewmx.pc "$(DESTDIR)$(LIBDIR)/pkgconfig/" - uninstall: $(RM) "$(DESTDIR)$(INCDIR)/wglew.h" $(RM) "$(DESTDIR)$(INCDIR)/glew.h" $(RM) "$(DESTDIR)$(INCDIR)/glxew.h" - $(RM) "$(DESTDIR)$(LIBDIR)/$(LIB.DEVLNK)" "$(DESTDIR)$(LIBDIR)/$(LIB.DEVLNK.MX)" + $(RM) "$(DESTDIR)$(LIBDIR)/$(LIB.DEVLNK)" ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) - $(RM) "$(DESTDIR)$(BINDIR)/$(LIB.SHARED)" "$(DESTDIR)$(BINDIR)/$(LIB.SHARED.MX)" + $(RM) "$(DESTDIR)$(BINDIR)/$(LIB.SHARED)" else - $(RM) "$(DESTDIR)$(LIBDIR)/$(LIB.SONAME)" "$(DESTDIR)$(LIBDIR)/$(LIB.SONAME.MX)" - $(RM) "$(DESTDIR)$(LIBDIR)/$(LIB.SHARED)" "$(DESTDIR)$(LIBDIR)/$(LIB.SHARED.MX)" + $(RM) "$(DESTDIR)$(LIBDIR)/$(LIB.SONAME)" + $(RM) "$(DESTDIR)$(LIBDIR)/$(LIB.SHARED)" endif - $(RM) "$(DESTDIR)$(LIBDIR)/$(LIB.STATIC)" "$(DESTDIR)$(LIBDIR)/$(LIB.STATIC.MX)" + $(RM) "$(DESTDIR)$(LIBDIR)/$(LIB.STATIC)" $(RM) "$(DESTDIR)$(BINDIR)/$(GLEWINFO.BIN)" "$(DESTDIR)$(BINDIR)/$(VISUALINFO.BIN)" clean: $(RM) -r tmp/ $(RM) -r lib/ $(RM) -r bin/ - $(RM) glew.pc glewmx.pc + $(RM) glew.pc distclean: clean find . -name \*~ | xargs $(RM) diff --git a/auto/Makefile b/auto/Makefile index 579f8ee..33663ac 100644 --- a/auto/Makefile +++ b/auto/Makefile @@ -250,7 +250,7 @@ $(S.DEST)/glew.c: $(EXT)/.dummy perl -e "s/GLEW_VERSION_MAJOR_STRING/$(GLEW_MAJOR)/g" -pi $@ perl -e "s/GLEW_VERSION_MINOR_STRING/$(GLEW_MINOR)/g" -pi $@ perl -e "s/GLEW_VERSION_MICRO_STRING/$(GLEW_MICRO)/g" -pi $@ - perl -e "s/GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader\(GLEW_CONTEXT_ARG_VAR_INIT\);/{ GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); _glewInit_GL_ARB_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); }/g" -pi $@ + perl -e "s/GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader\(\);/{ GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader(); _glewInit_GL_ARB_vertex_program(); }/g" -pi $@ perl -e "s/\(\(glColorSubTable = /((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)\"glBlendEquation\")) == NULL) || r;\n r = ((glColorSubTable = /g" -pi $@ rm -f $@.bak diff --git a/auto/bin/make_init.pl b/auto/bin/make_init.pl index dc9dca1..343a1ad 100755 --- a/auto/bin/make_init.pl +++ b/auto/bin/make_init.pl @@ -23,7 +23,7 @@ sub make_pfn_def_init($%) sub make_reuse_call($%) { - return " r = _glewInit_" . $_[0] . "(GLEW_CONTEXT_ARG_VAR_INIT) || r;"; + return " r = _glewInit_" . $_[0] . "() || r;"; } #------------------------------------------------------------------------------- @@ -49,8 +49,7 @@ if (@ARGV) if (keys %$functions or keys @$reuse) { print "#ifdef $extname\n\n"; - print "static GLboolean _glewInit_$extname (" . $type . - "EW_CONTEXT_ARG_DEF_INIT)\n{\n GLboolean r = GL_FALSE;\n"; + print "static GLboolean _glewInit_$extname ()\n{\n GLboolean r = GL_FALSE;\n"; output_reuse($reuse, \&make_reuse_call); output_decls($functions, \&make_pfn_def_init); print "\n return r;\n}\n\n"; diff --git a/auto/bin/make_initd.pl b/auto/bin/make_initd.pl index b7b552a..35c3b5d 100755 --- a/auto/bin/make_initd.pl +++ b/auto/bin/make_initd.pl @@ -36,8 +36,7 @@ if (@ARGV) #print "#ifdef $extname\n\n"; if (keys %$functions) { - print "static GLboolean _glewInit_$extname (" . $type . - "EW_CONTEXT_ARG_DEF_INIT);\n"; + print "static GLboolean _glewInit_$extname ();\n"; } #print "#endif /* $extname */\n\n"; } diff --git a/auto/bin/make_list.pl b/auto/bin/make_list.pl index e1accb9..3d0ddce 100755 --- a/auto/bin/make_list.pl +++ b/auto/bin/make_list.pl @@ -56,11 +56,11 @@ if (@ARGV) { if ($extname =~ /WGL_.*/) { - print " if (glewExperimental || " . $extvar . "|| crippled) " . $extvar . "= !_glewInit_$extname(GLEW_CONTEXT_ARG_VAR_INIT);\n"; + print " if (glewExperimental || " . $extvar . "|| crippled) " . $extvar . "= !_glewInit_$extname();\n"; } else { - print " if (glewExperimental || " . $extvar . ") " . $extvar . " = !_glewInit_$extname(GLEW_CONTEXT_ARG_VAR_INIT);\n"; + print " if (glewExperimental || " . $extvar . ") " . $extvar . " = !_glewInit_$extname();\n"; } } diff --git a/auto/doc/advanced.html b/auto/doc/advanced.html index 4bf2aa8..740a797 100644 --- a/auto/doc/advanced.html +++ b/auto/doc/advanced.html @@ -110,45 +110,6 @@ WGL_ATI_pixel_format_float
WGL_NV_float_buffer

-

Multiple Rendering Contexts (GLEW MX)

- -

Starting with release 1.2.0, thread-safe support for multiple -rendering contexts, possibly with different capabilities, is -available. Since this is not required by most users, it is not added -to the binary releases to maintain compatibility between different -versions. To include multi-context support, you have to do the -following:

-
    -
  1. Compile and use GLEW with the GLEW_MX preprocessor token -defined.
  2. -
  3. For each rendering context, create a GLEWContext object -that will be available as long as the rendering context exists.
  4. -
  5. Define a macro or function called glewGetContext() that -returns a pointer to the GLEWContext object associated with -the rendering context from which OpenGL/WGL/GLX calls are issued. This -dispatch mechanism is primitive, but generic. -
  6. Make sure that you call glewInit() after creating the -GLEWContext object in each rendering context. Note, that the -GLEWContext pointer returned by glewGetContext() has -to reside in global or thread-local memory. -
- -

Note that according to the MSDN -WGL documentation, you have to initialize the entry points for -every rendering context that use pixel formats with different -capabilities For example, the pixel formats provided by the generic -software OpenGL implementation by Microsoft vs. the hardware -accelerated pixel formats have different capabilities. GLEW by -default ignores this requirement, and does not define per-context -entry points (you can however do this using the steps described -above). Assuming a global namespace for the entry points works in -most situations, because typically all hardware accelerated pixel -formats provide the same entry points and capabilities. This means -that unless you use the multi-context version of GLEW, you need to -call glewInit() only once in your program, or more precisely, -once per process.

-

Separate Namespace

diff --git a/auto/src/glew.rc b/auto/src/glew.rc index c5afe1c..e930220 100644 --- a/auto/src/glew.rc +++ b/auto/src/glew.rc @@ -1,34 +1,18 @@ #include -#ifdef GLEW_MX -# ifdef GLEW_STATIC -# ifdef _DEBUG -# define FILENAME "glew32mxsd.dll" -# else -# define FILENAME "glew32mxs.dll" -# endif -# else -# ifdef _DEBUG -# define FILENAME "glew32mxd.dll" -# else -# define FILENAME "glew32mx.dll" -# endif -# endif +#ifdef GLEW_STATIC +# ifdef _DEBUG +# define FILENAME "glew32sd.dll" +# else +# define FILENAME "glew32s.dll" +# endif #else -# ifdef GLEW_STATIC -# ifdef _DEBUG -# define FILENAME "glew32sd.dll" -# else -# define FILENAME "glew32s.dll" -# endif -# else -# ifdef _DEBUG -# define FILENAME "glew32d.dll" -# else -# define FILENAME "glew32.dll" -# endif -# endif +# ifdef _DEBUG +# define FILENAME "glew32d.dll" +# else +# define FILENAME "glew32.dll" +# endif #endif ///////////////////////////////////////////////////////////////////////////// diff --git a/auto/src/glew_head.c b/auto/src/glew_head.c index ddcdd9f..e8672cb 100644 --- a/auto/src/glew_head.c +++ b/auto/src/glew_head.c @@ -13,35 +13,6 @@ #include /* For malloc, free */ #include /* For memset */ -/* - * Define glewGetContext and related helper macros. - */ -#ifdef GLEW_MX -# define glewGetContext() ctx -# ifdef _WIN32 -# define GLEW_CONTEXT_ARG_DEF_INIT GLEWContext* ctx -# define GLEW_CONTEXT_ARG_VAR_INIT ctx -# define wglewGetContext() ctx -# define WGLEW_CONTEXT_ARG_DEF_INIT WGLEWContext* ctx -# define WGLEW_CONTEXT_ARG_DEF_LIST WGLEWContext* ctx -# else /* _WIN32 */ -# define GLEW_CONTEXT_ARG_DEF_INIT void -# define GLEW_CONTEXT_ARG_VAR_INIT -# define glxewGetContext() ctx -# define GLXEW_CONTEXT_ARG_DEF_INIT void -# define GLXEW_CONTEXT_ARG_DEF_LIST GLXEWContext* ctx -# endif /* _WIN32 */ -# define GLEW_CONTEXT_ARG_DEF_LIST GLEWContext* ctx -#else /* GLEW_MX */ -# define GLEW_CONTEXT_ARG_DEF_INIT void -# define GLEW_CONTEXT_ARG_VAR_INIT -# define GLEW_CONTEXT_ARG_DEF_LIST void -# define WGLEW_CONTEXT_ARG_DEF_INIT void -# define WGLEW_CONTEXT_ARG_DEF_LIST void -# define GLXEW_CONTEXT_ARG_DEF_INIT void -# define GLXEW_CONTEXT_ARG_DEF_LIST void -#endif /* GLEW_MX */ - #if defined(GLEW_REGAL) /* In GLEW_REGAL mode we call direcly into the linked @@ -165,28 +136,16 @@ void* NSGLGetProcAddress (const GLubyte *name) */ #undef GLEW_GET_VAR -#ifdef GLEW_MX -# define GLEW_GET_VAR(x) (glewGetContext()->x) -#else /* GLEW_MX */ # define GLEW_GET_VAR(x) (x) -#endif /* GLEW_MX */ #ifdef WGLEW_GET_VAR # undef WGLEW_GET_VAR -# ifdef GLEW_MX -# define WGLEW_GET_VAR(x) (wglewGetContext()->x) -# else /* GLEW_MX */ -# define WGLEW_GET_VAR(x) (x) -# endif /* GLEW_MX */ +# define WGLEW_GET_VAR(x) (x) #endif /* WGLEW_GET_VAR */ #ifdef GLXEW_GET_VAR # undef GLXEW_GET_VAR -# ifdef GLEW_MX -# define GLXEW_GET_VAR(x) (glxewGetContext()->x) -# else /* GLEW_MX */ -# define GLXEW_GET_VAR(x) (x) -# endif /* GLEW_MX */ +# define GLXEW_GET_VAR(x) (x) #endif /* GLXEW_GET_VAR */ /* diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index 38293c2..3a30e58 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -59,10 +59,7 @@ GLboolean GLEWAPIENTRY glewGetExtension (const char* name) /* ------------------------------------------------------------------------- */ -#ifndef GLEW_MX -static -#endif -GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) +static GLenum GLEWAPIENTRY glewContextInit () { const GLubyte* s; GLuint dot; diff --git a/auto/src/glew_init_glx.c b/auto/src/glew_init_glx.c index b54cca3..159e45d 100644 --- a/auto/src/glew_init_glx.c +++ b/auto/src/glew_init_glx.c @@ -12,17 +12,13 @@ GLboolean glxewGetExtension (const char* name) return _glewSearchExtension(name, start, end); } -#ifdef GLEW_MX -GLenum glxewContextInit (GLXEW_CONTEXT_ARG_DEF_LIST) -#else -GLenum glxewInit (GLXEW_CONTEXT_ARG_DEF_LIST) -#endif +GLenum glxewInit () { int major, minor; const GLubyte* extStart; const GLubyte* extEnd; /* initialize core GLX 1.2 */ - if (_glewInit_GLX_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT)) return GLEW_ERROR_GLX_VERSION_11_ONLY; + if (_glewInit_GLX_VERSION_1_2()) return GLEW_ERROR_GLX_VERSION_11_ONLY; /* initialize flags */ GLXEW_VERSION_1_0 = GL_TRUE; GLXEW_VERSION_1_1 = GL_TRUE; diff --git a/auto/src/glew_init_tail.c b/auto/src/glew_init_tail.c index ba68ccf..17735dc 100644 --- a/auto/src/glew_init_tail.c +++ b/auto/src/glew_init_tail.c @@ -32,8 +32,6 @@ const GLubyte * GLEWAPIENTRY glewGetString (GLenum name) GLboolean glewExperimental = GL_FALSE; -#if !defined(GLEW_MX) - GLenum GLEWAPIENTRY glewInit (void) { GLenum r; @@ -49,5 +47,3 @@ GLenum GLEWAPIENTRY glewInit (void) return r; #endif /* _WIN32 */ } - -#endif /* !GLEW_MX */ diff --git a/auto/src/glew_init_wgl.c b/auto/src/glew_init_wgl.c index cc731fe..978cf3c 100644 --- a/auto/src/glew_init_wgl.c +++ b/auto/src/glew_init_wgl.c @@ -20,11 +20,7 @@ GLboolean GLEWAPIENTRY wglewGetExtension (const char* name) return _glewSearchExtension(name, start, end); } -#ifdef GLEW_MX -GLenum GLEWAPIENTRY wglewContextInit (WGLEW_CONTEXT_ARG_DEF_LIST) -#else -GLenum GLEWAPIENTRY wglewInit (WGLEW_CONTEXT_ARG_DEF_LIST) -#endif +GLenum GLEWAPIENTRY wglewInit () { GLboolean crippled; const GLubyte* extStart; diff --git a/auto/src/glew_str_glx.c b/auto/src/glew_str_glx.c index 785c23a..af4f8c6 100644 --- a/auto/src/glew_str_glx.c +++ b/auto/src/glew_str_glx.c @@ -6,11 +6,7 @@ #elif !defined(GLEW_OSMESA) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -#if defined(GLEW_MX) -GLboolean glxewContextIsSupported (const GLXEWContext* ctx, const char* name) -#else GLboolean glxewIsSupported (const char* name) -#endif { const GLubyte* pos = (const GLubyte*)name; GLuint len = _glewStrLen(pos); diff --git a/auto/src/glew_str_head.c b/auto/src/glew_str_head.c index 1e8d963..fed3a0f 100644 --- a/auto/src/glew_str_head.c +++ b/auto/src/glew_str_head.c @@ -1,8 +1,4 @@ -#ifdef GLEW_MX -GLboolean GLEWAPIENTRY glewContextIsSupported (const GLEWContext* ctx, const char* name) -#else GLboolean GLEWAPIENTRY glewIsSupported (const char* name) -#endif { const GLubyte* pos = (const GLubyte*)name; GLuint len = _glewStrLen(pos); diff --git a/auto/src/glew_str_wgl.c b/auto/src/glew_str_wgl.c index 01055a4..b204386 100644 --- a/auto/src/glew_str_wgl.c +++ b/auto/src/glew_str_wgl.c @@ -6,11 +6,7 @@ #if defined(_WIN32) && !defined(GLEW_OSMESA) -#if defined(GLEW_MX) -GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext* ctx, const char* name) -#else GLboolean GLEWAPIENTRY wglewIsSupported (const char* name) -#endif { const GLubyte* pos = (const GLubyte*)name; GLuint len = _glewStrLen(pos); diff --git a/auto/src/glew_tail.h b/auto/src/glew_tail.h index 92ac0bd..6ee9912 100644 --- a/auto/src/glew_tail.h +++ b/auto/src/glew_tail.h @@ -25,25 +25,6 @@ VERSION_MICRO GLEW_VERSION_MICRO_STRING */ /* API */ -#ifdef GLEW_MX - -typedef struct GLEWContextStruct GLEWContext; -GLEWAPI GLenum GLEWAPIENTRY glewContextInit (GLEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY glewContextIsSupported (const GLEWContext *ctx, const char *name); - -#define glewInit() glewContextInit(glewGetContext()) -#define glewIsSupported(x) glewContextIsSupported(glewGetContext(), x) -#define glewIsExtensionSupported(x) glewIsSupported(x) - -#define GLEW_GET_VAR(x) (*(const GLboolean*)&(glewGetContext()->x)) -#ifdef _WIN32 -# define GLEW_GET_FUN(x) glewGetContext()->x -#else -# define GLEW_GET_FUN(x) x -#endif - -#else /* GLEW_MX */ - GLEWAPI GLenum GLEWAPIENTRY glewInit (void); GLEWAPI GLboolean GLEWAPIENTRY glewIsSupported (const char *name); #define glewIsExtensionSupported(x) glewIsSupported(x) @@ -51,8 +32,6 @@ GLEWAPI GLboolean GLEWAPIENTRY glewIsSupported (const char *name); #define GLEW_GET_VAR(x) (*(const GLboolean*)&x) #define GLEW_GET_FUN(x) x -#endif /* GLEW_MX */ - GLEWAPI GLboolean glewExperimental; GLEWAPI GLboolean GLEWAPIENTRY glewGetExtension (const char *name); GLEWAPI const GLubyte * GLEWAPIENTRY glewGetErrorString (GLenum error); diff --git a/auto/src/glewinfo.rc b/auto/src/glewinfo.rc index 7a2d920..2f46bc5 100644 --- a/auto/src/glewinfo.rc +++ b/auto/src/glewinfo.rc @@ -1,18 +1,10 @@ #include -#ifdef GLEW_MX -# ifdef _DEBUG -# define FILENAME "glewinfo-mxd.exe" -# else -# define FILENAME "glewinfo-mx.exe" -# endif +#ifdef _DEBUG +# define FILENAME "glewinfod.exe" #else -# ifdef _DEBUG -# define FILENAME "glewinfod.exe" -# else -# define FILENAME "glewinfo.exe" -# endif +# define FILENAME "glewinfo.exe" #endif ///////////////////////////////////////////////////////////////////////////// diff --git a/auto/src/glewinfo_head.c b/auto/src/glewinfo_head.c index fd4bead..6a8347b 100644 --- a/auto/src/glewinfo_head.c +++ b/auto/src/glewinfo_head.c @@ -21,18 +21,6 @@ static FILE* f; -#ifdef GLEW_MX -GLEWContext _glewctx; -#define glewGetContext() (&_glewctx) -#if defined(_WIN32) -WGLEWContext _wglewctx; -#define wglewGetContext() (&_wglewctx) -#elif !defined(GLEW_OSMESA) && !defined(__APPLE__) && !defined(__HAIKU__) || defined(GLEW_APPLE_GLX) -GLXEWContext _glxewctx; -#define glxewGetContext() (&_glxewctx) -#endif -#endif - /* Command-line parameters for GL context creation */ struct createParams diff --git a/auto/src/glewinfo_tail.c b/auto/src/glewinfo_tail.c index 1999b06..e69f96d 100644 --- a/auto/src/glewinfo_tail.c +++ b/auto/src/glewinfo_tail.c @@ -46,18 +46,7 @@ int main (int argc, char** argv) return 1; } glewExperimental = GL_TRUE; -#ifdef GLEW_MX - err = glewContextInit(glewGetContext()); -#if defined(GLEW_OSMESA) -#elif defined(_WIN32) - err = err || wglewContextInit(wglewGetContext()); -#elif !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - err = err || glxewContextInit(glxewGetContext()); -#endif - -#else err = glewInit(); -#endif if (GLEW_OK != err) { fprintf(stderr, "Error [main]: glewInit failed: %s\n", glewGetErrorString(err)); diff --git a/auto/src/glxew_mid.h b/auto/src/glxew_mid.h index e9a3391..7fcf5d6 100644 --- a/auto/src/glxew_mid.h +++ b/auto/src/glxew_mid.h @@ -1,9 +1,4 @@ /* ------------------------------------------------------------------------- */ -#ifdef GLEW_MX -#define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT -#define GLXEW_VAR_EXPORT -#else #define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT #define GLXEW_VAR_EXPORT GLEW_VAR_EXPORT -#endif /* GLEW_MX */ diff --git a/auto/src/glxew_tail.h b/auto/src/glxew_tail.h index e086253..4026fa7 100644 --- a/auto/src/glxew_tail.h +++ b/auto/src/glxew_tail.h @@ -1,27 +1,11 @@ /* ------------------------------------------------------------------------ */ -#ifdef GLEW_MX - -typedef struct GLXEWContextStruct GLXEWContext; -GLEWAPI GLenum GLEWAPIENTRY glxewContextInit (GLXEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY glxewContextIsSupported (const GLXEWContext *ctx, const char *name); - -#define glxewInit() glxewContextInit(glxewGetContext()) -#define glxewIsSupported(x) glxewContextIsSupported(glxewGetContext(), x) - -#define GLXEW_GET_VAR(x) (*(const GLboolean*)&(glxewGetContext()->x)) -#define GLXEW_GET_FUN(x) x - -#else /* GLEW_MX */ - GLEWAPI GLenum GLEWAPIENTRY glxewInit (); GLEWAPI GLboolean GLEWAPIENTRY glxewIsSupported (const char *name); #define GLXEW_GET_VAR(x) (*(const GLboolean*)&x) #define GLXEW_GET_FUN(x) x -#endif /* GLEW_MX */ - GLEWAPI GLboolean GLEWAPIENTRY glxewGetExtension (const char *name); #ifdef __cplusplus diff --git a/auto/src/visualinfo.rc b/auto/src/visualinfo.rc index ed747df..5719592 100644 --- a/auto/src/visualinfo.rc +++ b/auto/src/visualinfo.rc @@ -1,18 +1,10 @@ #include -#ifdef GLEW_MX -# ifdef _DEBUG -# define FILENAME "visualinfo-mxd.exe" -# else -# define FILENAME "visualinfo-mx.exe" -# endif +#ifdef _DEBUG +# define FILENAME "visualinfod.exe" #else -# ifdef _DEBUG -# define FILENAME "visualinfod.exe" -# else -# define FILENAME "visualinfo.exe" -# endif +# define FILENAME "visualinfo.exe" #endif ///////////////////////////////////////////////////////////////////////////// diff --git a/auto/src/wglew_mid.h b/auto/src/wglew_mid.h index a0a5ade..25b1037 100644 --- a/auto/src/wglew_mid.h +++ b/auto/src/wglew_mid.h @@ -1,9 +1,4 @@ /* ------------------------------------------------------------------------- */ -#ifdef GLEW_MX -#define WGLEW_FUN_EXPORT -#define WGLEW_VAR_EXPORT -#else #define WGLEW_FUN_EXPORT GLEW_FUN_EXPORT #define WGLEW_VAR_EXPORT GLEW_VAR_EXPORT -#endif /* GLEW_MX */ diff --git a/auto/src/wglew_tail.h b/auto/src/wglew_tail.h index f48f36c..3810662 100644 --- a/auto/src/wglew_tail.h +++ b/auto/src/wglew_tail.h @@ -1,27 +1,11 @@ /* ------------------------------------------------------------------------- */ -#ifdef GLEW_MX - -typedef struct WGLEWContextStruct WGLEWContext; -GLEWAPI GLenum GLEWAPIENTRY wglewContextInit (WGLEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext *ctx, const char *name); - -#define wglewInit() wglewContextInit(wglewGetContext()) -#define wglewIsSupported(x) wglewContextIsSupported(wglewGetContext(), x) - -#define WGLEW_GET_VAR(x) (*(const GLboolean*)&(wglewGetContext()->x)) -#define WGLEW_GET_FUN(x) wglewGetContext()->x - -#else /* GLEW_MX */ - GLEWAPI GLenum GLEWAPIENTRY wglewInit (); GLEWAPI GLboolean GLEWAPIENTRY wglewIsSupported (const char *name); #define WGLEW_GET_VAR(x) (*(const GLboolean*)&x) #define WGLEW_GET_FUN(x) x -#endif /* GLEW_MX */ - GLEWAPI GLboolean GLEWAPIENTRY wglewGetExtension (const char *name); #ifdef __cplusplus diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 1f458a7..353be7f 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -84,20 +84,11 @@ set_target_properties (glew_s PROPERTIES COMPILE_DEFINITIONS "GLEW_STATIC" OUTPU target_link_libraries (glew ${GLEW_LIBRARIES}) target_link_libraries (glew_s ${GLEW_LIBRARIES}) -add_library(glewmx SHARED ${GLEW_SRC_FILES}) -set_target_properties (glewmx PROPERTIES COMPILE_DEFINITIONS "GLEW_BUILD;GLEW_MX" OUTPUT_NAME "${GLEW_LIB_NAME}mx" PREFIX "${DLL_PREFIX}") -add_library(glewmx_s STATIC ${GLEW_SRC_FILES}) -set_target_properties (glewmx_s PROPERTIES COMPILE_DEFINITIONS "GLEW_STATIC;GLEW_MX" OUTPUT_NAME "${GLEW_LIB_NAME}mx" PREFIX lib) -target_link_libraries (glewmx ${GLEW_LIBRARIES}) -target_link_libraries (glewmx_s ${GLEW_LIBRARIES}) - if(CMAKE_VERSION VERSION_LESS 2.8.12) set(MAYBE_EXPORT "") else() target_compile_definitions(glew_s INTERFACE "GLEW_STATIC") - target_compile_definitions(glewmx INTERFACE "GLEW_MX") - target_compile_definitions(glewmx_s INTERFACE "GLEW_STATIC;GLEW_MX") - foreach(t glew glew_s glewmx glewmx_s) + foreach(t glew glew_s ) target_include_directories(${t} PUBLIC $) endforeach() set(MAYBE_EXPORT EXPORT glew-targets) @@ -105,11 +96,11 @@ endif() set(targets_to_install "") if(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS) - list(APPEND targets_to_install glew glewmx) + list(APPEND targets_to_install glew ) endif() if(NOT DEFINED BUILD_SHARED_LIBS OR NOT BUILD_SHARED_LIBS) - list(APPEND targets_to_install glew_s glewmx_s) + list(APPEND targets_to_install glew_s ) endif() install ( TARGETS ${targets_to_install} @@ -148,11 +139,8 @@ set (libname ${GLEW_LIB_NAME}) set (cflags) set (requireslib glu) configure_file (${GLEW_DIR}/glew.pc.in ${GLEW_DIR}/glew.pc @ONLY) -set (cflags "-DGLEW_MX") -set (libname ${GLEW_LIB_NAME}mx) -configure_file (${GLEW_DIR}/glew.pc.in ${GLEW_DIR}/glewmx.pc @ONLY) -install(FILES ${GLEW_DIR}/glew.pc ${GLEW_DIR}/glewmx.pc +install(FILES ${GLEW_DIR}/glew.pc DESTINATION lib/pkgconfig ) diff --git a/doc/advanced.html b/doc/advanced.html index 8165a72..ffd1242 100644 --- a/doc/advanced.html +++ b/doc/advanced.html @@ -204,45 +204,6 @@ WGL_ATI_pixel_format_float
WGL_NV_float_buffer

-

Multiple Rendering Contexts (GLEW MX)

- -

Starting with release 1.2.0, thread-safe support for multiple -rendering contexts, possibly with different capabilities, is -available. Since this is not required by most users, it is not added -to the binary releases to maintain compatibility between different -versions. To include multi-context support, you have to do the -following:

-
    -
  1. Compile and use GLEW with the GLEW_MX preprocessor token -defined.
  2. -
  3. For each rendering context, create a GLEWContext object -that will be available as long as the rendering context exists.
  4. -
  5. Define a macro or function called glewGetContext() that -returns a pointer to the GLEWContext object associated with -the rendering context from which OpenGL/WGL/GLX calls are issued. This -dispatch mechanism is primitive, but generic. -
  6. Make sure that you call glewInit() after creating the -GLEWContext object in each rendering context. Note, that the -GLEWContext pointer returned by glewGetContext() has -to reside in global or thread-local memory. -
- -

Note that according to the MSDN -WGL documentation, you have to initialize the entry points for -every rendering context that use pixel formats with different -capabilities For example, the pixel formats provided by the generic -software OpenGL implementation by Microsoft vs. the hardware -accelerated pixel formats have different capabilities. GLEW by -default ignores this requirement, and does not define per-context -entry points (you can however do this using the steps described -above). Assuming a global namespace for the entry points works in -most situations, because typically all hardware accelerated pixel -formats provide the same entry points and capabilities. This means -that unless you use the multi-context version of GLEW, you need to -call glewInit() only once in your program, or more precisely, -once per process.

-

Separate Namespace

diff --git a/doc/glew.html b/doc/glew.html index 1b26e5f..3b82eae 100644 --- a/doc/glew.html +++ b/doc/glew.html @@ -494,206 +494,207 @@ THE POSSIBILITY OF SUCH DAMAGE.

+ - + - + - - - - + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - + + - - + + - - - - - - - + + + + + + + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - + - - - - - - - + + + + + + + - - - + + +
384 KHR_robustness
385 KHR_texture_compression_astc_hdr
386 KHR_texture_compression_astc_ldr
387 KHR_texture_compression_astc_sliced_3d

387 KTX_buffer_region
388 KTX_buffer_region

388 MESAX_texture_stack
389 MESAX_texture_stack

389 MESA_pack_invert
390 MESA_resize_buffers
391 MESA_window_pos
392 MESA_ycbcr_texture
390 MESA_pack_invert
391 MESA_resize_buffers
392 MESA_window_pos
393 MESA_ycbcr_texture

393 NVX_conditional_render
394 NVX_gpu_memory_info
394 NVX_conditional_render
395 NVX_gpu_memory_info

395 NV_bindless_multi_draw_indirect
396 NV_bindless_multi_draw_indirect_count
397 NV_bindless_texture
398 NV_blend_equation_advanced
399 NV_blend_equation_advanced_coherent
400 NV_blend_square
401 NV_compute_program5
402 NV_conditional_render
403 NV_conservative_raster
404 NV_conservative_raster_dilate
405 NV_copy_depth_to_color
406 NV_copy_image
407 NV_deep_texture3D
408 NV_depth_buffer_float
409 NV_depth_clamp
410 NV_depth_range_unclamped
411 NV_draw_texture
412 NV_evaluators
413 NV_explicit_multisample
414 NV_fence
415 NV_fill_rectangle
416 NV_float_buffer
417 NV_fog_distance
418 NV_fragment_coverage_to_color
419 NV_fragment_program
420 NV_fragment_program2
421 NV_fragment_program4
422 NV_fragment_program_option
423 NV_fragment_shader_interlock
424 NV_framebuffer_mixed_samples
425 NV_framebuffer_multisample_coverage
426 NV_geometry_program4
427 NV_geometry_shader4
428 NV_geometry_shader_passthrough
429 NV_gpu_program4
430 NV_gpu_program5
431 NV_gpu_program5_mem_extended
432 NV_gpu_program_fp64
433 NV_gpu_shader5
434 NV_half_float
435 NV_internalformat_sample_query
436 NV_light_max_exponent
437 NV_multisample_coverage
438 NV_multisample_filter_hint
439 NV_occlusion_query
440 NV_packed_depth_stencil
441 NV_parameter_buffer_object
442 NV_parameter_buffer_object2
443 NV_path_rendering
444 NV_path_rendering_shared_edge
445 NV_pixel_data_range
446 NV_point_sprite
447 NV_present_video
448 NV_primitive_restart
449 NV_register_combiners
450 NV_register_combiners2
451 NV_sample_locations
452 NV_sample_mask_override_coverage
453 NV_shader_atomic_counters
454 NV_shader_atomic_float
455 NV_shader_atomic_fp16_vector
456 NV_shader_atomic_int64
457 NV_shader_buffer_load
458 NV_shader_storage_buffer_object
459 NV_shader_thread_group
460 NV_shader_thread_shuffle
461 NV_tessellation_program5
462 NV_texgen_emboss
463 NV_texgen_reflection
464 NV_texture_barrier
465 NV_texture_compression_vtc
466 NV_texture_env_combine4
467 NV_texture_expand_normal
468 NV_texture_multisample
469 NV_texture_rectangle
470 NV_texture_shader
471 NV_texture_shader2
472 NV_texture_shader3
473 NV_transform_feedback
474 NV_transform_feedback2
475 NV_uniform_buffer_unified_memory
476 NV_vdpau_interop
477 NV_vertex_array_range
478 NV_vertex_array_range2
479 NV_vertex_attrib_integer_64bit
480 NV_vertex_buffer_unified_memory
481 NV_vertex_program
482 NV_vertex_program1_1
483 NV_vertex_program2
484 NV_vertex_program2_option
485 NV_vertex_program3
486 NV_vertex_program4
487 NV_video_capture
488 NV_viewport_array2
396 NV_bindless_multi_draw_indirect
397 NV_bindless_multi_draw_indirect_count
398 NV_bindless_texture
399 NV_blend_equation_advanced
400 NV_blend_equation_advanced_coherent
401 NV_blend_square
402 NV_compute_program5
403 NV_conditional_render
404 NV_conservative_raster
405 NV_conservative_raster_dilate
406 NV_copy_depth_to_color
407 NV_copy_image
408 NV_deep_texture3D
409 NV_depth_buffer_float
410 NV_depth_clamp
411 NV_depth_range_unclamped
412 NV_draw_texture
413 NV_evaluators
414 NV_explicit_multisample
415 NV_fence
416 NV_fill_rectangle
417 NV_float_buffer
418 NV_fog_distance
419 NV_fragment_coverage_to_color
420 NV_fragment_program
421 NV_fragment_program2
422 NV_fragment_program4
423 NV_fragment_program_option
424 NV_fragment_shader_interlock
425 NV_framebuffer_mixed_samples
426 NV_framebuffer_multisample_coverage
427 NV_geometry_program4
428 NV_geometry_shader4
429 NV_geometry_shader_passthrough
430 NV_gpu_program4
431 NV_gpu_program5
432 NV_gpu_program5_mem_extended
433 NV_gpu_program_fp64
434 NV_gpu_shader5
435 NV_half_float
436 NV_internalformat_sample_query
437 NV_light_max_exponent
438 NV_multisample_coverage
439 NV_multisample_filter_hint
440 NV_occlusion_query
441 NV_packed_depth_stencil
442 NV_parameter_buffer_object
443 NV_parameter_buffer_object2
444 NV_path_rendering
445 NV_path_rendering_shared_edge
446 NV_pixel_data_range
447 NV_point_sprite
448 NV_present_video
449 NV_primitive_restart
450 NV_register_combiners
451 NV_register_combiners2
452 NV_sample_locations
453 NV_sample_mask_override_coverage
454 NV_shader_atomic_counters
455 NV_shader_atomic_float
456 NV_shader_atomic_fp16_vector
457 NV_shader_atomic_int64
458 NV_shader_buffer_load
459 NV_shader_storage_buffer_object
460 NV_shader_thread_group
461 NV_shader_thread_shuffle
462 NV_tessellation_program5
463 NV_texgen_emboss
464 NV_texgen_reflection
465 NV_texture_barrier
466 NV_texture_compression_vtc
467 NV_texture_env_combine4
468 NV_texture_expand_normal
469 NV_texture_multisample
470 NV_texture_rectangle
471 NV_texture_shader
472 NV_texture_shader2
473 NV_texture_shader3
474 NV_transform_feedback
475 NV_transform_feedback2
476 NV_uniform_buffer_unified_memory
477 NV_vdpau_interop
478 NV_vertex_array_range
479 NV_vertex_array_range2
480 NV_vertex_attrib_integer_64bit
481 NV_vertex_buffer_unified_memory
482 NV_vertex_program
483 NV_vertex_program1_1
484 NV_vertex_program2
485 NV_vertex_program2_option
486 NV_vertex_program3
487 NV_vertex_program4
488 NV_video_capture
489 NV_viewport_array2

489 OES_byte_coordinates
490 OES_compressed_paletted_texture
491 OES_read_format
492 OES_single_precision
490 OES_byte_coordinates
491 OES_compressed_paletted_texture
492 OES_read_format
493 OES_single_precision

493 OML_interlace
494 OML_resample
495 OML_subsample
494 OML_interlace
495 OML_resample
496 OML_subsample

496 OVR_multiview
497 OVR_multiview2
497 OVR_multiview
498 OVR_multiview2

498 PGI_misc_hints
499 PGI_vertex_hints
499 PGI_misc_hints
500 PGI_vertex_hints

500 REGAL_ES1_0_compatibility
501 REGAL_ES1_1_compatibility
502 REGAL_enable
503 REGAL_error_string
504 REGAL_extension_query
505 REGAL_log
506 REGAL_proc_address
501 REGAL_ES1_0_compatibility
502 REGAL_ES1_1_compatibility
503 REGAL_enable
504 REGAL_error_string
505 REGAL_extension_query
506 REGAL_log
507 REGAL_proc_address

507 REND_screen_coordinates
508 REND_screen_coordinates

508 S3_s3tc
509 S3_s3tc

509 SGIS_color_range
510 SGIS_detail_texture
511 SGIS_fog_function
512 SGIS_generate_mipmap
513 SGIS_multisample
514 SGIS_pixel_texture
515 SGIS_point_line_texgen
516 SGIS_sharpen_texture
517 SGIS_texture4D
518 SGIS_texture_border_clamp
519 SGIS_texture_edge_clamp
520 SGIS_texture_filter4
521 SGIS_texture_lod
522 SGIS_texture_select
510 SGIS_color_range
511 SGIS_detail_texture
512 SGIS_fog_function
513 SGIS_generate_mipmap
514 SGIS_multisample
515 SGIS_pixel_texture
516 SGIS_point_line_texgen
517 SGIS_sharpen_texture
518 SGIS_texture4D
519 SGIS_texture_border_clamp
520 SGIS_texture_edge_clamp
521 SGIS_texture_filter4
522 SGIS_texture_lod
523 SGIS_texture_select

523 SGIX_async
524 SGIX_async_histogram
525 SGIX_async_pixel
526 SGIX_blend_alpha_minmax
527 SGIX_clipmap
528 SGIX_convolution_accuracy
529 SGIX_depth_texture
530 SGIX_flush_raster
531 SGIX_fog_offset
532 SGIX_fog_texture
533 SGIX_fragment_specular_lighting
534 SGIX_framezoom
535 SGIX_interlace
536 SGIX_ir_instrument1
537 SGIX_list_priority
538 SGIX_pixel_texture
539 SGIX_pixel_texture_bits
540 SGIX_reference_plane
541 SGIX_resample
542 SGIX_shadow
543 SGIX_shadow_ambient
544 SGIX_sprite
545 SGIX_tag_sample_buffer
546 SGIX_texture_add_env
547 SGIX_texture_coordinate_clamp
548 SGIX_texture_lod_bias
549 SGIX_texture_multi_buffer
550 SGIX_texture_range
551 SGIX_texture_scale_bias
552 SGIX_vertex_preclip
553 SGIX_vertex_preclip_hint
554 SGIX_ycrcb
524 SGIX_async
525 SGIX_async_histogram
526 SGIX_async_pixel
527 SGIX_blend_alpha_minmax
528 SGIX_clipmap
529 SGIX_convolution_accuracy
530 SGIX_depth_texture
531 SGIX_flush_raster
532 SGIX_fog_offset
533 SGIX_fog_texture
534 SGIX_fragment_specular_lighting
535 SGIX_framezoom
536 SGIX_interlace
537 SGIX_ir_instrument1
538 SGIX_list_priority
539 SGIX_pixel_texture
540 SGIX_pixel_texture_bits
541 SGIX_reference_plane
542 SGIX_resample
543 SGIX_shadow
544 SGIX_shadow_ambient
545 SGIX_sprite
546 SGIX_tag_sample_buffer
547 SGIX_texture_add_env
548 SGIX_texture_coordinate_clamp
549 SGIX_texture_lod_bias
550 SGIX_texture_multi_buffer
551 SGIX_texture_range
552 SGIX_texture_scale_bias
553 SGIX_vertex_preclip
554 SGIX_vertex_preclip_hint
555 SGIX_ycrcb

555 SGI_color_matrix
556 SGI_color_table
557 SGI_texture_color_table
556 SGI_color_matrix
557 SGI_color_table
558 SGI_texture_color_table

558 SUNX_constant_data
559 SUNX_constant_data

559 SUN_convolution_border_modes
560 SUN_global_alpha
561 SUN_mesh_array
562 SUN_read_video_pixels
563 SUN_slice_accum
564 SUN_triangle_list
565 SUN_vertex
560 SUN_convolution_border_modes
561 SUN_global_alpha
562 SUN_mesh_array
563 SUN_read_video_pixels
564 SUN_slice_accum
565 SUN_triangle_list
566 SUN_vertex

566 WIN_phong_shading
567 WIN_specular_fog
568 WIN_swap_hint
567 WIN_phong_shading
568 WIN_specular_fog
569 WIN_swap_hint
From 8b0b5db90ceb29eaf4421579284a1a480063b447 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Thu, 19 Nov 2015 21:21:44 +1000 Subject: [PATCH 15/81] Re-enable Travis build for Core Context mode --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index e699d32..769a9ab 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,10 +5,10 @@ script: - make -C auto clobber - make extensions - make dist-src -#- make clean; SYSTEM=linux make -#- make clean; SYSTEM=linux-osmesa make -#- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' . ; make; popd -#- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' -DGLEW_OSMESA=1 .; make; popd +- make clean; SYSTEM=linux make +- make clean; SYSTEM=linux-osmesa make +- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' . ; make; popd +- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' -DGLEW_OSMESA=1 .; make; popd addons: apt: packages: From be2688de70d7e6544c8f91f1125aa906b170f442 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Thu, 19 Nov 2015 21:35:29 +1000 Subject: [PATCH 16/81] For mingw32 cross-builds, link msvcrt library for malloc, free, etc --- config/Makefile.linux-mingw-w64 | 2 +- config/Makefile.linux-mingw32 | 2 +- config/Makefile.linux-mingw64 | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/Makefile.linux-mingw-w64 b/config/Makefile.linux-mingw-w64 index bedf166..57cd203 100644 --- a/config/Makefile.linux-mingw-w64 +++ b/config/Makefile.linux-mingw-w64 @@ -9,7 +9,7 @@ CC := i686-w64-mingw32-gcc LD := i686-w64-mingw32-ld LN := STRIP := -LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 +LDFLAGS.GL = -lopengl32 -lgdi32 -lmsvcrt -luser32 -lkernel32 WARN = -Wall -W POPT = -O2 BIN.SUFFIX = .exe diff --git a/config/Makefile.linux-mingw32 b/config/Makefile.linux-mingw32 index fdb2239..049ee74 100644 --- a/config/Makefile.linux-mingw32 +++ b/config/Makefile.linux-mingw32 @@ -10,7 +10,7 @@ CC := $(HOST)-gcc LD := $(HOST)-ld LN := STRIP := -LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 +LDFLAGS.GL = -lopengl32 -lgdi32 -lmsvcrt -luser32 -lkernel32 WARN = -Wall -W POPT = -O2 BIN.SUFFIX = .exe diff --git a/config/Makefile.linux-mingw64 b/config/Makefile.linux-mingw64 index 0e19f6c..c5c386c 100644 --- a/config/Makefile.linux-mingw64 +++ b/config/Makefile.linux-mingw64 @@ -10,7 +10,7 @@ CC := $(HOST)-gcc LD := $(HOST)-ld LN := STRIP := -LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 +LDFLAGS.GL = -lopengl32 -lgdi32 -lmsvcrt -luser32 -lkernel32 WARN = -Wall -W POPT = -O2 BIN.SUFFIX = .exe From 9e66fc86a30b3f22b26073bcf67d384016d0037e Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Thu, 19 Nov 2015 21:42:52 +1000 Subject: [PATCH 17/81] More cmake migrate for removal of MX --- build/cmake/glew-config.cmake | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/build/cmake/glew-config.cmake b/build/cmake/glew-config.cmake index 29efcbe..0b79c0b 100644 --- a/build/cmake/glew-config.cmake +++ b/build/cmake/glew-config.cmake @@ -1,23 +1,23 @@ # This config-module creates the following import libraries: # -# - GLEW::glew and GLEW::glewmx shared libs -# - GLEW::glew_s and GLEW::glewmx_s static libs +# - GLEW::glew shared lib +# - GLEW::glew_s static lib # -# Additionally GLEW::GLEW and GLEW::GLEWMX will be created as an +# Additionally GLEW::GLEW will be created as an # copy of either the shared (default) or the static libs. # # Dependending on the setting of BUILD_SHARED_LIBS at GLEW build time # either the static or shared versions may not be available. # # Set GLEW_USE_STATIC_LIBS to OFF or ON to force using the shared -# or static libs for GLEW::GLEW and GLEW::GLEWMX +# or static lib for GLEW::GLEW # include(${CMAKE_CURRENT_LIST_DIR}/glew-targets.cmake) include(${CMAKE_CURRENT_LIST_DIR}/CopyImportedTargetProperties.cmake) -# decide which import library (glew/glew_s and glewmx/glewmx_s) -# needs to be copied to GLEW::GLEW and GLEW::GLEWMX +# decide which import library (glew/glew_s) +# needs to be copied to GLEW::GLEW set(_glew_target_postfix "") set(_glew_target_type SHARED) if(DEFINED GLEW_USE_STATIC_LIBS) @@ -37,7 +37,7 @@ endif() # CMake doesn't allow creating ALIAS lib for an IMPORTED lib # so create imported ones and copy the properties -foreach(_glew_target glew glewmx) +foreach(_glew_target glew) set(_glew_src_target "GLEW::${_glew_target}${_glew_target_postfix}") string(TOUPPER "GLEW::${_glew_target}" _glew_dest_target) if(TARGET ${_glew_dest_target}) From dd6e034cbadbf8b7301766c3de956dfe2689af22 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sun, 6 Dec 2015 12:50:41 +1000 Subject: [PATCH 18/81] Bump GLEW to version 2.0.0, with Core context support, but no MX, for now. --- config/version | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/version b/config/version index b8e1df7..cdf3520 100644 --- a/config/version +++ b/config/version @@ -1,5 +1,5 @@ -GLEW_MAJOR = 1 -GLEW_MINOR = 13 +GLEW_MAJOR = 2 +GLEW_MINOR = 0 GLEW_MICRO = 0 GLEW_VERSION = $(GLEW_MAJOR).$(GLEW_MINOR).$(GLEW_MICRO) GLEW_NAME = GLEW From b1c272b93a1df85b14ae756b779c502e1a999f16 Mon Sep 17 00:00:00 2001 From: Icy Defiance Date: Wed, 6 Jan 2016 19:39:48 -0500 Subject: [PATCH 19/81] Replace int with ptrdiff_t to store the result of pointer subtraction --- auto/src/glew_init_gl.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index 3a30e58..4907eda 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -8,7 +8,7 @@ static int _glewExtensionCompare(const void *a, const void *b) static GLboolean *_glewGetExtensionString(const char *name) { const char **n = (const char **) bsearch(name, _glewExtensionLookup, sizeof(_glewExtensionLookup)/sizeof(char *)-1, sizeof(char *), _glewExtensionCompare); - int i; + ptrdiff_t i; if (n) { @@ -22,7 +22,7 @@ static GLboolean *_glewGetExtensionString(const char *name) static GLboolean *_glewGetExtensionEnable(const char *name) { const char **n = (const char **) bsearch(name, _glewExtensionLookup, sizeof(_glewExtensionLookup)/sizeof(char *)-1, sizeof(char *), _glewExtensionCompare); - int i; + ptrdiff_t i; if (n) { From d96c9787480e397b3e41a5301786886305d76fd2 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Thu, 7 Jan 2016 21:28:01 +1000 Subject: [PATCH 20/81] Eliminate malloc and free dependencies, recently introduced --- auto/src/glew_head.c | 25 ++++++++-------------- auto/src/glew_init_gl.c | 46 +++++++++++++++++++++-------------------- 2 files changed, 33 insertions(+), 38 deletions(-) diff --git a/auto/src/glew_head.c b/auto/src/glew_head.c index e8672cb..e745e8e 100644 --- a/auto/src/glew_head.c +++ b/auto/src/glew_head.c @@ -10,7 +10,7 @@ #endif #include /* For size_t */ -#include /* For malloc, free */ +#include /* For bsearch */ #include /* For memset */ #if defined(GLEW_REGAL) @@ -65,7 +65,7 @@ void* NSGLGetProcAddress (const GLubyte *name) { static void* image = NULL; void* addr; - if (NULL == image) + if (NULL == image) { image = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY); } @@ -166,23 +166,16 @@ static GLuint _glewStrCLen (const GLubyte* s, GLubyte c) GLuint i=0; if (s == NULL) return 0; while (s[i] != '\0' && s[i] != c) i++; - return (s[i] == '\0' || s[i] == c) ? i : 0; + return i; } -static GLubyte *_glewStrDup (const GLubyte *s) +static GLuint _glewStrCopy(char *d, const char *s, char c) { - int n = _glewStrLen(s); - GLubyte *dup = malloc(n+1); - if (dup) - { - GLubyte *i = dup; - for (;;) - { - *i = *s; - if (*i) { ++i; ++s; } else break; - } - } - return dup; + GLuint i=0; + if (s == NULL) return 0; + while (s[i] != '\0' && s[i] != c) { d[i] = s[i]; i++; } + d[i] = '\0'; + return i; } #if !defined(__APPLE__) || defined(GLEW_APPLE_GLX) diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index 4907eda..b30dfce 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -33,17 +33,17 @@ static GLboolean *_glewGetExtensionEnable(const char *name) return NULL; } -static char *_glewNextSpace(char *i) +static const char *_glewNextSpace(const char *i) { - char *j = i; + const char *j = i; if (j) while (*j!=' ' && *j) ++j; return j; } -static char *_glewNextNonSpace(char *i) +static const char *_glewNextNonSpace(const char *i) { - char *j = i; + const char *j = i; if (j) while (*j==' ') ++j; return j; @@ -70,7 +70,7 @@ static GLenum GLEWAPIENTRY glewContextInit () dot = _glewStrCLen(s, '.'); if (dot == 0) return GLEW_ERROR_NO_GL_VERSION; - + major = s[dot-1]-'0'; minor = s[dot+1]-'0'; @@ -78,7 +78,7 @@ static GLenum GLEWAPIENTRY glewContextInit () minor = 0; if (major<0 || major>9) return GLEW_ERROR_NO_GL_VERSION; - + if (major == 1 && minor == 0) { return GLEW_ERROR_GL_VERSION_10_ONLY; @@ -95,12 +95,12 @@ static GLenum GLEWAPIENTRY glewContextInit () GLEW_VERSION_3_2 = GLEW_VERSION_3_3 == GL_TRUE || ( major == 3 && minor >= 2 ) ? GL_TRUE : GL_FALSE; GLEW_VERSION_3_1 = GLEW_VERSION_3_2 == GL_TRUE || ( major == 3 && minor >= 1 ) ? GL_TRUE : GL_FALSE; GLEW_VERSION_3_0 = GLEW_VERSION_3_1 == GL_TRUE || ( major == 3 ) ? GL_TRUE : GL_FALSE; - GLEW_VERSION_2_1 = GLEW_VERSION_3_0 == GL_TRUE || ( major == 2 && minor >= 1 ) ? GL_TRUE : GL_FALSE; + GLEW_VERSION_2_1 = GLEW_VERSION_3_0 == GL_TRUE || ( major == 2 && minor >= 1 ) ? GL_TRUE : GL_FALSE; GLEW_VERSION_2_0 = GLEW_VERSION_2_1 == GL_TRUE || ( major == 2 ) ? GL_TRUE : GL_FALSE; GLEW_VERSION_1_5 = GLEW_VERSION_2_0 == GL_TRUE || ( major == 1 && minor >= 5 ) ? GL_TRUE : GL_FALSE; GLEW_VERSION_1_4 = GLEW_VERSION_1_5 == GL_TRUE || ( major == 1 && minor >= 4 ) ? GL_TRUE : GL_FALSE; GLEW_VERSION_1_3 = GLEW_VERSION_1_4 == GL_TRUE || ( major == 1 && minor >= 3 ) ? GL_TRUE : GL_FALSE; - GLEW_VERSION_1_2_1 = GLEW_VERSION_1_3 == GL_TRUE ? GL_TRUE : GL_FALSE; + GLEW_VERSION_1_2_1 = GLEW_VERSION_1_3 == GL_TRUE ? GL_TRUE : GL_FALSE; GLEW_VERSION_1_2 = GLEW_VERSION_1_2_1 == GL_TRUE || ( major == 1 && minor >= 2 ) ? GL_TRUE : GL_FALSE; GLEW_VERSION_1_1 = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE; } @@ -137,35 +137,37 @@ static GLenum GLEWAPIENTRY glewContextInit () } else { - const GLubyte *ext; - char *begin; - char *end; - char *i; - char *j; + const char *extensions; + const char *end; + const char *i; + const char *j; + char ext[128]; GLboolean *enable; - ext = glGetString(GL_EXTENSIONS); + extensions = (const char *) glGetString(GL_EXTENSIONS); - if (ext) + if (extensions) { - begin = (char *) _glewStrDup(ext); - end = begin + _glewStrLen((GLubyte *) begin); - for (i=begin; i= (ptrdiff_t) sizeof(ext)) + continue; + _glewStrCopy(ext, i, ' '); /* Based on extension string(s), glewGetExtension purposes */ - enable = _glewGetExtensionString(i); + enable = _glewGetExtensionString(ext); if (enable) *enable = GL_TRUE; /* Based on extension string(s), experimental mode, glewIsSupported purposes */ - enable = _glewGetExtensionEnable(i); + enable = _glewGetExtensionEnable(ext); if (enable) *enable = GL_TRUE; } - free(begin); } } From a2a4d937bfefa0aaed6191e25486d70d26a9f42c Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Thu, 7 Jan 2016 21:58:20 +1000 Subject: [PATCH 21/81] Eliminate strcmp dependency, introduced recently --- auto/src/glew_init_gl.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index b30dfce..0c0653a 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -2,7 +2,19 @@ static int _glewExtensionCompare(const void *a, const void *b) { - return strcmp((const char *) a, *(const char * const *) b); + /* http://www.chanduthedev.com/2012/07/strcmp-implementation-in-c.html */ + const char *s1 = (const char *) a; + const char *s2 = (const char *) b; + while (*s1 || *s2) + { + if (*s1 > *s2) + return 1; + if (*s1 < *s2) + return -1; + s1++; + s2++; + } + return 0; } static GLboolean *_glewGetExtensionString(const char *name) From b5e16ca938a083d4b109c736a4b0add606c98b1e Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Thu, 7 Jan 2016 22:07:00 +1000 Subject: [PATCH 22/81] Disable stack protector for Linux builds, to avoid runtime dependency --- config/Makefile.linux | 1 + config/Makefile.linux-clang | 1 + 2 files changed, 2 insertions(+) diff --git a/config/Makefile.linux b/config/Makefile.linux index 6b9da03..9a81dac 100644 --- a/config/Makefile.linux +++ b/config/Makefile.linux @@ -25,6 +25,7 @@ POPT = -O2 CFLAGS.EXTRA += -fPIC CFLAGS.EXTRA += -Wcast-qual CFLAGS.EXTRA += -ansi -pedantic +CFLAGS.EXTRA += -fno-stack-protector BIN.SUFFIX = LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) LIB.DEVLNK = lib$(NAME).so diff --git a/config/Makefile.linux-clang b/config/Makefile.linux-clang index dd14f4f..4e7039e 100644 --- a/config/Makefile.linux-clang +++ b/config/Makefile.linux-clang @@ -25,6 +25,7 @@ POPT = -O2 CFLAGS.EXTRA += -fPIC CFLAGS.EXTRA += -Wcast-qual CFLAGS.EXTRA += -ansi -pedantic +CFLAGS.EXTRA += -fno-stack-protector BIN.SUFFIX = LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) LIB.DEVLNK = lib$(NAME).so From 18ef5d021bdd16dd5f9ed38cdc6690d8983b0848 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Thu, 7 Jan 2016 22:18:30 +1000 Subject: [PATCH 23/81] Disable _glewSearchExtension for GLEW_OSMESA mode, it's not needed --- auto/src/glew_head.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/auto/src/glew_head.c b/auto/src/glew_head.c index e745e8e..99947de 100644 --- a/auto/src/glew_head.c +++ b/auto/src/glew_head.c @@ -178,6 +178,7 @@ static GLuint _glewStrCopy(char *d, const char *s, char c) return i; } +#if !defined(GLEW_OSMESA) #if !defined(__APPLE__) || defined(GLEW_APPLE_GLX) static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) { @@ -188,6 +189,7 @@ static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) return i == n ? GL_TRUE : GL_FALSE; } #endif +#endif static GLboolean _glewStrSame1 (const GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) { @@ -248,6 +250,7 @@ static GLboolean _glewStrSame3 (const GLubyte** a, GLuint* na, const GLubyte* b, * other extension names. Could use strtok() but the constant * string returned by glGetString might be in read-only memory. */ +#if !defined(GLEW_OSMESA) #if !defined(__APPLE__) || defined(GLEW_APPLE_GLX) static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, const GLubyte *end) { @@ -263,3 +266,4 @@ static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, c return GL_FALSE; } #endif +#endif From 9617f35263d51ef33dc03de7eb7f2453f00b9a79 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Thu, 7 Jan 2016 23:02:32 +1000 Subject: [PATCH 24/81] Fix regression in _glewExtensionCompare due to strcmp migration --- auto/src/glew_init_gl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index 0c0653a..6fd86ce 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -4,7 +4,7 @@ static int _glewExtensionCompare(const void *a, const void *b) { /* http://www.chanduthedev.com/2012/07/strcmp-implementation-in-c.html */ const char *s1 = (const char *) a; - const char *s2 = (const char *) b; + const char *s2 = *(const char * const *) b; while (*s1 || *s2) { if (*s1 > *s2) From 860af9f379016e5d57f396050d0d9cbf78f7d475 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Fri, 8 Jan 2016 20:17:41 +1000 Subject: [PATCH 25/81] Fix regression with aliased extension detection, in second pass of make_list --- auto/Makefile | 1 + auto/bin/make_list2.pl | 44 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100755 auto/bin/make_list2.pl diff --git a/auto/Makefile b/auto/Makefile index 33663ac..4caf481 100644 --- a/auto/Makefile +++ b/auto/Makefile @@ -212,6 +212,7 @@ $(S.DEST)/glew.c: $(EXT)/.dummy cat $(SRC)/glew_init_gl.c >> $@ $(BIN)/make_list.pl $(GL_CORE_SPEC) | grep -v '\"GL_VERSION' >> $@ $(BIN)/make_list.pl $(GL_EXT_SPEC) >> $@ + $(BIN)/make_list2.pl $(GL_EXT_SPEC) >> $@ echo -e "\n return GLEW_OK;\n}\n" >> $@ echo -e "\n#if defined(_WIN32) && ! defined(GLEW_OSMESA)" >> $@ echo -e "\n#if !defined(GLEW_MX)" >> $@ diff --git a/auto/bin/make_list2.pl b/auto/bin/make_list2.pl new file mode 100755 index 0000000..572fdc9 --- /dev/null +++ b/auto/bin/make_list2.pl @@ -0,0 +1,44 @@ +#!/usr/bin/perl +## +## Copyright (C) 2002-2008, Marcelo E. Magallon +## Copyright (C) 2002-2008, Milan Ikits +## +## This program is distributed under the terms and conditions of the GNU +## General Public License Version 2 as published by the Free Software +## Foundation or, at your option, any later version. + +use strict; +use warnings; + +do 'bin/make.pl'; + +#--------------------------------------------------------------------------------------- +# Extensions that depend on others can be enabled once we know +# if the one it depends on, is enabled. + +my @extlist = (); +my %extensions = (); + +if (@ARGV) +{ + @extlist = @ARGV; + + foreach my $ext (sort @extlist) + { + my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); + + if ($extname ne $extstring && length($extstring)) + { + my $extvar = $extname; + $extvar =~ s/GL(X*)_/GL$1EW_/; + + my $parent = $extstring; + $parent =~ s/GL(X*)_/GL$1EW_/; + + print "#ifdef $extname\n"; + print " $extvar = $parent;\n"; + print "#endif /* $extname */\n"; + } + } + +} From 5811916f3233952b372ba83328499e20c1247a43 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Fri, 8 Jan 2016 22:58:42 +1000 Subject: [PATCH 26/81] Update .gitignore for cmake generated .rc files in build/ --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 8e9527a..6270eeb 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ /src/*.c /include/GL/*.h /build/vc6/*.rc +/build/*.rc /build/*/*.sdf /build/*/*.suo /build/*/*.vcxproj.user From 9297c604caae0fb18e962eb16db041f2f8234b6a Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Fri, 8 Jan 2016 23:25:46 +1000 Subject: [PATCH 27/81] For cmake 3.4 - link X11 libs for glewinfo and visualinfo unless not available, or GLEW_OSMESA mode. --- build/cmake/CMakeLists.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 353be7f..a8cfec7 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -39,6 +39,8 @@ else () endif () find_package (OpenGL REQUIRED) +find_package (X11) + set (GLEW_LIBRARIES ${OPENGL_LIBRARIES}) add_definitions (-DGLEW_NO_GLU) @@ -65,6 +67,7 @@ if (GLEW_OSMESA) endif () add_definitions (-DGLEW_OSMESA) set (GLEW_LIBRARIES ${OSMESA_LIB_NAME} ${OPENGL_LIBRARIES}) + set (X11_LIBRARIES) endif () #### GLEW #### @@ -116,14 +119,14 @@ if (BUILD_UTILS) list (APPEND GLEWINFO_SRC_FILES ${GLEW_DIR}/build/glewinfo.rc) endif () add_executable (glewinfo ${GLEWINFO_SRC_FILES}) - target_link_libraries (glewinfo glew) + target_link_libraries (glewinfo glew ${X11_LIBRARIES}) set (VISUALINFO_SRC_FILES ${GLEW_DIR}/src/visualinfo.c) if (WIN32) list (APPEND VISUALINFO_SRC_FILES ${GLEW_DIR}/build/visualinfo.rc) endif () add_executable (visualinfo ${VISUALINFO_SRC_FILES}) - target_link_libraries (visualinfo glew) + target_link_libraries (visualinfo glew ${X11_LIBRARIES}) install ( TARGETS glewinfo visualinfo DESTINATION bin) From 9ef6bfb7a6ef2adadd980e7ab254af606fdf2079 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sun, 10 Jan 2016 22:15:34 +1000 Subject: [PATCH 28/81] Add gitter chat room link to README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4c13c0a..63ecd90 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ http://glew.sourceforge.net/ https://github.com/nigels-com/glew [![Build Status](https://travis-ci.org/nigels-com/glew.svg?branch=master)](https://travis-ci.org/nigels-com/glew) +[![Gitter](https://badges.gitter.im/nigels-com/glew.svg)](https://gitter.im/nigels-com/glew?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) ## Build @@ -39,4 +40,4 @@ https://sourceforge.net/projects/glew/files/glew/snapshots/ Travis-built snapshots are also available: -https://glew.s3.amazonaws.com/index.html \ No newline at end of file +https://glew.s3.amazonaws.com/index.html From 954b1d5947d24074d6c2af183737126a904a1089 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sun, 31 Jan 2016 12:21:59 +1000 Subject: [PATCH 29/81] Migrating more website information to README.md --- README.md | 98 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 86 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 63ecd90..5878e78 100644 --- a/README.md +++ b/README.md @@ -9,29 +9,103 @@ https://github.com/nigels-com/glew [![Build Status](https://travis-ci.org/nigels-com/glew.svg?branch=master)](https://travis-ci.org/nigels-com/glew) [![Gitter](https://badges.gitter.im/nigels-com/glew.svg)](https://gitter.im/nigels-com/glew?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +## Downloads + +Current release is [1.13.0](https://sourceforge.net/projects/glew/files/glew/1.13.0/). +[(Change Log)](http://glew.sourceforge.net/log.html) + +Sources available as +[ZIP](https://sourceforge.net/projects/glew/files/glew/1.13.0/glew-1.13.0.zip/download) or +[TGZ](https://sourceforge.net/projects/glew/files/glew/1.13.0/glew-1.13.0.tgz/download). + +Windows binaries for [32-bit and 64-bit](https://sourceforge.net/projects/glew/files/glew/1.13.0/glew-1.13.0-win32.zip/download). + +### Recent snapshots + +Snapshots may contain new features, bug-fixes or new OpenGL extensions ahead of tested, official releases. + +[glew-20150805.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20150805.tgz/download) + +[glew-20150124.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20150124.tgz/download) + ## Build -If you downloaded the tarball or zip archive from the GLEW website, -you just need to: +From a downloaded tarball or zip archive: -### Unix +### Linux and Mac - $ make - $ sudo make install - $ make clean +#### Using GNU Make + +##### Install build tools + +Debian/Ubuntu/Mint: `$ sudo apt-get install build-essential libXmu-dev libXi-dev libgl-dev git` + +RedHat/CentOS/Fedora: `$ sudo yum install libXmu-devel libXi-devel libGL-devel git` + +##### Build + + $ make + $ sudo make install + $ make clean + +Targets: `all, glew.lib, glew.bin, clean, install, uninstall` + +Variables: `SYSTEM=linux-clang, GLEW_DEST=/usr/local, STRIP=` + +#### Using cmake + +*CMake 2.8.12 or higher is required.* + +##### Install build tools + +Debian/Ubuntu/Mint: `$ sudo apt-get install build-essential libXmu-dev libXi-dev libgl-dev git cmake` + +RedHat/CentOS/Fedora: `$ sudo yum install libXmu-devel libXi-devel libGL-devel git cmake` + +##### Build + + $ cd build + $ cmake ./cmake + $ make -j4 ### Windows -use the project file in build/vc12/ +Use the provided Visual Studio project file in build/vc12/ + +## glewinfo + +`glewinfo` is a command-line tool useful for inspecting the capabilities of an +OpenGL implementation and GLEW support for that. Please include the output of +`glewinfo` with bug reports, as appropriate. + + --------------------------- + GLEW Extension Info + --------------------------- + + GLEW version 2.0.0 + Reporting capabilities of pixelformat 3 + Running on a Intel(R) HD Graphics 3000 from Intel + OpenGL version 3.1.0 - Build 9.17.10.4229 is supported + + GL_VERSION_1_1: OK + --------------- + + GL_VERSION_1_2: OK + --------------- + glCopyTexSubImage3D: OK + glDrawRangeElements: OK + glTexImage3D: OK + glTexSubImage3D: OK + + ... ## Code Generation -If you wish to build GLEW from scratch (update the extension data from -the net or add your own extension information), you need a Unix -environment (including wget, perl, and GNU make). The extension data -is regenerated from the top level source directory with: +A Unix or Mac environment is neded for building GLEW from scratch to +include new extensions, or customize the code generation. The extension +data is regenerated from the top level source directory with: - make extensions + make extensions An alternative to generating the GLEW sources from scratch is to download a pre-generated (unsupported) snapshot: From 6b8a2ab326fd8e7db8a1efe0627ab05e59990766 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sun, 31 Jan 2016 14:09:57 +1000 Subject: [PATCH 30/81] Add Travis-Cl logo to GLEW pages, clicks through to GLEW builds --- README.md | 26 ++++++++++++++++++++++++++ auto/doc/credits.html | 27 ++------------------------- auto/src/header.html | 14 +++++++++----- doc/glew.txt | 1 + doc/travis.png | Bin 0 -> 2541 bytes 5 files changed, 38 insertions(+), 30 deletions(-) create mode 100644 doc/travis.png diff --git a/README.md b/README.md index 5878e78..922543c 100644 --- a/README.md +++ b/README.md @@ -115,3 +115,29 @@ https://sourceforge.net/projects/glew/files/glew/snapshots/ Travis-built snapshots are also available: https://glew.s3.amazonaws.com/index.html + +## Authors + +GLEW is currently maintained by [Nigel Stewart](https://github.com/nigels-com) +with bug fixes, new OpenGL extension support and new releases. + +GLEW was developed by [Milan Ikits](http://www.cs.utah.edu/~ikits/) +and [Marcelo Magallon](http://wwwvis.informatik.uni-stuttgart.de/~magallon/). +Aaron Lefohn, Joe Kniss, and Chris Wyman were the first users and also +assisted with the design and debugging process. + +The acronym GLEW originates from Aaron Lefohn. +Pasi Kärkkäinen identified and fixed several problems with +GLX and SDL. Nate Robins created the `wglinfo` utility, to +which modifications were made by Michael Wimmer. + +## Copyright and Licensing + +GLEW is originally derived from the EXTGL project by Lev Povalahev. +The source code is licensed under the +[Modified BSD License](http://glew.sourceforge.net/glew.txt), the +[Mesa 3-D License](http://glew.sourceforge.net/mesa.txt) (MIT) and the +[Khronos License](http://glew.sourceforge.net/khronos.txt) (MIT). + +The automatic code generation scripts are released under the +[GNU GPL](http://glew.sourceforge.net/gpl.txt). diff --git a/auto/doc/credits.html b/auto/doc/credits.html index 7f1b8d9..6c36de0 100644 --- a/auto/doc/credits.html +++ b/auto/doc/credits.html @@ -1,25 +1,2 @@ -

Credits

- -

-GLEW was developed by Milan -Ikits and Marcelo -Magallon. They also perform occasional maintainance to make sure -that GLEW stays in mint condition. Aaron Lefohn, Joe Kniss, and Chris -Wyman were the first users and also assisted with the design and -debugging process. The acronym GLEW originates from Aaron Lefohn. -Pasi Kärkkäinen identified and fixed several problems with -GLX and SDL. Nate Robins created the wglinfo utility, to -which modifications were made by Michael Wimmer. -

- -

Copyright

- -

-GLEW is originally derived from the EXTGL project by Lev Povalahev. -The source code is licensed under the Modified BSD -License, the Mesa 3-D License (MIT -License), and the Khronos License (MIT -License). The automatic code generation scripts are released under -the GNU GPL. -

+

+Author, copyright and licensing information on github.

diff --git a/auto/src/header.html b/auto/src/header.html index f986557..80bc070 100644 --- a/auto/src/header.html +++ b/auto/src/header.html @@ -57,12 +57,15 @@ THE POSSIBILITY OF SUCH DAMAGE. Building Installation Source Generation -Credits & Copyright Change Log - +
GitHub -Project Page -Bug Tracker +Issues +Pull Requests +Authors +Licensing +
+SourceForge Page
@@ -72,10 +75,11 @@ THE POSSIBILITY OF SUCH DAMAGE. - + diff --git a/doc/glew.txt b/doc/glew.txt index 31a31d3..67b4aff 100644 --- a/doc/glew.txt +++ b/doc/glew.txt @@ -1,4 +1,5 @@ The OpenGL Extension Wrangler Library +Copyright (C) 2008-2016, Nigel Stewart Copyright (C) 2002-2008, Milan Ikits Copyright (C) 2002-2008, Marcelo E. Magallon Copyright (C) 2002, Lev Povalahev diff --git a/doc/travis.png b/doc/travis.png new file mode 100644 index 0000000000000000000000000000000000000000..caf2607e2e344c84da434397c060c406673bf39f GIT binary patch literal 2541 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 Dhk(Rc literal 0 HcmV?d00001 From 0479706419e62f57b393e091f1dd523c5153e9c7 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sun, 31 Jan 2016 14:54:29 +1000 Subject: [PATCH 31/81] Fresh snapshot available for download - GLEW 2.0 release candidate --- README.md | 6 ++++-- auto/doc/index.html | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 922543c..0816db0 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,11 @@ Windows binaries for [32-bit and 64-bit](https://sourceforge.net/projects/glew/f Snapshots may contain new features, bug-fixes or new OpenGL extensions ahead of tested, official releases. -[glew-20150805.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20150805.tgz/download) +[glew-20160131.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20160131.tgz/download) GLEW 2.0.0 release candidate: Core context support, MX discontinued -[glew-20150124.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20150124.tgz/download) +[glew-20151117.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20151117.tgz/download) + +[glew-20150805.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20150805.tgz/download) ## Build diff --git a/auto/doc/index.html b/auto/doc/index.html index 88eef1a..998b119 100644 --- a/auto/doc/index.html +++ b/auto/doc/index.html @@ -60,8 +60,8 @@ An up-to-date copy is also available using git Unsupported snapshots are also available:

Supported Extensions

From e82b76f719107d999a35d0041da03f20c3facd57 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sun, 31 Jan 2016 14:55:39 +1000 Subject: [PATCH 32/81] README.md fixup --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0816db0..6f4659c 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,8 @@ Windows binaries for [32-bit and 64-bit](https://sourceforge.net/projects/glew/f Snapshots may contain new features, bug-fixes or new OpenGL extensions ahead of tested, official releases. -[glew-20160131.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20160131.tgz/download) GLEW 2.0.0 release candidate: Core context support, MX discontinued +[glew-20160131.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20160131.tgz/download) +*GLEW 2.0.0 release candidate: Core context support, MX discontinued* [glew-20151117.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20151117.tgz/download) From b3440c0979662842c977cdad50f3905531eaf7f9 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Thu, 4 Feb 2016 22:33:41 +1000 Subject: [PATCH 33/81] Add SYSTEM=mingw-win32 configuration for 32-bit MinGW variant --- config/Makefile.mingw-win32 | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 config/Makefile.mingw-win32 diff --git a/config/Makefile.mingw-win32 b/config/Makefile.mingw-win32 new file mode 100644 index 0000000..347efd6 --- /dev/null +++ b/config/Makefile.mingw-win32 @@ -0,0 +1,5 @@ +include config/Makefile.mingw + +POPT := -march=i686 -mtune=generic -O2 +CFLAGS.EXTRA += -m32 +LDFLAGS.EXTRA += -m32 From 5efdbaefc8ed57eb3ce306b5aa4c593dd05238ad Mon Sep 17 00:00:00 2001 From: Wes Tarro Date: Fri, 5 Feb 2016 02:53:25 -0500 Subject: [PATCH 34/81] Makes GLEW truly independent of C runtime library on Windows to prevent any issues with mixing compilers and library versions. The Visual Studio Projects need some touching up to get all of the settings synced up for all of the build variants. --- auto/src/glew_head.c | 2 -- auto/src/glew_init_gl.c | 43 +++++++++++++++++----------------- build/cmake/CMakeLists.txt | 26 ++++++++++++++++---- build/vc12/glew_shared.vcxproj | 3 +++ build/vc12/glew_static.vcxproj | 1 + 5 files changed, 47 insertions(+), 28 deletions(-) diff --git a/auto/src/glew_head.c b/auto/src/glew_head.c index 99947de..491156d 100644 --- a/auto/src/glew_head.c +++ b/auto/src/glew_head.c @@ -10,8 +10,6 @@ #endif #include /* For size_t */ -#include /* For bsearch */ -#include /* For memset */ #if defined(GLEW_REGAL) diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index 6fd86ce..9eb2fff 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -1,10 +1,8 @@ /* ------------------------------------------------------------------------- */ -static int _glewExtensionCompare(const void *a, const void *b) +static int _glewExtensionCompare(const char *s1, const char *s2) { /* http://www.chanduthedev.com/2012/07/strcmp-implementation-in-c.html */ - const char *s1 = (const char *) a; - const char *s2 = *(const char * const *) b; while (*s1 || *s2) { if (*s1 > *s2) @@ -17,31 +15,32 @@ static int _glewExtensionCompare(const void *a, const void *b) return 0; } +static ptrdiff_t _glewBsearchExtension(const char* name) +{ + ptrdiff_t lo = 0, hi = sizeof(_glewExtensionLookup) / sizeof(char*) - 2; + + while (lo <= hi) + { + ptrdiff_t mid = (lo + hi) / 2; + const int cmp = _glewExtensionCompare(name, _glewExtensionLookup[mid]); + if (cmp < 0) hi = mid - 1; + else if (cmp > 0) lo = mid + 1; + else return mid; + } + return -1; +} + static GLboolean *_glewGetExtensionString(const char *name) { - const char **n = (const char **) bsearch(name, _glewExtensionLookup, sizeof(_glewExtensionLookup)/sizeof(char *)-1, sizeof(char *), _glewExtensionCompare); - ptrdiff_t i; - - if (n) - { - i = n-_glewExtensionLookup; - return _glewExtensionString+i; - } - + ptrdiff_t n = _glewBsearchExtension(name); + if (n >= 0) return &_glewExtensionString[n]; return NULL; } static GLboolean *_glewGetExtensionEnable(const char *name) { - const char **n = (const char **) bsearch(name, _glewExtensionLookup, sizeof(_glewExtensionLookup)/sizeof(char *)-1, sizeof(char *), _glewExtensionCompare); - ptrdiff_t i; - - if (n) - { - i = n-_glewExtensionLookup; - return _glewExtensionEnabled[i]; - } - + ptrdiff_t n = _glewBsearchExtension(name); + if (n >= 0) return _glewExtensionEnabled[n]; return NULL; } @@ -117,7 +116,7 @@ static GLenum GLEWAPIENTRY glewContextInit () GLEW_VERSION_1_1 = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE; } - memset(_glewExtensionString,0,sizeof(_glewExtensionString)); + for (size_t i = 0; i < sizeof(_glewExtensionLookup) / sizeof(char*); ++i) _glewExtensionString[i] = GL_FALSE; if (GLEW_VERSION_3_0) { diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index a8cfec7..95d95bf 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -81,10 +81,22 @@ if (WIN32) endif () add_library (glew SHARED ${GLEW_SRC_FILES}) -set_target_properties (glew PROPERTIES COMPILE_DEFINITIONS "GLEW_BUILD" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX "${DLL_PREFIX}") +set_target_properties (glew PROPERTIES COMPILE_DEFINITIONS "GLEW_BUILD;VC_EXTRALEAN" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX "${DLL_PREFIX}") add_library (glew_s STATIC ${GLEW_SRC_FILES}) +if (MSVC) + # add options from visual studio project and remove stdlib dependency + # kill security checks which are dependent on stdlib + target_compile_options (glew PRIVATE -GS-) + target_compile_options (glew_s PRIVATE -GS-) + target_link_libraries (glew PRIVATE -BASE:0x62AA0000 -nodefaultlib -noentry) +elseif (WIN32 AND ((CMAKE_C_COMPILER_ID MATCHES "GNU") OR (CMAKE_C_COMPILER_ID MATCHES "Clang"))) + # remove stdlib dependency on windows with GCC and Clang (for similar reasons + # as to MSVC - to allow it to be used with any Windows compiler) + # not thoroughly tested yet + target_link_libraries (glew PRIVATE -nostdlibs -lgcc) +endif () set_target_properties (glew_s PROPERTIES COMPILE_DEFINITIONS "GLEW_STATIC" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX lib) -target_link_libraries (glew ${GLEW_LIBRARIES}) +target_link_libraries (glew PUBLIC ${GLEW_LIBRARIES}) target_link_libraries (glew_s ${GLEW_LIBRARIES}) if(CMAKE_VERSION VERSION_LESS 2.8.12) @@ -119,14 +131,20 @@ if (BUILD_UTILS) list (APPEND GLEWINFO_SRC_FILES ${GLEW_DIR}/build/glewinfo.rc) endif () add_executable (glewinfo ${GLEWINFO_SRC_FILES}) - target_link_libraries (glewinfo glew ${X11_LIBRARIES}) + target_link_libraries (glewinfo glew) + if (NOT WIN32) + target_link_libraries(glewinfo ${X11_LIBRARIES}) + endif () set (VISUALINFO_SRC_FILES ${GLEW_DIR}/src/visualinfo.c) if (WIN32) list (APPEND VISUALINFO_SRC_FILES ${GLEW_DIR}/build/visualinfo.rc) endif () add_executable (visualinfo ${VISUALINFO_SRC_FILES}) - target_link_libraries (visualinfo glew ${X11_LIBRARIES}) + target_link_libraries (visualinfo glew) + if (NOT WIN32) + target_link_libraries(visualinfo ${X11_LIBRARIES}) + endif () install ( TARGETS glewinfo visualinfo DESTINATION bin) diff --git a/build/vc12/glew_shared.vcxproj b/build/vc12/glew_shared.vcxproj index af9d7b7..8a78a90 100644 --- a/build/vc12/glew_shared.vcxproj +++ b/build/vc12/glew_shared.vcxproj @@ -280,6 +280,7 @@ Level3 $(INCLUDE_DIR) WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + false true @@ -304,6 +305,8 @@ /ignore:4089 + true + true diff --git a/build/vc12/glew_static.vcxproj b/build/vc12/glew_static.vcxproj index 85c4be5..9bcbad1 100644 --- a/build/vc12/glew_static.vcxproj +++ b/build/vc12/glew_static.vcxproj @@ -262,6 +262,7 @@ Level3 ../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + false 0x0409 From 107c23d970191d14dab7da9ef0b236094985cd43 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Fri, 5 Feb 2016 22:32:22 +1000 Subject: [PATCH 35/81] Update config.guess from upstream --- config/config.guess | 56 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/config/config.guess b/config/config.guess index dbfb978..3d2c450 100755 --- a/config/config.guess +++ b/config/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2015 Free Software Foundation, Inc. +# Copyright 1992-2016 Free Software Foundation, Inc. -timestamp='2015-01-01' +timestamp='2016-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -27,7 +27,7 @@ timestamp='2015-01-01' # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2015 Free Software Foundation, Inc. +Copyright 1992-2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -168,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) + arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ @@ -197,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in os=netbsd ;; esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need @@ -207,13 +221,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" + echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` @@ -223,6 +237,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/LibertyBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; @@ -235,6 +253,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -933,6 +954,9 @@ EOF crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -945,6 +969,9 @@ EOF ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; + k1om:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -1021,7 +1048,7 @@ EOF echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} @@ -1100,7 +1127,7 @@ EOF # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that + # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; @@ -1370,6 +1397,9 @@ EOF x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; esac cat >&2 < Date: Fri, 5 Feb 2016 22:34:16 +1000 Subject: [PATCH 36/81] GNU make MSYS2 toolchain configuration added --- config/Makefile.msys | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 config/Makefile.msys diff --git a/config/Makefile.msys b/config/Makefile.msys new file mode 100644 index 0000000..7be7344 --- /dev/null +++ b/config/Makefile.msys @@ -0,0 +1,16 @@ +NAME = glew32 +# use gcc for linking, with ld it does not work +CC := gcc +LD := gcc +LN := +LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 +LDFLAGS.EXTRA = +LIBDIR = $(GLEW_DEST)/bin +WARN = -Wall -W +POPT = -O2 +BIN.SUFFIX = .exe +LIB.SONAME = lib$(NAME).dll +LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib +LIB.SHARED = $(NAME).dll +LIB.STATIC = lib$(NAME).a # the static lib will be broken +LDFLAGS.SO = -shared -Wl,-soname,$(LIB.SONAME) -Wl,--out-implib,lib/$(LIB.DEVLNK) From c45763d790b7d826b37a531f68d0263e17a5edef Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 6 Feb 2016 06:46:18 +1000 Subject: [PATCH 37/81] Add make toolchains for msys, msys-win32 and msys-win64 --- Makefile | 7 ++++--- README.md | 29 +++++++++++++++++++++++++++++ config/Makefile.msys | 1 + config/Makefile.msys-win32 | 5 +++++ config/Makefile.msys-win64 | 5 +++++ 5 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 config/Makefile.msys-win32 create mode 100644 config/Makefile.msys-win64 diff --git a/Makefile b/Makefile index 7f97342..8280f87 100644 --- a/Makefile +++ b/Makefile @@ -45,6 +45,7 @@ GLEW_DEST ?= /usr BINDIR ?= $(GLEW_DEST)/bin LIBDIR ?= $(GLEW_DEST)/lib INCDIR ?= $(GLEW_DEST)/include/GL +PKGDIR ?= $(GLEW_DEST)/lib/pkgconfig ifneq ($(GLEW_NO_GLU), -DGLEW_NO_GLU) LIBGLU = glu @@ -229,9 +230,9 @@ install.include: $(INSTALL) -m 0644 include/GL/glxew.h "$(DESTDIR)$(INCDIR)/" install.pkgconfig: glew.pc - $(INSTALL) -d -m 0755 "$(DESTDIR)$(LIBDIR)" - $(INSTALL) -d -m 0755 "$(DESTDIR)$(LIBDIR)/pkgconfig" - $(INSTALL) -m 0644 glew.pc "$(DESTDIR)$(LIBDIR)/pkgconfig/" + $(INSTALL) -d -m 0755 "$(DESTDIR)$(PKGDIR)" + $(INSTALL) -d -m 0755 "$(DESTDIR)$(PKGDIR)" + $(INSTALL) -m 0644 glew.pc "$(DESTDIR)$(PKGDIR)/" uninstall: $(RM) "$(DESTDIR)$(INCDIR)/wglew.h" diff --git a/README.md b/README.md index 6f4659c..a85faa9 100644 --- a/README.md +++ b/README.md @@ -73,8 +73,37 @@ RedHat/CentOS/Fedora: `$ sudo yum install libXmu-devel libXi-devel libGL-devel g ### Windows +#### Visual Studio + Use the provided Visual Studio project file in build/vc12/ +Projects for vc6 and vc10 are also provided + +#### MSYS/Mingw + +Available from [Mingw](http://www.mingw.org/) + +Requirements: bash, make, gcc + + $ mingw32-make + $ mingw32-make install + $ mingw32-make install.all + +Alternative toolchain: `SYSTEM=mingw-win32` + +#### MSYS2/Mingw-w64 + +Available from [Msys2](http://msys2.github.io/) and/or [Mingw-w64](http://mingw-w64.org/) + +Requirements: bash, make, gcc + + $ pacman -S gcc make mingw-w64-i686-gcc mingw-w64-x86_64-gcc + $ make + $ make install + $ make install.all + +Alternative toolchain: `SYSTEM=msys, SYSTEM=msys-win32, SYSTEM=msys-win64` + ## glewinfo `glewinfo` is a command-line tool useful for inspecting the capabilities of an diff --git a/config/Makefile.msys b/config/Makefile.msys index 7be7344..dfee9c7 100644 --- a/config/Makefile.msys +++ b/config/Makefile.msys @@ -3,6 +3,7 @@ NAME = glew32 CC := gcc LD := gcc LN := +CFLAGS.EXTRA += -D_WIN32 LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 LDFLAGS.EXTRA = LIBDIR = $(GLEW_DEST)/bin diff --git a/config/Makefile.msys-win32 b/config/Makefile.msys-win32 new file mode 100644 index 0000000..160d3eb --- /dev/null +++ b/config/Makefile.msys-win32 @@ -0,0 +1,5 @@ +include config/Makefile.msys + +POPT := -march=i686 -mtune=generic -O2 +CFLAGS.EXTRA += -m32 +LDFLAGS.EXTRA += -m32 diff --git a/config/Makefile.msys-win64 b/config/Makefile.msys-win64 new file mode 100644 index 0000000..c1c785a --- /dev/null +++ b/config/Makefile.msys-win64 @@ -0,0 +1,5 @@ +include config/Makefile.msys + +POPT := -mtune=generic -O2 +CFLAGS.EXTRA += -m64 +LDFLAGS.EXTRA += -m64 From 69b73ea446a6da0db2701ad021ff6c3b7a21e6db Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 6 Feb 2016 12:19:47 +1000 Subject: [PATCH 38/81] Allow customisation of GLEW_GET_VAR, GLEW_GET_FUN --- auto/src/glew_tail.h | 5 +++++ auto/src/glxew_tail.h | 5 +++++ auto/src/wglew_tail.h | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/auto/src/glew_tail.h b/auto/src/glew_tail.h index 6ee9912..ce7ff3c 100644 --- a/auto/src/glew_tail.h +++ b/auto/src/glew_tail.h @@ -29,8 +29,13 @@ GLEWAPI GLenum GLEWAPIENTRY glewInit (void); GLEWAPI GLboolean GLEWAPIENTRY glewIsSupported (const char *name); #define glewIsExtensionSupported(x) glewIsSupported(x) +#ifndef GLEW_GET_VAR #define GLEW_GET_VAR(x) (*(const GLboolean*)&x) +#endif + +#ifndef GLEW_GET_FUN #define GLEW_GET_FUN(x) x +#endif GLEWAPI GLboolean glewExperimental; GLEWAPI GLboolean GLEWAPIENTRY glewGetExtension (const char *name); diff --git a/auto/src/glxew_tail.h b/auto/src/glxew_tail.h index 4026fa7..05ff1b1 100644 --- a/auto/src/glxew_tail.h +++ b/auto/src/glxew_tail.h @@ -3,8 +3,13 @@ GLEWAPI GLenum GLEWAPIENTRY glxewInit (); GLEWAPI GLboolean GLEWAPIENTRY glxewIsSupported (const char *name); +#ifndef GLXEW_GET_VAR #define GLXEW_GET_VAR(x) (*(const GLboolean*)&x) +#endif + +#ifndef GLXEW_GET_FUN #define GLXEW_GET_FUN(x) x +#endif GLEWAPI GLboolean GLEWAPIENTRY glxewGetExtension (const char *name); diff --git a/auto/src/wglew_tail.h b/auto/src/wglew_tail.h index 3810662..8971158 100644 --- a/auto/src/wglew_tail.h +++ b/auto/src/wglew_tail.h @@ -3,8 +3,13 @@ GLEWAPI GLenum GLEWAPIENTRY wglewInit (); GLEWAPI GLboolean GLEWAPIENTRY wglewIsSupported (const char *name); +#ifndef WGLEW_GET_VAR #define WGLEW_GET_VAR(x) (*(const GLboolean*)&x) +#endif + +#ifndef WGLEW_GET_FUN #define WGLEW_GET_FUN(x) x +#endif GLEWAPI GLboolean GLEWAPIENTRY wglewGetExtension (const char *name); From fe41bc3bdd28ea99699a69777df130043e648707 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 6 Feb 2016 12:23:56 +1000 Subject: [PATCH 39/81] Remove more #ifdef for GLEW_MX --- auto/Makefile | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/auto/Makefile b/auto/Makefile index 4caf481..fb2663c 100644 --- a/auto/Makefile +++ b/auto/Makefile @@ -135,13 +135,9 @@ $(I.DEST)/glew.h: $(EXT)/.dummy cat $(SRC)/glew_head.h >> $@ $(BIN)/make_header.pl GLAPIENTRY GL $(GL_CORE_SPEC) >> $@ $(BIN)/make_header.pl GLAPIENTRY GL $(GL_EXT_SPEC) >> $@ - echo -e "/* ------------------------------------------------------------------------- */\n\n#if defined(GLEW_MX) && defined(_WIN32)\n#define GLEW_FUN_EXPORT\n#else\n#define GLEW_FUN_EXPORT GLEWAPI\n#endif /* GLEW_MX */\n" >> $@ - echo -e "#if defined(GLEW_MX)\n#define GLEW_VAR_EXPORT\n#else\n#define GLEW_VAR_EXPORT GLEWAPI\n#endif /* GLEW_MX */\n" >> $@ - echo -e "#if defined(GLEW_MX) && defined(_WIN32)\nstruct GLEWContextStruct\n{\n#endif /* GLEW_MX */" >> $@ + echo -e "/* ------------------------------------------------------------------------- */\n\n" >> $@ $(BIN)/make_struct_fun.pl GLEW_FUN_EXPORT $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ - echo -e "\n#if defined(GLEW_MX) && !defined(_WIN32)\nstruct GLEWContextStruct\n{\n#endif /* GLEW_MX */\n" >> $@ $(BIN)/make_struct_var.pl GLEW_VAR_EXPORT $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ - echo -e "\n#ifdef GLEW_MX\n}; /* GLEWContextStruct */\n#endif /* GLEW_MX */\n" >> $@ perl -e "s/GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2;/GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_1;\nGLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2;/" -pi $@ cat $(SRC)/glew_tail.h >> $@ perl -e "s/GLEW_VERSION_STRING/$(GLEW_VERSION)/g" -pi $@ @@ -159,10 +155,8 @@ $(I.DEST)/wglew.h: $(EXT)/.dummy cat $(SRC)/wglew_head.h >> $@ $(BIN)/make_header.pl WINAPI WGL $(WGL_EXT_SPEC) >> $@ cat $(SRC)/wglew_mid.h >> $@ - echo -e "\n#ifdef GLEW_MX\nstruct WGLEWContextStruct\n{\n#endif /* GLEW_MX */" >> $@ $(BIN)/make_struct_fun.pl WGLEW_FUN_EXPORT $(WGL_EXT_SPEC) >> $@ $(BIN)/make_struct_var.pl WGLEW_VAR_EXPORT $(WGL_EXT_SPEC) >> $@ - echo -e "\n#ifdef GLEW_MX\n}; /* WGLEWContextStruct */\n#endif /* GLEW_MX */\n" >> $@ cat $(SRC)/wglew_tail.h >> $@ $(I.DEST)/glxew.h: $(EXT)/.dummy @@ -177,9 +171,7 @@ $(I.DEST)/glxew.h: $(EXT)/.dummy $(BIN)/make_header.pl "" GLX $(GLX_EXT_SPEC) >> $@ cat $(SRC)/glxew_mid.h >> $@ $(BIN)/make_struct_fun.pl GLXEW_FUN_EXPORT $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@ - echo -e "\n#if defined(GLEW_MX)\nstruct GLXEWContextStruct\n{\n#endif /* GLEW_MX */\n" >> $@ $(BIN)/make_struct_var.pl GLXEW_VAR_EXPORT $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@ - echo -e "\n#ifdef GLEW_MX\n}; /* GLXEWContextStruct */\n#endif /* GLEW_MX */\n" >> $@ perl -e "s/GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2;/GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_0;\nGLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_1;\nGLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2;/" -pi $@ cat $(SRC)/glxew_tail.h >> $@ @@ -189,21 +181,15 @@ $(S.DEST)/glew.c: $(EXT)/.dummy @echo "--------------------------------------------------------------------" cp -f $(SRC)/glew_license.h $@ cat $(SRC)/glew_head.c >> $@ - echo -e "\n#if !defined(_WIN32) || !defined(GLEW_MX)" >> $@ $(BIN)/make_def_fun.pl GL $(GL_CORE_SPEC) >> $@ $(BIN)/make_def_fun.pl GL $(GL_EXT_SPEC) >> $@ - echo -e "\n#endif /* !WIN32 || !GLEW_MX */" >> $@ - echo -e "\n#if !defined(GLEW_MX)" >> $@; echo -e "\nGLboolean __GLEW_VERSION_1_1 = GL_FALSE;" >> $@ $(BIN)/make_def_var.pl GL $(GL_CORE_SPEC) >> $@ $(BIN)/make_def_var.pl GL $(GL_EXT_SPEC) >> $@ - echo -e "\n#endif /* !GLEW_MX */\n" >> $@; echo -e "\nstatic const char * _glewExtensionLookup[] = {" >> $@; $(BIN)/make_index.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ echo -e " NULL\n};\n" >> $@; - echo -e "\n#if !defined(GLEW_MX)" >> $@; $(BIN)/make_enable_index.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ - echo -e "\n#endif /* !GLEW_MX */\n" >> $@; $(BIN)/make_initd.pl GL $(GL_CORE_SPEC) >> $@ $(BIN)/make_initd.pl GL $(GL_EXT_SPEC) >> $@ echo -e "" >> $@; @@ -215,10 +201,8 @@ $(S.DEST)/glew.c: $(EXT)/.dummy $(BIN)/make_list2.pl $(GL_EXT_SPEC) >> $@ echo -e "\n return GLEW_OK;\n}\n" >> $@ echo -e "\n#if defined(_WIN32) && ! defined(GLEW_OSMESA)" >> $@ - echo -e "\n#if !defined(GLEW_MX)" >> $@ $(BIN)/make_def_fun.pl WGL $(WGL_EXT_SPEC) >> $@ $(BIN)/make_def_var.pl WGL $(WGL_EXT_SPEC) >> $@ - echo -e "\n#endif /* !GLEW_MX */\n" >> $@; $(BIN)/make_init.pl WGL $(WGL_EXT_SPEC) >> $@ cat $(SRC)/glew_init_wgl.c >> $@ $(BIN)/make_list.pl $(WGL_EXT_SPEC) >> $@ @@ -226,12 +210,10 @@ $(S.DEST)/glew.c: $(EXT)/.dummy echo -e "\n#elif !defined(GLEW_OSMESA) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX))" >> $@ $(BIN)/make_def_fun.pl GLX $(GLX_CORE_SPEC) >> $@ $(BIN)/make_def_fun.pl GLX $(GLX_EXT_SPEC) >> $@ - echo -e "\n#if !defined(GLEW_MX)" >> $@; echo -e "\nGLboolean __GLXEW_VERSION_1_0 = GL_FALSE;" >> $@ echo -e "GLboolean __GLXEW_VERSION_1_1 = GL_FALSE;" >> $@ $(BIN)/make_def_var.pl GLX $(GLX_CORE_SPEC) >> $@ $(BIN)/make_def_var.pl GLX $(GLX_EXT_SPEC) >> $@ - echo -e "\n#endif /* !GLEW_MX */\n" >> $@; $(BIN)/make_init.pl GLX $(GLX_CORE_SPEC) >> $@ $(BIN)/make_init.pl GLX $(GLX_EXT_SPEC) >> $@ cat $(SRC)/glew_init_glx.c >> $@ From 4ee89ccb393fb09774c71340eff5922f25f3e89b Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 6 Feb 2016 12:35:05 +1000 Subject: [PATCH 40/81] Build fix for GLEW_VAR_EXPORT, GLEW_FUN_EXPORT --- auto/src/glew_head.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/auto/src/glew_head.h b/auto/src/glew_head.h index c5592e1..c19cefb 100644 --- a/auto/src/glew_head.h +++ b/auto/src/glew_head.h @@ -184,6 +184,9 @@ typedef _W64 int ptrdiff_t; #define GLEWAPIENTRY #endif +#define GLEW_VAR_EXPORT GLEWAPI +#define GLEW_FUN_EXPORT GLEWAPI + #ifdef __cplusplus extern "C" { #endif From f4abb657b36307a3cbb18951a65877dd08b07d5d Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sun, 6 Dec 2015 12:58:46 +1000 Subject: [PATCH 41/81] GLEW_EGL mode for loading functions via eglGetProcAddress --- auto/Makefile | 6 ++- auto/src/glew_head.c | 11 ++++-- auto/src/glew_init_tail.c | 2 +- auto/src/glew_str_glx.c | 2 +- auto/src/glew_str_wgl.c | 2 +- auto/src/glewinfo_glx.c | 2 +- auto/src/glewinfo_head.c | 7 +++- auto/src/glewinfo_tail.c | 82 +++++++++++++++++++++++++++++---------- auto/src/glewinfo_wgl.c | 2 +- 9 files changed, 84 insertions(+), 32 deletions(-) diff --git a/auto/Makefile b/auto/Makefile index fb2663c..5862050 100644 --- a/auto/Makefile +++ b/auto/Makefile @@ -200,14 +200,14 @@ $(S.DEST)/glew.c: $(EXT)/.dummy $(BIN)/make_list.pl $(GL_EXT_SPEC) >> $@ $(BIN)/make_list2.pl $(GL_EXT_SPEC) >> $@ echo -e "\n return GLEW_OK;\n}\n" >> $@ - echo -e "\n#if defined(_WIN32) && ! defined(GLEW_OSMESA)" >> $@ + echo -e "\n#if defined(_WIN32) && !defined(GLEW_EGL) && !defined(GLEW_OSMESA)" >> $@ $(BIN)/make_def_fun.pl WGL $(WGL_EXT_SPEC) >> $@ $(BIN)/make_def_var.pl WGL $(WGL_EXT_SPEC) >> $@ $(BIN)/make_init.pl WGL $(WGL_EXT_SPEC) >> $@ cat $(SRC)/glew_init_wgl.c >> $@ $(BIN)/make_list.pl $(WGL_EXT_SPEC) >> $@ echo -e "\n return GLEW_OK;\n}" >> $@; - echo -e "\n#elif !defined(GLEW_OSMESA) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX))" >> $@ + echo -e "\n#elif !defined(GLEW_EGL) && !defined(GLEW_OSMESA) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX))" >> $@ $(BIN)/make_def_fun.pl GLX $(GLX_CORE_SPEC) >> $@ $(BIN)/make_def_fun.pl GLX $(GLX_EXT_SPEC) >> $@ echo -e "\nGLboolean __GLXEW_VERSION_1_0 = GL_FALSE;" >> $@ @@ -245,12 +245,14 @@ $(S.DEST)/glewinfo.c: $(EXT)/.dummy cat $(SRC)/glewinfo_head.c >> $@ $(BIN)/make_info.pl $(GL_CORE_SPEC) >> $@ $(BIN)/make_info.pl $(GL_EXT_SPEC) >> $@ + echo -e "#if !defined(GLEW_EGL)\n" >> $@ echo -e "#ifdef _WIN32\n" >> $@ $(BIN)/make_info.pl $(WGL_EXT_SPEC) >> $@ echo -e "#else /* _UNIX */\n" >> $@ $(BIN)/make_info.pl $(GLX_CORE_SPEC) >> $@ $(BIN)/make_info.pl $(GLX_EXT_SPEC) >> $@ echo -e "#endif /* _WIN32 */\n" >> $@ + echo -e "#endif /* !defined(GLEW_EGL) */\n" >> $@ cat $(SRC)/glewinfo_gl.c >> $@ $(BIN)/make_info_list.pl $(GL_CORE_SPEC) >> $@ diff --git a/auto/src/glew_head.c b/auto/src/glew_head.c index 99947de..0d052be 100644 --- a/auto/src/glew_head.c +++ b/auto/src/glew_head.c @@ -1,6 +1,7 @@ #include -#if defined(GLEW_OSMESA) +#if defined(GLEW_EGL) +#elif defined(GLEW_OSMESA) # define GLAPI extern # include #elif defined(_WIN32) @@ -13,7 +14,9 @@ #include /* For bsearch */ #include /* For memset */ -#if defined(GLEW_REGAL) +#if defined(GLEW_EGL) +extern void * eglGetProcAddress (const char *procname); +#elif defined(GLEW_REGAL) /* In GLEW_REGAL mode we call direcly into the linked libRegal.so glGetProcAddressREGAL for looking up @@ -113,7 +116,9 @@ void* NSGLGetProcAddress (const GLubyte *name) /* * Define glewGetProcAddress. */ -#if defined(GLEW_REGAL) +#if defined(GLEW_EGL) +# define glewGetProcAddress(name) eglGetProcAddress((const char *)name) +#elif defined(GLEW_REGAL) # define glewGetProcAddress(name) regalGetProcAddress((const GLchar *)name) #elif defined(GLEW_OSMESA) # define glewGetProcAddress(name) OSMesaGetProcAddress((const char *)name) diff --git a/auto/src/glew_init_tail.c b/auto/src/glew_init_tail.c index 17735dc..cc1c4ad 100644 --- a/auto/src/glew_init_tail.c +++ b/auto/src/glew_init_tail.c @@ -37,7 +37,7 @@ GLenum GLEWAPIENTRY glewInit (void) GLenum r; r = glewContextInit(); if ( r != 0 ) return r; -#if defined(GLEW_OSMESA) || defined(__ANDROID__) || defined(__native_client__) || defined(__HAIKU__) +#if defined(GLEW_EGL) || defined(GLEW_OSMESA) || defined(__ANDROID__) || defined(__native_client__) || defined(__HAIKU__) return r; #elif defined(_WIN32) return wglewInit(); diff --git a/auto/src/glew_str_glx.c b/auto/src/glew_str_glx.c index af4f8c6..885db43 100644 --- a/auto/src/glew_str_glx.c +++ b/auto/src/glew_str_glx.c @@ -4,7 +4,7 @@ return ret; } -#elif !defined(GLEW_OSMESA) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) +#elif !defined(GLEW_EGL) && !defined(GLEW_OSMESA) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) GLboolean glxewIsSupported (const char* name) { diff --git a/auto/src/glew_str_wgl.c b/auto/src/glew_str_wgl.c index b204386..db67b51 100644 --- a/auto/src/glew_str_wgl.c +++ b/auto/src/glew_str_wgl.c @@ -4,7 +4,7 @@ return ret; } -#if defined(_WIN32) && !defined(GLEW_OSMESA) +#if defined(_WIN32) && !defined(GLEW_EGL) && !defined(GLEW_OSMESA) GLboolean GLEWAPIENTRY wglewIsSupported (const char* name) { diff --git a/auto/src/glewinfo_glx.c b/auto/src/glewinfo_glx.c index ead3051..e60b549 100644 --- a/auto/src/glewinfo_glx.c +++ b/auto/src/glewinfo_glx.c @@ -1,6 +1,6 @@ } -#elif !defined(GLEW_OSMESA) /* _UNIX */ +#elif !defined(GLEW_EGL) && !defined(GLEW_OSMESA) /* _UNIX */ static void glxewInfo () { diff --git a/auto/src/glewinfo_head.c b/auto/src/glewinfo_head.c index 6a8347b..ff743f0 100644 --- a/auto/src/glewinfo_head.c +++ b/auto/src/glewinfo_head.c @@ -2,7 +2,9 @@ #include #include #include -#if defined(GLEW_OSMESA) +#if defined(GLEW_EGL) +#include +#elif defined(GLEW_OSMESA) #define GLAPI extern #include #elif defined(_WIN32) @@ -25,7 +27,8 @@ static FILE* f; struct createParams { -#if defined(GLEW_OSMESA) +#if defined(GLEW_EGL) +#elif defined(GLEW_OSMESA) #elif defined(_WIN32) int pixelformat; #elif !defined(__APPLE__) && !defined(__HAIKU__) || defined(GLEW_APPLE_GLX) diff --git a/auto/src/glewinfo_tail.c b/auto/src/glewinfo_tail.c index e69f96d..e4075c0 100644 --- a/auto/src/glewinfo_tail.c +++ b/auto/src/glewinfo_tail.c @@ -7,9 +7,10 @@ int main (int argc, char** argv) { GLuint err; - struct createParams params = + struct createParams params = { -#if defined(GLEW_OSMESA) +#if defined(GLEW_EGL) +#elif defined(GLEW_OSMESA) #elif defined(_WIN32) -1, /* pixelformat */ #elif !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) @@ -25,17 +26,18 @@ int main (int argc, char** argv) if (glewParseArgs(argc-1, argv+1, ¶ms)) { fprintf(stderr, "Usage: glewinfo " -#if defined(GLEW_OSMESA) +#if defined(GLEW_EGL) +#elif defined(GLEW_OSMESA) #elif defined(_WIN32) - "[-pf ] " + "[-pf ] " #elif !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - "[-display ] " - "[-visual ] " + "[-display ] " + "[-visual ] " #endif - "[-version ] " - "[-profile core|compatibility] " - "[-flag debug|forward]" - "\n"); + "[-version ] " + "[-profile core|compatibility] " + "[-flag debug|forward]" + "\n"); return 1; } @@ -68,18 +70,20 @@ int main (int argc, char** argv) fprintf(f, " GLEW Extension Info\n"); fprintf(f, "---------------------------\n\n"); fprintf(f, "GLEW version %s\n", glewGetString(GLEW_VERSION)); -#if defined(GLEW_OSMESA) +#if defined(GLEW_EGL) +#elif defined(GLEW_OSMESA) #elif defined(_WIN32) fprintf(f, "Reporting capabilities of pixelformat %d\n", params.pixelformat); #elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - fprintf(f, "Reporting capabilities of display %s, visual 0x%x\n", + fprintf(f, "Reporting capabilities of display %s, visual 0x%x\n", params.display == NULL ? getenv("DISPLAY") : params.display, params.visual); #endif - fprintf(f, "Running on a %s from %s\n", - glGetString(GL_RENDERER), glGetString(GL_VENDOR)); + fprintf(f, "Running on a %s from %s\n", + glGetString(GL_RENDERER), glGetString(GL_VENDOR)); fprintf(f, "OpenGL version %s is supported\n", glGetString(GL_VERSION)); glewInfo(); -#if defined(GLEW_OSMESA) +#if defined(GLEW_EGL) +#elif defined(GLEW_OSMESA) #elif defined(_WIN32) wglewInfo(); #else @@ -118,7 +122,8 @@ GLboolean glewParseArgs (int argc, char** argv, struct createParams *params) else return GL_TRUE; ++p; } -#if defined(GLEW_OSMESA) +#if defined(GLEW_EGL) +#elif defined(GLEW_OSMESA) #elif defined(_WIN32) else if (!strcmp(argv[p], "-pf") || !strcmp(argv[p], "-pixelformat")) { @@ -145,7 +150,44 @@ GLboolean glewParseArgs (int argc, char** argv, struct createParams *params) /* ------------------------------------------------------------------------ */ -#if defined(GLEW_OSMESA) +#if defined(GLEW_EGL) +EGLDisplay display; +EGLContext ctx; + +/* See: http://stackoverflow.com/questions/12662227/opengl-es2-0-offscreen-context-for-fbo-rendering */ + +GLboolean glewCreateContext (struct createParams *params) +{ + EGLSurface surface; + EGLint majorVersion, minorVersion; + const EGLint attr[] = { + EGL_BUFFER_SIZE, 32, + EGL_COLOR_BUFFER_TYPE, EGL_RGB_BUFFER, + EGL_CONFORMANT, EGL_OPENGL_BIT, + EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT, + EGL_NONE + }; + EGLConfig config; + EGLint numConfig; + display = eglGetDisplay((EGLNativeDisplayType) 0); + if (!eglInitialize(display, &majorVersion, &minorVersion)) + return GL_TRUE; + eglBindAPI(EGL_OPENGL_API); + if (!eglChooseConfig(display, attr, &config, 1, &numConfig) || (numConfig != 1)) + return GL_TRUE; + surface = eglCreateWindowSurface(display, config, (EGLNativeWindowType) NULL, NULL); + ctx = eglCreateContext(display, config, NULL, NULL); + if (NULL == ctx) return GL_TRUE; + eglMakeCurrent(display, surface, surface, ctx); + return GL_FALSE; +} + +void glewDestroyContext () +{ + if (NULL != ctx) eglDestroyContext(display, ctx); +} + +#elif defined(GLEW_OSMESA) OSMesaContext ctx; static const GLint osmFormat = GL_UNSIGNED_BYTE; @@ -190,7 +232,7 @@ GLboolean glewCreateContext (struct createParams* params) wc.lpszClassName = "GLEW"; if (0 == RegisterClass(&wc)) return GL_TRUE; /* create window */ - wnd = CreateWindow("GLEW", "GLEW", 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + wnd = CreateWindow("GLEW", "GLEW", 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, GetModuleHandle(NULL), NULL); if (NULL == wnd) return GL_TRUE; /* get the device context */ @@ -378,8 +420,8 @@ GLboolean glewCreateContext (struct createParams *params) cmap = XCreateColormap(dpy, RootWindow(dpy, vi->screen), vi->visual, AllocNone); swa.border_pixel = 0; swa.colormap = cmap; - wnd = XCreateWindow(dpy, RootWindow(dpy, vi->screen), - 0, 0, 1, 1, 0, vi->depth, InputOutput, vi->visual, + wnd = XCreateWindow(dpy, RootWindow(dpy, vi->screen), + 0, 0, 1, 1, 0, vi->depth, InputOutput, vi->visual, CWBorderPixel | CWColormap, &swa); /* make context current */ if (!glXMakeCurrent(dpy, wnd, ctx)) return GL_TRUE; diff --git a/auto/src/glewinfo_wgl.c b/auto/src/glewinfo_wgl.c index c80264e..9405667 100644 --- a/auto/src/glewinfo_wgl.c +++ b/auto/src/glewinfo_wgl.c @@ -2,7 +2,7 @@ /* ------------------------------------------------------------------------ */ -#if defined(_WIN32) && !defined(GLEW_OSMESA) +#if defined(_WIN32) && !defined(GLEW_EGL) && !defined(GLEW_OSMESA) static void wglewInfo () { From 5a6171078bd1f131c32c4f6943509e9dbd64bb61 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Wed, 16 Dec 2015 20:46:17 +1000 Subject: [PATCH 42/81] GLEW EGL support touch-ups --- auto/src/glew_head.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auto/src/glew_head.c b/auto/src/glew_head.c index 0d052be..a3f932e 100644 --- a/auto/src/glew_head.c +++ b/auto/src/glew_head.c @@ -15,7 +15,7 @@ #include /* For memset */ #if defined(GLEW_EGL) -extern void * eglGetProcAddress (const char *procname); +extern void (*eglGetProcAddress (const char *procname))(); #elif defined(GLEW_REGAL) /* In GLEW_REGAL mode we call direcly into the linked From 43a92992302d9fee10d288f2e92d162407ded957 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Wed, 20 Jan 2016 21:55:08 +1000 Subject: [PATCH 43/81] Initial EGL core and extension support with Python egl.xml spec parser --- .gitattributes | 1 + auto/Makefile | 47 ++++++++++++-- auto/bin/make_list.pl | 2 +- auto/bin/parse_xml.py | 128 ++++++++++++++++++++++++++++++++++++++ auto/khronos/readme.pdf | Bin 0 -> 130102 bytes auto/src/eglew_head.h | 74 ++++++++++++++++++++++ auto/src/eglew_mid.h | 4 ++ auto/src/eglew_tail.h | 15 +++++ auto/src/glew_head.c | 17 +++-- auto/src/glew_init_egl.c | 31 +++++++++ auto/src/glew_init_tail.c | 4 +- auto/src/glew_str_egl.c | 17 +++++ auto/src/glew_str_glx.c | 2 +- auto/src/glewinfo_egl.c | 6 ++ auto/src/glewinfo_glx.c | 2 +- auto/src/glewinfo_head.c | 4 +- auto/src/glewinfo_tail.c | 20 +++--- config/Makefile.linux-egl | 4 ++ src/visualinfo.c | 28 ++++++++- 19 files changed, 377 insertions(+), 29 deletions(-) create mode 100755 auto/bin/parse_xml.py create mode 100644 auto/khronos/readme.pdf create mode 100644 auto/src/eglew_head.h create mode 100644 auto/src/eglew_mid.h create mode 100644 auto/src/eglew_tail.h create mode 100644 auto/src/glew_init_egl.c create mode 100644 auto/src/glew_str_egl.c create mode 100644 auto/src/glewinfo_egl.c create mode 100644 config/Makefile.linux-egl diff --git a/.gitattributes b/.gitattributes index b49408f..100a05f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,6 @@ * text eol=lf *.png binary +*.pdf binary build/*/* text eol=crlf CMakeLists.txt text eol=lf build/cmake/* text eol=lf diff --git a/auto/Makefile b/auto/Makefile index 5862050..fc9a646 100644 --- a/auto/Makefile +++ b/auto/Makefile @@ -41,16 +41,19 @@ BLACKLIST = blacklist GL_CORE_SPEC := $(CORE)/GL_VERSION* GLX_CORE_SPEC := $(CORE)/GLX_VERSION* +EGL_CORE_SPEC := $(CORE)/EGL_VERSION* ifeq (custom,$(MAKECMDGOALS)) #GL_CORE_SPEC := $(shell grep GL_VERSION custom.txt | perl -pi -e "s=^=$(CORE)/=g;") GL_EXT_SPEC := $(shell grep "^[ \t]*GL_" custom.txt | grep -v GL_VERSION | perl -pi -e "s=^=$(EXT)/=g;") WGL_EXT_SPEC := $(shell grep "^[ \t]*WGL_" custom.txt | perl -pi -e "s=^=$(EXT)/=g;") #GLX_CORE_SPEC := $(shell grep GLX_VERSION custom.txt | perl -pi -e "s=^=$(CORE)/=g;") GLX_EXT_SPEC := $(shell grep "^[ \t]*GLX_" custom.txt | grep -v GLX_VERSION | perl -pi -e "s=^=$(EXT)/=g;") +EGL_EXT_SPEC := $(shell grep "^[ \t]*EGL_" custom.txt | grep -v EGL_VERSION | perl -pi -e "s=^=$(EXT)/=g;") else GL_EXT_SPEC := $(EXT)/GL_* WGL_EXT_SPEC := $(EXT)/WGL_* GLX_EXT_SPEC := $(EXT)/GLX_* +EGL_EXT_SPEC := $(EXT)/EGL_* endif PARSE_SPEC = parse_spec.pl @@ -65,7 +68,8 @@ B.DEST = $(TOP)/build I.TARGETS = \ $(I.DEST)/glew.h \ $(I.DEST)/wglew.h \ - $(I.DEST)/glxew.h + $(I.DEST)/glxew.h \ + $(I.DEST)/eglew.h ifeq (yes,$(GLEW_SPLIT_SOURCE)) S.TARGETS = \ @@ -175,6 +179,21 @@ $(I.DEST)/glxew.h: $(EXT)/.dummy perl -e "s/GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2;/GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_0;\nGLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_1;\nGLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2;/" -pi $@ cat $(SRC)/glxew_tail.h >> $@ +$(I.DEST)/eglew.h: $(EXT)/.dummy + @echo "--------------------------------------------------------------------" + @echo "Creating eglew.h" + @echo "--------------------------------------------------------------------" + cp -f $(SRC)/glew_license.h $@ + cat $(SRC)/mesa_license.h >> $@ + cat $(SRC)/khronos_license.h >> $@ + cat $(SRC)/eglew_head.h >> $@ + $(BIN)/make_header.pl "" EGL $(EGL_CORE_SPEC) >> $@ + $(BIN)/make_header.pl "" EGL $(EGL_EXT_SPEC) >> $@ + cat $(SRC)/eglew_mid.h >> $@ + $(BIN)/make_struct_fun.pl EGLEW_FUN_EXPORT $(EGL_CORE_SPEC) $(EGL_EXT_SPEC) >> $@ + $(BIN)/make_struct_var.pl EGLEW_VAR_EXPORT $(EGL_CORE_SPEC) $(EGL_EXT_SPEC) >> $@ + cat $(SRC)/eglew_tail.h >> $@ + $(S.DEST)/glew.c: $(EXT)/.dummy @echo "--------------------------------------------------------------------" @echo "Creating glew.c" @@ -200,14 +219,26 @@ $(S.DEST)/glew.c: $(EXT)/.dummy $(BIN)/make_list.pl $(GL_EXT_SPEC) >> $@ $(BIN)/make_list2.pl $(GL_EXT_SPEC) >> $@ echo -e "\n return GLEW_OK;\n}\n" >> $@ - echo -e "\n#if defined(_WIN32) && !defined(GLEW_EGL) && !defined(GLEW_OSMESA)" >> $@ + echo -e "\n#if defined(GLEW_OSMESA)" >> $@ + echo -e "\n#elif defined(GLEW_EGL)" >> $@ + $(BIN)/make_def_fun.pl EGL $(EGL_CORE_SPEC) >> $@ + $(BIN)/make_def_fun.pl EGL $(EGL_EXT_SPEC) >> $@ + $(BIN)/make_def_var.pl EGL $(EGL_CORE_SPEC) >> $@ + $(BIN)/make_def_var.pl EGL $(EGL_EXT_SPEC) >> $@ + $(BIN)/make_init.pl EGL $(EGL_CORE_SPEC) >> $@ + $(BIN)/make_init.pl EGL $(EGL_EXT_SPEC) >> $@ + cat $(SRC)/glew_init_egl.c >> $@ + $(BIN)/make_list.pl $(EGL_CORE_SPEC) >> $@ + $(BIN)/make_list.pl $(EGL_EXT_SPEC) >> $@ + echo -e "\n return GLEW_OK;\n}" >> $@ + echo -e "\n#elif defined(_WIN32)" >> $@ $(BIN)/make_def_fun.pl WGL $(WGL_EXT_SPEC) >> $@ $(BIN)/make_def_var.pl WGL $(WGL_EXT_SPEC) >> $@ $(BIN)/make_init.pl WGL $(WGL_EXT_SPEC) >> $@ cat $(SRC)/glew_init_wgl.c >> $@ $(BIN)/make_list.pl $(WGL_EXT_SPEC) >> $@ echo -e "\n return GLEW_OK;\n}" >> $@; - echo -e "\n#elif !defined(GLEW_EGL) && !defined(GLEW_OSMESA) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX))" >> $@ + echo -e "\n#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX))" >> $@ $(BIN)/make_def_fun.pl GLX $(GLX_CORE_SPEC) >> $@ $(BIN)/make_def_fun.pl GLX $(GLX_EXT_SPEC) >> $@ echo -e "\nGLboolean __GLXEW_VERSION_1_0 = GL_FALSE;" >> $@ @@ -228,6 +259,8 @@ $(S.DEST)/glew.c: $(EXT)/.dummy $(BIN)/make_str.pl $(WGL_EXT_SPEC) >> $@ cat $(SRC)/glew_str_glx.c >> $@ $(BIN)/make_str.pl $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@ + cat $(SRC)/glew_str_egl.c >> $@ + $(BIN)/make_str.pl $(EGL_CORE_SPEC) $(EGL_EXT_SPEC) >> $@ cat $(SRC)/glew_str_tail.c >> $@ perl -e "s/GLEW_VERSION_STRING/$(GLEW_VERSION)/g" -pi $@ perl -e "s/GLEW_VERSION_MAJOR_STRING/$(GLEW_MAJOR)/g" -pi $@ @@ -245,14 +278,13 @@ $(S.DEST)/glewinfo.c: $(EXT)/.dummy cat $(SRC)/glewinfo_head.c >> $@ $(BIN)/make_info.pl $(GL_CORE_SPEC) >> $@ $(BIN)/make_info.pl $(GL_EXT_SPEC) >> $@ - echo -e "#if !defined(GLEW_EGL)\n" >> $@ - echo -e "#ifdef _WIN32\n" >> $@ + echo -e "#if defined(GLEW_EGL)\n" >> $@ + echo -e "#elif _WIN32\n" >> $@ $(BIN)/make_info.pl $(WGL_EXT_SPEC) >> $@ echo -e "#else /* _UNIX */\n" >> $@ $(BIN)/make_info.pl $(GLX_CORE_SPEC) >> $@ $(BIN)/make_info.pl $(GLX_EXT_SPEC) >> $@ echo -e "#endif /* _WIN32 */\n" >> $@ - echo -e "#endif /* !defined(GLEW_EGL) */\n" >> $@ cat $(SRC)/glewinfo_gl.c >> $@ $(BIN)/make_info_list.pl $(GL_CORE_SPEC) >> $@ @@ -262,6 +294,9 @@ $(S.DEST)/glewinfo.c: $(EXT)/.dummy cat $(SRC)/glewinfo_glx.c >> $@ $(BIN)/make_info_list.pl $(GLX_CORE_SPEC) >> $@ $(BIN)/make_info_list.pl $(GLX_EXT_SPEC) >> $@ + cat $(SRC)/glewinfo_egl.c >> $@ + $(BIN)/make_info_list.pl $(EGL_CORE_SPEC) >> $@ + $(BIN)/make_info_list.pl $(EGL_EXT_SPEC) >> $@ cat $(SRC)/glewinfo_tail.c >> $@ perl -e 's/"glColorSubTable"/"glBlendEquation", glBlendEquation == NULL);\n glewInfoFunc("glColorSubTable"/g' -pi $@ rm -f $@.bak diff --git a/auto/bin/make_list.pl b/auto/bin/make_list.pl index 3d0ddce..ef1d81e 100755 --- a/auto/bin/make_list.pl +++ b/auto/bin/make_list.pl @@ -38,7 +38,7 @@ if (@ARGV) $extvar =~ s/GL(X*)_/GL$1EW_/; my $extpre = $extname; - $extpre =~ s/^(W?)GL(X?).*$/\l$1gl\l$2ew/; + $extpre =~ s/^(W?E?)GL(X?).*$/\l$1gl\l$2ew/; #my $pextvar = prefix_varname($extvar); diff --git a/auto/bin/parse_xml.py b/auto/bin/parse_xml.py new file mode 100755 index 0000000..9270040 --- /dev/null +++ b/auto/bin/parse_xml.py @@ -0,0 +1,128 @@ +#!/usr/bin/python + +import re +import sys +from xml.dom.minidom import parse, Node + +def findChildren(node, path): + result = [] + if len(path)==1: + for i in node.childNodes: + if i.nodeType==Node.ELEMENT_NODE: + if i.tagName==path[0]: + result.append(i) + else: + for i in node.childNodes: + if i.nodeType==Node.ELEMENT_NODE: + if i.tagName==path[0]: + result.extend(findChildren(i, path[1:])) + return result + +def findData(node, path): + return [ i.firstChild.data for i in findChildren(node, path) ] + +def findParams(node): + n = findData(node, ['name'])[0] + t = '' + for i in node.childNodes: + if i.nodeType==Node.TEXT_NODE: + t += i.data + if i.nodeType==Node.ELEMENT_NODE and i.tagName=='ptype': + t += i.firstChild.data + return ( t, n) + +def findEnums(dom): + ret = {} + for i in findChildren(dom, [ 'registry', 'enums', 'enum' ]): + n = i.getAttribute('name') + v = i.getAttribute('value') + ret[n] = v + return ret + +def findCommands(dom): + ret = {} + for i in findChildren(dom, [ 'registry', 'commands', 'command' ]): + r,n = findParams(findChildren(i, ['proto'])[0]) + p = [ findParams(j) for j in findChildren(i, ['param'])] + ret[n] = (r, p) + return ret + +def findFeatures(dom): + ret = {} + for i in findChildren(dom, [ 'registry', 'feature' ]): + n = i.getAttribute('name') + e = [] + c = [] + for j in findChildren(i, [ 'require', 'enum' ]): + e.append(j.getAttribute("name")) + for j in findChildren(i, [ 'require', 'command' ]): + c.append(j.getAttribute("name")) + ret[n] = (e,c) + return ret + +def findExtensions(dom): + ret = {} + for i in findChildren(dom, [ 'registry', 'extensions', 'extension' ]): + n = i.getAttribute('name') + e = [] + c = [] + for j in findChildren(i, [ 'require', 'enum' ]): + e.append(j.getAttribute("name")) + for j in findChildren(i, [ 'require', 'command' ]): + c.append(j.getAttribute("name")) + ret[n] = (e,c) + return ret + +def findApi(dom, name): + enums = findEnums(dom) + commands = findCommands(dom) + features = findFeatures(dom) + extensions = findExtensions(dom) + return (enums, commands, features, extensions) + +def writeExtension(f, name, extension, enums, commands): + f.write('%s\n'%name) + f.write('%s\n'%'https://www.khronos.org/registry/egl/specs/eglspec.1.5.pdf') + if name.find('_VERSION_')==-1: + f.write('%s\n'%name) + else: + f.write('\n') + f.write('\n') + enums = [ (j, enums[j]) for j in extension[0] ] + for e in sorted(enums, key=lambda i: i[1]): + f.write('\t%s %s\n'%(e[0], e[1])) + commands = [ (j, commands[j]) for j in extension[1] ] + for c in sorted(commands): + f.write('\t%s %s (%s)\n'%(c[1][0], c[0], ', '.join( [ '%s %s'%(j[0], j[1]) for j in c[1][1] ] ))) + +if __name__ == '__main__': + + from optparse import OptionParser + import os + + parser = OptionParser('usage: %prog [options] [XML specs...]') + parser.add_option("--core", dest="core", help="location for core outputs", default='') + parser.add_option("--extensions", dest="extensions", help="location for extensions outputs", default='') + + (options, args) = parser.parse_args() + + for i in args: + + dom = parse(i) + api = findApi(dom, 'egl') + + print 'Found {} enums, {} commands, {} features and {} extensions.'.format( + len(api[0]), len(api[1]), len(api[2]), len(api[3])) + + if len(options.core): + for i in api[2].keys(): + f = open('%s/%s'%(options.core, i), 'w') + writeExtension(f, i, api[2][i], api[0], api[1]) + f.close() + + if len(options.extensions): + for i in api[3].keys(): + f = open('%s/%s'%(options.extensions, i), 'w') + writeExtension(f, i, api[3][i], api[0], api[1]) + f.close() + diff --git a/auto/khronos/readme.pdf b/auto/khronos/readme.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7debab58baa670f485bf7101d93e9485a72183d3 GIT binary patch literal 130102 zcma&OW2`VsyEeFgariCP;tn+Tg2*%_Na^72ADIXjvd*g(2( zrliW*ZHdB<+$+iIvNmbqFN>ZN)*hr-C;>eEi@W0 z`h(M^arNcAn&Q`zieO-f#8#Jy?qFk$2%0O>n8 z8EX^A8mFKXuOvhhWF1TZ){VPQBHIQqLf4c|KTR`opwvfak64PqN~jkX8nbvnFp5V* zwP$a6 zT-SxD_JBIAD<6j)#f2OD+b zM`4*9ZD4{p4%cRe9AgNKp2Q%j0JX3>$afVLITw70b_d#`k5}b?hmQJQ2mKi4iwki6 zBh9AcR1`ScACraE*;{tib!jECc6U)oae7lpS@)M@XLpvC*@t?oQ`5R@W2$M&qb>Ww z=h^OE`6NoEqxhvEpKio)rTIDTslXJ?^1Rku3!=;JsgnkkjIed@Gd~$0^siO|T_om% ziNe`q=IzDGxg-yt&LO5JA>e{@G-B|hql^Np+#piViRp@nSod0jsx}g_r)vF zh3}7g^^=-Xy#z97An?{t>jw~@jL@JhdN|E-wgt=@ry8} z=k^j|UKK+4NX+fU12|Uc(DV@c=RdXroe*`j>jWd@T3H}9SoxDVPQJ4^nWYHrQV@1!LEyrXjx&S-`*=Sf0tTB0y-pg5R#A{N|38rdi&iJV=SmiO-;y&t0f5k&`mK^h7Fc z>#oSp5p#Smh>DsWODinlnHxJR&M-^XomZ|2XLVXqz4J!2-x`c@mfdjJdDqS-XYnx{$c>y}t;S5|U>cJ;-%3p3fpLEyKg%b?k z$1ej{R*wN^VMO7G{e^2%!c2S`apDMm=_T`25xm0SohNw(R& zp1&~`yo7|h)s{*-F}`^{kE1mL0yPdL2r}x-rH~Xd-8X6`2V{CD@7@+>B1WX}r@*5O z!Y+qnIwdU+KyF*qEFPzNY44=ppt{I$ON387Tb0;e-QYsn{XjsA1f_gx8P8HBu~&{pX>d zb)XX=M1XSG-v}%`{z#*b(Lo($r*7EZ zrW@ycI9G~{TX}k*`qU?jt50((a8$_?gg>fU)PE>hJay2lnqtDE~ft$}EO@9623%u%FiXnln}|}e9%EL_2a8oknEEREg;qLmvGcJ z5H=w3f_O$|C1n;sZ=z)ru4-^H+Rx`Gv{z@GxhU$!m;{9F)yAGGJX$hIz&8Hl3X)RB zkK|>j8V-+npA3^5v%0A?4)g|HDgLY46{#w)Hnr`F^*I|Kf!Pzpb)C% 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%0D{0>S8_aFF;#x>0a5ySV{ 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 + +#include +#include + +typedef int32_t EGLint; + +typedef unsigned int EGLBoolean; +typedef void *EGLDisplay; +typedef void *EGLConfig; +typedef void *EGLSurface; +typedef void *EGLContext; +typedef void (*__eglMustCastToProperFunctionPointerType)(void); + +typedef unsigned int EGLenum; +typedef void *EGLClientBuffer; + +typedef void *EGLSync; +typedef intptr_t EGLAttrib; +typedef khronos_utime_nanoseconds_t EGLTime; +typedef void *EGLImage; + +typedef void *EGLSyncKHR; +typedef intptr_t EGLAttribKHR; +typedef void *EGLLabelKHR; +typedef void *EGLObjectKHR; +typedef void (EGLAPIENTRY *EGLDEBUGPROCKHR)(EGLenum error,const char *command,EGLint messageType,EGLLabelKHR threadLabel,EGLLabelKHR objectLabel,const char* message); +typedef khronos_utime_nanoseconds_t EGLTimeKHR; +typedef void *EGLImageKHR; +typedef void *EGLStreamKHR; +typedef khronos_uint64_t EGLuint64KHR; +typedef int EGLNativeFileDescriptorKHR; +typedef khronos_ssize_t EGLsizeiANDROID; +typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize); +typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize); +typedef void *EGLDeviceEXT; +typedef void *EGLOutputLayerEXT; +typedef void *EGLOutputPortEXT; +typedef void *EGLSyncNV; +typedef khronos_utime_nanoseconds_t EGLTimeNV; +typedef khronos_utime_nanoseconds_t EGLuint64NV; + +struct EGLClientPixmapHI; + +EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname); + +#ifdef __cplusplus +extern "C" { +#endif + diff --git a/auto/src/eglew_mid.h b/auto/src/eglew_mid.h new file mode 100644 index 0000000..f94a149 --- /dev/null +++ b/auto/src/eglew_mid.h @@ -0,0 +1,4 @@ +/* ------------------------------------------------------------------------- */ + +#define EGLEW_FUN_EXPORT GLEW_FUN_EXPORT +#define EGLEW_VAR_EXPORT GLEW_VAR_EXPORT diff --git a/auto/src/eglew_tail.h b/auto/src/eglew_tail.h new file mode 100644 index 0000000..2533373 --- /dev/null +++ b/auto/src/eglew_tail.h @@ -0,0 +1,15 @@ +/* ------------------------------------------------------------------------ */ + +GLEWAPI GLenum GLEWAPIENTRY eglewInit (); +GLEWAPI GLboolean GLEWAPIENTRY eglewIsSupported (const char *name); + +#define EGLEW_GET_VAR(x) (*(const GLboolean*)&x) +#define EGLEW_GET_FUN(x) x + +GLEWAPI GLboolean GLEWAPIENTRY eglewGetExtension (const char *name); + +#ifdef __cplusplus +} +#endif + +#endif /* __eglew_h__ */ diff --git a/auto/src/glew_head.c b/auto/src/glew_head.c index a3f932e..aa4d628 100644 --- a/auto/src/glew_head.c +++ b/auto/src/glew_head.c @@ -1,9 +1,10 @@ #include -#if defined(GLEW_EGL) -#elif defined(GLEW_OSMESA) +#if defined(GLEW_OSMESA) # define GLAPI extern # include +#elif defined(GLEW_EGL) +# include #elif defined(_WIN32) # include #elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) @@ -15,7 +16,6 @@ #include /* For memset */ #if defined(GLEW_EGL) -extern void (*eglGetProcAddress (const char *procname))(); #elif defined(GLEW_REGAL) /* In GLEW_REGAL mode we call direcly into the linked @@ -116,12 +116,12 @@ void* NSGLGetProcAddress (const GLubyte *name) /* * Define glewGetProcAddress. */ -#if defined(GLEW_EGL) -# define glewGetProcAddress(name) eglGetProcAddress((const char *)name) -#elif defined(GLEW_REGAL) +#if defined(GLEW_REGAL) # define glewGetProcAddress(name) regalGetProcAddress((const GLchar *)name) #elif defined(GLEW_OSMESA) # define glewGetProcAddress(name) OSMesaGetProcAddress((const char *)name) +#elif defined(GLEW_EGL) +# define glewGetProcAddress(name) eglGetProcAddress((const char *)name) #elif defined(_WIN32) # define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name) #elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) @@ -153,6 +153,11 @@ void* NSGLGetProcAddress (const GLubyte *name) # define GLXEW_GET_VAR(x) (x) #endif /* GLXEW_GET_VAR */ +#ifdef EGLEW_GET_VAR +# undef EGLEW_GET_VAR +# define EGLEW_GET_VAR(x) (x) +#endif /* EGLEW_GET_VAR */ + /* * GLEW, just like OpenGL or GLU, does not rely on the standard C library. * These functions implement the functionality required in this file. diff --git a/auto/src/glew_init_egl.c b/auto/src/glew_init_egl.c new file mode 100644 index 0000000..e2e481a --- /dev/null +++ b/auto/src/glew_init_egl.c @@ -0,0 +1,31 @@ +/* ------------------------------------------------------------------------ */ + +GLboolean eglewGetExtension (const char* name) +{ + const GLubyte* start; + const GLubyte* end; + +/* TODO */ +/* return _glewSearchExtension(name, start, end); */ + return GL_FALSE; +} + +GLenum eglewInit () +{ + int major, minor; + const GLubyte* extStart; + const GLubyte* extEnd; + + /* initialize flags */ + EGLEW_VERSION_1_0 = GL_TRUE; + EGLEW_VERSION_1_1 = GL_TRUE; + EGLEW_VERSION_1_2 = GL_TRUE; + EGLEW_VERSION_1_3 = GL_TRUE; + EGLEW_VERSION_1_4 = GL_TRUE; + EGLEW_VERSION_1_5 = GL_TRUE; + + /* query EGL version */ + + /* query EGL extension string */ + + /* initialize extensions */ diff --git a/auto/src/glew_init_tail.c b/auto/src/glew_init_tail.c index cc1c4ad..9fd4c29 100644 --- a/auto/src/glew_init_tail.c +++ b/auto/src/glew_init_tail.c @@ -37,7 +37,9 @@ GLenum GLEWAPIENTRY glewInit (void) GLenum r; r = glewContextInit(); if ( r != 0 ) return r; -#if defined(GLEW_EGL) || defined(GLEW_OSMESA) || defined(__ANDROID__) || defined(__native_client__) || defined(__HAIKU__) +#if defined(GLEW_EGL) + return eglewInit(); +#elif defined(GLEW_OSMESA) || defined(__ANDROID__) || defined(__native_client__) || defined(__HAIKU__) return r; #elif defined(_WIN32) return wglewInit(); diff --git a/auto/src/glew_str_egl.c b/auto/src/glew_str_egl.c new file mode 100644 index 0000000..f0c52f9 --- /dev/null +++ b/auto/src/glew_str_egl.c @@ -0,0 +1,17 @@ + } + ret = (len == 0); + } + return ret; +} + +#elif defined(GLEW_EGL) + +GLboolean eglewIsSupported (const char* name) +{ + const GLubyte* pos = (const GLubyte*)name; + GLuint len = _glewStrLen(pos); + GLboolean ret = GL_TRUE; + while (ret && len > 0) + { + if(_glewStrSame1(&pos, &len, (const GLubyte*)"EGL_", 4)) + { diff --git a/auto/src/glew_str_glx.c b/auto/src/glew_str_glx.c index 885db43..af4f8c6 100644 --- a/auto/src/glew_str_glx.c +++ b/auto/src/glew_str_glx.c @@ -4,7 +4,7 @@ return ret; } -#elif !defined(GLEW_EGL) && !defined(GLEW_OSMESA) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) +#elif !defined(GLEW_OSMESA) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) GLboolean glxewIsSupported (const char* name) { diff --git a/auto/src/glewinfo_egl.c b/auto/src/glewinfo_egl.c new file mode 100644 index 0000000..877e722 --- /dev/null +++ b/auto/src/glewinfo_egl.c @@ -0,0 +1,6 @@ +} + +#elif defined(GLEW_EGL) + +static void eglewInfo () +{ diff --git a/auto/src/glewinfo_glx.c b/auto/src/glewinfo_glx.c index e60b549..ead3051 100644 --- a/auto/src/glewinfo_glx.c +++ b/auto/src/glewinfo_glx.c @@ -1,6 +1,6 @@ } -#elif !defined(GLEW_EGL) && !defined(GLEW_OSMESA) /* _UNIX */ +#elif !defined(GLEW_OSMESA) /* _UNIX */ static void glxewInfo () { diff --git a/auto/src/glewinfo_head.c b/auto/src/glewinfo_head.c index ff743f0..6391a72 100644 --- a/auto/src/glewinfo_head.c +++ b/auto/src/glewinfo_head.c @@ -27,8 +27,8 @@ static FILE* f; struct createParams { -#if defined(GLEW_EGL) -#elif defined(GLEW_OSMESA) +#if defined(GLEW_OSMESA) +#elif defined(GLEW_EGL) #elif defined(_WIN32) int pixelformat; #elif !defined(__APPLE__) && !defined(__HAIKU__) || defined(GLEW_APPLE_GLX) diff --git a/auto/src/glewinfo_tail.c b/auto/src/glewinfo_tail.c index e4075c0..84a84c5 100644 --- a/auto/src/glewinfo_tail.c +++ b/auto/src/glewinfo_tail.c @@ -9,8 +9,8 @@ int main (int argc, char** argv) GLuint err; struct createParams params = { -#if defined(GLEW_EGL) -#elif defined(GLEW_OSMESA) +#if defined(GLEW_OSMESA) +#elif defined(GLEW_EGL) #elif defined(_WIN32) -1, /* pixelformat */ #elif !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) @@ -26,8 +26,8 @@ int main (int argc, char** argv) if (glewParseArgs(argc-1, argv+1, ¶ms)) { fprintf(stderr, "Usage: glewinfo " -#if defined(GLEW_EGL) -#elif defined(GLEW_OSMESA) +#if defined(GLEW_OSMESA) +#elif defined(GLEW_EGL) #elif defined(_WIN32) "[-pf ] " #elif !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) @@ -70,8 +70,8 @@ int main (int argc, char** argv) fprintf(f, " GLEW Extension Info\n"); fprintf(f, "---------------------------\n\n"); fprintf(f, "GLEW version %s\n", glewGetString(GLEW_VERSION)); -#if defined(GLEW_EGL) -#elif defined(GLEW_OSMESA) +#if defined(GLEW_OSMESA) +#elif defined(GLEW_EGL) #elif defined(_WIN32) fprintf(f, "Reporting capabilities of pixelformat %d\n", params.pixelformat); #elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) @@ -82,8 +82,8 @@ int main (int argc, char** argv) glGetString(GL_RENDERER), glGetString(GL_VENDOR)); fprintf(f, "OpenGL version %s is supported\n", glGetString(GL_VERSION)); glewInfo(); -#if defined(GLEW_EGL) -#elif defined(GLEW_OSMESA) +#if defined(GLEW_OSMESA) +#elif defined(GLEW_EGL) #elif defined(_WIN32) wglewInfo(); #else @@ -122,8 +122,8 @@ GLboolean glewParseArgs (int argc, char** argv, struct createParams *params) else return GL_TRUE; ++p; } -#if defined(GLEW_EGL) -#elif defined(GLEW_OSMESA) +#if defined(GLEW_OSMESA) +#elif defined(GLEW_EGL) #elif defined(_WIN32) else if (!strcmp(argv[p], "-pf") || !strcmp(argv[p], "-pixelformat")) { diff --git a/config/Makefile.linux-egl b/config/Makefile.linux-egl new file mode 100644 index 0000000..bcdc3cb --- /dev/null +++ b/config/Makefile.linux-egl @@ -0,0 +1,4 @@ +include config/Makefile.linux + +LDFLAGS.GL = -lEGL -lGL +CFLAGS.EXTRA += -DGLEW_EGL diff --git a/src/visualinfo.c b/src/visualinfo.c index c24bbaf..d089207 100644 --- a/src/visualinfo.c +++ b/src/visualinfo.c @@ -37,6 +37,8 @@ #if defined(GLEW_OSMESA) #define GLAPI extern #include +#elif defined(GLEW_EGL) +#include #elif defined(_WIN32) #include #elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) @@ -62,6 +64,8 @@ typedef struct GLContextStruct { #if defined(GLEW_OSMESA) OSMesaContext ctx; +#elif defined(GLEW_EGL) + EGLContext ctx; #elif defined(_WIN32) HWND wnd; HDC dc; @@ -186,6 +190,7 @@ main (int argc, char** argv) /* ---------------------------------------------------------------------- */ /* extensions string */ #if defined(GLEW_OSMESA) +#elif defined(GLEW_EGL) #elif defined(_WIN32) /* WGL extensions */ if (WGLEW_ARB_extensions_string || WGLEW_EXT_extensions_string) @@ -264,7 +269,7 @@ void PrintExtensions (const char* s) /* ---------------------------------------------------------------------- */ -#if defined(GLEW_OSMESA) +#if defined(GLEW_OSMESA) || defined(GLEW_EGL) void VisualInfo (GLContext* ctx) @@ -1048,6 +1053,27 @@ void DestroyContext (GLContext* ctx) if (NULL == ctx) return; if (NULL != ctx->ctx) OSMesaDestroyContext(ctx->ctx); } +/* ------------------------------------------------------------------------ */ + +#elif defined(GLEW_EGL) +void InitContext (GLContext* ctx) +{ + ctx->ctx = NULL; +} + +GLboolean CreateContext (GLContext* ctx) +{ + return GL_FALSE; +} + +void DestroyContext (GLContext* ctx) +{ + if (NULL == ctx) return; + return; +} + +/* ------------------------------------------------------------------------ */ + #elif defined(_WIN32) void InitContext (GLContext* ctx) From c3ea366c9d1d519a9e9c441894b62937e20c03be Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 23 Jan 2016 16:32:24 +1000 Subject: [PATCH 44/81] Add SYSTEM=Linux-clang-egl config --- config/Makefile.linux-clang-egl | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 config/Makefile.linux-clang-egl diff --git a/config/Makefile.linux-clang-egl b/config/Makefile.linux-clang-egl new file mode 100644 index 0000000..ca06419 --- /dev/null +++ b/config/Makefile.linux-clang-egl @@ -0,0 +1,4 @@ +include config/Makefile.linux-clang + +LDFLAGS.GL = -lEGL -lGL +CFLAGS.EXTRA += -DGLEW_EGL From 97bba61a10d847e82e4dd5511f27c4a18c779448 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 23 Jan 2016 16:37:59 +1000 Subject: [PATCH 45/81] Add GLEW_EGL builds to Travis --- .travis.yml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 769a9ab..021066d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,10 +5,14 @@ script: - make -C auto clobber - make extensions - make dist-src -- make clean; SYSTEM=linux make -- make clean; SYSTEM=linux-osmesa make -- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' . ; make; popd -- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' -DGLEW_OSMESA=1 .; make; popd +- make clean; SYSTEM=linux make +- make clean; SYSTEM=linux-osmesa make +- make clean; SYSTEM=linux-egl make +- make clean; SYSTEM=linux-clang make +- make clean; SYSTEM=linux-clang-egl make +- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' . ; make; popd +- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' -DGLEW_OSMESA=1 . ; make; popd +- pushd build/cmake; git clean -xdf .; cmake -G 'Unix Makefiles' -DGLEW_EGL=1 . ; make; popd addons: apt: packages: @@ -16,6 +20,7 @@ addons: - cmake - dos2unix - libosmesa6-dev + - libegl1-mesa-dev artifacts: bucket: glew s3_region: "us-east-1" From 20908a2182c88960b377e58d359336aeca36281b Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 23 Jan 2016 16:48:19 +1000 Subject: [PATCH 46/81] Integrate the XML -> EGL specs step --- auto/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/auto/Makefile b/auto/Makefile index fc9a646..145a33c 100644 --- a/auto/Makefile +++ b/auto/Makefile @@ -118,6 +118,7 @@ $(EXT)/.dummy: $(REGISTRY)/.dummy @echo "--------------------------------------------------------------------" rm -rf $(EXT) $(BIN)/update_ext.sh $(EXT) $(REGISTRY) $(BLACKLIST) + $(BIN)/parse_xml.py registry/xml/egl.xml --core core/gl --extensions extensions/gl $(BIN)/$(FILTER) $(EXT) ifeq ($(patsubst Darwin%,Darwin,$(SYSTEM)), Darwin) find $(CORE) -maxdepth 1 -type f | grep -v VERSION | grep -v "~" | \ From 84b733d9bbe7a466092fd655fa3566633247223b Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 23 Jan 2016 21:32:55 +1000 Subject: [PATCH 47/81] EGL refinements and fixes --- auto/Makefile | 2 ++ auto/bin/make_str.pl | 6 +++--- auto/src/eglew_head.h | 2 ++ auto/src/glew_init_egl.c | 39 +++++++++++++++++++++++++++------------ auto/src/glew_str_glx.c | 2 +- auto/src/glewinfo_glx.c | 2 +- auto/src/glewinfo_head.c | 2 +- 7 files changed, 37 insertions(+), 18 deletions(-) diff --git a/auto/Makefile b/auto/Makefile index 145a33c..d6b35e7 100644 --- a/auto/Makefile +++ b/auto/Makefile @@ -280,6 +280,8 @@ $(S.DEST)/glewinfo.c: $(EXT)/.dummy $(BIN)/make_info.pl $(GL_CORE_SPEC) >> $@ $(BIN)/make_info.pl $(GL_EXT_SPEC) >> $@ echo -e "#if defined(GLEW_EGL)\n" >> $@ + $(BIN)/make_info.pl $(EGL_CORE_SPEC) >> $@ + $(BIN)/make_info.pl $(EGL_EXT_SPEC) >> $@ echo -e "#elif _WIN32\n" >> $@ $(BIN)/make_info.pl $(WGL_EXT_SPEC) >> $@ echo -e "#else /* _UNIX */\n" >> $@ diff --git a/auto/bin/make_str.pl b/auto/bin/make_str.pl index 5b83ef8..6673a80 100755 --- a/auto/bin/make_str.pl +++ b/auto/bin/make_str.pl @@ -24,11 +24,11 @@ if (@ARGV) { my ($extname, $exturl, $extstring, $reuse, $types, $tokens, $functions, $exacts) = parse_ext($ext); my $exttype = $extname; - $exttype =~ s/(W*?)GL(X*?)_(.*?_)(.*)/$3/; + $exttype =~ s/(W?E?)GL(X?)_(.*?_)(.*)/$3/; my $extrem = $extname; - $extrem =~ s/(W*?)GL(X*?)_(.*?_)(.*)/$4/; + $extrem =~ s/(W?E?)GL(X?)_(.*?_)(.*)/$4/; my $extvar = $extname; - $extvar =~ s/(W*)GL(X*)_/$1GL$2EW_/; + $extvar =~ s/(W?E?)GL(X?)_/$1GL$2EW_/; if(!($exttype =~ $curexttype)) { if(length($curexttype) > 0) diff --git a/auto/src/eglew_head.h b/auto/src/eglew_head.h index f0ec663..bb95b1a 100644 --- a/auto/src/eglew_head.h +++ b/auto/src/eglew_head.h @@ -66,6 +66,8 @@ typedef khronos_utime_nanoseconds_t EGLuint64NV; struct EGLClientPixmapHI; +#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0) + EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname); #ifdef __cplusplus diff --git a/auto/src/glew_init_egl.c b/auto/src/glew_init_egl.c index e2e481a..44453c3 100644 --- a/auto/src/glew_init_egl.c +++ b/auto/src/glew_init_egl.c @@ -5,27 +5,42 @@ GLboolean eglewGetExtension (const char* name) const GLubyte* start; const GLubyte* end; -/* TODO */ -/* return _glewSearchExtension(name, start, end); */ - return GL_FALSE; + start = (const GLubyte*) eglQueryString(eglGetDisplay(EGL_DEFAULT_DISPLAY), EGL_EXTENSIONS); + if (0 == start) return GL_FALSE; + end = start + _glewStrLen(start); + return _glewSearchExtension(name, start, end); } GLenum eglewInit () { - int major, minor; + GLuint dot; + GLint major, minor; + const GLubyte* version; const GLubyte* extStart; const GLubyte* extEnd; - /* initialize flags */ - EGLEW_VERSION_1_0 = GL_TRUE; - EGLEW_VERSION_1_1 = GL_TRUE; - EGLEW_VERSION_1_2 = GL_TRUE; - EGLEW_VERSION_1_3 = GL_TRUE; - EGLEW_VERSION_1_4 = GL_TRUE; - EGLEW_VERSION_1_5 = GL_TRUE; + /* query EGK version */ + major = 0; + minor = 0; + version = (const GLubyte*) eglQueryString(eglGetDisplay(EGL_DEFAULT_DISPLAY), EGL_VERSION); + dot = _glewStrCLen(version, '.'); + if (dot != 0) + { + major = version[dot-1]-'0'; + minor = version[dot+1]-'0'; + } - /* query EGL version */ + EGLEW_VERSION_1_5 = ( major > 1 ) || ( major == 1 && minor >= 5 ) ? GL_TRUE : GL_FALSE; + EGLEW_VERSION_1_4 = EGLEW_VERSION_1_5 == GL_TRUE || ( major == 1 && minor >= 4 ) ? GL_TRUE : GL_FALSE; + EGLEW_VERSION_1_3 = EGLEW_VERSION_1_4 == GL_TRUE || ( major == 1 && minor >= 3 ) ? GL_TRUE : GL_FALSE; + EGLEW_VERSION_1_2 = EGLEW_VERSION_1_3 == GL_TRUE || ( major == 1 && minor >= 2 ) ? GL_TRUE : GL_FALSE; + EGLEW_VERSION_1_1 = EGLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE; + EGLEW_VERSION_1_0 = EGLEW_VERSION_1_1 == GL_TRUE || ( major == 1 && minor >= 0 ) ? GL_TRUE : GL_FALSE; /* query EGL extension string */ + extStart = (const GLubyte*) eglQueryString(eglGetDisplay(EGL_DEFAULT_DISPLAY), EGL_EXTENSIONS); + if (extStart == 0) + extStart = (const GLubyte *)""; + extEnd = extStart + _glewStrLen(extStart); /* initialize extensions */ diff --git a/auto/src/glew_str_glx.c b/auto/src/glew_str_glx.c index af4f8c6..893d741 100644 --- a/auto/src/glew_str_glx.c +++ b/auto/src/glew_str_glx.c @@ -4,7 +4,7 @@ return ret; } -#elif !defined(GLEW_OSMESA) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) +#elif !defined(GLEW_OSMESA) && !defined(GLEW_EGL) && !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) GLboolean glxewIsSupported (const char* name) { diff --git a/auto/src/glewinfo_glx.c b/auto/src/glewinfo_glx.c index ead3051..e60b549 100644 --- a/auto/src/glewinfo_glx.c +++ b/auto/src/glewinfo_glx.c @@ -1,6 +1,6 @@ } -#elif !defined(GLEW_OSMESA) /* _UNIX */ +#elif !defined(GLEW_EGL) && !defined(GLEW_OSMESA) /* _UNIX */ static void glxewInfo () { diff --git a/auto/src/glewinfo_head.c b/auto/src/glewinfo_head.c index 6391a72..02089f6 100644 --- a/auto/src/glewinfo_head.c +++ b/auto/src/glewinfo_head.c @@ -3,7 +3,7 @@ #include #include #if defined(GLEW_EGL) -#include +#include #elif defined(GLEW_OSMESA) #define GLAPI extern #include From a755351991d50e4fa5bf729f1c491fe77357a284 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sun, 24 Jan 2016 21:55:33 +1000 Subject: [PATCH 48/81] EGL fix: eglewInit and glewinfo need to manually load some EGL functions --- auto/src/glew_init_egl.c | 12 ++++++++++-- auto/src/glewinfo_tail.c | 37 +++++++++++++++++++++++++++++-------- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/auto/src/glew_init_egl.c b/auto/src/glew_init_egl.c index 44453c3..0be72e3 100644 --- a/auto/src/glew_init_egl.c +++ b/auto/src/glew_init_egl.c @@ -18,11 +18,19 @@ GLenum eglewInit () const GLubyte* version; const GLubyte* extStart; const GLubyte* extEnd; + PFNEGLGETDISPLAYPROC getDisplay = NULL; + PFNEGLQUERYSTRINGPROC queryString = NULL; + + /* Load necessary entry points */ + getDisplay = (PFNEGLGETDISPLAYPROC) glewGetProcAddress("eglGetDisplay"); + queryString = (PFNEGLQUERYSTRINGPROC) glewGetProcAddress("eglQueryString"); + if (!getDisplay || !queryString) + return 1; /* query EGK version */ major = 0; minor = 0; - version = (const GLubyte*) eglQueryString(eglGetDisplay(EGL_DEFAULT_DISPLAY), EGL_VERSION); + version = (const GLubyte*) queryString(getDisplay(EGL_DEFAULT_DISPLAY), EGL_VERSION); dot = _glewStrCLen(version, '.'); if (dot != 0) { @@ -38,7 +46,7 @@ GLenum eglewInit () EGLEW_VERSION_1_0 = EGLEW_VERSION_1_1 == GL_TRUE || ( major == 1 && minor >= 0 ) ? GL_TRUE : GL_FALSE; /* query EGL extension string */ - extStart = (const GLubyte*) eglQueryString(eglGetDisplay(EGL_DEFAULT_DISPLAY), EGL_EXTENSIONS); + extStart = (const GLubyte*) queryString(getDisplay(EGL_DEFAULT_DISPLAY), EGL_EXTENSIONS); if (extStart == 0) extStart = (const GLubyte *)""; extEnd = extStart + _glewStrLen(extStart); diff --git a/auto/src/glewinfo_tail.c b/auto/src/glewinfo_tail.c index 84a84c5..2fca394 100644 --- a/auto/src/glewinfo_tail.c +++ b/auto/src/glewinfo_tail.c @@ -84,6 +84,7 @@ int main (int argc, char** argv) glewInfo(); #if defined(GLEW_OSMESA) #elif defined(GLEW_EGL) + eglewInfo(); #elif defined(_WIN32) wglewInfo(); #else @@ -135,7 +136,7 @@ GLboolean glewParseArgs (int argc, char** argv, struct createParams *params) { if (++p >= argc) return GL_TRUE; params->display = argv[p++]; - } + } else if (!strcmp(argv[p], "-visual")) { if (++p >= argc) return GL_TRUE; @@ -169,16 +170,36 @@ GLboolean glewCreateContext (struct createParams *params) }; EGLConfig config; EGLint numConfig; - display = eglGetDisplay((EGLNativeDisplayType) 0); - if (!eglInitialize(display, &majorVersion, &minorVersion)) + + PFNEGLGETDISPLAYPROC getDisplay = NULL; + PFNEGLINITIALIZEPROC initialize = NULL; + PFNEGLBINDAPIPROC bindAPI = NULL; + PFNEGLCHOOSECONFIGPROC chooseConfig = NULL; + PFNEGLCREATEWINDOWSURFACEPROC createWindowSurface = NULL; + PFNEGLCREATECONTEXTPROC createContext = NULL; + PFNEGLMAKECURRENTPROC makeCurrent = NULL; + + /* Load necessary entry points */ + getDisplay = (PFNEGLGETDISPLAYPROC) eglGetProcAddress("eglGetDisplay"); + initialize = (PFNEGLINITIALIZEPROC) eglGetProcAddress("eglInitialize"); + bindAPI = (PFNEGLBINDAPIPROC) eglGetProcAddress("eglBindAPI"); + chooseConfig = (PFNEGLCHOOSECONFIGPROC) eglGetProcAddress("eglChooseConfig"); + createWindowSurface = (PFNEGLCREATEWINDOWSURFACEPROC) eglGetProcAddress("eglCreateWindowSurface"); + createContext = (PFNEGLCREATECONTEXTPROC) eglGetProcAddress("eglCreateContext"); + makeCurrent = (PFNEGLMAKECURRENTPROC) eglGetProcAddress("eglMakeCurrent"); + if (!getDisplay || !initialize || !bindAPI || !chooseConfig || !createWindowSurface || !createContext || !makeCurrent) + return GL_TRUE; + + display = getDisplay((EGLNativeDisplayType) 0); + if (!initialize(display, &majorVersion, &minorVersion)) return GL_TRUE; - eglBindAPI(EGL_OPENGL_API); - if (!eglChooseConfig(display, attr, &config, 1, &numConfig) || (numConfig != 1)) + bindAPI(EGL_OPENGL_API); + if (!chooseConfig(display, attr, &config, 1, &numConfig) || (numConfig != 1)) return GL_TRUE; - surface = eglCreateWindowSurface(display, config, (EGLNativeWindowType) NULL, NULL); - ctx = eglCreateContext(display, config, NULL, NULL); + surface = createWindowSurface(display, config, (EGLNativeWindowType) NULL, NULL); + ctx = createContext(display, config, NULL, NULL); if (NULL == ctx) return GL_TRUE; - eglMakeCurrent(display, surface, surface, ctx); + makeCurrent(display, surface, surface, ctx); return GL_FALSE; } From 15881f04210e3f91f0b4701d402a479921844c3b Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Mon, 25 Jan 2016 22:29:48 +1000 Subject: [PATCH 49/81] EGL fixup for void parameter lists, additional defines --- auto/bin/parse_xml.py | 5 ++++- auto/src/eglew_head.h | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/auto/bin/parse_xml.py b/auto/bin/parse_xml.py index 9270040..a9c1b4b 100755 --- a/auto/bin/parse_xml.py +++ b/auto/bin/parse_xml.py @@ -93,7 +93,10 @@ def writeExtension(f, name, extension, enums, commands): f.write('\t%s %s\n'%(e[0], e[1])) commands = [ (j, commands[j]) for j in extension[1] ] for c in sorted(commands): - f.write('\t%s %s (%s)\n'%(c[1][0], c[0], ', '.join( [ '%s %s'%(j[0], j[1]) for j in c[1][1] ] ))) + params = ', '.join( [ '%s %s'%(j[0], j[1]) for j in c[1][1] ] ) + if len(params)==0: + params = ' void ' + f.write('\t%s %s (%s)\n'%(c[1][0], c[0], params)) if __name__ == '__main__': diff --git a/auto/src/eglew_head.h b/auto/src/eglew_head.h index bb95b1a..adbeb71 100644 --- a/auto/src/eglew_head.h +++ b/auto/src/eglew_head.h @@ -66,6 +66,16 @@ typedef khronos_utime_nanoseconds_t EGLuint64NV; struct EGLClientPixmapHI; +#define EGL_DONT_CARE ((EGLint)-1) + +#define EGL_NO_CONTEXT ((EGLContext)0) +#define EGL_NO_DISPLAY ((EGLDisplay)0) +#define EGL_NO_IMAGE ((EGLImage)0) +#define EGL_NO_SURFACE ((EGLSurface)0) +#define EGL_NO_SYNC ((EGLSync)0) + +#define EGL_UNKNOWN ((EGLint)-1) + #define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0) EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname); From 4d9010864e8de66032638d5b89b170331a6d4c29 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Tue, 26 Jan 2016 22:53:39 +1000 Subject: [PATCH 50/81] eglewInit takes EGLDisplay parameter, will do eglIntialize internally, for now --- auto/src/eglew_head.h | 11 ++-- auto/src/eglew_tail.h | 2 +- auto/src/glew_init_egl.c | 31 ++++------ auto/src/glew_init_tail.c | 6 +- auto/src/glewinfo_tail.c | 125 ++++++++++++++++++++++++++++---------- 5 files changed, 117 insertions(+), 58 deletions(-) diff --git a/auto/src/eglew_head.h b/auto/src/eglew_head.h index adbeb71..58488ae 100644 --- a/auto/src/eglew_head.h +++ b/auto/src/eglew_head.h @@ -27,6 +27,12 @@ #include #include +#include + +#ifdef __cplusplus +extern "C" { +#endif + typedef int32_t EGLint; typedef unsigned int EGLBoolean; @@ -79,8 +85,3 @@ struct EGLClientPixmapHI; #define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0) EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname); - -#ifdef __cplusplus -extern "C" { -#endif - diff --git a/auto/src/eglew_tail.h b/auto/src/eglew_tail.h index 2533373..a91a76e 100644 --- a/auto/src/eglew_tail.h +++ b/auto/src/eglew_tail.h @@ -1,6 +1,6 @@ /* ------------------------------------------------------------------------ */ -GLEWAPI GLenum GLEWAPIENTRY eglewInit (); +GLEWAPI GLenum GLEWAPIENTRY eglewInit (EGLDisplay display); GLEWAPI GLboolean GLEWAPIENTRY eglewIsSupported (const char *name); #define EGLEW_GET_VAR(x) (*(const GLboolean*)&x) diff --git a/auto/src/glew_init_egl.c b/auto/src/glew_init_egl.c index 0be72e3..26bd4ae 100644 --- a/auto/src/glew_init_egl.c +++ b/auto/src/glew_init_egl.c @@ -1,7 +1,7 @@ -/* ------------------------------------------------------------------------ */ + /* ------------------------------------------------------------------------ */ GLboolean eglewGetExtension (const char* name) -{ +{ const GLubyte* start; const GLubyte* end; @@ -11,34 +11,25 @@ GLboolean eglewGetExtension (const char* name) return _glewSearchExtension(name, start, end); } -GLenum eglewInit () +GLenum eglewInit (EGLDisplay display) { - GLuint dot; - GLint major, minor; - const GLubyte* version; + EGLint major, minor; const GLubyte* extStart; const GLubyte* extEnd; - PFNEGLGETDISPLAYPROC getDisplay = NULL; + PFNEGLINITIALIZEPROC initialize = NULL; PFNEGLQUERYSTRINGPROC queryString = NULL; /* Load necessary entry points */ - getDisplay = (PFNEGLGETDISPLAYPROC) glewGetProcAddress("eglGetDisplay"); + initialize = (PFNEGLINITIALIZEPROC) glewGetProcAddress("eglInitialize"); queryString = (PFNEGLQUERYSTRINGPROC) glewGetProcAddress("eglQueryString"); - if (!getDisplay || !queryString) + if (!initialize || !queryString) return 1; /* query EGK version */ - major = 0; - minor = 0; - version = (const GLubyte*) queryString(getDisplay(EGL_DEFAULT_DISPLAY), EGL_VERSION); - dot = _glewStrCLen(version, '.'); - if (dot != 0) - { - major = version[dot-1]-'0'; - minor = version[dot+1]-'0'; - } + if (initialize(display, &major, &minor) != EGL_TRUE) + return 1; - EGLEW_VERSION_1_5 = ( major > 1 ) || ( major == 1 && minor >= 5 ) ? GL_TRUE : GL_FALSE; + EGLEW_VERSION_1_5 = ( major > 1 ) || ( major == 1 && minor >= 5 ) ? GL_TRUE : GL_FALSE; EGLEW_VERSION_1_4 = EGLEW_VERSION_1_5 == GL_TRUE || ( major == 1 && minor >= 4 ) ? GL_TRUE : GL_FALSE; EGLEW_VERSION_1_3 = EGLEW_VERSION_1_4 == GL_TRUE || ( major == 1 && minor >= 3 ) ? GL_TRUE : GL_FALSE; EGLEW_VERSION_1_2 = EGLEW_VERSION_1_3 == GL_TRUE || ( major == 1 && minor >= 2 ) ? GL_TRUE : GL_FALSE; @@ -46,7 +37,7 @@ GLenum eglewInit () EGLEW_VERSION_1_0 = EGLEW_VERSION_1_1 == GL_TRUE || ( major == 1 && minor >= 0 ) ? GL_TRUE : GL_FALSE; /* query EGL extension string */ - extStart = (const GLubyte*) queryString(getDisplay(EGL_DEFAULT_DISPLAY), EGL_EXTENSIONS); + extStart = (const GLubyte*) queryString(display, EGL_EXTENSIONS); if (extStart == 0) extStart = (const GLubyte *)""; extEnd = extStart + _glewStrLen(extStart); diff --git a/auto/src/glew_init_tail.c b/auto/src/glew_init_tail.c index 9fd4c29..2ef3d5b 100644 --- a/auto/src/glew_init_tail.c +++ b/auto/src/glew_init_tail.c @@ -35,10 +35,14 @@ GLboolean glewExperimental = GL_FALSE; GLenum GLEWAPIENTRY glewInit (void) { GLenum r; +#if defined(GLEW_EGL) + PFNEGLGETCURRENTDISPLAYPROC getCurrentDisplay = NULL; +#endif r = glewContextInit(); if ( r != 0 ) return r; #if defined(GLEW_EGL) - return eglewInit(); + getCurrentDisplay = (PFNEGLGETCURRENTDISPLAYPROC) glewGetProcAddress("eglGetCurrentDisplay"); + return eglewInit(getCurrentDisplay()); #elif defined(GLEW_OSMESA) || defined(__ANDROID__) || defined(__native_client__) || defined(__HAIKU__) return r; #elif defined(_WIN32) diff --git a/auto/src/glewinfo_tail.c b/auto/src/glewinfo_tail.c index 2fca394..ec895f8 100644 --- a/auto/src/glewinfo_tail.c +++ b/auto/src/glewinfo_tail.c @@ -159,47 +159,110 @@ EGLContext ctx; GLboolean glewCreateContext (struct createParams *params) { + EGLDeviceEXT devices[1]; + EGLint numDevices; EGLSurface surface; EGLint majorVersion, minorVersion; - const EGLint attr[] = { - EGL_BUFFER_SIZE, 32, - EGL_COLOR_BUFFER_TYPE, EGL_RGB_BUFFER, - EGL_CONFORMANT, EGL_OPENGL_BIT, - EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT, - EGL_NONE + static const EGLint configAttribs[] = { + EGL_RED_SIZE, 1, + EGL_GREEN_SIZE, 1, + EGL_BLUE_SIZE, 1, + EGL_SURFACE_TYPE, EGL_PBUFFER_BIT, + EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT, + EGL_NONE }; + static const EGLint contextAttribs[] = { + EGL_CONTEXT_CLIENT_VERSION, 2, + EGL_NONE + }; + static const EGLint pBufferAttribs[] = { + EGL_WIDTH, 128, + EGL_HEIGHT, 128, + EGL_NONE + }; EGLConfig config; EGLint numConfig; + EGLint error; - PFNEGLGETDISPLAYPROC getDisplay = NULL; - PFNEGLINITIALIZEPROC initialize = NULL; - PFNEGLBINDAPIPROC bindAPI = NULL; - PFNEGLCHOOSECONFIGPROC chooseConfig = NULL; - PFNEGLCREATEWINDOWSURFACEPROC createWindowSurface = NULL; - PFNEGLCREATECONTEXTPROC createContext = NULL; - PFNEGLMAKECURRENTPROC makeCurrent = NULL; + PFNEGLQUERYDEVICESEXTPROC queryDevices = NULL; + PFNEGLGETPLATFORMDISPLAYEXTPROC getPlatformDisplay = NULL; + PFNEGLGETERRORPROC getError = NULL; + PFNEGLGETDISPLAYPROC getDisplay = NULL; + PFNEGLINITIALIZEPROC initialize = NULL; + PFNEGLBINDAPIPROC bindAPI = NULL; + PFNEGLCHOOSECONFIGPROC chooseConfig = NULL; + PFNEGLCREATEWINDOWSURFACEPROC createWindowSurface = NULL; + PFNEGLCREATECONTEXTPROC createContext = NULL; + PFNEGLMAKECURRENTPROC makeCurrent = NULL; + PFNEGLCREATEPBUFFERSURFACEPROC createPbufferSurface = NULL; /* Load necessary entry points */ - getDisplay = (PFNEGLGETDISPLAYPROC) eglGetProcAddress("eglGetDisplay"); - initialize = (PFNEGLINITIALIZEPROC) eglGetProcAddress("eglInitialize"); - bindAPI = (PFNEGLBINDAPIPROC) eglGetProcAddress("eglBindAPI"); - chooseConfig = (PFNEGLCHOOSECONFIGPROC) eglGetProcAddress("eglChooseConfig"); - createWindowSurface = (PFNEGLCREATEWINDOWSURFACEPROC) eglGetProcAddress("eglCreateWindowSurface"); - createContext = (PFNEGLCREATECONTEXTPROC) eglGetProcAddress("eglCreateContext"); - makeCurrent = (PFNEGLMAKECURRENTPROC) eglGetProcAddress("eglMakeCurrent"); - if (!getDisplay || !initialize || !bindAPI || !chooseConfig || !createWindowSurface || !createContext || !makeCurrent) + queryDevices = (PFNEGLQUERYDEVICESEXTPROC) eglGetProcAddress("eglQueryDevicesEXT"); + getPlatformDisplay = (PFNEGLGETPLATFORMDISPLAYEXTPROC) eglGetProcAddress("eglGetPlatformDisplayEXT"); + getError = (PFNEGLGETERRORPROC) eglGetProcAddress("eglGetError"); + getDisplay = (PFNEGLGETDISPLAYPROC) eglGetProcAddress("eglGetDisplay"); + initialize = (PFNEGLINITIALIZEPROC) eglGetProcAddress("eglInitialize"); + bindAPI = (PFNEGLBINDAPIPROC) eglGetProcAddress("eglBindAPI"); + chooseConfig = (PFNEGLCHOOSECONFIGPROC) eglGetProcAddress("eglChooseConfig"); + createWindowSurface = (PFNEGLCREATEWINDOWSURFACEPROC) eglGetProcAddress("eglCreateWindowSurface"); + createPbufferSurface = (PFNEGLCREATEPBUFFERSURFACEPROC) eglGetProcAddress("eglCreatePbufferSurface"); + createContext = (PFNEGLCREATECONTEXTPROC) eglGetProcAddress("eglCreateContext"); + makeCurrent = (PFNEGLMAKECURRENTPROC) eglGetProcAddress("eglMakeCurrent"); + if (!getError || !getDisplay || !initialize || !bindAPI || !chooseConfig || !createWindowSurface || !createContext || !makeCurrent) return GL_TRUE; - display = getDisplay((EGLNativeDisplayType) 0); - if (!initialize(display, &majorVersion, &minorVersion)) - return GL_TRUE; - bindAPI(EGL_OPENGL_API); - if (!chooseConfig(display, attr, &config, 1, &numConfig) || (numConfig != 1)) - return GL_TRUE; - surface = createWindowSurface(display, config, (EGLNativeWindowType) NULL, NULL); - ctx = createContext(display, config, NULL, NULL); - if (NULL == ctx) return GL_TRUE; - makeCurrent(display, surface, surface, ctx); + display = EGL_NO_DISPLAY; + if (queryDevices && getPlatformDisplay) + { + queryDevices(1, devices, &numDevices); + if (numDevices==1) + { + display = getPlatformDisplay(EGL_PLATFORM_DEVICE_EXT, devices[0], 0); + } + } + if (display==EGL_NO_DISPLAY) + { + display = getDisplay(EGL_DEFAULT_DISPLAY); + } + if (display == EGL_NO_DISPLAY) + return GL_TRUE; + + eglewInit(display); + + if (bindAPI(EGL_OPENGL_API) != EGL_TRUE) + return GL_TRUE; + + if (chooseConfig(display, configAttribs, &config, 1, &numConfig) != EGL_TRUE || (numConfig != 1)) + return GL_TRUE; + + ctx = createContext(display, config, EGL_NO_CONTEXT, contextAttribs); + if (NULL == ctx) + return GL_TRUE; + + surface = EGL_NO_SURFACE; + /* Create a p-buffer surface if possible */ + if (createPbufferSurface) + { + surface = createPbufferSurface(display, config, pBufferAttribs); + } + /* Create a generic surface without a native window, if necessary */ + if (surface==EGL_NO_SURFACE) + { + surface = createWindowSurface(display, config, (EGLNativeWindowType) NULL, NULL); + } + if (surface == EGL_NO_SURFACE) + return GL_TRUE; + + if (makeCurrent(display, surface, surface, ctx) != EGL_TRUE) + return GL_TRUE; + + error = getError(); + if (error!=EGL_SUCCESS) + { + printf("eglGetError: %d\n", error); + return GL_TRUE; + } + return GL_FALSE; } From 23438663d6e2d3afd49727fd33466dd7b5e60257 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Wed, 27 Jan 2016 22:15:49 +1000 Subject: [PATCH 51/81] For EGL purpose avoid using linked glGetString, load it via eglGetProcAddress instead. --- auto/src/glew_init_egl.c | 2 +- auto/src/glew_init_gl.c | 17 ++++++++++++++--- auto/src/glewinfo_tail.c | 22 ++++++++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/auto/src/glew_init_egl.c b/auto/src/glew_init_egl.c index 26bd4ae..784285f 100644 --- a/auto/src/glew_init_egl.c +++ b/auto/src/glew_init_egl.c @@ -5,7 +5,7 @@ GLboolean eglewGetExtension (const char* name) const GLubyte* start; const GLubyte* end; - start = (const GLubyte*) eglQueryString(eglGetDisplay(EGL_DEFAULT_DISPLAY), EGL_EXTENSIONS); + start = (const GLubyte*) eglQueryString(eglGetCurrentDisplay(), EGL_EXTENSIONS); if (0 == start) return GL_FALSE; end = start + _glewStrLen(start); return _glewSearchExtension(name, start, end); diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index 6fd86ce..38bb7c1 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -71,14 +71,22 @@ GLboolean GLEWAPIENTRY glewGetExtension (const char* name) /* ------------------------------------------------------------------------- */ +typedef const GLubyte* (GLAPIENTRY * PFNGLGETSTRINGPROC) (GLenum name); +typedef void (GLAPIENTRY * PFNGLGETINTEGERVPROC) (GLenum pname, GLint *params); + static GLenum GLEWAPIENTRY glewContextInit () { + PFNGLGETSTRINGPROC getString; const GLubyte* s; GLuint dot; GLint major, minor; /* query opengl version */ - s = glGetString(GL_VERSION); + getString = (PFNGLGETSTRINGPROC) glewGetProcAddress((const GLubyte*)"glGetString"); + if (!getString) + return GLEW_ERROR_NO_GL_VERSION; + + s = getString(GL_VERSION); dot = _glewStrCLen(s, '.'); if (dot == 0) return GLEW_ERROR_NO_GL_VERSION; @@ -123,11 +131,14 @@ static GLenum GLEWAPIENTRY glewContextInit () { GLint n = 0; GLint i; + PFNGLGETINTEGERVPROC getIntegerv; PFNGLGETSTRINGIPROC getStringi; const char *ext; GLboolean *enable; - glGetIntegerv(GL_NUM_EXTENSIONS, &n); + getIntegerv = (PFNGLGETINTEGERVPROC) glewGetProcAddress((const GLubyte*)"glGetIntegerv"); + if (getIntegerv) + getIntegerv(GL_NUM_EXTENSIONS, &n); /* glGetStringi is OpenGL 3.0 */ getStringi = (PFNGLGETSTRINGIPROC) glewGetProcAddress((const GLubyte*)"glGetStringi"); @@ -156,7 +167,7 @@ static GLenum GLEWAPIENTRY glewContextInit () char ext[128]; GLboolean *enable; - extensions = (const char *) glGetString(GL_EXTENSIONS); + extensions = (const char *) getString(GL_EXTENSIONS); if (extensions) { diff --git a/auto/src/glewinfo_tail.c b/auto/src/glewinfo_tail.c index ec895f8..1975286 100644 --- a/auto/src/glewinfo_tail.c +++ b/auto/src/glewinfo_tail.c @@ -23,6 +23,11 @@ int main (int argc, char** argv) 0 /* flags */ }; +#if defined(GLEW_EGL) + typedef const GLubyte* (GLAPIENTRY * PFNGLGETSTRINGPROC) (GLenum name); + PFNGLGETSTRINGPROC getString; +#endif + if (glewParseArgs(argc-1, argv+1, ¶ms)) { fprintf(stderr, "Usage: glewinfo " @@ -55,6 +60,17 @@ int main (int argc, char** argv) glewDestroyContext(); return 1; } + +#if defined(GLEW_EGL) + getString = (PFNGLGETSTRINGPROC) eglGetProcAddress("glGetString"); + if (!getString) + { + fprintf(stderr, "Error: eglGetProcAddress failed to fetch glGetString\n"); + glewDestroyContext(); + return 1; + } +#endif + #if defined(_WIN32) #if defined(_MSC_VER) && (_MSC_VER >= 1400) if (fopen_s(&f, "glewinfo.txt", "w") != 0) @@ -78,9 +94,15 @@ int main (int argc, char** argv) fprintf(f, "Reporting capabilities of display %s, visual 0x%x\n", params.display == NULL ? getenv("DISPLAY") : params.display, params.visual); #endif +#if defined(GLEW_EGL) + fprintf(f, "Running on a %s from %s\n", + getString(GL_RENDERER), getString(GL_VENDOR)); + fprintf(f, "OpenGL version %s is supported\n", getString(GL_VERSION)); +#else fprintf(f, "Running on a %s from %s\n", glGetString(GL_RENDERER), glGetString(GL_VENDOR)); fprintf(f, "OpenGL version %s is supported\n", glGetString(GL_VERSION)); +#endif glewInfo(); #if defined(GLEW_OSMESA) #elif defined(GLEW_EGL) From a288050b5769264ac21993840c84d50bb7a5d06c Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Wed, 27 Jan 2016 22:46:59 +1000 Subject: [PATCH 52/81] EGL glewinfo now working for both Nvidia and Mesa implementations --- auto/src/glewinfo_tail.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/auto/src/glewinfo_tail.c b/auto/src/glewinfo_tail.c index 1975286..30f25fd 100644 --- a/auto/src/glewinfo_tail.c +++ b/auto/src/glewinfo_tail.c @@ -185,11 +185,11 @@ GLboolean glewCreateContext (struct createParams *params) EGLint numDevices; EGLSurface surface; EGLint majorVersion, minorVersion; - static const EGLint configAttribs[] = { + EGLint configAttribs[] = { + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_RED_SIZE, 1, EGL_GREEN_SIZE, 1, EGL_BLUE_SIZE, 1, - EGL_SURFACE_TYPE, EGL_PBUFFER_BIT, EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT, EGL_NONE }; @@ -204,7 +204,7 @@ GLboolean glewCreateContext (struct createParams *params) }; EGLConfig config; EGLint numConfig; - EGLint error; + EGLBoolean pBuffer; PFNEGLQUERYDEVICESEXTPROC queryDevices = NULL; PFNEGLGETPLATFORMDISPLAYEXTPROC getPlatformDisplay = NULL; @@ -233,17 +233,22 @@ GLboolean glewCreateContext (struct createParams *params) if (!getError || !getDisplay || !initialize || !bindAPI || !chooseConfig || !createWindowSurface || !createContext || !makeCurrent) return GL_TRUE; + pBuffer = 0; display = EGL_NO_DISPLAY; if (queryDevices && getPlatformDisplay) { queryDevices(1, devices, &numDevices); if (numDevices==1) { + /* Nvidia EGL doesn't need X11 for p-buffer surface */ display = getPlatformDisplay(EGL_PLATFORM_DEVICE_EXT, devices[0], 0); + configAttribs[1] = EGL_PBUFFER_BIT; + pBuffer = 1; } } if (display==EGL_NO_DISPLAY) { + /* Fall-back to X11 surface, works on Mesa */ display = getDisplay(EGL_DEFAULT_DISPLAY); } if (display == EGL_NO_DISPLAY) @@ -257,13 +262,13 @@ GLboolean glewCreateContext (struct createParams *params) if (chooseConfig(display, configAttribs, &config, 1, &numConfig) != EGL_TRUE || (numConfig != 1)) return GL_TRUE; - ctx = createContext(display, config, EGL_NO_CONTEXT, contextAttribs); + ctx = createContext(display, config, EGL_NO_CONTEXT, pBuffer ? contextAttribs : NULL); if (NULL == ctx) return GL_TRUE; surface = EGL_NO_SURFACE; /* Create a p-buffer surface if possible */ - if (createPbufferSurface) + if (pBuffer && createPbufferSurface) { surface = createPbufferSurface(display, config, pBufferAttribs); } @@ -272,19 +277,14 @@ GLboolean glewCreateContext (struct createParams *params) { surface = createWindowSurface(display, config, (EGLNativeWindowType) NULL, NULL); } +#if 0 if (surface == EGL_NO_SURFACE) return GL_TRUE; +#endif if (makeCurrent(display, surface, surface, ctx) != EGL_TRUE) return GL_TRUE; - error = getError(); - if (error!=EGL_SUCCESS) - { - printf("eglGetError: %d\n", error); - return GL_TRUE; - } - return GL_FALSE; } From a7ea1dc3a3ddbc0daebf207a8145be5ba0f5424d Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 6 Feb 2016 12:53:49 +1000 Subject: [PATCH 53/81] Documentation refresh --- doc/advanced.html | 14 +- doc/basic.html | 14 +- doc/build.html | 14 +- doc/credits.html | 41 ++---- doc/glew.html | 364 +++++++++++++++++++++++----------------------- doc/glxew.html | 14 +- doc/index.html | 18 ++- doc/install.html | 14 +- doc/log.html | 16 +- doc/wglew.html | 14 +- 10 files changed, 272 insertions(+), 251 deletions(-) diff --git a/doc/advanced.html b/doc/advanced.html index ffd1242..f4dc9ec 100644 --- a/doc/advanced.html +++ b/doc/advanced.html @@ -57,12 +57,15 @@ THE POSSIBILITY OF SUCH DAMAGE.
- - + - - + + + + + +
Last Update: 08-10-15
Last Update: 01-31-16
OpenGL Logo
GitHub Logo
+ Travis Logo
SourceForge Logo
Building
Installation
Source Generation
Credits & Copyright
Change Log

GitHub
Project Page
Bug Tracker
Issues
Pull Requests
Authors
Licensing

SourceForge Page

@@ -72,10 +75,11 @@ THE POSSIBILITY OF SUCH DAMAGE. - + diff --git a/doc/basic.html b/doc/basic.html index 038a155..0480ef7 100644 --- a/doc/basic.html +++ b/doc/basic.html @@ -57,12 +57,15 @@ THE POSSIBILITY OF SUCH DAMAGE. - - + - - + + + + + +
Last Update: 08-10-15
Last Update: 01-31-16
OpenGL Logo
GitHub Logo
+ Travis Logo
SourceForge Logo
Building
Installation
Source Generation
Credits & Copyright
Change Log

GitHub
Project Page
Bug Tracker
Issues
Pull Requests
Authors
Licensing

SourceForge Page

@@ -72,10 +75,11 @@ THE POSSIBILITY OF SUCH DAMAGE. - + diff --git a/doc/build.html b/doc/build.html index ba0d681..7f15d62 100644 --- a/doc/build.html +++ b/doc/build.html @@ -57,12 +57,15 @@ THE POSSIBILITY OF SUCH DAMAGE. - - + - - + + + + + +
Last Update: 08-10-15
Last Update: 01-31-16
OpenGL Logo
GitHub Logo
+ Travis Logo
SourceForge Logo
Building
Installation
Source Generation
Credits & Copyright
Change Log

GitHub
Project Page
Bug Tracker
Issues
Pull Requests
Authors
Licensing

SourceForge Page

@@ -72,10 +75,11 @@ THE POSSIBILITY OF SUCH DAMAGE. - + diff --git a/doc/credits.html b/doc/credits.html index 259ace5..a2846a9 100644 --- a/doc/credits.html +++ b/doc/credits.html @@ -57,12 +57,15 @@ THE POSSIBILITY OF SUCH DAMAGE. - - + - - + + + + + +
Last Update: 08-10-15
Last Update: 01-31-16
OpenGL Logo
GitHub Logo
+ Travis Logo
SourceForge Logo
Building
Installation
Source Generation
Credits & Copyright
Change Log

GitHub
Project Page
Bug Tracker
Issues
Pull Requests
Authors
Licensing

SourceForge Page

@@ -72,10 +75,11 @@ THE POSSIBILITY OF SUCH DAMAGE. - + @@ -92,31 +96,8 @@ THE POSSIBILITY OF SUCH DAMAGE. -

Credits

- -

-GLEW was developed by Milan -Ikits and Marcelo -Magallon. They also perform occasional maintainance to make sure -that GLEW stays in mint condition. Aaron Lefohn, Joe Kniss, and Chris -Wyman were the first users and also assisted with the design and -debugging process. The acronym GLEW originates from Aaron Lefohn. -Pasi Kärkkäinen identified and fixed several problems with -GLX and SDL. Nate Robins created the wglinfo utility, to -which modifications were made by Michael Wimmer. -

- -

Copyright

- -

-GLEW is originally derived from the EXTGL project by Lev Povalahev. -The source code is licensed under the Modified BSD -License, the Mesa 3-D License (MIT -License), and the Khronos License (MIT -License). The automatic code generation scripts are released under -the GNU GPL. -

+

+Author, copyright and licensing information on github.

Last Update: 08-10-15
Last Update: 01-31-16
OpenGL Logo
GitHub Logo
+ Travis Logo
SourceForge Logo
diff --git a/doc/glew.html b/doc/glew.html index 3b82eae..65f8c6c 100644 --- a/doc/glew.html +++ b/doc/glew.html @@ -57,12 +57,15 @@ THE POSSIBILITY OF SUCH DAMAGE. Building Installation Source Generation -Credits & Copyright Change Log - +
GitHub -Project Page -Bug Tracker +Issues +Pull Requests +Authors +Licensing +
+SourceForge Page
@@ -72,10 +75,11 @@ THE POSSIBILITY OF SUCH DAMAGE. - + @@ -507,194 +511,196 @@ THE POSSIBILITY OF SUCH DAMAGE. + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - + + - - + + - - - - - - - + + + + + + + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - + - - - - - - - + + + + + + + - - - + + +
Last Update: 08-10-15
Last Update: 01-31-16
OpenGL Logo
GitHub Logo
+ Travis Logo
SourceForge Logo

394 NVX_conditional_render
395 NVX_gpu_memory_info
396 NVX_linked_gpu_multicast

396 NV_bindless_multi_draw_indirect
397 NV_bindless_multi_draw_indirect_count
398 NV_bindless_texture
399 NV_blend_equation_advanced
400 NV_blend_equation_advanced_coherent
401 NV_blend_square
402 NV_compute_program5
403 NV_conditional_render
404 NV_conservative_raster
405 NV_conservative_raster_dilate
406 NV_copy_depth_to_color
407 NV_copy_image
408 NV_deep_texture3D
409 NV_depth_buffer_float
410 NV_depth_clamp
411 NV_depth_range_unclamped
412 NV_draw_texture
413 NV_evaluators
414 NV_explicit_multisample
415 NV_fence
416 NV_fill_rectangle
417 NV_float_buffer
418 NV_fog_distance
419 NV_fragment_coverage_to_color
420 NV_fragment_program
421 NV_fragment_program2
422 NV_fragment_program4
423 NV_fragment_program_option
424 NV_fragment_shader_interlock
425 NV_framebuffer_mixed_samples
426 NV_framebuffer_multisample_coverage
427 NV_geometry_program4
428 NV_geometry_shader4
429 NV_geometry_shader_passthrough
430 NV_gpu_program4
431 NV_gpu_program5
432 NV_gpu_program5_mem_extended
433 NV_gpu_program_fp64
434 NV_gpu_shader5
435 NV_half_float
436 NV_internalformat_sample_query
437 NV_light_max_exponent
438 NV_multisample_coverage
439 NV_multisample_filter_hint
440 NV_occlusion_query
441 NV_packed_depth_stencil
442 NV_parameter_buffer_object
443 NV_parameter_buffer_object2
444 NV_path_rendering
445 NV_path_rendering_shared_edge
446 NV_pixel_data_range
447 NV_point_sprite
448 NV_present_video
449 NV_primitive_restart
450 NV_register_combiners
451 NV_register_combiners2
452 NV_sample_locations
453 NV_sample_mask_override_coverage
454 NV_shader_atomic_counters
455 NV_shader_atomic_float
456 NV_shader_atomic_fp16_vector
457 NV_shader_atomic_int64
458 NV_shader_buffer_load
459 NV_shader_storage_buffer_object
460 NV_shader_thread_group
461 NV_shader_thread_shuffle
462 NV_tessellation_program5
463 NV_texgen_emboss
464 NV_texgen_reflection
465 NV_texture_barrier
466 NV_texture_compression_vtc
467 NV_texture_env_combine4
468 NV_texture_expand_normal
469 NV_texture_multisample
470 NV_texture_rectangle
471 NV_texture_shader
472 NV_texture_shader2
473 NV_texture_shader3
474 NV_transform_feedback
475 NV_transform_feedback2
476 NV_uniform_buffer_unified_memory
477 NV_vdpau_interop
478 NV_vertex_array_range
479 NV_vertex_array_range2
480 NV_vertex_attrib_integer_64bit
481 NV_vertex_buffer_unified_memory
482 NV_vertex_program
483 NV_vertex_program1_1
484 NV_vertex_program2
485 NV_vertex_program2_option
486 NV_vertex_program3
487 NV_vertex_program4
488 NV_video_capture
489 NV_viewport_array2
397 NV_bindless_multi_draw_indirect
398 NV_bindless_multi_draw_indirect_count
399 NV_bindless_texture
400 NV_blend_equation_advanced
401 NV_blend_equation_advanced_coherent
402 NV_blend_square
403 NV_command_list
404 NV_compute_program5
405 NV_conditional_render
406 NV_conservative_raster
407 NV_conservative_raster_dilate
408 NV_copy_depth_to_color
409 NV_copy_image
410 NV_deep_texture3D
411 NV_depth_buffer_float
412 NV_depth_clamp
413 NV_depth_range_unclamped
414 NV_draw_texture
415 NV_evaluators
416 NV_explicit_multisample
417 NV_fence
418 NV_fill_rectangle
419 NV_float_buffer
420 NV_fog_distance
421 NV_fragment_coverage_to_color
422 NV_fragment_program
423 NV_fragment_program2
424 NV_fragment_program4
425 NV_fragment_program_option
426 NV_fragment_shader_interlock
427 NV_framebuffer_mixed_samples
428 NV_framebuffer_multisample_coverage
429 NV_geometry_program4
430 NV_geometry_shader4
431 NV_geometry_shader_passthrough
432 NV_gpu_program4
433 NV_gpu_program5
434 NV_gpu_program5_mem_extended
435 NV_gpu_program_fp64
436 NV_gpu_shader5
437 NV_half_float
438 NV_internalformat_sample_query
439 NV_light_max_exponent
440 NV_multisample_coverage
441 NV_multisample_filter_hint
442 NV_occlusion_query
443 NV_packed_depth_stencil
444 NV_parameter_buffer_object
445 NV_parameter_buffer_object2
446 NV_path_rendering
447 NV_path_rendering_shared_edge
448 NV_pixel_data_range
449 NV_point_sprite
450 NV_present_video
451 NV_primitive_restart
452 NV_register_combiners
453 NV_register_combiners2
454 NV_sample_locations
455 NV_sample_mask_override_coverage
456 NV_shader_atomic_counters
457 NV_shader_atomic_float
458 NV_shader_atomic_fp16_vector
459 NV_shader_atomic_int64
460 NV_shader_buffer_load
461 NV_shader_storage_buffer_object
462 NV_shader_thread_group
463 NV_shader_thread_shuffle
464 NV_tessellation_program5
465 NV_texgen_emboss
466 NV_texgen_reflection
467 NV_texture_barrier
468 NV_texture_compression_vtc
469 NV_texture_env_combine4
470 NV_texture_expand_normal
471 NV_texture_multisample
472 NV_texture_rectangle
473 NV_texture_shader
474 NV_texture_shader2
475 NV_texture_shader3
476 NV_transform_feedback
477 NV_transform_feedback2
478 NV_uniform_buffer_unified_memory
479 NV_vdpau_interop
480 NV_vertex_array_range
481 NV_vertex_array_range2
482 NV_vertex_attrib_integer_64bit
483 NV_vertex_buffer_unified_memory
484 NV_vertex_program
485 NV_vertex_program1_1
486 NV_vertex_program2
487 NV_vertex_program2_option
488 NV_vertex_program3
489 NV_vertex_program4
490 NV_video_capture
491 NV_viewport_array2

490 OES_byte_coordinates
491 OES_compressed_paletted_texture
492 OES_read_format
493 OES_single_precision
492 OES_byte_coordinates
493 OES_compressed_paletted_texture
494 OES_read_format
495 OES_single_precision

494 OML_interlace
495 OML_resample
496 OML_subsample
496 OML_interlace
497 OML_resample
498 OML_subsample

497 OVR_multiview
498 OVR_multiview2
499 OVR_multiview
500 OVR_multiview2

499 PGI_misc_hints
500 PGI_vertex_hints
501 PGI_misc_hints
502 PGI_vertex_hints

501 REGAL_ES1_0_compatibility
502 REGAL_ES1_1_compatibility
503 REGAL_enable
504 REGAL_error_string
505 REGAL_extension_query
506 REGAL_log
507 REGAL_proc_address
503 REGAL_ES1_0_compatibility
504 REGAL_ES1_1_compatibility
505 REGAL_enable
506 REGAL_error_string
507 REGAL_extension_query
508 REGAL_log
509 REGAL_proc_address

508 REND_screen_coordinates
510 REND_screen_coordinates

509 S3_s3tc
511 S3_s3tc

510 SGIS_color_range
511 SGIS_detail_texture
512 SGIS_fog_function
513 SGIS_generate_mipmap
514 SGIS_multisample
515 SGIS_pixel_texture
516 SGIS_point_line_texgen
517 SGIS_sharpen_texture
518 SGIS_texture4D
519 SGIS_texture_border_clamp
520 SGIS_texture_edge_clamp
521 SGIS_texture_filter4
522 SGIS_texture_lod
523 SGIS_texture_select
512 SGIS_color_range
513 SGIS_detail_texture
514 SGIS_fog_function
515 SGIS_generate_mipmap
516 SGIS_multisample
517 SGIS_pixel_texture
518 SGIS_point_line_texgen
519 SGIS_sharpen_texture
520 SGIS_texture4D
521 SGIS_texture_border_clamp
522 SGIS_texture_edge_clamp
523 SGIS_texture_filter4
524 SGIS_texture_lod
525 SGIS_texture_select

524 SGIX_async
525 SGIX_async_histogram
526 SGIX_async_pixel
527 SGIX_blend_alpha_minmax
528 SGIX_clipmap
529 SGIX_convolution_accuracy
530 SGIX_depth_texture
531 SGIX_flush_raster
532 SGIX_fog_offset
533 SGIX_fog_texture
534 SGIX_fragment_specular_lighting
535 SGIX_framezoom
536 SGIX_interlace
537 SGIX_ir_instrument1
538 SGIX_list_priority
539 SGIX_pixel_texture
540 SGIX_pixel_texture_bits
541 SGIX_reference_plane
542 SGIX_resample
543 SGIX_shadow
544 SGIX_shadow_ambient
545 SGIX_sprite
546 SGIX_tag_sample_buffer
547 SGIX_texture_add_env
548 SGIX_texture_coordinate_clamp
549 SGIX_texture_lod_bias
550 SGIX_texture_multi_buffer
551 SGIX_texture_range
552 SGIX_texture_scale_bias
553 SGIX_vertex_preclip
554 SGIX_vertex_preclip_hint
555 SGIX_ycrcb
526 SGIX_async
527 SGIX_async_histogram
528 SGIX_async_pixel
529 SGIX_blend_alpha_minmax
530 SGIX_clipmap
531 SGIX_convolution_accuracy
532 SGIX_depth_texture
533 SGIX_flush_raster
534 SGIX_fog_offset
535 SGIX_fog_texture
536 SGIX_fragment_specular_lighting
537 SGIX_framezoom
538 SGIX_interlace
539 SGIX_ir_instrument1
540 SGIX_list_priority
541 SGIX_pixel_texture
542 SGIX_pixel_texture_bits
543 SGIX_reference_plane
544 SGIX_resample
545 SGIX_shadow
546 SGIX_shadow_ambient
547 SGIX_sprite
548 SGIX_tag_sample_buffer
549 SGIX_texture_add_env
550 SGIX_texture_coordinate_clamp
551 SGIX_texture_lod_bias
552 SGIX_texture_multi_buffer
553 SGIX_texture_range
554 SGIX_texture_scale_bias
555 SGIX_vertex_preclip
556 SGIX_vertex_preclip_hint
557 SGIX_ycrcb

556 SGI_color_matrix
557 SGI_color_table
558 SGI_texture_color_table
558 SGI_color_matrix
559 SGI_color_table
560 SGI_texture_color_table

559 SUNX_constant_data
561 SUNX_constant_data

560 SUN_convolution_border_modes
561 SUN_global_alpha
562 SUN_mesh_array
563 SUN_read_video_pixels
564 SUN_slice_accum
565 SUN_triangle_list
566 SUN_vertex
562 SUN_convolution_border_modes
563 SUN_global_alpha
564 SUN_mesh_array
565 SUN_read_video_pixels
566 SUN_slice_accum
567 SUN_triangle_list
568 SUN_vertex

567 WIN_phong_shading
568 WIN_specular_fog
569 WIN_swap_hint
569 WIN_phong_shading
570 WIN_specular_fog
571 WIN_swap_hint
diff --git a/doc/glxew.html b/doc/glxew.html index 576ddd3..08fa857 100644 --- a/doc/glxew.html +++ b/doc/glxew.html @@ -57,12 +57,15 @@ THE POSSIBILITY OF SUCH DAMAGE. Building Installation Source Generation -Credits & Copyright Change Log - +
GitHub -Project Page -Bug Tracker +Issues +Pull Requests +Authors +Licensing +
+SourceForge Page
@@ -72,10 +75,11 @@ THE POSSIBILITY OF SUCH DAMAGE. - + diff --git a/doc/index.html b/doc/index.html index b9b3605..b2a612b 100644 --- a/doc/index.html +++ b/doc/index.html @@ -57,12 +57,15 @@ THE POSSIBILITY OF SUCH DAMAGE. - - + - - + + + + + +
Last Update: 08-10-15
Last Update: 01-31-16
OpenGL Logo
GitHub Logo
+ Travis Logo
SourceForge Logo
Building
Installation
Source Generation
Credits & Copyright
Change Log

GitHub
Project Page
Bug Tracker
Issues
Pull Requests
Authors
Licensing

SourceForge Page

@@ -72,10 +75,11 @@ THE POSSIBILITY OF SUCH DAMAGE. - + @@ -154,8 +158,8 @@ An up-to-date copy is also available using gitUnsupported snapshots are also available:

Supported Extensions

diff --git a/doc/install.html b/doc/install.html index 4d00db8..e9427bc 100644 --- a/doc/install.html +++ b/doc/install.html @@ -57,12 +57,15 @@ THE POSSIBILITY OF SUCH DAMAGE. - - + - - + + + + + +
Last Update: 08-10-15
Last Update: 01-31-16
OpenGL Logo
GitHub Logo
+ Travis Logo
SourceForge Logo
Building
Installation
Source Generation
Credits & Copyright
Change Log

GitHub
Project Page
Bug Tracker
Issues
Pull Requests
Authors
Licensing

SourceForge Page

@@ -72,10 +75,11 @@ THE POSSIBILITY OF SUCH DAMAGE. - + diff --git a/doc/log.html b/doc/log.html index efa0a9f..41c6e27 100644 --- a/doc/log.html +++ b/doc/log.html @@ -57,12 +57,15 @@ THE POSSIBILITY OF SUCH DAMAGE. - - + - - + + + + + +
Last Update: 08-10-15
Last Update: 01-31-16
OpenGL Logo
GitHub Logo
+ Travis Logo
SourceForge Logo
Building
Installation
Source Generation
Credits & Copyright
Change Log

GitHub
Project Page
Bug Tracker
Issues
Pull Requests
Authors
Licensing

SourceForge Page

@@ -72,10 +75,11 @@ THE POSSIBILITY OF SUCH DAMAGE. - + @@ -103,6 +107,8 @@ THE POSSIBILITY OF SUCH DAMAGE.
  • glxewInit, wglewInit
  • glewinfo adds support for -version, -profile core|compatibility and -flag debug|forward parameters
  • Improved cmake build support + +
    • New extensions:
        diff --git a/doc/wglew.html b/doc/wglew.html index 903cb36..1dd5863 100644 --- a/doc/wglew.html +++ b/doc/wglew.html @@ -57,12 +57,15 @@ THE POSSIBILITY OF SUCH DAMAGE.
  • - - + - - + + + + + +
    Last Update: 08-10-15
    Last Update: 01-31-16
    OpenGL Logo
    GitHub Logo
    + Travis Logo
    SourceForge Logo
    Building
    Installation
    Source Generation
    Credits & Copyright
    Change Log

    GitHub
    Project Page
    Bug Tracker
    Issues
    Pull Requests
    Authors
    Licensing

    SourceForge Page

    @@ -72,10 +75,11 @@ THE POSSIBILITY OF SUCH DAMAGE. - + From 281e38de7d9ffd963c58062646bc06cca3cdea9f Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 6 Feb 2016 13:12:27 +1000 Subject: [PATCH 54/81] PYTHON make variable for using python2, optionally --- auto/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/auto/Makefile b/auto/Makefile index d6b35e7..ff9dd36 100644 --- a/auto/Makefile +++ b/auto/Makefile @@ -10,6 +10,7 @@ include ../config/version #GLEW_SPLIT_SOURCE = yes SHELL = bash +PYTHON ?= python ### Use git repository for GL extension specifications @@ -118,7 +119,7 @@ $(EXT)/.dummy: $(REGISTRY)/.dummy @echo "--------------------------------------------------------------------" rm -rf $(EXT) $(BIN)/update_ext.sh $(EXT) $(REGISTRY) $(BLACKLIST) - $(BIN)/parse_xml.py registry/xml/egl.xml --core core/gl --extensions extensions/gl + $(PYTHON) $(BIN)/parse_xml.py registry/xml/egl.xml --core core/gl --extensions extensions/gl $(BIN)/$(FILTER) $(EXT) ifeq ($(patsubst Darwin%,Darwin,$(SYSTEM)), Darwin) find $(CORE) -maxdepth 1 -type f | grep -v VERSION | grep -v "~" | \ From 31cee87b1cbd779045c545bb841cd062dff0adf9 Mon Sep 17 00:00:00 2001 From: Wes Tarro Date: Sat, 6 Feb 2016 10:54:29 -0500 Subject: [PATCH 55/81] Finish taking C runtime out of GLEW on Windows and remove no longer supported MX configurations from Visual Studio projects. --- build/cmake/CMakeLists.txt | 8 +- build/vc12/glew.sln | 36 ----- build/vc12/glew_shared.vcxproj | 231 +-------------------------------- build/vc12/glew_static.vcxproj | 175 +------------------------ build/vc12/glewinfo.vcxproj | 190 --------------------------- build/vc12/visualinfo.vcxproj | 190 --------------------------- 6 files changed, 15 insertions(+), 815 deletions(-) diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 95d95bf..1ebea14 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -81,10 +81,13 @@ if (WIN32) endif () add_library (glew SHARED ${GLEW_SRC_FILES}) -set_target_properties (glew PROPERTIES COMPILE_DEFINITIONS "GLEW_BUILD;VC_EXTRALEAN" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX "${DLL_PREFIX}") +set_target_properties (glew PROPERTIES COMPILE_DEFINITIONS "GLEW_BUILD" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX "${DLL_PREFIX}") add_library (glew_s STATIC ${GLEW_SRC_FILES}) +set_target_properties (glew_s PROPERTIES COMPILE_DEFINITIONS "GLEW_STATIC" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX lib) if (MSVC) # add options from visual studio project and remove stdlib dependency + target_compile_definitions (glew PRIVATE "GLEW_BUILD;VC_EXTRALEAN") + target_compile_definitions (glew_s PRIVATE "GLEW_STATIC;VC_EXTRALEAN") # kill security checks which are dependent on stdlib target_compile_options (glew PRIVATE -GS-) target_compile_options (glew_s PRIVATE -GS-) @@ -92,10 +95,9 @@ if (MSVC) elseif (WIN32 AND ((CMAKE_C_COMPILER_ID MATCHES "GNU") OR (CMAKE_C_COMPILER_ID MATCHES "Clang"))) # remove stdlib dependency on windows with GCC and Clang (for similar reasons # as to MSVC - to allow it to be used with any Windows compiler) - # not thoroughly tested yet + # not thoroughly tested yet! target_link_libraries (glew PRIVATE -nostdlibs -lgcc) endif () -set_target_properties (glew_s PROPERTIES COMPILE_DEFINITIONS "GLEW_STATIC" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX lib) target_link_libraries (glew PUBLIC ${GLEW_LIBRARIES}) target_link_libraries (glew_s ${GLEW_LIBRARIES}) diff --git a/build/vc12/glew.sln b/build/vc12/glew.sln index 9a2d169..a3d671e 100644 --- a/build/vc12/glew.sln +++ b/build/vc12/glew.sln @@ -11,76 +11,40 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "visualinfo", "visualinfo.vc EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug MX|Win32 = Debug MX|Win32 - Debug MX|x64 = Debug MX|x64 Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 - Release MX|Win32 = Release MX|Win32 - Release MX|x64 = Release MX|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug MX|Win32.ActiveCfg = Debug MX|Win32 - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug MX|Win32.Build.0 = Debug MX|Win32 - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug MX|x64.ActiveCfg = Debug MX|x64 - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug MX|x64.Build.0 = Debug MX|x64 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|Win32.ActiveCfg = Debug|Win32 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|Win32.Build.0 = Debug|Win32 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|x64.ActiveCfg = Debug|x64 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|x64.Build.0 = Debug|x64 - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release MX|Win32.ActiveCfg = Release MX|Win32 - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release MX|Win32.Build.0 = Release MX|Win32 - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release MX|x64.ActiveCfg = Release MX|x64 - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release MX|x64.Build.0 = Release MX|x64 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|Win32.ActiveCfg = Release|Win32 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|Win32.Build.0 = Release|Win32 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|x64.ActiveCfg = Release|x64 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|x64.Build.0 = Release|x64 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug MX|Win32.ActiveCfg = Debug MX|Win32 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug MX|Win32.Build.0 = Debug MX|Win32 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug MX|x64.ActiveCfg = Debug MX|x64 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug MX|x64.Build.0 = Debug MX|x64 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|Win32.ActiveCfg = Debug|Win32 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|Win32.Build.0 = Debug|Win32 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|x64.ActiveCfg = Debug|x64 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|x64.Build.0 = Debug|x64 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release MX|Win32.ActiveCfg = Release MX|Win32 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release MX|Win32.Build.0 = Release MX|Win32 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release MX|x64.ActiveCfg = Release MX|x64 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release MX|x64.Build.0 = Release MX|x64 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|Win32.ActiveCfg = Release|Win32 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|Win32.Build.0 = Release|Win32 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|x64.ActiveCfg = Release|x64 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|x64.Build.0 = Release|x64 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug MX|Win32.ActiveCfg = Debug MX|Win32 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug MX|Win32.Build.0 = Debug MX|Win32 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug MX|x64.ActiveCfg = Debug MX|x64 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug MX|x64.Build.0 = Debug MX|x64 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|Win32.ActiveCfg = Debug|Win32 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|Win32.Build.0 = Debug|Win32 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|x64.ActiveCfg = Debug|x64 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|x64.Build.0 = Debug|x64 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release MX|Win32.ActiveCfg = Release MX|Win32 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release MX|Win32.Build.0 = Release MX|Win32 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release MX|x64.ActiveCfg = Release MX|x64 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release MX|x64.Build.0 = Release MX|x64 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|Win32.ActiveCfg = Release|Win32 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|Win32.Build.0 = Release|Win32 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|x64.ActiveCfg = Release|x64 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|x64.Build.0 = Release|x64 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug MX|Win32.ActiveCfg = Debug MX|Win32 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug MX|Win32.Build.0 = Debug MX|Win32 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug MX|x64.ActiveCfg = Debug MX|x64 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug MX|x64.Build.0 = Debug MX|x64 {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|Win32.ActiveCfg = Debug|Win32 {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|Win32.Build.0 = Debug|Win32 {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|x64.ActiveCfg = Debug|x64 {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|x64.Build.0 = Debug|x64 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release MX|Win32.ActiveCfg = Release MX|Win32 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release MX|Win32.Build.0 = Release MX|Win32 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release MX|x64.ActiveCfg = Release MX|x64 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release MX|x64.Build.0 = Release MX|x64 {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|Win32.ActiveCfg = Release|Win32 {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|Win32.Build.0 = Release|Win32 {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|x64.ActiveCfg = Release|x64 diff --git a/build/vc12/glew_shared.vcxproj b/build/vc12/glew_shared.vcxproj index 8a78a90..6605a1c 100644 --- a/build/vc12/glew_shared.vcxproj +++ b/build/vc12/glew_shared.vcxproj @@ -1,14 +1,6 @@  - - Debug MX - Win32 - - - Debug MX - x64 - Debug Win32 @@ -17,14 +9,6 @@ Debug x64 - - Release MX - Win32 - - - Release MX - x64 - Release Win32 @@ -50,16 +34,6 @@ false v120 - - DynamicLibrary - false - v120 - - - DynamicLibrary - false - v120 - DynamicLibrary false @@ -70,16 +44,6 @@ false v120 - - DynamicLibrary - false - v120 - - - DynamicLibrary - false - v120 - @@ -89,37 +53,13 @@ - - - - - - - - - - - - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glew32mx - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glew32mx - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ @@ -132,18 +72,6 @@ false glew32 - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glew32mxd - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glew32mxd - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ @@ -156,81 +84,6 @@ false glew32d - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - $(INCLUDE_DIR) - WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_MX;GLEW_BUILD;%(PreprocessorDefinitions) - - - true - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - - - 0x0409 - NDEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib - 0x62AA0000 - opengl32.lib;%(AdditionalDependencies) - /ignore:4089 - - - - - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - $(INCLUDE_DIR) - WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_MX;GLEW_BUILD;%(PreprocessorDefinitions) - - - true - NDEBUG;%(PreprocessorDefinitions) - true - - - 0x0409 - NDEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib - 0x62AA0000 - opengl32.lib;%(AdditionalDependencies) - /ignore:4089 - - - - MultiThreaded @@ -242,6 +95,7 @@ Level3 $(INCLUDE_DIR) WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + false true @@ -267,6 +121,8 @@ /ignore:4089 + true + true @@ -309,84 +165,9 @@ true - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - $(INCLUDE_DIR) - WIN32;WIN32_MEAN_AND_LEAN;VC_EXTRALEAN;GLEW_MX;GLEW_BUILD;%(PreprocessorDefinitions) - EnableFastChecks - - - true - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - - - 0x0409 - _DEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib - 0x62AA0000 - opengl32.lib;%(AdditionalDependencies) - - - - - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - $(INCLUDE_DIR) - WIN32;WIN32_MEAN_AND_LEAN;VC_EXTRALEAN;GLEW_MX;GLEW_BUILD;%(PreprocessorDefinitions) - EnableFastChecks - - - true - _DEBUG;%(PreprocessorDefinitions) - true - - - 0x0409 - _DEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib - 0x62AA0000 - opengl32.lib;%(AdditionalDependencies) - - - - - MultiThreadedDebugDLL + MultiThreadedDebug Default false Disabled @@ -395,6 +176,7 @@ EnableFastChecks Level3 $(INCLUDE_DIR) + false true @@ -424,7 +206,7 @@ - MultiThreadedDebugDLL + MultiThreadedDebug Default false Disabled @@ -433,6 +215,7 @@ EnableFastChecks Level3 $(INCLUDE_DIR) + false true diff --git a/build/vc12/glew_static.vcxproj b/build/vc12/glew_static.vcxproj index 9bcbad1..61adc41 100644 --- a/build/vc12/glew_static.vcxproj +++ b/build/vc12/glew_static.vcxproj @@ -1,14 +1,6 @@  - - Debug MX - Win32 - - - Debug MX - x64 - Debug Win32 @@ -17,14 +9,6 @@ Debug x64 - - Release MX - Win32 - - - Release MX - x64 - Release Win32 @@ -58,18 +42,6 @@ MultiByte v120 - - StaticLibrary - false - MultiByte - v120 - - - StaticLibrary - false - MultiByte - v120 - StaticLibrary false @@ -82,18 +54,6 @@ MultiByte v120 - - StaticLibrary - false - MultiByte - v120 - - - StaticLibrary - false - MultiByte - v120 - @@ -109,35 +69,13 @@ - - - - - - - - - - - - - - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - glew32mxsd - - - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - glew32mxsd - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ @@ -148,16 +86,6 @@ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ glew32s - - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - glew32mxs - - - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - glew32mxs - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ @@ -176,56 +104,6 @@ $(LIB_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - ../../include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - EnableFastChecks - - - 0x0409 - _DEBUG;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - - - true - - - true - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - ../../include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - EnableFastChecks - - - 0x0409 - _DEBUG;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - - - true - - - true - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - MultiThreaded @@ -237,6 +115,7 @@ Level3 ../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + false 0x0409 @@ -277,56 +156,6 @@ MachineX64 - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - ../../include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - - - 0x0409 - NDEBUG;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - - - true - - - true - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - ../../include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - - - 0x0409 - NDEBUG;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - - - true - - - true - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - MultiThreadedDebugDLL @@ -337,6 +166,7 @@ Level3 WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) EnableFastChecks + false 0x0409 @@ -361,6 +191,7 @@ Level3 WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) EnableFastChecks + false 0x0409 diff --git a/build/vc12/glewinfo.vcxproj b/build/vc12/glewinfo.vcxproj index 4a82364..8b38665 100644 --- a/build/vc12/glewinfo.vcxproj +++ b/build/vc12/glewinfo.vcxproj @@ -1,14 +1,6 @@  - - Debug MX - Win32 - - - Debug MX - x64 - Debug Win32 @@ -17,14 +9,6 @@ Debug x64 - - Release MX - Win32 - - - Release MX - x64 - Release Win32 @@ -66,26 +50,6 @@ false v120 - - Application - false - v120 - - - Application - false - v120 - - - Application - false - v120 - - - Application - false - v120 - @@ -107,43 +71,7 @@ - - - - - - - - - - - - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glewinfo-mx - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glewinfo-mx - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glewinfo-mxd - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glewinfo-mxd - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ @@ -178,124 +106,6 @@ glewinfo tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - .\..\..\bin\glewinfo.tlb - - - 0x0409 - NDEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxs.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - .\..\..\bin\glewinfo.tlb - - - 0x0409 - NDEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxs.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - EnableFastChecks - - - .\..\..\bin\glewinfo.tlb - - - 0x0409 - _DEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxsd.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - EnableFastChecks - - - .\..\..\bin\glewinfo.tlb - - - 0x0409 - _DEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxsd.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - MultiThreadedDebugDLL diff --git a/build/vc12/visualinfo.vcxproj b/build/vc12/visualinfo.vcxproj index e6e2a8b..20b9e6a 100644 --- a/build/vc12/visualinfo.vcxproj +++ b/build/vc12/visualinfo.vcxproj @@ -1,14 +1,6 @@  - - Debug MX - Win32 - - - Debug MX - x64 - Debug Win32 @@ -17,14 +9,6 @@ Debug x64 - - Release MX - Win32 - - - Release MX - x64 - Release Win32 @@ -56,16 +40,6 @@ false v120 - - Application - false - v120 - - - Application - false - v120 - Application false @@ -76,16 +50,6 @@ false v120 - - Application - false - v120 - - - Application - false - v120 - @@ -101,37 +65,13 @@ - - - - - - - - - - - - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - visualinfo-mxd - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - visualinfo-mxd - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ @@ -144,18 +84,6 @@ false visualinfod - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - visualinfo-mx - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - visualinfo-mx - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ @@ -177,66 +105,6 @@ ..\..\bin/ visualinfo - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - EnableFastChecks - - - .\..\..\bin\visualinfo.tlb - - - 0x0409 - _DEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxsd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - EnableFastChecks - - - .\..\..\bin\visualinfo.tlb - - - 0x0409 - _DEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxsd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - MultiThreadedDebugDLL @@ -297,64 +165,6 @@ $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - .\..\..\bin\visualinfo.tlb - - - 0x0409 - NDEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxs.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - .\..\..\bin\visualinfo.tlb - - - 0x0409 - NDEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxs.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - MultiThreaded From 32b2ea526649b5f02543c4bddec6069778ec0c54 Mon Sep 17 00:00:00 2001 From: Wes Tarro Date: Sat, 6 Feb 2016 13:10:02 -0500 Subject: [PATCH 56/81] Fixed building with GCC - needed different options and had to create a dummy DLL entry to avoid crashes. --- auto/src/glew_init_gl.c | 4 +++- build/cmake/CMakeLists.txt | 15 +++++++++++---- src/gcc_dll_entry.c | 7 +++++++ 3 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 src/gcc_dll_entry.c diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index 87503c3..7d783bf 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -124,7 +124,9 @@ static GLenum GLEWAPIENTRY glewContextInit () GLEW_VERSION_1_1 = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE; } - for (size_t i = 0; i < sizeof(_glewExtensionLookup) / sizeof(char*); ++i) _glewExtensionString[i] = GL_FALSE; + size_t n; + for (n = 0; n < sizeof(_glewExtensionString) / sizeof(_glewExtensionString[0]); ++n) + _glewExtensionString[n] = GL_FALSE; if (GLEW_VERSION_3_0) { diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 1ebea14..a6dbc3e 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -78,6 +78,10 @@ set (GLEW_SRC_FILES ${GLEW_DIR}/src/glew.c) if (WIN32) list (APPEND GLEW_SRC_FILES ${GLEW_DIR}/build/glew.rc) + if ((CMAKE_C_COMPILER_ID MATCHES "GNU") OR (CMAKE_C_COMPILER_ID MATCHES "Clang")) + # GCC can't handle not having a DLL entry point, so give it a fake one + list (APPEND GLEW_SRC_FILES ${GLEW_DIR}/src/gcc_dll_entry.c) + endif () endif () add_library (glew SHARED ${GLEW_SRC_FILES}) @@ -85,18 +89,21 @@ set_target_properties (glew PROPERTIES COMPILE_DEFINITIONS "GLEW_BUILD" OUTPUT_N add_library (glew_s STATIC ${GLEW_SRC_FILES}) set_target_properties (glew_s PROPERTIES COMPILE_DEFINITIONS "GLEW_STATIC" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX lib) if (MSVC) - # add options from visual studio project and remove stdlib dependency + # add options from visual studio project target_compile_definitions (glew PRIVATE "GLEW_BUILD;VC_EXTRALEAN") target_compile_definitions (glew_s PRIVATE "GLEW_STATIC;VC_EXTRALEAN") + target_link_libraries (glew PRIVATE -BASE:0x62AA0000) # kill security checks which are dependent on stdlib target_compile_options (glew PRIVATE -GS-) target_compile_options (glew_s PRIVATE -GS-) - target_link_libraries (glew PRIVATE -BASE:0x62AA0000 -nodefaultlib -noentry) + # remove stdlib dependency + target_link_libraries (glew PRIVATE -nodefaultlib -noentry) elseif (WIN32 AND ((CMAKE_C_COMPILER_ID MATCHES "GNU") OR (CMAKE_C_COMPILER_ID MATCHES "Clang"))) # remove stdlib dependency on windows with GCC and Clang (for similar reasons # as to MSVC - to allow it to be used with any Windows compiler) - # not thoroughly tested yet! - target_link_libraries (glew PRIVATE -nostdlibs -lgcc) + target_compile_options (glew PRIVATE -fno-builtin -fno-stack-protector) + target_compile_options (glew_s PRIVATE -fno-builtin -fno-stack-protector) + target_link_libraries (glew PRIVATE -nostdlib) endif () target_link_libraries (glew PUBLIC ${GLEW_LIBRARIES}) target_link_libraries (glew_s ${GLEW_LIBRARIES}) diff --git a/src/gcc_dll_entry.c b/src/gcc_dll_entry.c new file mode 100644 index 0000000..726f05f --- /dev/null +++ b/src/gcc_dll_entry.c @@ -0,0 +1,7 @@ +#ifdef GLEW_BUILD +#include +BOOL WINAPI DllMainCRTStartup(HINSTANCE instance, DWORD reason, LPVOID reserved) +{ + return TRUE; +} +#endif \ No newline at end of file From 02fc17f511ad38bd09d928a45cf92c2e0ea43951 Mon Sep 17 00:00:00 2001 From: Wes Tarro Date: Sat, 6 Feb 2016 13:30:15 -0500 Subject: [PATCH 57/81] Fix warnings and CMake issue. --- auto/src/glew_init_gl.c | 2 +- build/cmake/CMakeLists.txt | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index 7d783bf..25c9b74 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -79,6 +79,7 @@ static GLenum GLEWAPIENTRY glewContextInit () const GLubyte* s; GLuint dot; GLint major, minor; + size_t n; /* query opengl version */ getString = (PFNGLGETSTRINGPROC) glewGetProcAddress((const GLubyte*)"glGetString"); @@ -124,7 +125,6 @@ static GLenum GLEWAPIENTRY glewContextInit () GLEW_VERSION_1_1 = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE; } - size_t n; for (n = 0; n < sizeof(_glewExtensionString) / sizeof(_glewExtensionString[0]); ++n) _glewExtensionString[n] = GL_FALSE; diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index a6dbc3e..3c6d892 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -4,7 +4,7 @@ endif () project (glew) -cmake_minimum_required (VERSION 2.4) +cmake_minimum_required (VERSION 2.8.7) if (COMMAND cmake_policy) cmake_policy (SET CMP0003 NEW) @@ -92,20 +92,20 @@ if (MSVC) # add options from visual studio project target_compile_definitions (glew PRIVATE "GLEW_BUILD;VC_EXTRALEAN") target_compile_definitions (glew_s PRIVATE "GLEW_STATIC;VC_EXTRALEAN") - target_link_libraries (glew PRIVATE -BASE:0x62AA0000) + target_link_libraries (glew LINK_PRIVATE -BASE:0x62AA0000) # kill security checks which are dependent on stdlib target_compile_options (glew PRIVATE -GS-) target_compile_options (glew_s PRIVATE -GS-) # remove stdlib dependency - target_link_libraries (glew PRIVATE -nodefaultlib -noentry) + target_link_libraries (glew LINK_PRIVATE -nodefaultlib -noentry) elseif (WIN32 AND ((CMAKE_C_COMPILER_ID MATCHES "GNU") OR (CMAKE_C_COMPILER_ID MATCHES "Clang"))) # remove stdlib dependency on windows with GCC and Clang (for similar reasons # as to MSVC - to allow it to be used with any Windows compiler) target_compile_options (glew PRIVATE -fno-builtin -fno-stack-protector) target_compile_options (glew_s PRIVATE -fno-builtin -fno-stack-protector) - target_link_libraries (glew PRIVATE -nostdlib) + target_link_libraries (glew LINK_PRIVATE -nostdlib) endif () -target_link_libraries (glew PUBLIC ${GLEW_LIBRARIES}) +target_link_libraries (glew LINK_PUBLIC ${GLEW_LIBRARIES}) target_link_libraries (glew_s ${GLEW_LIBRARIES}) if(CMAKE_VERSION VERSION_LESS 2.8.12) From 9548431bd02473acafdd90da65c859613832bf82 Mon Sep 17 00:00:00 2001 From: Wes Tarro Date: Mon, 15 Feb 2016 15:15:33 -0500 Subject: [PATCH 58/81] Moved DLL entry-point for GCC into glew.c rather than a standalone file included using CMake. --- auto/src/glew_init_tail.c | 9 +++++++++ build/cmake/CMakeLists.txt | 4 ---- src/gcc_dll_entry.c | 7 ------- 3 files changed, 9 insertions(+), 11 deletions(-) delete mode 100644 src/gcc_dll_entry.c diff --git a/auto/src/glew_init_tail.c b/auto/src/glew_init_tail.c index 2ef3d5b..c7be402 100644 --- a/auto/src/glew_init_tail.c +++ b/auto/src/glew_init_tail.c @@ -53,3 +53,12 @@ GLenum GLEWAPIENTRY glewInit (void) return r; #endif /* _WIN32 */ } + +#if defined(_WIN32) && defined(GLEW_BUILD) && defined(__GNUC__) +/* GCC requires a DLL entry point even without any standard library included. */ +/* Types extracted from windows.h to avoid polluting the rest of the file. */ +int __stdcall DllMainCRTStartup(void* instance, unsigned reason, void* reserved) +{ + return 1; +} +#endif diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 3c6d892..d1c367b 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -78,10 +78,6 @@ set (GLEW_SRC_FILES ${GLEW_DIR}/src/glew.c) if (WIN32) list (APPEND GLEW_SRC_FILES ${GLEW_DIR}/build/glew.rc) - if ((CMAKE_C_COMPILER_ID MATCHES "GNU") OR (CMAKE_C_COMPILER_ID MATCHES "Clang")) - # GCC can't handle not having a DLL entry point, so give it a fake one - list (APPEND GLEW_SRC_FILES ${GLEW_DIR}/src/gcc_dll_entry.c) - endif () endif () add_library (glew SHARED ${GLEW_SRC_FILES}) diff --git a/src/gcc_dll_entry.c b/src/gcc_dll_entry.c deleted file mode 100644 index 726f05f..0000000 --- a/src/gcc_dll_entry.c +++ /dev/null @@ -1,7 +0,0 @@ -#ifdef GLEW_BUILD -#include -BOOL WINAPI DllMainCRTStartup(HINSTANCE instance, DWORD reason, LPVOID reserved) -{ - return TRUE; -} -#endif \ No newline at end of file From e6a74a74878b9862ac4679bb66060271b84f1c26 Mon Sep 17 00:00:00 2001 From: Wes Tarro Date: Mon, 15 Feb 2016 15:25:52 -0500 Subject: [PATCH 59/81] Add windows build updates to Makefile builds. --- config/Makefile.cygming | 9 ++------- config/Makefile.fedora-mingw32 | 4 ++-- config/Makefile.linux-mingw-w64 | 11 +++-------- config/Makefile.linux-mingw32 | 11 +++-------- config/Makefile.linux-mingw64 | 11 +++-------- config/Makefile.mingw | 9 ++------- config/Makefile.msys | 4 ++-- 7 files changed, 17 insertions(+), 42 deletions(-) diff --git a/config/Makefile.cygming b/config/Makefile.cygming index a356c5c..842fba5 100644 --- a/config/Makefile.cygming +++ b/config/Makefile.cygming @@ -4,8 +4,8 @@ BINDIR = /usr/bin LIBDIR = /usr/lib/mingw INCDIR = /usr/include/mingw/GL # use gcc for linking, with ld it does not work -CC := gcc -mno-cygwin -LD := gcc -mno-cygwin +CC := gcc -mno-cygwin -fno-builtin -fno-stack-protector +LD := gcc -mno-cygwin -nostdlib LN := LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 LDFLAGS.EXTRA = -L$(LIBDIR) @@ -17,8 +17,3 @@ LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib LIB.SHARED = $(NAME).dll LIB.STATIC = lib$(NAME).a # the static lib will be broken LDFLAGS.SO = -shared -Wl,-soname,$(LIB.SONAME) -Wl,--out-implib,lib/$(LIB.DEVLNK) -LIB.SONAME.MX = lib$(NAME)mx.dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a # for mingw this is the dll import lib -LIB.SHARED.MX = $(NAME)mx.dll -LIB.STATIC.MX = lib$(NAME)mx.a # the static lib will be broken -LDFLAGS.SO.MX = -shared -Wl,-soname,$(LIB.SONAME.MX) -Wl,--out-implib,lib/$(LIB.DEVLNK.MX) diff --git a/config/Makefile.fedora-mingw32 b/config/Makefile.fedora-mingw32 index f27db34..4110ce7 100644 --- a/config/Makefile.fedora-mingw32 +++ b/config/Makefile.fedora-mingw32 @@ -6,6 +6,6 @@ include config/Makefile.linux-mingw32 -CC := i686-pc-mingw32-gcc -LD := i686-pc-mingw32-ld +CC := i686-pc-mingw32-gcc -fno-builtin -fno-stack-protector +LD := i686-pc-mingw32-ld -nostdlib LDFLAGS.GL += -L/usr/i686-pc-mingw32/sys-root/mingw/lib diff --git a/config/Makefile.linux-mingw-w64 b/config/Makefile.linux-mingw-w64 index 57cd203..2822a1e 100644 --- a/config/Makefile.linux-mingw-w64 +++ b/config/Makefile.linux-mingw-w64 @@ -5,11 +5,11 @@ # NAME := glew32 -CC := i686-w64-mingw32-gcc -LD := i686-w64-mingw32-ld +CC := i686-w64-mingw32-gcc -fno-builtin -fno-stack-protector +LD := i686-w64-mingw32-ld -nostdlib LN := STRIP := -LDFLAGS.GL = -lopengl32 -lgdi32 -lmsvcrt -luser32 -lkernel32 +LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 WARN = -Wall -W POPT = -O2 BIN.SUFFIX = .exe @@ -18,8 +18,3 @@ LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib LIB.SHARED = $(NAME).dll LIB.STATIC = lib$(NAME).a # the static lib will be broken LDFLAGS.SO = -shared -soname $(LIB.SONAME) --out-implib lib/$(LIB.DEVLNK) -LIB.SONAME.MX = lib$(NAME)mx.dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a # for mingw this is the dll import lib -LIB.SHARED.MX = $(NAME)mx.dll -LIB.STATIC.MX = lib$(NAME)mx.a # the static lib will be broken -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) --out-implib lib/$(LIB.DEVLNK.MX) diff --git a/config/Makefile.linux-mingw32 b/config/Makefile.linux-mingw32 index 049ee74..cc389c1 100644 --- a/config/Makefile.linux-mingw32 +++ b/config/Makefile.linux-mingw32 @@ -6,11 +6,11 @@ NAME := glew32 HOST := i586-mingw32msvc -CC := $(HOST)-gcc -LD := $(HOST)-ld +CC := $(HOST)-gcc -fno-builtin -fno-stack-protector +LD := $(HOST)-ld -nostdlib LN := STRIP := -LDFLAGS.GL = -lopengl32 -lgdi32 -lmsvcrt -luser32 -lkernel32 +LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 WARN = -Wall -W POPT = -O2 BIN.SUFFIX = .exe @@ -19,8 +19,3 @@ LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib LIB.SHARED = $(NAME).dll LIB.STATIC = lib$(NAME).a # the static lib will be broken LDFLAGS.SO = -shared -soname $(LIB.SONAME) --out-implib lib/$(LIB.DEVLNK) -LIB.SONAME.MX = lib$(NAME)mx.dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a # for mingw this is the dll import lib -LIB.SHARED.MX = $(NAME)mx.dll -LIB.STATIC.MX = lib$(NAME)mx.a # the static lib will be broken -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) --out-implib lib/$(LIB.DEVLNK.MX) diff --git a/config/Makefile.linux-mingw64 b/config/Makefile.linux-mingw64 index c5c386c..439b4e9 100644 --- a/config/Makefile.linux-mingw64 +++ b/config/Makefile.linux-mingw64 @@ -6,11 +6,11 @@ NAME := glew32 HOST := i686-w64-mingw32 -CC := $(HOST)-gcc -LD := $(HOST)-ld +CC := $(HOST)-gcc -fno-builtin -fno-stack-protector +LD := $(HOST)-ld -nostdlib LN := STRIP := -LDFLAGS.GL = -lopengl32 -lgdi32 -lmsvcrt -luser32 -lkernel32 +LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 WARN = -Wall -W POPT = -O2 BIN.SUFFIX = .exe @@ -19,8 +19,3 @@ LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib LIB.SHARED = $(NAME).dll LIB.STATIC = lib$(NAME).a # the static lib will be broken LDFLAGS.SO = -shared -soname $(LIB.SONAME) --out-implib lib/$(LIB.DEVLNK) -LIB.SONAME.MX = lib$(NAME)mx.dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a # for mingw this is the dll import lib -LIB.SHARED.MX = $(NAME)mx.dll -LIB.STATIC.MX = lib$(NAME)mx.a # the static lib will be broken -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) --out-implib lib/$(LIB.DEVLNK.MX) diff --git a/config/Makefile.mingw b/config/Makefile.mingw index f1fb194..56b5dcc 100644 --- a/config/Makefile.mingw +++ b/config/Makefile.mingw @@ -1,7 +1,7 @@ NAME = glew32 # use gcc for linking, with ld it does not work -CC := gcc -LD := gcc +CC := gcc -fno-builtin -fno-stack-protector +LD := gcc -nostdlib LN := LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 LDFLAGS.EXTRA = -L/mingw/lib @@ -13,8 +13,3 @@ LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib LIB.SHARED = $(NAME).dll LIB.STATIC = lib$(NAME).a # the static lib will be broken LDFLAGS.SO = -shared -Wl,-soname,$(LIB.SONAME) -Wl,--out-implib,lib/$(LIB.DEVLNK) -LIB.SONAME.MX = lib$(NAME)mx.dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a # for mingw this is the dll import lib -LIB.SHARED.MX = $(NAME)mx.dll -LIB.STATIC.MX = lib$(NAME)mx.a # the static lib will be broken -LDFLAGS.SO.MX = -shared -Wl,-soname,$(LIB.SONAME.MX) -Wl,--out-implib,lib/$(LIB.DEVLNK.MX) diff --git a/config/Makefile.msys b/config/Makefile.msys index dfee9c7..f765b0e 100644 --- a/config/Makefile.msys +++ b/config/Makefile.msys @@ -1,7 +1,7 @@ NAME = glew32 # use gcc for linking, with ld it does not work -CC := gcc -LD := gcc +CC := gcc -fno-builtin -fno-stack-protector +LD := gcc -nostdlib LN := CFLAGS.EXTRA += -D_WIN32 LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 From 2563b1c36a42127470581a53e59ee09a3d980ce1 Mon Sep 17 00:00:00 2001 From: Wes Tarro Date: Mon, 15 Feb 2016 15:40:53 -0500 Subject: [PATCH 60/81] Finish removing MX support from build system --- build/vc10/glew.sln | 36 ----- build/vc10/glew_shared.vcxproj | 218 ------------------------------- build/vc10/glew_static.vcxproj | 168 ------------------------ build/vc10/glewinfo.vcxproj | 186 -------------------------- build/vc10/visualinfo.vcxproj | 186 -------------------------- build/vc6/Makefile | 7 - build/vc6/glew_shared.dsp | 64 +-------- build/vc6/glew_static.dsp | 52 +------- build/vc6/glewinfo.dsp | 56 -------- build/vc6/visualinfo.dsp | 56 -------- config/Makefile.cygwin | 5 - config/Makefile.darwin | 5 - config/Makefile.darwin-ppc | 5 - config/Makefile.darwin-universal | 5 - config/Makefile.darwin-x86_64 | 5 - config/Makefile.freebsd | 5 - config/Makefile.gnu | 5 - config/Makefile.haiku | 9 -- config/Makefile.irix | 5 - config/Makefile.kfreebsd | 5 - config/Makefile.linux | 5 - config/Makefile.linux-clang | 5 - config/Makefile.nacl-32 | 5 - config/Makefile.nacl-64 | 5 - config/Makefile.netbsd | 5 - config/Makefile.openbsd | 5 - config/Makefile.solaris | 4 - config/Makefile.solaris-gcc | 5 - 28 files changed, 2 insertions(+), 1120 deletions(-) diff --git a/build/vc10/glew.sln b/build/vc10/glew.sln index 9a2d169..a3d671e 100644 --- a/build/vc10/glew.sln +++ b/build/vc10/glew.sln @@ -11,76 +11,40 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "visualinfo", "visualinfo.vc EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug MX|Win32 = Debug MX|Win32 - Debug MX|x64 = Debug MX|x64 Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 - Release MX|Win32 = Release MX|Win32 - Release MX|x64 = Release MX|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug MX|Win32.ActiveCfg = Debug MX|Win32 - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug MX|Win32.Build.0 = Debug MX|Win32 - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug MX|x64.ActiveCfg = Debug MX|x64 - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug MX|x64.Build.0 = Debug MX|x64 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|Win32.ActiveCfg = Debug|Win32 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|Win32.Build.0 = Debug|Win32 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|x64.ActiveCfg = Debug|x64 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Debug|x64.Build.0 = Debug|x64 - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release MX|Win32.ActiveCfg = Release MX|Win32 - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release MX|Win32.Build.0 = Release MX|Win32 - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release MX|x64.ActiveCfg = Release MX|x64 - {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release MX|x64.Build.0 = Release MX|x64 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|Win32.ActiveCfg = Release|Win32 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|Win32.Build.0 = Release|Win32 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|x64.ActiveCfg = Release|x64 {55AE3D72-7DE6-F19F-AEF2-9AE8CA26CF3D}.Release|x64.Build.0 = Release|x64 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug MX|Win32.ActiveCfg = Debug MX|Win32 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug MX|Win32.Build.0 = Debug MX|Win32 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug MX|x64.ActiveCfg = Debug MX|x64 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug MX|x64.Build.0 = Debug MX|x64 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|Win32.ActiveCfg = Debug|Win32 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|Win32.Build.0 = Debug|Win32 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|x64.ActiveCfg = Debug|x64 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Debug|x64.Build.0 = Debug|x64 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release MX|Win32.ActiveCfg = Release MX|Win32 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release MX|Win32.Build.0 = Release MX|Win32 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release MX|x64.ActiveCfg = Release MX|x64 - {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release MX|x64.Build.0 = Release MX|x64 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|Win32.ActiveCfg = Release|Win32 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|Win32.Build.0 = Release|Win32 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|x64.ActiveCfg = Release|x64 {664E6F0D-6784-4760-9565-D54F8EB1EDF4}.Release|x64.Build.0 = Release|x64 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug MX|Win32.ActiveCfg = Debug MX|Win32 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug MX|Win32.Build.0 = Debug MX|Win32 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug MX|x64.ActiveCfg = Debug MX|x64 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug MX|x64.Build.0 = Debug MX|x64 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|Win32.ActiveCfg = Debug|Win32 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|Win32.Build.0 = Debug|Win32 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|x64.ActiveCfg = Debug|x64 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Debug|x64.Build.0 = Debug|x64 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release MX|Win32.ActiveCfg = Release MX|Win32 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release MX|Win32.Build.0 = Release MX|Win32 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release MX|x64.ActiveCfg = Release MX|x64 - {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release MX|x64.Build.0 = Release MX|x64 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|Win32.ActiveCfg = Release|Win32 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|Win32.Build.0 = Release|Win32 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|x64.ActiveCfg = Release|x64 {8EFB5DCB-C0C4-1670-5938-A0E0F1A1C5EA}.Release|x64.Build.0 = Release|x64 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug MX|Win32.ActiveCfg = Debug MX|Win32 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug MX|Win32.Build.0 = Debug MX|Win32 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug MX|x64.ActiveCfg = Debug MX|x64 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug MX|x64.Build.0 = Debug MX|x64 {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|Win32.ActiveCfg = Debug|Win32 {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|Win32.Build.0 = Debug|Win32 {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|x64.ActiveCfg = Debug|x64 {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Debug|x64.Build.0 = Debug|x64 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release MX|Win32.ActiveCfg = Release MX|Win32 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release MX|Win32.Build.0 = Release MX|Win32 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release MX|x64.ActiveCfg = Release MX|x64 - {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release MX|x64.Build.0 = Release MX|x64 {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|Win32.ActiveCfg = Release|Win32 {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|Win32.Build.0 = Release|Win32 {79AA8443-86F4-649A-0BEB-0CB5E51B7D7E}.Release|x64.ActiveCfg = Release|x64 diff --git a/build/vc10/glew_shared.vcxproj b/build/vc10/glew_shared.vcxproj index 41a9a54..1009ae9 100644 --- a/build/vc10/glew_shared.vcxproj +++ b/build/vc10/glew_shared.vcxproj @@ -1,14 +1,6 @@ - - Debug MX - Win32 - - - Debug MX - x64 - Debug Win32 @@ -17,14 +9,6 @@ Debug x64 - - Release MX - Win32 - - - Release MX - x64 - Release Win32 @@ -48,14 +32,6 @@ DynamicLibrary false - - DynamicLibrary - false - - - DynamicLibrary - false - DynamicLibrary false @@ -64,14 +40,6 @@ DynamicLibrary false - - DynamicLibrary - false - - - DynamicLibrary - false - @@ -81,37 +49,13 @@ - - - - - - - - - - - - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glew32mx - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glew32mx - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ @@ -124,18 +68,6 @@ false glew32 - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glew32mxd - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glew32mxd - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ @@ -148,81 +80,6 @@ false glew32d - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - $(INCLUDE_DIR) - WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_MX;GLEW_BUILD;%(PreprocessorDefinitions) - - - true - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - - - 0x0409 - NDEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib - 0x62AA0000 - opengl32.lib;%(AdditionalDependencies) - /ignore:4089 - - - - - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - $(INCLUDE_DIR) - WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_MX;GLEW_BUILD;%(PreprocessorDefinitions) - - - true - NDEBUG;%(PreprocessorDefinitions) - true - - - 0x0409 - NDEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib - 0x62AA0000 - opengl32.lib;%(AdditionalDependencies) - /ignore:4089 - - - - MultiThreaded @@ -298,81 +155,6 @@ - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - $(INCLUDE_DIR) - WIN32;WIN32_MEAN_AND_LEAN;VC_EXTRALEAN;GLEW_MX;GLEW_BUILD;%(PreprocessorDefinitions) - EnableFastChecks - - - true - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - - - 0x0409 - _DEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib - 0x62AA0000 - opengl32.lib;%(AdditionalDependencies) - - - - - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - $(INCLUDE_DIR) - WIN32;WIN32_MEAN_AND_LEAN;VC_EXTRALEAN;GLEW_MX;GLEW_BUILD;%(PreprocessorDefinitions) - EnableFastChecks - - - true - _DEBUG;%(PreprocessorDefinitions) - true - - - 0x0409 - _DEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\$(TargetName).lib - 0x62AA0000 - opengl32.lib;%(AdditionalDependencies) - - - - MultiThreadedDebugDLL diff --git a/build/vc10/glew_static.vcxproj b/build/vc10/glew_static.vcxproj index 5dccd6a..3c8c488 100644 --- a/build/vc10/glew_static.vcxproj +++ b/build/vc10/glew_static.vcxproj @@ -1,14 +1,6 @@ - - Debug MX - Win32 - - - Debug MX - x64 - Debug Win32 @@ -17,14 +9,6 @@ Debug x64 - - Release MX - Win32 - - - Release MX - x64 - Release Win32 @@ -56,16 +40,6 @@ false MultiByte - - StaticLibrary - false - MultiByte - - - StaticLibrary - false - MultiByte - StaticLibrary false @@ -76,16 +50,6 @@ false MultiByte - - StaticLibrary - false - MultiByte - - - StaticLibrary - false - MultiByte - @@ -101,35 +65,13 @@ - - - - - - - - - - - - - - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - glew32mxsd - - - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - glew32mxsd - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ @@ -140,16 +82,6 @@ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ glew32s - - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - glew32mxs - - - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - glew32mxs - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ @@ -168,56 +100,6 @@ $(LIB_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - ../../include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - EnableFastChecks - - - 0x0409 - _DEBUG;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - - - true - - - true - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - ../../include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - EnableFastChecks - - - 0x0409 - _DEBUG;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - - - true - - - true - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - MultiThreaded @@ -268,56 +150,6 @@ MachineX64 - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - ../../include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - - - 0x0409 - NDEBUG;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - - - true - - - true - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - ../../include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - - - 0x0409 - NDEBUG;GLEW_MX;GLEW_STATIC;%(PreprocessorDefinitions) - - - true - - - true - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - MultiThreadedDebugDLL diff --git a/build/vc10/glewinfo.vcxproj b/build/vc10/glewinfo.vcxproj index 04a0675..5361664 100644 --- a/build/vc10/glewinfo.vcxproj +++ b/build/vc10/glewinfo.vcxproj @@ -1,14 +1,6 @@ - - Debug MX - Win32 - - - Debug MX - x64 - Debug Win32 @@ -17,14 +9,6 @@ Debug x64 - - Release MX - Win32 - - - Release MX - x64 - Release Win32 @@ -62,22 +46,6 @@ Application false - - Application - false - - - Application - false - - - Application - false - - - Application - false - @@ -99,43 +67,7 @@ - - - - - - - - - - - - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glewinfo-mx - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glewinfo-mx - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glewinfo-mxd - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - glewinfo-mxd - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ @@ -170,124 +102,6 @@ glewinfo tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - .\..\..\bin\glewinfo.tlb - - - 0x0409 - NDEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxs.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - .\..\..\bin\glewinfo.tlb - - - 0x0409 - NDEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxs.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - EnableFastChecks - - - .\..\..\bin\glewinfo.tlb - - - 0x0409 - _DEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxsd.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - EnableFastChecks - - - .\..\..\bin\glewinfo.tlb - - - 0x0409 - _DEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxsd.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - MultiThreadedDebugDLL diff --git a/build/vc10/visualinfo.vcxproj b/build/vc10/visualinfo.vcxproj index d05ff9d..f684265 100644 --- a/build/vc10/visualinfo.vcxproj +++ b/build/vc10/visualinfo.vcxproj @@ -1,14 +1,6 @@ - - Debug MX - Win32 - - - Debug MX - x64 - Debug Win32 @@ -17,14 +9,6 @@ Debug x64 - - Release MX - Win32 - - - Release MX - x64 - Release Win32 @@ -54,14 +38,6 @@ Application false - - Application - false - - - Application - false - Application false @@ -70,14 +46,6 @@ Application false - - Application - false - - - Application - false - @@ -93,37 +61,13 @@ - - - - - - - - - - - - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - visualinfo-mxd - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - visualinfo-mxd - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ @@ -136,18 +80,6 @@ false visualinfod - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - visualinfo-mx - - - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ - tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ - false - visualinfo-mx - $(BIN_DIR)\$(Configuration)\$(PlatformName)\ tmp\$(TargetName)\$(Configuration)\$(PlatformName)\ @@ -169,66 +101,6 @@ ..\..\bin/ visualinfo - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - EnableFastChecks - - - .\..\..\bin\visualinfo.tlb - - - 0x0409 - _DEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxsd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - - - - MultiThreadedDebugDLL - Default - false - Disabled - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - EnableFastChecks - - - .\..\..\bin\visualinfo.tlb - - - 0x0409 - _DEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxsd.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - MultiThreadedDebugDLL @@ -289,64 +161,6 @@ $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - .\..\..\bin\visualinfo.tlb - - - 0x0409 - NDEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxs.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - - - - MultiThreaded - OnlyExplicitInline - true - true - MaxSpeed - true - Level3 - WIN32;WIN32_LEAN_AND_MEAN;GLEW_MX;GLEW_STATIC;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - .\..\..\bin\visualinfo.tlb - - - 0x0409 - NDEBUG;GLEW_MX;%(PreprocessorDefinitions) - - - true - - - true - Console - $(OutDir)$(TargetName)$(TargetExt) - glew32mxs.lib;glu32.lib;opengl32.lib;%(AdditionalDependencies) - $(LIB_DIR)\$(Configuration)\$(PlatformName)\ - - MultiThreaded diff --git a/build/vc6/Makefile b/build/vc6/Makefile index 9f0ab41..5a4f5d6 100644 --- a/build/vc6/Makefile +++ b/build/vc6/Makefile @@ -8,13 +8,6 @@ default: "glewinfo - Win32 Release" \ "visualinfo - Win32 Release" /build -mx: - $(MSDEV) glew.dsw /make \ - "glew_static - Win32 Release MX" \ - "glew_shared - Win32 Release MX" \ - "glewinfo - Win32 Release MX" \ - "visualinfo - Win32 Release MX" /build - debug: $(MSDEV) glew.dsw /make \ "glew_static - Win32 Debug" \ diff --git a/build/vc6/glew_shared.dsp b/build/vc6/glew_shared.dsp index 4ef3c7f..b8d2f1b 100644 --- a/build/vc6/glew_shared.dsp +++ b/build/vc6/glew_shared.dsp @@ -4,7 +4,7 @@ # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 -CFG=glew_shared - Win32 Debug MX +CFG=glew_shared - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE @@ -19,8 +19,6 @@ CFG=glew_shared - Win32 Debug MX !MESSAGE !MESSAGE "glew_shared - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "glew_shared - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "glew_shared - Win32 Debug MX" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "glew_shared - Win32 Release MX" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project @@ -86,72 +84,12 @@ LINK32=link.exe # SUBTRACT LINK32 /pdb:none # ADD LINK32 /base:0x62AA0000 -!ELSEIF "$(CFG)" == "glew_shared - Win32 Debug MX" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "glew_shared___Win32_Debug_MX" -# PROP BASE Intermediate_Dir "glew_shared___Win32_Debug_MX" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "../../lib" -# PROP Intermediate_Dir "shared/debug-mx" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "../../include" /D "WIN32" /D "WIN32_MEAN_AND_LEAN" /D "VC_EXTRALEAN" /D "GLEW_BUILD" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Zi /Od /I "../../include" /D "WIN32" /D "WIN32_MEAN_AND_LEAN" /D "VC_EXTRALEAN" /D "GLEW_MX" /D "GLEW_BUILD" /YX /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" /d "GLEW_MX" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 opengl32.lib /nologo /dll /incremental:no /pdb:"../../lib/glew32d.pdb" /debug /machine:I386 /out:"../../lib/glew32d.dll" /implib:"../../lib/glew32d.lib" /pdbtype:sept -# SUBTRACT BASE LINK32 /pdb:none -# ADD LINK32 opengl32.lib /nologo /dll /incremental:no /debug /machine:I386 /out:"../../bin/glew32mxd.dll" /pdbtype:sept -# SUBTRACT LINK32 /pdb:none -# ADD LINK32 /base:0x62AA0000 - -!ELSEIF "$(CFG)" == "glew_shared - Win32 Release MX" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "glew_shared___Win32_Release_MX" -# PROP BASE Intermediate_Dir "glew_shared___Win32_Release_MX" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "../../lib" -# PROP Intermediate_Dir "shared/release-mx" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /O2 /I "../../include" /D "WIN32" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRALEAN" /D "GLEW_BUILD" /YX /FD /c -# ADD CPP /nologo /W3 /O2 /I "../../include" /D "WIN32" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRALEAN" /D "GLEW_MX" /D "GLEW_BUILD" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" /d "GLEW_MX" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 opengl32.lib /nologo /dll /pdb:none /machine:I386 /out:"../../lib/glew32.dll" /implib:"../../lib/glew32.lib" /ignore:4089 -# ADD LINK32 opengl32.lib /nologo /dll /pdb:none /machine:I386 /out:"../../bin/glew32mx.dll" /ignore:4089 -# ADD LINK32 /base:0x62AA0000 - !ENDIF # Begin Target # Name "glew_shared - Win32 Release" # Name "glew_shared - Win32 Debug" -# Name "glew_shared - Win32 Debug MX" -# Name "glew_shared - Win32 Release MX" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" diff --git a/build/vc6/glew_static.dsp b/build/vc6/glew_static.dsp index 3f29255..55adb1a 100644 --- a/build/vc6/glew_static.dsp +++ b/build/vc6/glew_static.dsp @@ -4,7 +4,7 @@ # TARGTYPE "Win32 (x86) Static Library" 0x0104 -CFG=glew_static - Win32 Debug MX +CFG=glew_static - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE @@ -19,8 +19,6 @@ CFG=glew_static - Win32 Debug MX !MESSAGE !MESSAGE "glew_static - Win32 Release" (based on "Win32 (x86) Static Library") !MESSAGE "glew_static - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE "glew_static - Win32 Debug MX" (based on "Win32 (x86) Static Library") -!MESSAGE "glew_static - Win32 Release MX" (based on "Win32 (x86) Static Library") !MESSAGE # Begin Project @@ -76,60 +74,12 @@ LIB32=link.exe -lib # ADD BASE LIB32 /nologo # ADD LIB32 /nologo /out:"../../lib/glew32sd.lib" -!ELSEIF "$(CFG)" == "glew_static - Win32 Debug MX" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "glew_static___Win32_Debug_MX" -# PROP BASE Intermediate_Dir "glew_static___Win32_Debug_MX" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "../../lib" -# PROP Intermediate_Dir "static/debug-mx" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRALEAN" /D "GLEW_STATIC" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRALEAN" /D "GLEW_MX" /D "GLEW_STATIC" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" /d "GLEW_MX" /d "GLEW_STATIC" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"../../lib/glew32sd.lib" -# ADD LIB32 /nologo /out:"../../lib/glew32mxsd.lib" - -!ELSEIF "$(CFG)" == "glew_static - Win32 Release MX" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "glew_static___Win32_Release_MX" -# PROP BASE Intermediate_Dir "glew_static___Win32_Release_MX" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "../../lib" -# PROP Intermediate_Dir "static/release-mx" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRALEAN" /D "GLEW_STATIC" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRALEAN" /D "GLEW_MX" /D "GLEW_STATIC" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" /d "GLEW_MX" /d "GLEW_STATIC" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo /out:"../../lib/glew32s.lib" -# ADD LIB32 /nologo /out:"../../lib/glew32mxs.lib" - !ENDIF # Begin Target # Name "glew_static - Win32 Release" # Name "glew_static - Win32 Debug" -# Name "glew_static - Win32 Debug MX" -# Name "glew_static - Win32 Release MX" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" diff --git a/build/vc6/glewinfo.dsp b/build/vc6/glewinfo.dsp index 423c1eb..95a599d 100644 --- a/build/vc6/glewinfo.dsp +++ b/build/vc6/glewinfo.dsp @@ -19,8 +19,6 @@ CFG=glewinfo - Win32 Debug MX !MESSAGE !MESSAGE "glewinfo - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "glewinfo - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "glewinfo - Win32 Debug MX" (based on "Win32 (x86) Console Application") -!MESSAGE "glewinfo - Win32 Release MX" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project @@ -79,66 +77,12 @@ LINK32=link.exe # ADD LINK32 ../../lib/glew32sd.lib opengl32.lib gdi32.lib user32.lib /nologo /subsystem:console /incremental:no /pdb:"static/debug/glewinfod.pdb" /debug /machine:I386 /out:"../../bin/glewinfod.exe" /pdbtype:sept # SUBTRACT LINK32 /pdb:none -!ELSEIF "$(CFG)" == "glewinfo - Win32 Debug MX" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "glewinfo___Win32_Debug_MX" -# PROP BASE Intermediate_Dir "glewinfo___Win32_Debug_MX" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "../../bin" -# PROP Intermediate_Dir "static/debug-mx" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /D "WIN32" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "GLEW_STATIC" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /D "WIN32" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "GLEW_MX" /D "GLEW_STATIC" /D "_CRT_SECURE_NO_WARNINGS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" /d "GLEW_MX" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 ../../lib/glew32sd.lib opengl32.lib gdi32.lib user32.lib /nologo /subsystem:console /incremental:no /pdb:"static/debug/glewinfod.pdb" /debug /machine:I386 /out:"../../bin/glewinfod.exe" /pdbtype:sept -# SUBTRACT BASE LINK32 /pdb:none -# ADD LINK32 ../../lib/glew32mxsd.lib opengl32.lib gdi32.lib user32.lib /nologo /subsystem:console /incremental:no /pdb:"static/debug/glewinfod.pdb" /debug /machine:I386 /out:"../../bin/glewinfo-mxd.exe" /pdbtype:sept -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "glewinfo - Win32 Release MX" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "glewinfo___Win32_Release_MX" -# PROP BASE Intermediate_Dir "glewinfo___Win32_Release_MX" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "../../bin" -# PROP Intermediate_Dir "static/release-mx" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "WIN32_MEAN_AND_LEAN" /D "VC_EXTRALEAN" /D "GLEW_STATIC" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "WIN32_MEAN_AND_LEAN" /D "VC_EXTRALEAN" /D "GLEW_MX" /D "GLEW_STATIC" /D "_CRT_SECURE_NO_WARNINGS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" /d "GLEW_MX" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 ../../lib/glew32s.lib opengl32.lib gdi32.lib user32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 ../../lib/glew32mxs.lib opengl32.lib gdi32.lib user32.lib /nologo /subsystem:console /machine:I386 /out:"../../bin/glewinfo-mx.exe" - !ENDIF # Begin Target # Name "glewinfo - Win32 Release" # Name "glewinfo - Win32 Debug" -# Name "glewinfo - Win32 Debug MX" -# Name "glewinfo - Win32 Release MX" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" diff --git a/build/vc6/visualinfo.dsp b/build/vc6/visualinfo.dsp index 289f1c6..adcc814 100644 --- a/build/vc6/visualinfo.dsp +++ b/build/vc6/visualinfo.dsp @@ -19,8 +19,6 @@ CFG=visualinfo - Win32 Debug MX !MESSAGE !MESSAGE "visualinfo - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "visualinfo - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE "visualinfo - Win32 Debug MX" (based on "Win32 (x86) Console Application") -!MESSAGE "visualinfo - Win32 Release MX" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project @@ -79,66 +77,12 @@ LINK32=link.exe # ADD LINK32 ../../lib/glew32sd.lib glu32.lib opengl32.lib gdi32.lib user32.lib kernel32.lib /nologo /subsystem:console /incremental:no /pdb:"static/debug/visualinfod.pdb" /debug /machine:I386 /out:"../../bin/visualinfod.exe" /pdbtype:sept # SUBTRACT LINK32 /pdb:none -!ELSEIF "$(CFG)" == "visualinfo - Win32 Debug MX" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "visualinfo___Win32_Debug_MX" -# PROP BASE Intermediate_Dir "visualinfo___Win32_Debug_MX" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "../../bin" -# PROP Intermediate_Dir "static/debug-mx" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /D "WIN32" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "GLEW_STATIC" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /GX /Zi /Od /I "../../include" /D "WIN32" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRA_LEAN" /D "GLEW_MX" /D "GLEW_STATIC" /D "_CRT_SECURE_NO_WARNINGS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" /d "GLEW_MX" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 ../../lib/glew32sd.lib glu32.lib opengl32.lib gdi32.lib user32.lib kernel32.lib /nologo /subsystem:console /incremental:no /pdb:"static/debug/visualinfod.pdb" /debug /machine:I386 /out:"../../bin/visualinfod.exe" /pdbtype:sept -# SUBTRACT BASE LINK32 /pdb:none -# ADD LINK32 ../../lib/glew32mxsd.lib glu32.lib opengl32.lib gdi32.lib user32.lib kernel32.lib /nologo /subsystem:console /incremental:no /pdb:"static/debug/visualinfod.pdb" /debug /machine:I386 /out:"../../bin/visualinfo-mxd.exe" /pdbtype:sept -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "visualinfo - Win32 Release MX" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "visualinfo___Win32_Release_MX" -# PROP BASE Intermediate_Dir "visualinfo___Win32_Release_MX" -# PROP BASE Ignore_Export_Lib 0 -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "../../bin" -# PROP Intermediate_Dir "static/release-mx" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "WIN32_MEAN_AND_LEAN" /D "VC_EXTRALEAN" /D "GLEW_STATIC" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "WIN32_MEAN_AND_LEAN" /D "VC_EXTRALEAN" /D "GLEW_MX" /D "GLEW_STATIC" /D "_CRT_SECURE_NO_WARNINGS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" /d "GLEW_MX" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 ../../lib/glew32s.lib glu32.lib opengl32.lib gdi32.lib user32.lib kernel32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 ../../lib/glew32mxs.lib glu32.lib opengl32.lib gdi32.lib user32.lib kernel32.lib /nologo /subsystem:console /machine:I386 /out:"../../bin/visualinfo-mx.exe" - !ENDIF # Begin Target # Name "visualinfo - Win32 Release" # Name "visualinfo - Win32 Debug" -# Name "visualinfo - Win32 Debug MX" -# Name "visualinfo - Win32 Release MX" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" diff --git a/config/Makefile.cygwin b/config/Makefile.cygwin index 8600fd0..bc7e2fd 100644 --- a/config/Makefile.cygwin +++ b/config/Makefile.cygwin @@ -17,8 +17,3 @@ LIB.DEVLNK = lib$(NAME).dll.a LIB.SHARED = cyg$(NAME)-$(GLEW_MAJOR)-$(GLEW_MINOR).dll LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -shared -Wl,--out-implib,lib/$(LIB.DEVLNK) -LIB.SONAME.MX = cyg$(NAME)mx-$(GLEW_MAJOR)-$(GLEW_MINOR).dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a -LIB.SHARED.MX = cyg$(NAME)mx-$(GLEW_MAJOR)-$(GLEW_MINOR).dll -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,--out-implib,lib/$(LIB.DEVLNK.MX) diff --git a/config/Makefile.darwin b/config/Makefile.darwin index 93b2052..7a2d01e 100644 --- a/config/Makefile.darwin +++ b/config/Makefile.darwin @@ -23,8 +23,3 @@ LIB.DEVLNK = lib$(NAME).dylib LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) -LIB.SONAME.MX = lib$(NAME)mx.$(SO_MAJOR).dylib -LIB.DEVLNK.MX = lib$(NAME)mx.dylib -LIB.SHARED.MX = lib$(NAME)mx.$(SO_VERSION).dylib -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED.MX) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/config/Makefile.darwin-ppc b/config/Makefile.darwin-ppc index 7dd99ff..6ffbfab 100644 --- a/config/Makefile.darwin-ppc +++ b/config/Makefile.darwin-ppc @@ -22,8 +22,3 @@ LIB.DEVLNK = lib$(NAME).dylib LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) -LIB.SONAME.MX = lib$(NAME)mx.$(SO_MAJOR).dylib -LIB.DEVLNK.MX = lib$(NAME)mx.dylib -LIB.SHARED.MX = lib$(NAME)mx.$(SO_VERSION).dylib -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED.MX) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/config/Makefile.darwin-universal b/config/Makefile.darwin-universal index dfd4eef..120bf92 100644 --- a/config/Makefile.darwin-universal +++ b/config/Makefile.darwin-universal @@ -25,8 +25,3 @@ LIB.DEVLNK = lib$(NAME).dylib LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) -LIB.SONAME.MX = lib$(NAME)mx.$(SO_MAJOR).dylib -LIB.DEVLNK.MX = lib$(NAME)mx.dylib -LIB.SHARED.MX = lib$(NAME)mx.$(SO_VERSION).dylib -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED.MX) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/config/Makefile.darwin-x86_64 b/config/Makefile.darwin-x86_64 index 437bad4..274036a 100644 --- a/config/Makefile.darwin-x86_64 +++ b/config/Makefile.darwin-x86_64 @@ -22,8 +22,3 @@ LIB.DEVLNK = lib$(NAME).dylib LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) -LIB.SONAME.MX = lib$(NAME)mx.$(SO_MAJOR).dylib -LIB.DEVLNK.MX = lib$(NAME)mx.dylib -LIB.SHARED.MX = lib$(NAME)mx.$(SO_VERSION).dylib -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED.MX) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/config/Makefile.freebsd b/config/Makefile.freebsd index ca2771d..4fb9b6a 100644 --- a/config/Makefile.freebsd +++ b/config/Makefile.freebsd @@ -15,8 +15,3 @@ LIB.DEVLNK = lib$(NAME).so LIB.SHARED = lib$(NAME).so.$(SO_VERSION) LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -shared -soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) diff --git a/config/Makefile.gnu b/config/Makefile.gnu index b7c58be..8d4f07e 100644 --- a/config/Makefile.gnu +++ b/config/Makefile.gnu @@ -15,8 +15,3 @@ LIB.DEVLNK = lib$(NAME).so LIB.SHARED = lib$(NAME).so.$(SO_VERSION) LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname=$(LIB.SONAME.MX) diff --git a/config/Makefile.haiku b/config/Makefile.haiku index ce832f9..b8b7bd1 100644 --- a/config/Makefile.haiku +++ b/config/Makefile.haiku @@ -1,9 +1,6 @@ NAME = $(GLEW_NAME) CC = cc LD = cc -ifneq (undefined, $(origin GLEW_MX)) - CFLAGS.EXTRA = -DGLEW_MX -endif LDFLAGS.GL = -lGL LDFLAGS.STATIC = -Wl,-Bstatic @@ -21,9 +18,3 @@ LIB.SHARED = lib$(NAME).so.$(SO_VERSION) LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname=$(LIB.SONAME.MX) - diff --git a/config/Makefile.irix b/config/Makefile.irix index a1be5ee..ef8f830 100644 --- a/config/Makefile.irix +++ b/config/Makefile.irix @@ -15,8 +15,3 @@ LIB.DEVLNK = lib$(NAME).so LIB.SHARED = lib$(NAME).so.$(SO_VERSION) LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -shared -soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) diff --git a/config/Makefile.kfreebsd b/config/Makefile.kfreebsd index faf1046..e2ff5c3 100644 --- a/config/Makefile.kfreebsd +++ b/config/Makefile.kfreebsd @@ -15,8 +15,3 @@ LIB.DEVLNK = lib$(NAME).so LIB.SHARED = lib$(NAME).so.$(SO_VERSION) LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -shared -Wl,-soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname $(LIB.SONAME.MX) diff --git a/config/Makefile.linux b/config/Makefile.linux index 9a81dac..50b813c 100644 --- a/config/Makefile.linux +++ b/config/Makefile.linux @@ -32,8 +32,3 @@ LIB.DEVLNK = lib$(NAME).so LIB.SHARED = lib$(NAME).so.$(SO_VERSION) LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname=$(LIB.SONAME.MX) diff --git a/config/Makefile.linux-clang b/config/Makefile.linux-clang index 4e7039e..2992b89 100644 --- a/config/Makefile.linux-clang +++ b/config/Makefile.linux-clang @@ -32,8 +32,3 @@ LIB.DEVLNK = lib$(NAME).so LIB.SHARED = lib$(NAME).so.$(SO_VERSION) LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname=$(LIB.SONAME.MX) diff --git a/config/Makefile.nacl-32 b/config/Makefile.nacl-32 index 2a5cec7..2182cee 100644 --- a/config/Makefile.nacl-32 +++ b/config/Makefile.nacl-32 @@ -29,8 +29,3 @@ LIB.DEVLNK = lib$(NAME).so LIB.SHARED = lib$(NAME).so.$(SO_VERSION) LIB.STATIC = lib$(NAME).a LDFLAGS.SO = $(LDFLAGS.DYNAMIC) -soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = $(LDFLAGS.DYNAMIC) -soname=$(LIB.SONAME.MX) diff --git a/config/Makefile.nacl-64 b/config/Makefile.nacl-64 index 37cb6e9..d6135ea 100644 --- a/config/Makefile.nacl-64 +++ b/config/Makefile.nacl-64 @@ -29,8 +29,3 @@ LIB.DEVLNK = lib$(NAME).so LIB.SHARED = lib$(NAME).so.$(SO_VERSION) LIB.STATIC = lib$(NAME).a LDFLAGS.SO = $(LDFLAGS.DYNAMIC) -soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = $(LDFLAGS.DYNAMIC) -soname=$(LIB.SONAME.MX) diff --git a/config/Makefile.netbsd b/config/Makefile.netbsd index 6da47b1..d2db8a9 100644 --- a/config/Makefile.netbsd +++ b/config/Makefile.netbsd @@ -15,8 +15,3 @@ LIB.DEVLNK = lib$(NAME).so LIB.SHARED = lib$(NAME).so.$(SO_VERSION) LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -shared -soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) diff --git a/config/Makefile.openbsd b/config/Makefile.openbsd index ade993e..b64910c 100644 --- a/config/Makefile.openbsd +++ b/config/Makefile.openbsd @@ -15,8 +15,3 @@ LIB.DEVLNK = lib$(NAME).so LIB.SHARED = lib$(NAME).so.$(SO_VERSION) LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -shared -soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) diff --git a/config/Makefile.solaris b/config/Makefile.solaris index 96e6d1f..bb2455f 100644 --- a/config/Makefile.solaris +++ b/config/Makefile.solaris @@ -12,7 +12,3 @@ LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) LIB.DEVLNK = lib$(NAME).so LIB.SHARED = lib$(NAME).so.$(SO_VERSION) LIB.STATIC = lib$(NAME).a -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a diff --git a/config/Makefile.solaris-gcc b/config/Makefile.solaris-gcc index d66395b..24a8531 100644 --- a/config/Makefile.solaris-gcc +++ b/config/Makefile.solaris-gcc @@ -13,8 +13,3 @@ LIB.DEVLNK = lib$(NAME).so LIB.SHARED = lib$(NAME).so.$(SO_VERSION) LIB.STATIC = lib$(NAME).a LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname=$(LIB.SONAME.MX) From 6c68ad327fbdc8188575f3fcf5e3987b059aee89 Mon Sep 17 00:00:00 2001 From: Wes Tarro Date: Mon, 15 Feb 2016 16:14:17 -0500 Subject: [PATCH 61/81] Remove standard library dependency from older VS project files as well. --- build/vc10/glew_shared.vcxproj | 8 ++++++++ build/vc10/glew_static.vcxproj | 4 ++++ build/vc12/glew_shared.vcxproj | 6 +++--- build/vc6/glew_shared.dsp | 10 +++++----- build/vc6/glew_static.dsp | 4 ++-- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/build/vc10/glew_shared.vcxproj b/build/vc10/glew_shared.vcxproj index 1009ae9..e1149d9 100644 --- a/build/vc10/glew_shared.vcxproj +++ b/build/vc10/glew_shared.vcxproj @@ -91,6 +91,7 @@ Level3 $(INCLUDE_DIR) WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + false true @@ -116,6 +117,8 @@ /ignore:4089 + true + true @@ -129,6 +132,7 @@ Level3 $(INCLUDE_DIR) WIN32;WIN32_LEAN_AND_MEAN;VC_EXTRALEAN;GLEW_BUILD;%(PreprocessorDefinitions) + false true @@ -153,6 +157,8 @@ /ignore:4089 + true + true @@ -166,6 +172,7 @@ EnableFastChecks Level3 $(INCLUDE_DIR) + false true @@ -204,6 +211,7 @@ EnableFastChecks Level3 $(INCLUDE_DIR) + false true diff --git a/build/vc10/glew_static.vcxproj b/build/vc10/glew_static.vcxproj index 3c8c488..949db96 100644 --- a/build/vc10/glew_static.vcxproj +++ b/build/vc10/glew_static.vcxproj @@ -111,6 +111,7 @@ Level3 ../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + false 0x0409 @@ -136,6 +137,7 @@ Level3 ../../include;%(AdditionalIncludeDirectories) WIN32;NDEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) + false 0x0409 @@ -160,6 +162,7 @@ Level3 WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) EnableFastChecks + false 0x0409 @@ -184,6 +187,7 @@ Level3 WIN32;_DEBUG;_LIB;WIN32_LEAN_AND_MEAN;GLEW_STATIC;%(PreprocessorDefinitions) EnableFastChecks + false 0x0409 diff --git a/build/vc12/glew_shared.vcxproj b/build/vc12/glew_shared.vcxproj index 6605a1c..b52bcc4 100644 --- a/build/vc12/glew_shared.vcxproj +++ b/build/vc12/glew_shared.vcxproj @@ -167,7 +167,7 @@ - MultiThreadedDebug + MultiThreadedDebugDLL Default false Disabled @@ -206,7 +206,7 @@ - MultiThreadedDebug + MultiThreadedDebugDLL Default false Disabled @@ -255,4 +255,4 @@ - \ No newline at end of file + diff --git a/build/vc6/glew_shared.dsp b/build/vc6/glew_shared.dsp index b8d2f1b..8b576b8 100644 --- a/build/vc6/glew_shared.dsp +++ b/build/vc6/glew_shared.dsp @@ -42,8 +42,8 @@ RSC=rc.exe # PROP Intermediate_Dir "shared/release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GLEW_EXPORTS" /YX /FD /c -# ADD CPP /nologo /W3 /O2 /I "../../include" /D "WIN32" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRALEAN" /D "GLEW_BUILD" /YX /FD /c +# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GLEW_EXPORTS" /YX /FD /c /GS- +# ADD CPP /nologo /W3 /O2 /I "../../include" /D "WIN32" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRALEAN" /D "GLEW_BUILD" /YX /FD /c /GS- # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" @@ -54,7 +54,7 @@ BSC32=bscmake.exe LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 opengl32.lib /nologo /dll /pdb:none /machine:I386 /out:"../../bin/glew32.dll" /ignore:4089 -# ADD LINK32 /base:0x62AA0000 +# ADD LINK32 /base:0x62AA0000 /nodefaultlib /noentry !ELSEIF "$(CFG)" == "glew_shared - Win32 Debug" @@ -69,8 +69,8 @@ LINK32=link.exe # PROP Intermediate_Dir "shared/debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GLEW_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Zi /Od /I "../../include" /D "WIN32" /D "WIN32_MEAN_AND_LEAN" /D "VC_EXTRALEAN" /D "GLEW_BUILD" /YX /FD /GZ /c +# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "GLEW_EXPORTS" /YX /FD /GZ /c /GS- +# ADD CPP /nologo /MDd /W3 /Zi /Od /I "../../include" /D "WIN32" /D "WIN32_MEAN_AND_LEAN" /D "VC_EXTRALEAN" /D "GLEW_BUILD" /YX /FD /GZ /c /GS- # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" diff --git a/build/vc6/glew_static.dsp b/build/vc6/glew_static.dsp index 55adb1a..d6bd3d6 100644 --- a/build/vc6/glew_static.dsp +++ b/build/vc6/glew_static.dsp @@ -40,8 +40,8 @@ RSC=rc.exe # PROP Output_Dir "../../lib" # PROP Intermediate_Dir "static/release" # PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRALEAN" /D "GLEW_STATIC" /YX /FD /c +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c /GS- +# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "WIN32_LEAN_AND_MEAN" /D "VC_EXTRALEAN" /D "GLEW_STATIC" /YX /FD /c /GS- # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" /d "GLEW_STATIC" BSC32=bscmake.exe From a9f5ec3e21797f58ca82b95999ef245ff8f986d8 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Fri, 19 Feb 2016 22:09:15 +1000 Subject: [PATCH 62/81] Put CFLAGS -fno-builtin and LDFLAGS -nostdlib seperate to CC and LD variables --- config/Makefile.cygming | 6 ++++-- config/Makefile.fedora-mingw32 | 7 ++++--- config/Makefile.linux-mingw-w64 | 6 ++++-- config/Makefile.linux-mingw32 | 7 ++++--- config/Makefile.linux-mingw64 | 7 ++++--- config/Makefile.mingw | 6 ++++-- config/Makefile.msys | 6 ++++-- 7 files changed, 28 insertions(+), 17 deletions(-) diff --git a/config/Makefile.cygming b/config/Makefile.cygming index 842fba5..dcd7b21 100644 --- a/config/Makefile.cygming +++ b/config/Makefile.cygming @@ -4,11 +4,13 @@ BINDIR = /usr/bin LIBDIR = /usr/lib/mingw INCDIR = /usr/include/mingw/GL # use gcc for linking, with ld it does not work -CC := gcc -mno-cygwin -fno-builtin -fno-stack-protector -LD := gcc -mno-cygwin -nostdlib +CC := gcc -mno-cygwin +LD := gcc -mno-cygwin LN := LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 LDFLAGS.EXTRA = -L$(LIBDIR) +CFLAGS.EXTRA += -fno-builtin -fno-stack-protector +LDFLAGS.EXTRA += -nostdlib WARN = -Wall -W POPT = -O2 BIN.SUFFIX = .exe diff --git a/config/Makefile.fedora-mingw32 b/config/Makefile.fedora-mingw32 index 4110ce7..9bad92a 100644 --- a/config/Makefile.fedora-mingw32 +++ b/config/Makefile.fedora-mingw32 @@ -2,10 +2,11 @@ # http://www.mingw.org/ # # $ make SYSTEM=fedora-mingw32 -# include config/Makefile.linux-mingw32 -CC := i686-pc-mingw32-gcc -fno-builtin -fno-stack-protector -LD := i686-pc-mingw32-ld -nostdlib +CC := i686-pc-mingw32-gcc +LD := i686-pc-mingw32-ld LDFLAGS.GL += -L/usr/i686-pc-mingw32/sys-root/mingw/lib +CFLAGS.EXTRA += -fno-builtin -fno-stack-protector +LDFLAGS.EXTRA += -nostdlib diff --git a/config/Makefile.linux-mingw-w64 b/config/Makefile.linux-mingw-w64 index 2822a1e..175f5a9 100644 --- a/config/Makefile.linux-mingw-w64 +++ b/config/Makefile.linux-mingw-w64 @@ -5,11 +5,13 @@ # NAME := glew32 -CC := i686-w64-mingw32-gcc -fno-builtin -fno-stack-protector -LD := i686-w64-mingw32-ld -nostdlib +CC := i686-w64-mingw32-gcc +LD := i686-w64-mingw32-ld LN := STRIP := LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 +CFLAGS.EXTRA += -fno-builtin -fno-stack-protector +LDFLAGS.EXTRA += -nostdlib WARN = -Wall -W POPT = -O2 BIN.SUFFIX = .exe diff --git a/config/Makefile.linux-mingw32 b/config/Makefile.linux-mingw32 index cc389c1..9adb205 100644 --- a/config/Makefile.linux-mingw32 +++ b/config/Makefile.linux-mingw32 @@ -2,15 +2,16 @@ # http://www.mingw.org/ # # $ make SYSTEM=linux-mingw32 -# NAME := glew32 HOST := i586-mingw32msvc -CC := $(HOST)-gcc -fno-builtin -fno-stack-protector -LD := $(HOST)-ld -nostdlib +CC := $(HOST)-gcc +LD := $(HOST)-ld LN := STRIP := LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 +CFLAGS.EXTRA += -fno-builtin -fno-stack-protector +LDFLAGS.EXTRA += -nostdlib WARN = -Wall -W POPT = -O2 BIN.SUFFIX = .exe diff --git a/config/Makefile.linux-mingw64 b/config/Makefile.linux-mingw64 index 439b4e9..8bc3894 100644 --- a/config/Makefile.linux-mingw64 +++ b/config/Makefile.linux-mingw64 @@ -2,15 +2,16 @@ # http://www.mingw.org/ # # $ make SYSTEM=linux-mingw64 -# NAME := glew32 HOST := i686-w64-mingw32 -CC := $(HOST)-gcc -fno-builtin -fno-stack-protector -LD := $(HOST)-ld -nostdlib +CC := $(HOST)-gcc +LD := $(HOST)-ld LN := STRIP := LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 +CFLAGS.EXTRA += -fno-builtin -fno-stack-protector +LDFLAGS.EXTRA += -nostdlib WARN = -Wall -W POPT = -O2 BIN.SUFFIX = .exe diff --git a/config/Makefile.mingw b/config/Makefile.mingw index 56b5dcc..3f413ee 100644 --- a/config/Makefile.mingw +++ b/config/Makefile.mingw @@ -1,10 +1,12 @@ NAME = glew32 # use gcc for linking, with ld it does not work -CC := gcc -fno-builtin -fno-stack-protector -LD := gcc -nostdlib +CC := gcc -fno-builtin +LD := gcc LN := LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 LDFLAGS.EXTRA = -L/mingw/lib +CFLAGS.EXTRA += -fno-builtin -fno-stack-protector +LDFLAGS.EXTRA += -nostdlib WARN = -Wall -W POPT = -O2 BIN.SUFFIX = .exe diff --git a/config/Makefile.msys b/config/Makefile.msys index f765b0e..b5187af 100644 --- a/config/Makefile.msys +++ b/config/Makefile.msys @@ -1,11 +1,13 @@ NAME = glew32 # use gcc for linking, with ld it does not work -CC := gcc -fno-builtin -fno-stack-protector -LD := gcc -nostdlib +CC := gcc +LD := gcc LN := CFLAGS.EXTRA += -D_WIN32 LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 LDFLAGS.EXTRA = +CFLAGS.EXTRA += -fno-builtin -fno-stack-protector +LDFLAGS.EXTRA += -nostdlib LIBDIR = $(GLEW_DEST)/bin WARN = -Wall -W POPT = -O2 From f4d58a657aaa337d4972431176c2d2a9aba6c876 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Fri, 19 Feb 2016 22:24:12 +1000 Subject: [PATCH 63/81] LDFLAGS.EXTRA += -nostdlib seems problematic for SYSTEM=linux-mingw32, linux-mingw64 --- config/Makefile.linux-mingw32 | 2 +- config/Makefile.linux-mingw64 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/Makefile.linux-mingw32 b/config/Makefile.linux-mingw32 index 9adb205..12dfb99 100644 --- a/config/Makefile.linux-mingw32 +++ b/config/Makefile.linux-mingw32 @@ -11,7 +11,7 @@ LN := STRIP := LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 CFLAGS.EXTRA += -fno-builtin -fno-stack-protector -LDFLAGS.EXTRA += -nostdlib +#LDFLAGS.EXTRA += -nostdlib WARN = -Wall -W POPT = -O2 BIN.SUFFIX = .exe diff --git a/config/Makefile.linux-mingw64 b/config/Makefile.linux-mingw64 index 8bc3894..f3e47a2 100644 --- a/config/Makefile.linux-mingw64 +++ b/config/Makefile.linux-mingw64 @@ -11,7 +11,7 @@ LN := STRIP := LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 CFLAGS.EXTRA += -fno-builtin -fno-stack-protector -LDFLAGS.EXTRA += -nostdlib +#LDFLAGS.EXTRA += -nostdlib WARN = -Wall -W POPT = -O2 BIN.SUFFIX = .exe From c4bade8726701ae95d9fe22f1e1aeba462dc9f0b Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Fri, 19 Feb 2016 22:30:48 +1000 Subject: [PATCH 64/81] Resolve some gcc compilation warnings --- auto/src/glew_init_tail.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/auto/src/glew_init_tail.c b/auto/src/glew_init_tail.c index c7be402..e21ce96 100644 --- a/auto/src/glew_init_tail.c +++ b/auto/src/glew_init_tail.c @@ -59,6 +59,9 @@ GLenum GLEWAPIENTRY glewInit (void) /* Types extracted from windows.h to avoid polluting the rest of the file. */ int __stdcall DllMainCRTStartup(void* instance, unsigned reason, void* reserved) { + (void) instance; + (void) reason; + (void) reserved; return 1; } #endif From 30df02775648b1da3b44f7621cc59217afe82d3d Mon Sep 17 00:00:00 2001 From: stopiccot Date: Sat, 19 Mar 2016 06:44:44 +0300 Subject: [PATCH 65/81] CMake support for building OS X framework --- build/cmake/CMakeLists.txt | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index d1c367b..6cf74e6 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -13,8 +13,11 @@ endif() set(CMAKE_DEBUG_POSTFIX d) option (BUILD_UTILS "utilities" ON) -option (GLEW_REGAL "Regal mode" FALSE) -option (GLEW_OSMESA "OSMesa mode" FALSE) +option (GLEW_REGAL "Regal mode" OFF) +option (GLEW_OSMESA "OSMesa mode" OFF) +if (APPLE) + option (BUILD_FRAMEWORK "Build Framework bundle for OSX" OFF) +endif () set (GLEW_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../..) @@ -74,16 +77,18 @@ endif () include_directories (${GLEW_DIR}/include) +set (GLEW_PUBLIC_HEADERS_FILES ${GLEW_DIR}/include/GL/wglew.h ${GLEW_DIR}/include/GL/glew.h ${GLEW_DIR}/include/GL/glxew.h) set (GLEW_SRC_FILES ${GLEW_DIR}/src/glew.c) if (WIN32) list (APPEND GLEW_SRC_FILES ${GLEW_DIR}/build/glew.rc) endif () -add_library (glew SHARED ${GLEW_SRC_FILES}) +add_library (glew SHARED ${GLEW_PUBLIC_HEADERS_FILES} ${GLEW_SRC_FILES}) set_target_properties (glew PROPERTIES COMPILE_DEFINITIONS "GLEW_BUILD" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX "${DLL_PREFIX}") -add_library (glew_s STATIC ${GLEW_SRC_FILES}) +add_library (glew_s STATIC ${GLEW_PUBLIC_HEADERS_FILES} ${GLEW_SRC_FILES}) set_target_properties (glew_s PROPERTIES COMPILE_DEFINITIONS "GLEW_STATIC" OUTPUT_NAME "${GLEW_LIB_NAME}" PREFIX lib) + if (MSVC) # add options from visual studio project target_compile_definitions (glew PRIVATE "GLEW_BUILD;VC_EXTRALEAN") @@ -101,6 +106,20 @@ elseif (WIN32 AND ((CMAKE_C_COMPILER_ID MATCHES "GNU") OR (CMAKE_C_COMPILER_ID M target_compile_options (glew_s PRIVATE -fno-builtin -fno-stack-protector) target_link_libraries (glew LINK_PRIVATE -nostdlib) endif () + +if (BUILD_FRAMEWORK) + set_target_properties(glew PROPERTIES + FRAMEWORK TRUE + FRAMEWORK_VERSION ${GLEW_VERSION} + MACOSX_FRAMEWORK_IDENTIFIER net.sourceforge.glew + MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${GLEW_VERSION} + MACOSX_FRAMEWORK_BUNDLE_VERSION ${GLEW_VERSION} + XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" + PUBLIC_HEADER "${GLEW_PUBLIC_HEADERS_FILES}" + OUTPUT_NAME GLEW + ) +endif() + target_link_libraries (glew LINK_PUBLIC ${GLEW_LIBRARIES}) target_link_libraries (glew_s ${GLEW_LIBRARIES}) @@ -108,7 +127,7 @@ if(CMAKE_VERSION VERSION_LESS 2.8.12) set(MAYBE_EXPORT "") else() target_compile_definitions(glew_s INTERFACE "GLEW_STATIC") - foreach(t glew glew_s ) + foreach(t glew glew_s) target_include_directories(${t} PUBLIC $) endforeach() set(MAYBE_EXPORT EXPORT glew-targets) @@ -116,11 +135,11 @@ endif() set(targets_to_install "") if(NOT DEFINED BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS) - list(APPEND targets_to_install glew ) + list(APPEND targets_to_install glew) endif() if(NOT DEFINED BUILD_SHARED_LIBS OR NOT BUILD_SHARED_LIBS) - list(APPEND targets_to_install glew_s ) + list(APPEND targets_to_install glew_s) endif() install ( TARGETS ${targets_to_install} @@ -128,6 +147,7 @@ install ( TARGETS ${targets_to_install} RUNTIME DESTINATION bin LIBRARY DESTINATION lib${LIB_SUFFIX} ARCHIVE DESTINATION lib${LIB_SUFFIX} + FRAMEWORK DESTINATION lib${LIB_SUFFIX} ) if (BUILD_UTILS) From 8042db9fa3ec3e207ff8f738bdd6983c7dc34d9f Mon Sep 17 00:00:00 2001 From: Marcel Metz Date: Fri, 1 Apr 2016 15:13:03 +0200 Subject: [PATCH 66/81] CMake: Use GNUInstallDirs to place the build artifacts properly CMake 2.8.5 added the GNUInstallDirs module, which provides various variables following the CMAKE_INSTALL_*DIR pattern to allow users a more flexible installation setup and to provide sensible defaults while respecting distribution specific install locations like lib64 for RPM based linux distributions or debian multiarch tuples. --- build/cmake/CMakeLists.txt | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 6cf74e6..5388b18 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -6,6 +6,8 @@ project (glew) cmake_minimum_required (VERSION 2.8.7) +include(GNUInstallDirs) + if (COMMAND cmake_policy) cmake_policy (SET CMP0003 NEW) endif() @@ -144,9 +146,9 @@ endif() install ( TARGETS ${targets_to_install} ${MAYBE_EXPORT} - RUNTIME DESTINATION bin - LIBRARY DESTINATION lib${LIB_SUFFIX} - ARCHIVE DESTINATION lib${LIB_SUFFIX} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} FRAMEWORK DESTINATION lib${LIB_SUFFIX} ) @@ -172,7 +174,7 @@ if (BUILD_UTILS) endif () install ( TARGETS glewinfo visualinfo - DESTINATION bin) + DESTINATION ${CMAKE_INSTALL_BINDIR}) endif () set (prefix ${CMAKE_INSTALL_PREFIX}) @@ -187,20 +189,20 @@ set (requireslib glu) configure_file (${GLEW_DIR}/glew.pc.in ${GLEW_DIR}/glew.pc @ONLY) install(FILES ${GLEW_DIR}/glew.pc - DESTINATION lib/pkgconfig + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig ) install (FILES ${GLEW_DIR}/include/GL/wglew.h ${GLEW_DIR}/include/GL/glew.h ${GLEW_DIR}/include/GL/glxew.h - DESTINATION include/GL) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/GL) if(MAYBE_EXPORT) - install(EXPORT glew-targets DESTINATION lib/cmake/glew + install(EXPORT glew-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glew NAMESPACE GLEW::) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/glew-config.cmake ${CMAKE_CURRENT_SOURCE_DIR}/CopyImportedTargetProperties.cmake - DESTINATION lib/cmake/glew) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glew) endif() From f1a40e2feaa995e20afebb4936c7061d56f91d95 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 2 Apr 2016 13:19:57 +1000 Subject: [PATCH 67/81] Direct linking of glGetString and glGetIntegerv is necessary for Windows/WGL --- auto/src/glew_init_gl.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/auto/src/glew_init_gl.c b/auto/src/glew_init_gl.c index 25c9b74..c153720 100644 --- a/auto/src/glew_init_gl.c +++ b/auto/src/glew_init_gl.c @@ -81,11 +81,15 @@ static GLenum GLEWAPIENTRY glewContextInit () GLint major, minor; size_t n; - /* query opengl version */ - getString = (PFNGLGETSTRINGPROC) glewGetProcAddress((const GLubyte*)"glGetString"); + #ifdef _WIN32 + getString = glGetString; + #else + getString = (PFNGLGETSTRINGPROC) glewGetProcAddress((const GLubyte*)"glGetString"); if (!getString) return GLEW_ERROR_NO_GL_VERSION; + #endif + /* query opengl version */ s = getString(GL_VERSION); dot = _glewStrCLen(s, '.'); if (dot == 0) @@ -137,7 +141,12 @@ static GLenum GLEWAPIENTRY glewContextInit () const char *ext; GLboolean *enable; + #ifdef _WIN32 + getIntegerv = glGetIntegerv; + #else getIntegerv = (PFNGLGETINTEGERVPROC) glewGetProcAddress((const GLubyte*)"glGetIntegerv"); + #endif + if (getIntegerv) getIntegerv(GL_NUM_EXTENSIONS, &n); From 957109be4e30d6b008ba9ae3c3e6af417ed2e3c5 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 2 Apr 2016 14:41:10 +1000 Subject: [PATCH 68/81] New snapshot available for download, including EGL support --- README.md | 5 +++-- auto/doc/index.html | 1 + doc/index.html | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a85faa9..9c89385 100644 --- a/README.md +++ b/README.md @@ -24,13 +24,14 @@ Windows binaries for [32-bit and 64-bit](https://sourceforge.net/projects/glew/f Snapshots may contain new features, bug-fixes or new OpenGL extensions ahead of tested, official releases. +[glew-20160402.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20160402.tgz/download) +*GLEW 2.0.0 release candidate, Core context, EGL support, no MX* + [glew-20160131.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20160131.tgz/download) *GLEW 2.0.0 release candidate: Core context support, MX discontinued* [glew-20151117.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20151117.tgz/download) -[glew-20150805.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20150805.tgz/download) - ## Build From a downloaded tarball or zip archive: diff --git a/auto/doc/index.html b/auto/doc/index.html index 998b119..ba91705 100644 --- a/auto/doc/index.html +++ b/auto/doc/index.html @@ -60,6 +60,7 @@ An up-to-date copy is also available using git Unsupported snapshots are also available:

    diff --git a/doc/index.html b/doc/index.html index b2a612b..f62b963 100644 --- a/doc/index.html +++ b/doc/index.html @@ -158,6 +158,7 @@ An up-to-date copy is also available using git Unsupported snapshots are also available:

    From 6bd1a26375708e8f3fbd2b4b564b6b2b1c1c35eb Mon Sep 17 00:00:00 2001 From: Marcel Metz Date: Sat, 2 Apr 2016 10:35:50 +0200 Subject: [PATCH 69/81] CMake: Use GNUInstallDirs variables for pkg-config --- build/cmake/CMakeLists.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 5388b18..24d349d 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -178,10 +178,9 @@ if (BUILD_UTILS) endif () set (prefix ${CMAKE_INSTALL_PREFIX}) -set (exec_prefix \${prefix}) -set (libdir \${prefix}/lib) -set (includedir \${prefix}/include) -set (includedir \${prefix}/include) +set (exec_prefix ${CMAKE_INSTALL_PREFIX}) +set (libdir ${CMAKE_INSTALL_FULL_LIBDIR}) +set (includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR}) set (version ${GLEW_VERSION}) set (libname ${GLEW_LIB_NAME}) set (cflags) From 24bcf04c194545bc3417d6970eecb3c01a853a69 Mon Sep 17 00:00:00 2001 From: Marcel Metz Date: Sat, 2 Apr 2016 10:35:50 +0200 Subject: [PATCH 70/81] CMake: Use GNUInstallDirs variables for MacOSX framework destination --- build/cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 24d349d..ef1a564 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -149,7 +149,7 @@ install ( TARGETS ${targets_to_install} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - FRAMEWORK DESTINATION lib${LIB_SUFFIX} + FRAMEWORK DESTINATION ${CMAKE_INSTALL_PREFIX} ) if (BUILD_UTILS) From 8ca90d2cf1cec784a0fdc80bf95dbcfb1257c4ae Mon Sep 17 00:00:00 2001 From: Marcel Metz Date: Sun, 3 Apr 2016 10:08:57 +0200 Subject: [PATCH 71/81] CMake: Document available targets and variables. --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index 9c89385..99cea34 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,24 @@ RedHat/CentOS/Fedora: `$ sudo yum install libXmu-devel libXi-devel libGL-devel g $ cmake ./cmake $ make -j4 +| Target | Description | +| ---------- | ----------- | +| glew | Build the glew shared library. | +| glew_s | Build the glew static library. | +| glewinfo | Build the `glewinfo` executable (requires `BUILD_UTILS` to be `ON`). | +| visualinfo | Build the `visualinfo` executable (requires `BUILD_UTILS` to be `ON`). | +| install | Install all enabled targts into `CMAKE_INSTALL_PREFIX`. | +| clean | Clean up build artifacts. | +| all | Build all enabled targets (default target). | + +| Variables | Description | +| --------------- | ----------- | +| BUILD_UTILS | Build the `glewinfo` and `visualinfo` executables. | +| GLEW_REGAL | Add the Regal project as dependency. | +| GLEW_OSMESA | Add the OSMesa project as dependency. | +| BUILD_FRAMEWORK | Build glew as MacOSX Framework. When setting this you should set also `CMAKE_INSTALL_PREFIX` to a sensible install location like `/Library/Frameworks`. | + + ### Windows #### Visual Studio From be51b869a1e90cacce81f85e2009e42c41fea105 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sun, 3 Apr 2016 20:03:16 +1000 Subject: [PATCH 72/81] CMake: Documentation touch-ups --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 99cea34..d944f77 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Snapshots may contain new features, bug-fixes or new OpenGL extensions ahead of *GLEW 2.0.0 release candidate, Core context, EGL support, no MX* [glew-20160131.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20160131.tgz/download) -*GLEW 2.0.0 release candidate: Core context support, MX discontinued* +*GLEW 2.0.0 release candidate: Core context support, no MX* [glew-20151117.tgz](http://sourceforge.net/projects/glew/files/glew/snapshots/glew-20151117.tgz/download) @@ -78,17 +78,16 @@ RedHat/CentOS/Fedora: `$ sudo yum install libXmu-devel libXi-devel libGL-devel g | glew_s | Build the glew static library. | | glewinfo | Build the `glewinfo` executable (requires `BUILD_UTILS` to be `ON`). | | visualinfo | Build the `visualinfo` executable (requires `BUILD_UTILS` to be `ON`). | -| install | Install all enabled targts into `CMAKE_INSTALL_PREFIX`. | +| install | Install all enabled targets into `CMAKE_INSTALL_PREFIX`. | | clean | Clean up build artifacts. | | all | Build all enabled targets (default target). | | Variables | Description | | --------------- | ----------- | | BUILD_UTILS | Build the `glewinfo` and `visualinfo` executables. | -| GLEW_REGAL | Add the Regal project as dependency. | -| GLEW_OSMESA | Add the OSMesa project as dependency. | -| BUILD_FRAMEWORK | Build glew as MacOSX Framework. When setting this you should set also `CMAKE_INSTALL_PREFIX` to a sensible install location like `/Library/Frameworks`. | - +| GLEW_REGAL | Build in Regal mode. | +| GLEW_OSMESA | Build in off-screen Mesa mode. | +| BUILD_FRAMEWORK | Build as MacOSX Framework. Setting `CMAKE_INSTALL_PREFIX` to `/Library/Frameworks` is recommended. | ### Windows From f3831806e7553e74cd756c189181b6b33f9d76c9 Mon Sep 17 00:00:00 2001 From: Marcel Metz Date: Thu, 10 Mar 2016 11:50:32 +0100 Subject: [PATCH 73/81] Install pdb file for `Debug` and `RelWithDebInfo` --- build/cmake/CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index ef1a564..158ef17 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -191,6 +191,14 @@ install(FILES ${GLEW_DIR}/glew.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig ) +if((NOT MSVC_VERSION LESS 1600) AND (NOT CMAKE_VERSION VERSION_LESS "3.1")) + install( + FILES $ + DESTINATION ${CMAKE_INSTALL_LIBDIR} + CONFIGURATIONS Debug RelWithDebInfo + ) +endif() + install (FILES ${GLEW_DIR}/include/GL/wglew.h ${GLEW_DIR}/include/GL/glew.h From 53df89fe32cbd3a8f51743049cf436c268362a4c Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 9 Apr 2016 09:51:57 +1000 Subject: [PATCH 74/81] Append GLVULKANPROCNV to GL_NV_draw_vulkan_image --- auto/bin/filter_gl_ext.sh | 7 + auto/bin/parse_spec.pl | 2 + doc/glew.html | 315 +++++++++++++++++++------------------- 3 files changed, 167 insertions(+), 157 deletions(-) diff --git a/auto/bin/filter_gl_ext.sh b/auto/bin/filter_gl_ext.sh index 502b3da..042e1f2 100755 --- a/auto/bin/filter_gl_ext.sh +++ b/auto/bin/filter_gl_ext.sh @@ -512,5 +512,12 @@ EOT grep -v "RasterSamplesEXT" $1/GL_NV_framebuffer_mixed_samples > tmp mv tmp $1/GL_NV_framebuffer_mixed_samples +# Append GLVULKANPROCNV to GL_NV_draw_vulkan_image +# Probably ought to be explicitly mentioned in the spec language + + cat >> $1/GL_NV_draw_vulkan_image < "GLDEBUGPROC", + VULKANPROCNV => "GLVULKANPROCNV", + vdpauSurfaceNV => "GLvdpauSurfaceNV", # GLX 1.3 defines new types which might not be available at compile time diff --git a/doc/glew.html b/doc/glew.html index 65f8c6c..8374ff4 100644 --- a/doc/glew.html +++ b/doc/glew.html @@ -531,176 +531,177 @@ THE POSSIBILITY OF SUCH DAMAGE.
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - - + + - - + + - - - - - - - + + + + + + + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - + - - - - - - - + + + + + + + - - - + + +
    Last Update: 08-10-15
    Last Update: 01-31-16
    OpenGL Logo
    GitHub Logo
    + Travis Logo
    SourceForge Logo
    412 NV_depth_clamp
    413 NV_depth_range_unclamped
    414 NV_draw_texture
    415 NV_evaluators
    416 NV_explicit_multisample
    417 NV_fence
    418 NV_fill_rectangle
    419 NV_float_buffer
    420 NV_fog_distance
    421 NV_fragment_coverage_to_color
    422 NV_fragment_program
    423 NV_fragment_program2
    424 NV_fragment_program4
    425 NV_fragment_program_option
    426 NV_fragment_shader_interlock
    427 NV_framebuffer_mixed_samples
    428 NV_framebuffer_multisample_coverage
    429 NV_geometry_program4
    430 NV_geometry_shader4
    431 NV_geometry_shader_passthrough
    432 NV_gpu_program4
    433 NV_gpu_program5
    434 NV_gpu_program5_mem_extended
    435 NV_gpu_program_fp64
    436 NV_gpu_shader5
    437 NV_half_float
    438 NV_internalformat_sample_query
    439 NV_light_max_exponent
    440 NV_multisample_coverage
    441 NV_multisample_filter_hint
    442 NV_occlusion_query
    443 NV_packed_depth_stencil
    444 NV_parameter_buffer_object
    445 NV_parameter_buffer_object2
    446 NV_path_rendering
    447 NV_path_rendering_shared_edge
    448 NV_pixel_data_range
    449 NV_point_sprite
    450 NV_present_video
    451 NV_primitive_restart
    452 NV_register_combiners
    453 NV_register_combiners2
    454 NV_sample_locations
    455 NV_sample_mask_override_coverage
    456 NV_shader_atomic_counters
    457 NV_shader_atomic_float
    458 NV_shader_atomic_fp16_vector
    459 NV_shader_atomic_int64
    460 NV_shader_buffer_load
    461 NV_shader_storage_buffer_object
    462 NV_shader_thread_group
    463 NV_shader_thread_shuffle
    464 NV_tessellation_program5
    465 NV_texgen_emboss
    466 NV_texgen_reflection
    467 NV_texture_barrier
    468 NV_texture_compression_vtc
    469 NV_texture_env_combine4
    470 NV_texture_expand_normal
    471 NV_texture_multisample
    472 NV_texture_rectangle
    473 NV_texture_shader
    474 NV_texture_shader2
    475 NV_texture_shader3
    476 NV_transform_feedback
    477 NV_transform_feedback2
    478 NV_uniform_buffer_unified_memory
    479 NV_vdpau_interop
    480 NV_vertex_array_range
    481 NV_vertex_array_range2
    482 NV_vertex_attrib_integer_64bit
    483 NV_vertex_buffer_unified_memory
    484 NV_vertex_program
    485 NV_vertex_program1_1
    486 NV_vertex_program2
    487 NV_vertex_program2_option
    488 NV_vertex_program3
    489 NV_vertex_program4
    490 NV_video_capture
    491 NV_viewport_array2
    415 NV_draw_vulkan_image
    416 NV_evaluators
    417 NV_explicit_multisample
    418 NV_fence
    419 NV_fill_rectangle
    420 NV_float_buffer
    421 NV_fog_distance
    422 NV_fragment_coverage_to_color
    423 NV_fragment_program
    424 NV_fragment_program2
    425 NV_fragment_program4
    426 NV_fragment_program_option
    427 NV_fragment_shader_interlock
    428 NV_framebuffer_mixed_samples
    429 NV_framebuffer_multisample_coverage
    430 NV_geometry_program4
    431 NV_geometry_shader4
    432 NV_geometry_shader_passthrough
    433 NV_gpu_program4
    434 NV_gpu_program5
    435 NV_gpu_program5_mem_extended
    436 NV_gpu_program_fp64
    437 NV_gpu_shader5
    438 NV_half_float
    439 NV_internalformat_sample_query
    440 NV_light_max_exponent
    441 NV_multisample_coverage
    442 NV_multisample_filter_hint
    443 NV_occlusion_query
    444 NV_packed_depth_stencil
    445 NV_parameter_buffer_object
    446 NV_parameter_buffer_object2
    447 NV_path_rendering
    448 NV_path_rendering_shared_edge
    449 NV_pixel_data_range
    450 NV_point_sprite
    451 NV_present_video
    452 NV_primitive_restart
    453 NV_register_combiners
    454 NV_register_combiners2
    455 NV_sample_locations
    456 NV_sample_mask_override_coverage
    457 NV_shader_atomic_counters
    458 NV_shader_atomic_float
    459 NV_shader_atomic_fp16_vector
    460 NV_shader_atomic_int64
    461 NV_shader_buffer_load
    462 NV_shader_storage_buffer_object
    463 NV_shader_thread_group
    464 NV_shader_thread_shuffle
    465 NV_tessellation_program5
    466 NV_texgen_emboss
    467 NV_texgen_reflection
    468 NV_texture_barrier
    469 NV_texture_compression_vtc
    470 NV_texture_env_combine4
    471 NV_texture_expand_normal
    472 NV_texture_multisample
    473 NV_texture_rectangle
    474 NV_texture_shader
    475 NV_texture_shader2
    476 NV_texture_shader3
    477 NV_transform_feedback
    478 NV_transform_feedback2
    479 NV_uniform_buffer_unified_memory
    480 NV_vdpau_interop
    481 NV_vertex_array_range
    482 NV_vertex_array_range2
    483 NV_vertex_attrib_integer_64bit
    484 NV_vertex_buffer_unified_memory
    485 NV_vertex_program
    486 NV_vertex_program1_1
    487 NV_vertex_program2
    488 NV_vertex_program2_option
    489 NV_vertex_program3
    490 NV_vertex_program4
    491 NV_video_capture
    492 NV_viewport_array2

    492 OES_byte_coordinates
    493 OES_compressed_paletted_texture
    494 OES_read_format
    495 OES_single_precision
    493 OES_byte_coordinates
    494 OES_compressed_paletted_texture
    495 OES_read_format
    496 OES_single_precision

    496 OML_interlace
    497 OML_resample
    498 OML_subsample
    497 OML_interlace
    498 OML_resample
    499 OML_subsample

    499 OVR_multiview
    500 OVR_multiview2
    500 OVR_multiview
    501 OVR_multiview2

    501 PGI_misc_hints
    502 PGI_vertex_hints
    502 PGI_misc_hints
    503 PGI_vertex_hints

    503 REGAL_ES1_0_compatibility
    504 REGAL_ES1_1_compatibility
    505 REGAL_enable
    506 REGAL_error_string
    507 REGAL_extension_query
    508 REGAL_log
    509 REGAL_proc_address
    504 REGAL_ES1_0_compatibility
    505 REGAL_ES1_1_compatibility
    506 REGAL_enable
    507 REGAL_error_string
    508 REGAL_extension_query
    509 REGAL_log
    510 REGAL_proc_address

    510 REND_screen_coordinates
    511 REND_screen_coordinates

    511 S3_s3tc
    512 S3_s3tc

    512 SGIS_color_range
    513 SGIS_detail_texture
    514 SGIS_fog_function
    515 SGIS_generate_mipmap
    516 SGIS_multisample
    517 SGIS_pixel_texture
    518 SGIS_point_line_texgen
    519 SGIS_sharpen_texture
    520 SGIS_texture4D
    521 SGIS_texture_border_clamp
    522 SGIS_texture_edge_clamp
    523 SGIS_texture_filter4
    524 SGIS_texture_lod
    525 SGIS_texture_select
    513 SGIS_color_range
    514 SGIS_detail_texture
    515 SGIS_fog_function
    516 SGIS_generate_mipmap
    517 SGIS_multisample
    518 SGIS_pixel_texture
    519 SGIS_point_line_texgen
    520 SGIS_sharpen_texture
    521 SGIS_texture4D
    522 SGIS_texture_border_clamp
    523 SGIS_texture_edge_clamp
    524 SGIS_texture_filter4
    525 SGIS_texture_lod
    526 SGIS_texture_select

    526 SGIX_async
    527 SGIX_async_histogram
    528 SGIX_async_pixel
    529 SGIX_blend_alpha_minmax
    530 SGIX_clipmap
    531 SGIX_convolution_accuracy
    532 SGIX_depth_texture
    533 SGIX_flush_raster
    534 SGIX_fog_offset
    535 SGIX_fog_texture
    536 SGIX_fragment_specular_lighting
    537 SGIX_framezoom
    538 SGIX_interlace
    539 SGIX_ir_instrument1
    540 SGIX_list_priority
    541 SGIX_pixel_texture
    542 SGIX_pixel_texture_bits
    543 SGIX_reference_plane
    544 SGIX_resample
    545 SGIX_shadow
    546 SGIX_shadow_ambient
    547 SGIX_sprite
    548 SGIX_tag_sample_buffer
    549 SGIX_texture_add_env
    550 SGIX_texture_coordinate_clamp
    551 SGIX_texture_lod_bias
    552 SGIX_texture_multi_buffer
    553 SGIX_texture_range
    554 SGIX_texture_scale_bias
    555 SGIX_vertex_preclip
    556 SGIX_vertex_preclip_hint
    557 SGIX_ycrcb
    527 SGIX_async
    528 SGIX_async_histogram
    529 SGIX_async_pixel
    530 SGIX_blend_alpha_minmax
    531 SGIX_clipmap
    532 SGIX_convolution_accuracy
    533 SGIX_depth_texture
    534 SGIX_flush_raster
    535 SGIX_fog_offset
    536 SGIX_fog_texture
    537 SGIX_fragment_specular_lighting
    538 SGIX_framezoom
    539 SGIX_interlace
    540 SGIX_ir_instrument1
    541 SGIX_list_priority
    542 SGIX_pixel_texture
    543 SGIX_pixel_texture_bits
    544 SGIX_reference_plane
    545 SGIX_resample
    546 SGIX_shadow
    547 SGIX_shadow_ambient
    548 SGIX_sprite
    549 SGIX_tag_sample_buffer
    550 SGIX_texture_add_env
    551 SGIX_texture_coordinate_clamp
    552 SGIX_texture_lod_bias
    553 SGIX_texture_multi_buffer
    554 SGIX_texture_range
    555 SGIX_texture_scale_bias
    556 SGIX_vertex_preclip
    557 SGIX_vertex_preclip_hint
    558 SGIX_ycrcb

    558 SGI_color_matrix
    559 SGI_color_table
    560 SGI_texture_color_table
    559 SGI_color_matrix
    560 SGI_color_table
    561 SGI_texture_color_table

    561 SUNX_constant_data
    562 SUNX_constant_data

    562 SUN_convolution_border_modes
    563 SUN_global_alpha
    564 SUN_mesh_array
    565 SUN_read_video_pixels
    566 SUN_slice_accum
    567 SUN_triangle_list
    568 SUN_vertex
    563 SUN_convolution_border_modes
    564 SUN_global_alpha
    565 SUN_mesh_array
    566 SUN_read_video_pixels
    567 SUN_slice_accum
    568 SUN_triangle_list
    569 SUN_vertex

    569 WIN_phong_shading
    570 WIN_specular_fog
    571 WIN_swap_hint
    570 WIN_phong_shading
    571 WIN_specular_fog
    572 WIN_swap_hint
    From bbb23c534a16e9063ea72f7bd2ec68114359976d Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sun, 8 May 2016 00:05:32 +1000 Subject: [PATCH 75/81] Touch-ups for suggested Ubuntu apt-get install packages --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d944f77..c4a01e8 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ From a downloaded tarball or zip archive: ##### Install build tools -Debian/Ubuntu/Mint: `$ sudo apt-get install build-essential libXmu-dev libXi-dev libgl-dev git` +Debian/Ubuntu/Mint: `$ sudo apt-get install build-essential libxmu-dev libxi-dev libgl-dev libosmesa-dev git` RedHat/CentOS/Fedora: `$ sudo yum install libXmu-devel libXi-devel libGL-devel git` From 1ab282a9d3cc5125eab98543b7b0e587e3e55e7b Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sun, 8 May 2016 00:12:11 +1000 Subject: [PATCH 76/81] Clarify that Makefile STRIP= does not affect install step, which always strips --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 8280f87..ea3cf3a 100644 --- a/Makefile +++ b/Makefile @@ -51,16 +51,17 @@ ifneq ($(GLEW_NO_GLU), -DGLEW_NO_GLU) LIBGLU = glu endif -DIST_NAME ?= glew-$(GLEW_VERSION) +DIST_NAME ?= glew-$(GLEW_VERSION) DIST_SRC_ZIP ?= $(shell pwd)/$(DIST_NAME).zip DIST_SRC_TGZ ?= $(shell pwd)/$(DIST_NAME).tgz DIST_WIN32 ?= $(shell pwd)/$(DIST_NAME)-win32.zip DIST_DIR := $(shell mktemp -d /tmp/glew.XXXXXX)/$(DIST_NAME) -# To disable stripping of binaries either: +# To disable stripping of linked binaries either: # - use STRIP= on gmake command-line # - edit this makefile to set STRIP to the empty string +# (Note: STRIP does not affect the strip in the install step) # # To disable symlinks: # - use LN= on gmake command-line From 8047ef41fac61e5ae9e71b53ca0916455031b8bf Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 21 May 2016 07:59:11 +1000 Subject: [PATCH 77/81] parse_xml.py touch-up for Python 3 (or Python 2) --- auto/bin/parse_xml.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/auto/bin/parse_xml.py b/auto/bin/parse_xml.py index a9c1b4b..1340deb 100755 --- a/auto/bin/parse_xml.py +++ b/auto/bin/parse_xml.py @@ -114,8 +114,8 @@ if __name__ == '__main__': dom = parse(i) api = findApi(dom, 'egl') - print 'Found {} enums, {} commands, {} features and {} extensions.'.format( - len(api[0]), len(api[1]), len(api[2]), len(api[3])) + print('Found {} enums, {} commands, {} features and {} extensions.'.format( + len(api[0]), len(api[1]), len(api[2]), len(api[3]))) if len(options.core): for i in api[2].keys(): From 180db268c0d0f9f8719b17a3ff7c6be9d6637f1a Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Sat, 21 May 2016 08:07:56 +1000 Subject: [PATCH 78/81] cmake fixup for non-Windows --- build/cmake/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/cmake/CMakeLists.txt b/build/cmake/CMakeLists.txt index 158ef17..9130e00 100644 --- a/build/cmake/CMakeLists.txt +++ b/build/cmake/CMakeLists.txt @@ -191,7 +191,7 @@ install(FILES ${GLEW_DIR}/glew.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig ) -if((NOT MSVC_VERSION LESS 1600) AND (NOT CMAKE_VERSION VERSION_LESS "3.1")) +if(WIN32 AND (NOT MSVC_VERSION LESS 1600) AND (NOT CMAKE_VERSION VERSION_LESS "3.1")) install( FILES $ DESTINATION ${CMAKE_INSTALL_LIBDIR} From 9beea40e97747557695130255498c9ecfb275223 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Fri, 17 Jun 2016 23:26:53 +1000 Subject: [PATCH 79/81] Update generated documentation of supported extensions --- doc/glew.html | 1114 ++++++++++++++++++++++++------------------------ doc/glxew.html | 90 ++-- 2 files changed, 608 insertions(+), 596 deletions(-) diff --git a/doc/glew.html b/doc/glew.html index 8374ff4..c507511 100644 --- a/doc/glew.html +++ b/doc/glew.html @@ -120,588 +120,598 @@ THE POSSIBILITY OF SUCH DAMAGE. 18 AMD_sample_positions 19 AMD_seamless_cubemap_per_texture 20 AMD_shader_atomic_counter_ops -21 AMD_shader_stencil_export -22 AMD_shader_stencil_value_export -23 AMD_shader_trinary_minmax -24 AMD_sparse_texture -25 AMD_stencil_operation_extended -26 AMD_texture_texture4 -27 AMD_transform_feedback3_lines_triangles -28 AMD_transform_feedback4 -29 AMD_vertex_shader_layer -30 AMD_vertex_shader_tessellator -31 AMD_vertex_shader_viewport_index +21 AMD_shader_explicit_vertex_parameter +22 AMD_shader_stencil_export +23 AMD_shader_stencil_value_export +24 AMD_shader_trinary_minmax +25 AMD_sparse_texture +26 AMD_stencil_operation_extended +27 AMD_texture_texture4 +28 AMD_transform_feedback3_lines_triangles +29 AMD_transform_feedback4 +30 AMD_vertex_shader_layer +31 AMD_vertex_shader_tessellator +32 AMD_vertex_shader_viewport_index
    -32 ANGLE_depth_texture -33 ANGLE_framebuffer_blit -34 ANGLE_framebuffer_multisample -35 ANGLE_instanced_arrays -36 ANGLE_pack_reverse_row_order -37 ANGLE_program_binary -38 ANGLE_texture_compression_dxt1 -39 ANGLE_texture_compression_dxt3 -40 ANGLE_texture_compression_dxt5 -41 ANGLE_texture_usage -42 ANGLE_timer_query -43 ANGLE_translated_shader_source +33 ANGLE_depth_texture +34 ANGLE_framebuffer_blit +35 ANGLE_framebuffer_multisample +36 ANGLE_instanced_arrays +37 ANGLE_pack_reverse_row_order +38 ANGLE_program_binary +39 ANGLE_texture_compression_dxt1 +40 ANGLE_texture_compression_dxt3 +41 ANGLE_texture_compression_dxt5 +42 ANGLE_texture_usage +43 ANGLE_timer_query +44 ANGLE_translated_shader_source
    -44 APPLE_aux_depth_stencil -45 APPLE_client_storage -46 APPLE_element_array -47 APPLE_fence -48 APPLE_float_pixels -49 APPLE_flush_buffer_range -50 APPLE_object_purgeable -51 APPLE_pixel_buffer -52 APPLE_rgb_422 -53 APPLE_row_bytes -54 APPLE_specular_vector -55 APPLE_texture_range -56 APPLE_transform_hint -57 APPLE_vertex_array_object -58 APPLE_vertex_array_range -59 APPLE_vertex_program_evaluators -60 APPLE_ycbcr_422 +45 APPLE_aux_depth_stencil +46 APPLE_client_storage +47 APPLE_element_array +48 APPLE_fence +49 APPLE_float_pixels +50 APPLE_flush_buffer_range +51 APPLE_object_purgeable +52 APPLE_pixel_buffer +53 APPLE_rgb_422 +54 APPLE_row_bytes +55 APPLE_specular_vector +56 APPLE_texture_range +57 APPLE_transform_hint +58 APPLE_vertex_array_object +59 APPLE_vertex_array_range +60 APPLE_vertex_program_evaluators +61 APPLE_ycbcr_422
    -61 ARB_ES2_compatibility -62 ARB_ES3_1_compatibility -63 ARB_ES3_2_compatibility -64 ARB_ES3_compatibility -65 ARB_arrays_of_arrays -66 ARB_base_instance -67 ARB_bindless_texture -68 ARB_blend_func_extended -69 ARB_buffer_storage -70 ARB_cl_event -71 ARB_clear_buffer_object -72 ARB_clear_texture -73 ARB_clip_control -74 ARB_color_buffer_float -75 ARB_compatibility -76 ARB_compressed_texture_pixel_storage -77 ARB_compute_shader -78 ARB_compute_variable_group_size -79 ARB_conditional_render_inverted -80 ARB_conservative_depth -81 ARB_copy_buffer -82 ARB_copy_image -83 ARB_cull_distance -84 ARB_debug_output -85 ARB_depth_buffer_float -86 ARB_depth_clamp -87 ARB_depth_texture -88 ARB_derivative_control -89 ARB_direct_state_access -90 ARB_draw_buffers -91 ARB_draw_buffers_blend -92 ARB_draw_elements_base_vertex -93 ARB_draw_indirect -94 ARB_draw_instanced -95 ARB_enhanced_layouts -96 ARB_explicit_attrib_location -97 ARB_explicit_uniform_location -98 ARB_fragment_coord_conventions -99 ARB_fragment_layer_viewport -100 ARB_fragment_program -101 ARB_fragment_program_shadow -102 ARB_fragment_shader -103 ARB_fragment_shader_interlock -104 ARB_framebuffer_no_attachments -105 ARB_framebuffer_object -106 ARB_framebuffer_sRGB -107 ARB_geometry_shader4 -108 ARB_get_program_binary -109 ARB_get_texture_sub_image -110 ARB_gpu_shader5 -111 ARB_gpu_shader_fp64 -112 ARB_gpu_shader_int64 -113 ARB_half_float_pixel -114 ARB_half_float_vertex -115 ARB_imaging -116 ARB_indirect_parameters -117 ARB_instanced_arrays -118 ARB_internalformat_query -119 ARB_internalformat_query2 -120 ARB_invalidate_subdata -121 ARB_map_buffer_alignment -122 ARB_map_buffer_range -123 ARB_matrix_palette -124 ARB_multi_bind -125 ARB_multi_draw_indirect -126 ARB_multisample -127 ARB_multitexture -128 ARB_occlusion_query -129 ARB_occlusion_query2 -130 ARB_parallel_shader_compile -131 ARB_pipeline_statistics_query -132 ARB_pixel_buffer_object -133 ARB_point_parameters -134 ARB_point_sprite -135 ARB_post_depth_coverage -136 ARB_program_interface_query -137 ARB_provoking_vertex -138 ARB_query_buffer_object -139 ARB_robust_buffer_access_behavior -140 ARB_robustness -141 ARB_robustness_application_isolation -142 ARB_robustness_share_group_isolation -143 ARB_sample_locations -144 ARB_sample_shading -145 ARB_sampler_objects -146 ARB_seamless_cube_map -147 ARB_seamless_cubemap_per_texture -148 ARB_separate_shader_objects -149 ARB_shader_atomic_counter_ops -150 ARB_shader_atomic_counters -151 ARB_shader_ballot -152 ARB_shader_bit_encoding -153 ARB_shader_clock -154 ARB_shader_draw_parameters -155 ARB_shader_group_vote -156 ARB_shader_image_load_store -157 ARB_shader_image_size -158 ARB_shader_objects -159 ARB_shader_precision -160 ARB_shader_stencil_export -161 ARB_shader_storage_buffer_object -162 ARB_shader_subroutine -163 ARB_shader_texture_image_samples -164 ARB_shader_texture_lod -165 ARB_shader_viewport_layer_array -166 ARB_shading_language_100 -167 ARB_shading_language_420pack -168 ARB_shading_language_include -169 ARB_shading_language_packing -170 ARB_shadow -171 ARB_shadow_ambient -172 ARB_sparse_buffer -173 ARB_sparse_texture -174 ARB_sparse_texture2 -175 ARB_sparse_texture_clamp -176 ARB_stencil_texturing -177 ARB_sync -178 ARB_tessellation_shader -179 ARB_texture_barrier -180 ARB_texture_border_clamp -181 ARB_texture_buffer_object -182 ARB_texture_buffer_object_rgb32 -183 ARB_texture_buffer_range -184 ARB_texture_compression -185 ARB_texture_compression_bptc -186 ARB_texture_compression_rgtc -187 ARB_texture_cube_map -188 ARB_texture_cube_map_array -189 ARB_texture_env_add -190 ARB_texture_env_combine -191 ARB_texture_env_crossbar -192 ARB_texture_env_dot3 -193 ARB_texture_filter_minmax -194 ARB_texture_float -195 ARB_texture_gather -196 ARB_texture_mirror_clamp_to_edge -197 ARB_texture_mirrored_repeat -198 ARB_texture_multisample -199 ARB_texture_non_power_of_two -200 ARB_texture_query_levels -201 ARB_texture_query_lod -202 ARB_texture_rectangle -203 ARB_texture_rg -204 ARB_texture_rgb10_a2ui -205 ARB_texture_stencil8 -206 ARB_texture_storage -207 ARB_texture_storage_multisample -208 ARB_texture_swizzle -209 ARB_texture_view -210 ARB_timer_query -211 ARB_transform_feedback2 -212 ARB_transform_feedback3 -213 ARB_transform_feedback_instanced -214 ARB_transform_feedback_overflow_query -215 ARB_transpose_matrix -216 ARB_uniform_buffer_object -217 ARB_vertex_array_bgra -218 ARB_vertex_array_object -219 ARB_vertex_attrib_64bit -220 ARB_vertex_attrib_binding -221 ARB_vertex_blend -222 ARB_vertex_buffer_object -223 ARB_vertex_program -224 ARB_vertex_shader -225 ARB_vertex_type_10f_11f_11f_rev -226 ARB_vertex_type_2_10_10_10_rev -227 ARB_viewport_array -228 ARB_window_pos +62 ARB_ES2_compatibility +63 ARB_ES3_1_compatibility +64 ARB_ES3_2_compatibility +65 ARB_ES3_compatibility +66 ARB_arrays_of_arrays +67 ARB_base_instance +68 ARB_bindless_texture +69 ARB_blend_func_extended +70 ARB_buffer_storage +71 ARB_cl_event +72 ARB_clear_buffer_object +73 ARB_clear_texture +74 ARB_clip_control +75 ARB_color_buffer_float +76 ARB_compatibility +77 ARB_compressed_texture_pixel_storage +78 ARB_compute_shader +79 ARB_compute_variable_group_size +80 ARB_conditional_render_inverted +81 ARB_conservative_depth +82 ARB_copy_buffer +83 ARB_copy_image +84 ARB_cull_distance +85 ARB_debug_output +86 ARB_depth_buffer_float +87 ARB_depth_clamp +88 ARB_depth_texture +89 ARB_derivative_control +90 ARB_direct_state_access +91 ARB_draw_buffers +92 ARB_draw_buffers_blend +93 ARB_draw_elements_base_vertex +94 ARB_draw_indirect +95 ARB_draw_instanced +96 ARB_enhanced_layouts +97 ARB_explicit_attrib_location +98 ARB_explicit_uniform_location +99 ARB_fragment_coord_conventions +100 ARB_fragment_layer_viewport +101 ARB_fragment_program +102 ARB_fragment_program_shadow +103 ARB_fragment_shader +104 ARB_fragment_shader_interlock +105 ARB_framebuffer_no_attachments +106 ARB_framebuffer_object +107 ARB_framebuffer_sRGB +108 ARB_geometry_shader4 +109 ARB_get_program_binary +110 ARB_get_texture_sub_image +111 ARB_gpu_shader5 +112 ARB_gpu_shader_fp64 +113 ARB_gpu_shader_int64 +114 ARB_half_float_pixel +115 ARB_half_float_vertex +116 ARB_imaging +117 ARB_indirect_parameters +118 ARB_instanced_arrays +119 ARB_internalformat_query +120 ARB_internalformat_query2 +121 ARB_invalidate_subdata +122 ARB_map_buffer_alignment +123 ARB_map_buffer_range +124 ARB_matrix_palette +125 ARB_multi_bind +126 ARB_multi_draw_indirect +127 ARB_multisample +128 ARB_multitexture +129 ARB_occlusion_query +130 ARB_occlusion_query2 +131 ARB_parallel_shader_compile +132 ARB_pipeline_statistics_query +133 ARB_pixel_buffer_object +134 ARB_point_parameters +135 ARB_point_sprite +136 ARB_post_depth_coverage +137 ARB_program_interface_query +138 ARB_provoking_vertex +139 ARB_query_buffer_object +140 ARB_robust_buffer_access_behavior +141 ARB_robustness +142 ARB_robustness_application_isolation +143 ARB_robustness_share_group_isolation +144 ARB_sample_locations +145 ARB_sample_shading +146 ARB_sampler_objects +147 ARB_seamless_cube_map +148 ARB_seamless_cubemap_per_texture +149 ARB_separate_shader_objects +150 ARB_shader_atomic_counter_ops +151 ARB_shader_atomic_counters +152 ARB_shader_ballot +153 ARB_shader_bit_encoding +154 ARB_shader_clock +155 ARB_shader_draw_parameters +156 ARB_shader_group_vote +157 ARB_shader_image_load_store +158 ARB_shader_image_size +159 ARB_shader_objects +160 ARB_shader_precision +161 ARB_shader_stencil_export +162 ARB_shader_storage_buffer_object +163 ARB_shader_subroutine +164 ARB_shader_texture_image_samples +165 ARB_shader_texture_lod +166 ARB_shader_viewport_layer_array +167 ARB_shading_language_100 +168 ARB_shading_language_420pack +169 ARB_shading_language_include +170 ARB_shading_language_packing +171 ARB_shadow +172 ARB_shadow_ambient +173 ARB_sparse_buffer +174 ARB_sparse_texture +175 ARB_sparse_texture2 +176 ARB_sparse_texture_clamp +177 ARB_stencil_texturing +178 ARB_sync +179 ARB_tessellation_shader +180 ARB_texture_barrier +181 ARB_texture_border_clamp +182 ARB_texture_buffer_object +183 ARB_texture_buffer_object_rgb32 +184 ARB_texture_buffer_range +185 ARB_texture_compression +186 ARB_texture_compression_bptc +187 ARB_texture_compression_rgtc +188 ARB_texture_cube_map +189 ARB_texture_cube_map_array +190 ARB_texture_env_add +191 ARB_texture_env_combine +192 ARB_texture_env_crossbar +193 ARB_texture_env_dot3 +194 ARB_texture_filter_minmax +195 ARB_texture_float +196 ARB_texture_gather +197 ARB_texture_mirror_clamp_to_edge +198 ARB_texture_mirrored_repeat +199 ARB_texture_multisample +200 ARB_texture_non_power_of_two +201 ARB_texture_query_levels +202 ARB_texture_query_lod +203 ARB_texture_rectangle +204 ARB_texture_rg +205 ARB_texture_rgb10_a2ui +206 ARB_texture_stencil8 +207 ARB_texture_storage +208 ARB_texture_storage_multisample +209 ARB_texture_swizzle +210 ARB_texture_view +211 ARB_timer_query +212 ARB_transform_feedback2 +213 ARB_transform_feedback3 +214 ARB_transform_feedback_instanced +215 ARB_transform_feedback_overflow_query +216 ARB_transpose_matrix +217 ARB_uniform_buffer_object +218 ARB_vertex_array_bgra +219 ARB_vertex_array_object +220 ARB_vertex_attrib_64bit +221 ARB_vertex_attrib_binding +222 ARB_vertex_blend +223 ARB_vertex_buffer_object +224 ARB_vertex_program +225 ARB_vertex_shader +226 ARB_vertex_type_10f_11f_11f_rev +227 ARB_vertex_type_2_10_10_10_rev +228 ARB_viewport_array +229 ARB_window_pos
    -229 ATIX_point_sprites -230 ATIX_texture_env_combine3 -231 ATIX_texture_env_route -232 ATIX_vertex_shader_output_point_size +230 ATIX_point_sprites +231 ATIX_texture_env_combine3 +232 ATIX_texture_env_route +233 ATIX_vertex_shader_output_point_size
    -233 ATI_draw_buffers -234 ATI_element_array -235 ATI_envmap_bumpmap -236 ATI_fragment_shader -237 ATI_map_object_buffer -238 ATI_meminfo -239 ATI_pn_triangles -240 ATI_separate_stencil -241 ATI_shader_texture_lod -242 ATI_text_fragment_shader -243 ATI_texture_compression_3dc -244 ATI_texture_env_combine3 -245 ATI_texture_float -246 ATI_texture_mirror_once -247 ATI_vertex_array_object -248 ATI_vertex_attrib_array_object -249 ATI_vertex_streams +234 ATI_draw_buffers +235 ATI_element_array +236 ATI_envmap_bumpmap +237 ATI_fragment_shader +238 ATI_map_object_buffer +239 ATI_meminfo +240 ATI_pn_triangles +241 ATI_separate_stencil +242 ATI_shader_texture_lod +243 ATI_text_fragment_shader +244 ATI_texture_compression_3dc +245 ATI_texture_env_combine3 +246 ATI_texture_float +247 ATI_texture_mirror_once +248 ATI_vertex_array_object +249 ATI_vertex_attrib_array_object +250 ATI_vertex_streams
    -250 EXT_422_pixels -251 EXT_Cg_shader -252 EXT_abgr -253 EXT_bgra -254 EXT_bindable_uniform -255 EXT_blend_color -256 EXT_blend_equation_separate -257 EXT_blend_func_separate -258 EXT_blend_logic_op -259 EXT_blend_minmax -260 EXT_blend_subtract -261 EXT_clip_volume_hint -262 EXT_cmyka -263 EXT_color_subtable -264 EXT_compiled_vertex_array -265 EXT_convolution -266 EXT_coordinate_frame -267 EXT_copy_texture -268 EXT_cull_vertex -269 EXT_debug_label -270 EXT_debug_marker -271 EXT_depth_bounds_test -272 EXT_direct_state_access -273 EXT_draw_buffers2 -274 EXT_draw_instanced -275 EXT_draw_range_elements -276 EXT_fog_coord -277 EXT_fragment_lighting -278 EXT_framebuffer_blit -279 EXT_framebuffer_multisample -280 EXT_framebuffer_multisample_blit_scaled -281 EXT_framebuffer_object -282 EXT_framebuffer_sRGB -283 EXT_geometry_shader4 -284 EXT_gpu_program_parameters -285 EXT_gpu_shader4 -286 EXT_histogram -287 EXT_index_array_formats -288 EXT_index_func -289 EXT_index_material -290 EXT_index_texture -291 EXT_light_texture -292 EXT_misc_attribute -293 EXT_multi_draw_arrays -294 EXT_multisample -295 EXT_packed_depth_stencil -296 EXT_packed_float -297 EXT_packed_pixels -298 EXT_paletted_texture -299 EXT_pixel_buffer_object -300 EXT_pixel_transform -301 EXT_pixel_transform_color_table -302 EXT_point_parameters -303 EXT_polygon_offset -304 EXT_polygon_offset_clamp -305 EXT_post_depth_coverage -306 EXT_provoking_vertex -307 EXT_raster_multisample -308 EXT_rescale_normal -309 EXT_scene_marker -310 EXT_secondary_color -311 EXT_separate_shader_objects -312 EXT_separate_specular_color -313 EXT_shader_image_load_formatted -314 EXT_shader_image_load_store -315 EXT_shader_integer_mix -316 EXT_shadow_funcs -317 EXT_shared_texture_palette -318 EXT_sparse_texture2 -319 EXT_stencil_clear_tag -320 EXT_stencil_two_side -321 EXT_stencil_wrap -322 EXT_subtexture -323 EXT_texture -324 EXT_texture3D -325 EXT_texture_array -326 EXT_texture_buffer_object -327 EXT_texture_compression_dxt1 -328 EXT_texture_compression_latc -329 EXT_texture_compression_rgtc -330 EXT_texture_compression_s3tc -331 EXT_texture_cube_map -332 EXT_texture_edge_clamp -333 EXT_texture_env -334 EXT_texture_env_add -335 EXT_texture_env_combine -336 EXT_texture_env_dot3 -337 EXT_texture_filter_anisotropic -338 EXT_texture_filter_minmax -339 EXT_texture_integer -340 EXT_texture_lod_bias -341 EXT_texture_mirror_clamp -342 EXT_texture_object -343 EXT_texture_perturb_normal -344 EXT_texture_rectangle -345 EXT_texture_sRGB -346 EXT_texture_sRGB_decode -347 EXT_texture_shared_exponent -348 EXT_texture_snorm -349 EXT_texture_swizzle -350 EXT_timer_query -351 EXT_transform_feedback -352 EXT_vertex_array -353 EXT_vertex_array_bgra -354 EXT_vertex_attrib_64bit -355 EXT_vertex_shader -356 EXT_vertex_weighting -357 EXT_x11_sync_object +251 EGL_NV_robustness_video_memory_purge
    -358 GREMEDY_frame_terminator -359 GREMEDY_string_marker +252 EXT_422_pixels +253 EXT_Cg_shader +254 EXT_abgr +255 EXT_bgra +256 EXT_bindable_uniform +257 EXT_blend_color +258 EXT_blend_equation_separate +259 EXT_blend_func_separate +260 EXT_blend_logic_op +261 EXT_blend_minmax +262 EXT_blend_subtract +263 EXT_clip_volume_hint +264 EXT_cmyka +265 EXT_color_subtable +266 EXT_compiled_vertex_array +267 EXT_convolution +268 EXT_coordinate_frame +269 EXT_copy_texture +270 EXT_cull_vertex +271 EXT_debug_label +272 EXT_debug_marker +273 EXT_depth_bounds_test +274 EXT_direct_state_access +275 EXT_draw_buffers2 +276 EXT_draw_instanced +277 EXT_draw_range_elements +278 EXT_fog_coord +279 EXT_fragment_lighting +280 EXT_framebuffer_blit +281 EXT_framebuffer_multisample +282 EXT_framebuffer_multisample_blit_scaled +283 EXT_framebuffer_object +284 EXT_framebuffer_sRGB +285 EXT_geometry_shader4 +286 EXT_gpu_program_parameters +287 EXT_gpu_shader4 +288 EXT_histogram +289 EXT_index_array_formats +290 EXT_index_func +291 EXT_index_material +292 EXT_index_texture +293 EXT_light_texture +294 EXT_misc_attribute +295 EXT_multi_draw_arrays +296 EXT_multisample +297 EXT_packed_depth_stencil +298 EXT_packed_float +299 EXT_packed_pixels +300 EXT_paletted_texture +301 EXT_pixel_buffer_object +302 EXT_pixel_transform +303 EXT_pixel_transform_color_table +304 EXT_point_parameters +305 EXT_polygon_offset +306 EXT_polygon_offset_clamp +307 EXT_post_depth_coverage +308 EXT_provoking_vertex +309 EXT_raster_multisample +310 EXT_rescale_normal +311 EXT_scene_marker +312 EXT_secondary_color +313 EXT_separate_shader_objects +314 EXT_separate_specular_color +315 EXT_shader_image_load_formatted +316 EXT_shader_image_load_store +317 EXT_shader_integer_mix +318 EXT_shadow_funcs +319 EXT_shared_texture_palette +320 EXT_sparse_texture2 +321 EXT_stencil_clear_tag +322 EXT_stencil_two_side +323 EXT_stencil_wrap +324 EXT_subtexture +325 EXT_texture +326 EXT_texture3D +327 EXT_texture_array +328 EXT_texture_buffer_object +329 EXT_texture_compression_dxt1 +330 EXT_texture_compression_latc +331 EXT_texture_compression_rgtc +332 EXT_texture_compression_s3tc +333 EXT_texture_cube_map +334 EXT_texture_edge_clamp +335 EXT_texture_env +336 EXT_texture_env_add +337 EXT_texture_env_combine +338 EXT_texture_env_dot3 +339 EXT_texture_filter_anisotropic +340 EXT_texture_filter_minmax +341 EXT_texture_integer +342 EXT_texture_lod_bias +343 EXT_texture_mirror_clamp +344 EXT_texture_object +345 EXT_texture_perturb_normal +346 EXT_texture_rectangle +347 EXT_texture_sRGB +348 EXT_texture_sRGB_decode +349 EXT_texture_shared_exponent +350 EXT_texture_snorm +351 EXT_texture_swizzle +352 EXT_timer_query +353 EXT_transform_feedback +354 EXT_vertex_array +355 EXT_vertex_array_bgra +356 EXT_vertex_attrib_64bit +357 EXT_vertex_shader +358 EXT_vertex_weighting +359 EXT_window_rectangles +360 EXT_x11_sync_object
    -360 HP_convolution_border_modes -361 HP_image_transform -362 HP_occlusion_test -363 HP_texture_lighting +361 GREMEDY_frame_terminator +362 GREMEDY_string_marker
    -364 IBM_cull_vertex -365 IBM_multimode_draw_arrays -366 IBM_rasterpos_clip -367 IBM_static_data -368 IBM_texture_mirrored_repeat -369 IBM_vertex_array_lists +363 HP_convolution_border_modes +364 HP_image_transform +365 HP_occlusion_test +366 HP_texture_lighting
    -370 INGR_color_clamp -371 INGR_interlace_read +367 IBM_cull_vertex +368 IBM_multimode_draw_arrays +369 IBM_rasterpos_clip +370 IBM_static_data +371 IBM_texture_mirrored_repeat +372 IBM_vertex_array_lists
    -372 INTEL_fragment_shader_ordering -373 INTEL_framebuffer_CMAA -374 INTEL_map_texture -375 INTEL_parallel_arrays -376 INTEL_performance_query -377 INTEL_texture_scissor +373 INGR_color_clamp +374 INGR_interlace_read
    -378 KHR_blend_equation_advanced -379 KHR_blend_equation_advanced_coherent -380 KHR_context_flush_control -381 KHR_debug -382 KHR_no_error -383 KHR_robust_buffer_access_behavior -384 KHR_robustness -385 KHR_texture_compression_astc_hdr -386 KHR_texture_compression_astc_ldr -387 KHR_texture_compression_astc_sliced_3d +375 INTEL_fragment_shader_ordering +376 INTEL_framebuffer_CMAA +377 INTEL_map_texture +378 INTEL_parallel_arrays +379 INTEL_performance_query +380 INTEL_texture_scissor
    -388 KTX_buffer_region +381 KHR_blend_equation_advanced +382 KHR_blend_equation_advanced_coherent +383 KHR_context_flush_control +384 KHR_debug +385 KHR_no_error +386 KHR_robust_buffer_access_behavior +387 KHR_robustness +388 KHR_texture_compression_astc_hdr +389 KHR_texture_compression_astc_ldr +390 KHR_texture_compression_astc_sliced_3d
    -389 MESAX_texture_stack +391 KTX_buffer_region
    -390 MESA_pack_invert -391 MESA_resize_buffers -392 MESA_window_pos -393 MESA_ycbcr_texture +392 MESAX_texture_stack
    -394 NVX_conditional_render -395 NVX_gpu_memory_info -396 NVX_linked_gpu_multicast +393 MESA_pack_invert +394 MESA_resize_buffers +395 MESA_window_pos +396 MESA_ycbcr_texture
    -397 NV_bindless_multi_draw_indirect -398 NV_bindless_multi_draw_indirect_count -399 NV_bindless_texture -400 NV_blend_equation_advanced -401 NV_blend_equation_advanced_coherent -402 NV_blend_square -403 NV_command_list -404 NV_compute_program5 -405 NV_conditional_render -406 NV_conservative_raster -407 NV_conservative_raster_dilate -408 NV_copy_depth_to_color -409 NV_copy_image -410 NV_deep_texture3D -411 NV_depth_buffer_float -412 NV_depth_clamp -413 NV_depth_range_unclamped -414 NV_draw_texture -415 NV_draw_vulkan_image -416 NV_evaluators -417 NV_explicit_multisample -418 NV_fence -419 NV_fill_rectangle -420 NV_float_buffer -421 NV_fog_distance -422 NV_fragment_coverage_to_color -423 NV_fragment_program -424 NV_fragment_program2 -425 NV_fragment_program4 -426 NV_fragment_program_option -427 NV_fragment_shader_interlock -428 NV_framebuffer_mixed_samples -429 NV_framebuffer_multisample_coverage -430 NV_geometry_program4 -431 NV_geometry_shader4 -432 NV_geometry_shader_passthrough -433 NV_gpu_program4 -434 NV_gpu_program5 -435 NV_gpu_program5_mem_extended -436 NV_gpu_program_fp64 -437 NV_gpu_shader5 -438 NV_half_float -439 NV_internalformat_sample_query -440 NV_light_max_exponent -441 NV_multisample_coverage -442 NV_multisample_filter_hint -443 NV_occlusion_query -444 NV_packed_depth_stencil -445 NV_parameter_buffer_object -446 NV_parameter_buffer_object2 -447 NV_path_rendering -448 NV_path_rendering_shared_edge -449 NV_pixel_data_range -450 NV_point_sprite -451 NV_present_video -452 NV_primitive_restart -453 NV_register_combiners -454 NV_register_combiners2 -455 NV_sample_locations -456 NV_sample_mask_override_coverage -457 NV_shader_atomic_counters -458 NV_shader_atomic_float -459 NV_shader_atomic_fp16_vector -460 NV_shader_atomic_int64 -461 NV_shader_buffer_load -462 NV_shader_storage_buffer_object -463 NV_shader_thread_group -464 NV_shader_thread_shuffle -465 NV_tessellation_program5 -466 NV_texgen_emboss -467 NV_texgen_reflection -468 NV_texture_barrier -469 NV_texture_compression_vtc -470 NV_texture_env_combine4 -471 NV_texture_expand_normal -472 NV_texture_multisample -473 NV_texture_rectangle -474 NV_texture_shader -475 NV_texture_shader2 -476 NV_texture_shader3 -477 NV_transform_feedback -478 NV_transform_feedback2 -479 NV_uniform_buffer_unified_memory -480 NV_vdpau_interop -481 NV_vertex_array_range -482 NV_vertex_array_range2 -483 NV_vertex_attrib_integer_64bit -484 NV_vertex_buffer_unified_memory -485 NV_vertex_program -486 NV_vertex_program1_1 -487 NV_vertex_program2 -488 NV_vertex_program2_option -489 NV_vertex_program3 -490 NV_vertex_program4 -491 NV_video_capture -492 NV_viewport_array2 +397 NVX_conditional_render +398 NVX_gpu_memory_info +399 NVX_linked_gpu_multicast
    -493 OES_byte_coordinates -494 OES_compressed_paletted_texture -495 OES_read_format -496 OES_single_precision +400 NV_bindless_multi_draw_indirect +401 NV_bindless_multi_draw_indirect_count +402 NV_bindless_texture +403 NV_blend_equation_advanced +404 NV_blend_equation_advanced_coherent +405 NV_blend_square +406 NV_clip_space_w_scaling +407 NV_command_list +408 NV_compute_program5 +409 NV_conditional_render +410 NV_conservative_raster +411 NV_conservative_raster_dilate +412 NV_conservative_raster_pre_snap_triangles +413 NV_copy_depth_to_color +414 NV_copy_image +415 NV_deep_texture3D +416 NV_depth_buffer_float +417 NV_depth_clamp +418 NV_depth_range_unclamped +419 NV_draw_texture +420 NV_draw_vulkan_image +421 NV_evaluators +422 NV_explicit_multisample +423 NV_fence +424 NV_fill_rectangle +425 NV_float_buffer +426 NV_fog_distance +427 NV_fragment_coverage_to_color +428 NV_fragment_program +429 NV_fragment_program2 +430 NV_fragment_program4 +431 NV_fragment_program_option +432 NV_fragment_shader_interlock +433 NV_framebuffer_mixed_samples +434 NV_framebuffer_multisample_coverage +435 NV_geometry_program4 +436 NV_geometry_shader4 +437 NV_geometry_shader_passthrough +438 NV_gpu_program4 +439 NV_gpu_program5 +440 NV_gpu_program5_mem_extended +441 NV_gpu_program_fp64 +442 NV_gpu_shader5 +443 NV_half_float +444 NV_internalformat_sample_query +445 NV_light_max_exponent +446 NV_multisample_coverage +447 NV_multisample_filter_hint +448 NV_occlusion_query +449 NV_packed_depth_stencil +450 NV_parameter_buffer_object +451 NV_parameter_buffer_object2 +452 NV_path_rendering +453 NV_path_rendering_shared_edge +454 NV_pixel_data_range +455 NV_point_sprite +456 NV_present_video +457 NV_primitive_restart +458 NV_register_combiners +459 NV_register_combiners2 +460 NV_robustness_video_memory_purge +461 NV_sample_locations +462 NV_sample_mask_override_coverage +463 NV_shader_atomic_counters +464 NV_shader_atomic_float +465 NV_shader_atomic_float64 +466 NV_shader_atomic_fp16_vector +467 NV_shader_atomic_int64 +468 NV_shader_buffer_load +469 NV_shader_storage_buffer_object +470 NV_shader_thread_group +471 NV_shader_thread_shuffle +472 NV_stereo_view_rendering +473 NV_tessellation_program5 +474 NV_texgen_emboss +475 NV_texgen_reflection +476 NV_texture_barrier +477 NV_texture_compression_vtc +478 NV_texture_env_combine4 +479 NV_texture_expand_normal +480 NV_texture_multisample +481 NV_texture_rectangle +482 NV_texture_shader +483 NV_texture_shader2 +484 NV_texture_shader3 +485 NV_transform_feedback +486 NV_transform_feedback2 +487 NV_uniform_buffer_unified_memory +488 NV_vdpau_interop +489 NV_vertex_array_range +490 NV_vertex_array_range2 +491 NV_vertex_attrib_integer_64bit +492 NV_vertex_buffer_unified_memory +493 NV_vertex_program +494 NV_vertex_program1_1 +495 NV_vertex_program2 +496 NV_vertex_program2_option +497 NV_vertex_program3 +498 NV_vertex_program4 +499 NV_video_capture +500 NV_viewport_array2 +501 NV_viewport_swizzle
    -497 OML_interlace -498 OML_resample -499 OML_subsample +502 OES_byte_coordinates +503 OES_compressed_paletted_texture +504 OES_read_format +505 OES_single_precision
    -500 OVR_multiview -501 OVR_multiview2 +506 OML_interlace +507 OML_resample +508 OML_subsample
    -502 PGI_misc_hints -503 PGI_vertex_hints +509 OVR_multiview +510 OVR_multiview2
    -504 REGAL_ES1_0_compatibility -505 REGAL_ES1_1_compatibility -506 REGAL_enable -507 REGAL_error_string -508 REGAL_extension_query -509 REGAL_log -510 REGAL_proc_address +511 PGI_misc_hints +512 PGI_vertex_hints
    -511 REND_screen_coordinates +513 REGAL_ES1_0_compatibility +514 REGAL_ES1_1_compatibility +515 REGAL_enable +516 REGAL_error_string +517 REGAL_extension_query +518 REGAL_log +519 REGAL_proc_address
    -512 S3_s3tc +520 REND_screen_coordinates
    -513 SGIS_color_range -514 SGIS_detail_texture -515 SGIS_fog_function -516 SGIS_generate_mipmap -517 SGIS_multisample -518 SGIS_pixel_texture -519 SGIS_point_line_texgen -520 SGIS_sharpen_texture -521 SGIS_texture4D -522 SGIS_texture_border_clamp -523 SGIS_texture_edge_clamp -524 SGIS_texture_filter4 -525 SGIS_texture_lod -526 SGIS_texture_select +521 S3_s3tc
    -527 SGIX_async -528 SGIX_async_histogram -529 SGIX_async_pixel -530 SGIX_blend_alpha_minmax -531 SGIX_clipmap -532 SGIX_convolution_accuracy -533 SGIX_depth_texture -534 SGIX_flush_raster -535 SGIX_fog_offset -536 SGIX_fog_texture -537 SGIX_fragment_specular_lighting -538 SGIX_framezoom -539 SGIX_interlace -540 SGIX_ir_instrument1 -541 SGIX_list_priority -542 SGIX_pixel_texture -543 SGIX_pixel_texture_bits -544 SGIX_reference_plane -545 SGIX_resample -546 SGIX_shadow -547 SGIX_shadow_ambient -548 SGIX_sprite -549 SGIX_tag_sample_buffer -550 SGIX_texture_add_env -551 SGIX_texture_coordinate_clamp -552 SGIX_texture_lod_bias -553 SGIX_texture_multi_buffer -554 SGIX_texture_range -555 SGIX_texture_scale_bias -556 SGIX_vertex_preclip -557 SGIX_vertex_preclip_hint -558 SGIX_ycrcb +522 SGIS_color_range +523 SGIS_detail_texture +524 SGIS_fog_function +525 SGIS_generate_mipmap +526 SGIS_multisample +527 SGIS_pixel_texture +528 SGIS_point_line_texgen +529 SGIS_sharpen_texture +530 SGIS_texture4D +531 SGIS_texture_border_clamp +532 SGIS_texture_edge_clamp +533 SGIS_texture_filter4 +534 SGIS_texture_lod +535 SGIS_texture_select
    -559 SGI_color_matrix -560 SGI_color_table -561 SGI_texture_color_table +536 SGIX_async +537 SGIX_async_histogram +538 SGIX_async_pixel +539 SGIX_blend_alpha_minmax +540 SGIX_clipmap +541 SGIX_convolution_accuracy +542 SGIX_depth_texture +543 SGIX_flush_raster +544 SGIX_fog_offset +545 SGIX_fog_texture +546 SGIX_fragment_specular_lighting +547 SGIX_framezoom +548 SGIX_interlace +549 SGIX_ir_instrument1 +550 SGIX_list_priority +551 SGIX_pixel_texture +552 SGIX_pixel_texture_bits +553 SGIX_reference_plane +554 SGIX_resample +555 SGIX_shadow +556 SGIX_shadow_ambient +557 SGIX_sprite +558 SGIX_tag_sample_buffer +559 SGIX_texture_add_env +560 SGIX_texture_coordinate_clamp +561 SGIX_texture_lod_bias +562 SGIX_texture_multi_buffer +563 SGIX_texture_range +564 SGIX_texture_scale_bias +565 SGIX_vertex_preclip +566 SGIX_vertex_preclip_hint +567 SGIX_ycrcb
    -562 SUNX_constant_data +568 SGI_color_matrix +569 SGI_color_table +570 SGI_texture_color_table
    -563 SUN_convolution_border_modes -564 SUN_global_alpha -565 SUN_mesh_array -566 SUN_read_video_pixels -567 SUN_slice_accum -568 SUN_triangle_list -569 SUN_vertex +571 SUNX_constant_data
    -570 WIN_phong_shading -571 WIN_specular_fog -572 WIN_swap_hint +572 SUN_convolution_border_modes +573 SUN_global_alpha +574 SUN_mesh_array +575 SUN_read_video_pixels +576 SUN_slice_accum +577 SUN_triangle_list +578 SUN_vertex +
    +579 WIN_phong_shading +580 WIN_specular_fog +581 WIN_swap_hint diff --git a/doc/glxew.html b/doc/glxew.html index 08fa857..d106a93 100644 --- a/doc/glxew.html +++ b/doc/glxew.html @@ -124,58 +124,60 @@ THE POSSIBILITY OF SUCH DAMAGE. 19 EXT_fbconfig_packed_float 20 EXT_framebuffer_sRGB 21 EXT_import_context -22 EXT_scene_marker -23 EXT_stereo_tree -24 EXT_swap_control -25 EXT_swap_control_tear -26 EXT_texture_from_pixmap -27 EXT_visual_info -28 EXT_visual_rating +22 EXT_libglvnd +23 EXT_scene_marker +24 EXT_stereo_tree +25 EXT_swap_control +26 EXT_swap_control_tear +27 EXT_texture_from_pixmap +28 EXT_visual_info +29 EXT_visual_rating
    -29 INTEL_swap_event +30 INTEL_swap_event
    -30 MESA_agp_offset -31 MESA_copy_sub_buffer -32 MESA_pixmap_colormap -33 MESA_query_renderer -34 MESA_release_buffers -35 MESA_set_3dfx_mode -36 MESA_swap_control +31 MESA_agp_offset +32 MESA_copy_sub_buffer +33 MESA_pixmap_colormap +34 MESA_query_renderer +35 MESA_release_buffers +36 MESA_set_3dfx_mode +37 MESA_swap_control
    -37 NV_copy_buffer -38 NV_copy_image -39 NV_delay_before_swap -40 NV_float_buffer -41 NV_multisample_coverage -42 NV_present_video -43 NV_swap_group -44 NV_vertex_array_range -45 NV_video_capture -46 NV_video_out +38 NV_copy_buffer +39 NV_copy_image +40 NV_delay_before_swap +41 NV_float_buffer +42 NV_multisample_coverage +43 NV_present_video +44 NV_robustness_video_memory_purge +45 NV_swap_group +46 NV_vertex_array_range +47 NV_video_capture +48 NV_video_out
    -47 OML_swap_method -48 OML_sync_control +49 OML_swap_method +50 OML_sync_control
    -49 SGIS_blended_overlay -50 SGIS_color_range -51 SGIS_multisample -52 SGIS_shared_multisample +51 SGIS_blended_overlay +52 SGIS_color_range +53 SGIS_multisample +54 SGIS_shared_multisample
    -53 SGIX_fbconfig -54 SGIX_hyperpipe -55 SGIX_pbuffer -56 SGIX_swap_barrier -57 SGIX_swap_group -58 SGIX_video_resize -59 SGIX_visual_select_group +55 SGIX_fbconfig +56 SGIX_hyperpipe +57 SGIX_pbuffer +58 SGIX_swap_barrier +59 SGIX_swap_group +60 SGIX_video_resize +61 SGIX_visual_select_group
    -60 SGI_cushion -61 SGI_make_current_read -62 SGI_swap_control -63 SGI_video_sync +62 SGI_cushion +63 SGI_make_current_read +64 SGI_swap_control +65 SGI_video_sync
    -64 SUN_get_transparent_index -65 SUN_video_resize +66 SUN_get_transparent_index +67 SUN_video_resize From 54ce3fb039ba95815df047efa3887b41de663f10 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Fri, 17 Jun 2016 23:37:13 +1000 Subject: [PATCH 80/81] EGLnsecsANDROID typedef for eglew.h --- auto/src/eglew_head.h | 1 + 1 file changed, 1 insertion(+) diff --git a/auto/src/eglew_head.h b/auto/src/eglew_head.h index 58488ae..df2f1d9 100644 --- a/auto/src/eglew_head.h +++ b/auto/src/eglew_head.h @@ -69,6 +69,7 @@ typedef void *EGLOutputPortEXT; typedef void *EGLSyncNV; typedef khronos_utime_nanoseconds_t EGLTimeNV; typedef khronos_utime_nanoseconds_t EGLuint64NV; +typedef khronos_stime_nanoseconds_t EGLnsecsANDROID; struct EGLClientPixmapHI; From 3c83effd40e20837bf1ad00e57ed3e5560aa5774 Mon Sep 17 00:00:00 2001 From: Nigel Stewart Date: Fri, 17 Jun 2016 23:54:05 +1000 Subject: [PATCH 81/81] Tolerate lowercase hex digits in enumerants, in addition to 0-9, A-F --- auto/bin/parse_spec.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auto/bin/parse_spec.pl b/auto/bin/parse_spec.pl index 5142230..2f7b6eb 100755 --- a/auto/bin/parse_spec.pl +++ b/auto/bin/parse_spec.pl @@ -149,7 +149,7 @@ my %regex = ( prefix => qr/^(?:[aw]?gl|glX)/, # gl | agl | wgl | glX tprefix => qr/^(?:[AW]?GL|GLX)_/, # GL_ | AGL_ | WGL_ | GLX_ section => compile_regex('^(', join('|', @sections), ')$'), # sections in spec - token => qr/^([A-Z0-9][A-Z0-9_x]*):?\s+((?:0x)?[0-9A-F]+)([^\?]*)$/, # define tokens + token => qr/^([A-Z0-9][A-Z0-9_x]*):?\s+((?:0x)?[0-9A-Fa-f]+)(|\s[^\?]*)$/, # define tokens types => compile_regex('\b(', join('|', keys %typemap), ')\b'), # var types voidtype => compile_regex('\b(', keys %voidtypemap, ')\b '), # void type );