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