diff --git a/auto/bin/make.pl b/auto/bin/make.pl
index 1bd5d40..fe8f3b0 100755
--- a/auto/bin/make.pl
+++ b/auto/bin/make.pl
@@ -12,6 +12,7 @@ my %regex = (
function => qr/^(.+) ([a-z][a-z0-9_]*) \((.+)\)$/i,
token => qr/^([A-Z][A-Z0-9_x]*)\s+((?:0x)?[0-9A-Fa-f]+|[A-Z][A-Z0-9_]*)$/,
type => qr/^typedef\s+(.+)$/,
+ loadexts => qr/^LOAD (.*)$/,
exact => qr/.*;$/,
);
@@ -71,6 +72,7 @@ sub parse_ext($)
my %tokens = ();
my @types = ();
my @exacts = ();
+ my @loadexts = ();
my $extname = ""; # Full extension name GL_FOO_extension
my $exturl = ""; # Info URL
my $extstring = ""; # Relevant extension string
@@ -104,7 +106,11 @@ sub parse_ext($)
chomp;
if (s/^\s+//)
{
- if (/$regex{exact}/)
+ if (/$regex{loadexts}/)
+ {
+ push @loadexts, $1;
+ }
+ elsif (/$regex{exact}/)
{
push @exacts, $_;
}
@@ -132,7 +138,7 @@ sub parse_ext($)
close EXT;
- return ($extname, $exturl, $extstring, \@types, \%tokens, \%functions, \@exacts);
+ return ($extname, $exturl, $extstring, \@types, \%tokens, \%functions, \@exacts, \@loadexts);
}
sub output_tokens($$)
@@ -207,3 +213,14 @@ sub output_exacts($$)
}
}
+sub output_loadexts($$)
+{
+ 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..048d715 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, $types, $tokens, $functions, $exacts, $loadexts) = 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 e484194..c153f99 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, $types, $tokens, $functions, $exacts, $loadexts) = 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_header.pl b/auto/bin/make_header.pl
index 934ef77..166b380 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, $types, $tokens, $functions, $exacts, $loadexts) = 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..f000e66 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, $types, $tokens, $functions, $exacts, $loadexts) = 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_info.pl b/auto/bin/make_info.pl
index 5d0c7f6..80cbad2 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, $types, $tokens, $functions, $exacts, $loadexts) = 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..587ef3b 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, $types, $tokens, $functions, $exacts, $loadexts) = 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 70abc98..53615a9 100755
--- a/auto/bin/make_init.pl
+++ b/auto/bin/make_init.pl
@@ -21,6 +21,15 @@ sub make_pfn_def_init($%)
return " r = ((" . $_[0] . " = (PFN" . (uc $_[0]) . "PROC)glewGetProcAddress((const GLubyte*)\"" . $_[0] . "\")) == NULL) || r;";
}
+sub make_loadexts_forward($%)
+{
+ return "static GLboolean _glewInit_" . $_[0] . "(GLEW_CONTEXT_ARG_DEF_INIT);";
+}
+sub make_loadexts_call($%)
+{
+ return " r = _glewInit_" . $_[0] . "(GLEW_CONTEXT_ARG_VAR_INIT) || r;";
+}
+
#-------------------------------------------------------------------------------
my @extlist = ();
@@ -34,7 +43,7 @@ if (@ARGV)
foreach my $ext (sort @extlist)
{
- my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts) =
+ my ($extname, $exturl, $extstring, $types, $tokens, $functions, $exacts, $loadexts) =
parse_ext($ext);
#make_separator($extname);
@@ -42,11 +51,14 @@ if (@ARGV)
my $extvar = $extname;
my $extvardef = $extname;
$extvar =~ s/GL(X*)_/GL$1EW_/;
- if (keys %$functions)
+ if (keys %$functions or keys @$loadexts)
{
- print "static GLboolean _glewInit_$extname (" . $type .
+ output_loadexts($loadexts, \&make_loadexts_forward);
+
+ print "static GLboolean _glewInit_$extname (" . $type .
"EW_CONTEXT_ARG_DEF_INIT)\n{\n GLboolean r = GL_FALSE;\n";
output_decls($functions, \&make_pfn_def_init);
+ output_loadexts($loadexts, \&make_loadexts_call);
print "\n return r;\n}\n\n";
}
#print "\nGLboolean " . prefix_varname($extvar) . " = GL_FALSE;\n\n";
diff --git a/auto/bin/make_list.pl b/auto/bin/make_list.pl
index b76b434..802f506 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, $types, $tokens, $functions, $exacts, $loadexts) = parse_ext($ext);
my $extvar = $extname;
$extvar =~ s/GL(X*)_/GL$1EW_/;
@@ -49,7 +49,7 @@ if (@ARGV)
print " " . $extvar . " = _glewHashListExists(ext_hashlist, (const GLubyte *)\"$extstring\");\n";
}
- if (keys %$functions)
+ if (keys %$functions or keys @$loadexts)
{
if ($extname =~ /WGL_.*/)
{
diff --git a/auto/bin/make_str.pl b/auto/bin/make_str.pl
index ac4a366..1b63fa1 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, $types, $tokens, $functions, $exacts, $loadexts) = 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..56777dc 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, $types, $tokens, $functions, $exacts, $loadexts) = 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..0f9da0a 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, $types, $tokens, $functions, $exacts, $loadexts) = parse_ext($ext);
my $extvar = $extname;
$extvar =~ s/GL(X*)_/GL$1EW_/;
print $export . " GLboolean " . prefix_varname($extvar) . ";\n";
diff --git a/auto/core/gl/GL_VERSION_3_0 b/auto/core/gl/GL_VERSION_3_0
index c87cdab..4b58c49 100644
--- a/auto/core/gl/GL_VERSION_3_0
+++ b/auto/core/gl/GL_VERSION_3_0
@@ -161,3 +161,7 @@ https://www.opengl.org/registry/doc/glspec30.20080923.pdf
void glClearBufferfv (GLenum buffer, GLint drawBuffer, const GLfloat* value)
void glClearBufferfi (GLenum buffer, GLint drawBuffer, GLfloat depth, GLint stencil)
const GLubyte* glGetStringi (GLenum name, GLuint index)
+ LOAD GL_ARB_framebuffer_object
+ LOAD GL_ARB_map_buffer_range
+ LOAD GL_ARB_uniform_buffer_object
+ LOAD GL_ARB_vertex_array_object
diff --git a/auto/core/gl/GL_VERSION_3_1 b/auto/core/gl/GL_VERSION_3_1
index a829a77..dba0c6f 100644
--- a/auto/core/gl/GL_VERSION_3_1
+++ b/auto/core/gl/GL_VERSION_3_1
@@ -39,3 +39,4 @@ https://www.opengl.org/registry/doc/glspec31.20090528.pdf
void glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount)
void glTexBuffer (GLenum target, GLenum internalFormat, GLuint buffer)
void glPrimitiveRestartIndex (GLuint buffer)
+ LOAD GL_ARB_copy_buffer
diff --git a/auto/core/gl/GL_VERSION_3_2 b/auto/core/gl/GL_VERSION_3_2
index 85cea08..7603eab 100644
--- a/auto/core/gl/GL_VERSION_3_2
+++ b/auto/core/gl/GL_VERSION_3_2
@@ -26,3 +26,7 @@ https://www.opengl.org/registry/doc/glspec32.compatibility.20091207.pdf
void glGetInteger64i_v (GLenum pname, GLuint index, GLint64 * data)
void glGetBufferParameteri64v (GLenum target, GLenum value, GLint64 * data)
void glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level)
+ LOAD GL_ARB_draw_elements_base_vertex
+ LOAD GL_ARB_provoking_vertex
+ LOAD GL_ARB_sync
+ LOAD GL_ARB_texture_multisample