From b1a9967d56a2a1c5c580986a30eb2e10373cf00f Mon Sep 17 00:00:00 2001 From: groogy Date: Tue, 2 Nov 2010 10:10:38 +0000 Subject: [PATCH] Cleaned folder git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/branches/sfml2@1588 4e206d99-4929-0410-ac5d-dfc041789085 --- ruby/LICENSE.txt | 41 - ruby/README-EN.txt | 28 - ruby/README-FR.txt | 28 - ruby/Rakefile | 167 - ruby/RubyOpenGL/common/common.h | 333 - ruby/RubyOpenGL/common/gl-enums.h | 10387 ---------------------- ruby/RubyOpenGL/gl/extconf.rb | 20 - ruby/RubyOpenGL/gl/gl-1.0-1.1.c | 5197 ----------- ruby/RubyOpenGL/gl/gl-1.2.c | 1061 --- ruby/RubyOpenGL/gl/gl-1.3.c | 725 -- ruby/RubyOpenGL/gl/gl-1.4.c | 647 -- ruby/RubyOpenGL/gl/gl-1.5.c | 362 - ruby/RubyOpenGL/gl/gl-2.0.c | 1632 ---- ruby/RubyOpenGL/gl/gl-2.1.c | 154 - ruby/RubyOpenGL/gl/gl-enums.c | 2904 ------ ruby/RubyOpenGL/gl/gl.c | 87 - ruby/RubyOpenGL/glu/extconf.rb | 20 - ruby/RubyOpenGL/glu/glu.c | 1637 ---- ruby/RubySFML/RubySFML.cpp | 213 - ruby/RubySFML/RubySFML.h | 88 - ruby/RubySFML/RubySFML.rb | 83 - ruby/RubySFML/extconf-linux.rb | 26 - ruby/RubySFML/extconf-win.rb | 30 - ruby/RubySFML/ruby_helper.h | 846 -- ruby/RubySFML/sfClock.cpp | 86 - ruby/RubySFML/sfColor.cpp | 120 - ruby/RubySFML/sfDrawable.cpp | 285 - ruby/RubySFML/sfEvent.cpp | 270 - ruby/RubySFML/sfFloatRect.cpp | 155 - ruby/RubySFML/sfImage.cpp | 238 - ruby/RubySFML/sfInput.cpp | 105 - ruby/RubySFML/sfIntRect.cpp | 157 - ruby/RubySFML/sfMusic.cpp | 153 - ruby/RubySFML/sfPostFX.cpp | 147 - ruby/RubySFML/sfRenderWindow.cpp | 237 - ruby/RubySFML/sfSound.cpp | 219 - ruby/RubySFML/sfSoundBuffer.cpp | 137 - ruby/RubySFML/sfSoundBufferRecorder.cpp | 101 - ruby/RubySFML/sfSprite.cpp | 319 - ruby/RubySFML/sfString.cpp | 190 - ruby/RubySFML/sfVideoMode.cpp | 114 - ruby/RubySFML/sfView.cpp | 93 - ruby/RubySFML/sfWindow.cpp | 181 - ruby/doc/Reference-en.html | 431 - ruby/doc/Reference-fr.html | 430 - ruby/gzip.exe | Bin 49152 -> 0 bytes ruby/rubygems-0.9.4.zip | Bin 281601 -> 0 bytes ruby/tar.exe | Bin 114688 -> 0 bytes ruby/test/SideScroller.bat | 1 - ruby/test/SideScroller.rb | 240 - ruby/test/Tetris.bat | 1 - ruby/test/Tutorial.bat | 1 - ruby/test/Tutorial.rb | 102 - ruby/test/fps.bat | 1 - ruby/test/fps.rb | 313 - ruby/test/media/Beep.wav | Bin 4338 -> 0 bytes ruby/test/media/CptnRuby.png | Bin 14436 -> 0 bytes ruby/test/media/Gem.png | Bin 7713 -> 0 bytes ruby/test/media/LICENSE | 29 - ruby/test/media/Level 1.txt | 10 - ruby/test/media/Level 2.txt | 26 - ruby/test/media/Level 3.txt | 25 - ruby/test/media/Space.png | Bin 13307 -> 0 bytes ruby/test/media/Star.png | Bin 4354 -> 0 bytes ruby/test/media/Starfighter.png | Bin 2481 -> 0 bytes ruby/test/media/Tileset.png | Bin 8683 -> 0 bytes ruby/test/media/cannon.wav | Bin 4072 -> 0 bytes ruby/test/media/cursor.png | Bin 214 -> 0 bytes ruby/test/test.bat | 1 - ruby/test/test.rb | 99 - ruby/test/tetris.rb | 196 - ruby/unzip.exe | Bin 102400 -> 0 bytes ruby/zip.exe | Bin 68096 -> 0 bytes ruby/zlib/zconf.h | 332 - ruby/zlib/zlib.h | 1357 --- ruby/zlib/zlib.lib | Bin 104750 -> 0 bytes ruby/zlib/zlib1.dll | Bin 75264 -> 0 bytes ruby/zlib/zlibd.lib | Bin 272438 -> 0 bytes 78 files changed, 33618 deletions(-) delete mode 100644 ruby/LICENSE.txt delete mode 100644 ruby/README-EN.txt delete mode 100644 ruby/README-FR.txt delete mode 100644 ruby/Rakefile delete mode 100644 ruby/RubyOpenGL/common/common.h delete mode 100644 ruby/RubyOpenGL/common/gl-enums.h delete mode 100644 ruby/RubyOpenGL/gl/extconf.rb delete mode 100644 ruby/RubyOpenGL/gl/gl-1.0-1.1.c delete mode 100644 ruby/RubyOpenGL/gl/gl-1.2.c delete mode 100644 ruby/RubyOpenGL/gl/gl-1.3.c delete mode 100644 ruby/RubyOpenGL/gl/gl-1.4.c delete mode 100644 ruby/RubyOpenGL/gl/gl-1.5.c delete mode 100644 ruby/RubyOpenGL/gl/gl-2.0.c delete mode 100644 ruby/RubyOpenGL/gl/gl-2.1.c delete mode 100644 ruby/RubyOpenGL/gl/gl-enums.c delete mode 100644 ruby/RubyOpenGL/gl/gl.c delete mode 100644 ruby/RubyOpenGL/glu/extconf.rb delete mode 100644 ruby/RubyOpenGL/glu/glu.c delete mode 100644 ruby/RubySFML/RubySFML.cpp delete mode 100644 ruby/RubySFML/RubySFML.h delete mode 100644 ruby/RubySFML/RubySFML.rb delete mode 100644 ruby/RubySFML/extconf-linux.rb delete mode 100644 ruby/RubySFML/extconf-win.rb delete mode 100644 ruby/RubySFML/ruby_helper.h delete mode 100644 ruby/RubySFML/sfClock.cpp delete mode 100644 ruby/RubySFML/sfColor.cpp delete mode 100644 ruby/RubySFML/sfDrawable.cpp delete mode 100644 ruby/RubySFML/sfEvent.cpp delete mode 100644 ruby/RubySFML/sfFloatRect.cpp delete mode 100644 ruby/RubySFML/sfImage.cpp delete mode 100644 ruby/RubySFML/sfInput.cpp delete mode 100644 ruby/RubySFML/sfIntRect.cpp delete mode 100644 ruby/RubySFML/sfMusic.cpp delete mode 100644 ruby/RubySFML/sfPostFX.cpp delete mode 100644 ruby/RubySFML/sfRenderWindow.cpp delete mode 100644 ruby/RubySFML/sfSound.cpp delete mode 100644 ruby/RubySFML/sfSoundBuffer.cpp delete mode 100644 ruby/RubySFML/sfSoundBufferRecorder.cpp delete mode 100644 ruby/RubySFML/sfSprite.cpp delete mode 100644 ruby/RubySFML/sfString.cpp delete mode 100644 ruby/RubySFML/sfVideoMode.cpp delete mode 100644 ruby/RubySFML/sfView.cpp delete mode 100644 ruby/RubySFML/sfWindow.cpp delete mode 100644 ruby/doc/Reference-en.html delete mode 100644 ruby/doc/Reference-fr.html delete mode 100644 ruby/gzip.exe delete mode 100644 ruby/rubygems-0.9.4.zip delete mode 100644 ruby/tar.exe delete mode 100644 ruby/test/SideScroller.bat delete mode 100644 ruby/test/SideScroller.rb delete mode 100644 ruby/test/Tetris.bat delete mode 100644 ruby/test/Tutorial.bat delete mode 100644 ruby/test/Tutorial.rb delete mode 100644 ruby/test/fps.bat delete mode 100644 ruby/test/fps.rb delete mode 100644 ruby/test/media/Beep.wav delete mode 100644 ruby/test/media/CptnRuby.png delete mode 100644 ruby/test/media/Gem.png delete mode 100644 ruby/test/media/LICENSE delete mode 100644 ruby/test/media/Level 1.txt delete mode 100644 ruby/test/media/Level 2.txt delete mode 100644 ruby/test/media/Level 3.txt delete mode 100644 ruby/test/media/Space.png delete mode 100644 ruby/test/media/Star.png delete mode 100644 ruby/test/media/Starfighter.png delete mode 100644 ruby/test/media/Tileset.png delete mode 100644 ruby/test/media/cannon.wav delete mode 100644 ruby/test/media/cursor.png delete mode 100644 ruby/test/test.bat delete mode 100644 ruby/test/test.rb delete mode 100644 ruby/test/tetris.rb delete mode 100644 ruby/unzip.exe delete mode 100644 ruby/zip.exe delete mode 100644 ruby/zlib/zconf.h delete mode 100644 ruby/zlib/zlib.h delete mode 100644 ruby/zlib/zlib.lib delete mode 100644 ruby/zlib/zlib1.dll delete mode 100644 ruby/zlib/zlibd.lib diff --git a/ruby/LICENSE.txt b/ruby/LICENSE.txt deleted file mode 100644 index 14b9d4ee..00000000 --- a/ruby/LICENSE.txt +++ /dev/null @@ -1,41 +0,0 @@ -RubySFML - Copyright (c) 2007 Sean O'Neil and Laurent Gomila - -RubySFML relies on a lot of third-party open-source software, and since it is -a library itself, I need to make sure everyone who uses it is aware of the -various licenses it comes with, as well as to give credit where credit is due. -If you distribute applications that use RubySFML, you may also be required to -give credit where credit is due. - -*** Third-party software *** -Ruby 1.8.6 - Ruby license -RubyGems 0.9.4 - Ruby license -ruby-opengl - MIT license -SFML - zlib/png license -zlib - zlib/png license -Freetype - Freetype license (BSD-style with a credit clause) -OpenAL - LGPL license -DevIL - LGPL license -libsndfile - LGPL license - -*** The RubySFML library itself (zlib/png) *** - -This software is provided 'as-is', without any express or -implied warranty. In no event will the authors be held -liable for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute -it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; - you must not claim that you wrote the original software. - If you use this software in a product, an acknowledgment - in the product documentation would be appreciated but - is not required. - -2. Altered source versions must be plainly marked as such, - and must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any - source distribution. - diff --git a/ruby/README-EN.txt b/ruby/README-EN.txt deleted file mode 100644 index bd7a5d9e..00000000 --- a/ruby/README-EN.txt +++ /dev/null @@ -1,28 +0,0 @@ -To build/run RubySFML in Windows: - -1) Install Ruby for Windows using the one-click installer. - (RubySFML can't use it until it starts being built with VS 2005, - but it needs to be installed to run the Rakefile.) - -2) Run "gem install rake" to install Ruby's version of make. - -3) Open a DOS box to this folder. - -4) Make sure all the VS2005 environment vars are set. If necessary, run: - \VC\bin\vcvars32.bat - -5) Run "rake" in this folder. The default build target will: - * Download/unpack/compile/install the ruby-1.8.6 source tarball. - * Install Ruby Gems (not strictly necessary, but everyone will want it). - * Configure/compile/install the RubySFML extension. - * Build RubySFML.zip with everything you need to distribute Windows binaries. - (At under 3.7MB, it has all the Ruby bins/libs plus all the SFML bins.) - -6) At this point you can use any of these commands to run the test program: - * test.bat - * rake test - * bin\ruby test.rb - -NOTE: This build of Ruby does not have all the extensions included in the - one-click installer. Some notable ones missing at the moment are - DBI, OpenSSL, and Expat. diff --git a/ruby/README-FR.txt b/ruby/README-FR.txt deleted file mode 100644 index 633ecfac..00000000 --- a/ruby/README-FR.txt +++ /dev/null @@ -1,28 +0,0 @@ -Pour compiler/utiliser RubySFML sous Windows : - -1) Installez Ruby pour Windows en utilisant l'installeur "one-click" (sur le site officiel de Ruby). - (RubySFML ne peut pas l'utiliser car elle doit être recompilée avec VS 2005, - mais il doit tout de même être installé afin de pouvoir exécuter le Rakefile) - -2) Exécutez la commande "gem install rake" pour installer la version Ruby de make. - -3) Ouvrez une invite de commande DOS depuis ce répertoire - -4) Assurez-vous que les variables d'environnement pour VS 2005 sont correctement définies. Si nécessaire, exécutez le - fichier suivant : - \VC\bin\vcvars32.bat - -5) Exécutez la commande "rake" depuis ce répertoire. La compilation par défaut va : - * Télécharger / décompresser / compiler / installer Ruby 1.8.6 - * Installer Ruby Gems (pas strictement nécessaire, mais à peu près tout le monde en aura besoin) - * Configurer / compiler / installer RubySFML - * Construire RubySFML.zip avec tout ce dont vous avez besoin pour distribuer vos binaires Windows. - (Avec moins de 3.7 Mo, il contient tous les binaires et bibliothèques Ruby plus tous les binaires SFML) - -6) Maintenant, vous pouvez utiliser l'une de ces 3 commandes pour exécuter le programme de test : - * test.bat - * rake test - * bin\ruby test.rb - -NOTE : Cette compilation de Ruby ne contient pas toutes les extensions de l'installeur "one-click". - Parmi les plus importantes manquantes, on peut noter DBI, OpenSSL et Expat. diff --git a/ruby/Rakefile b/ruby/Rakefile deleted file mode 100644 index bb591330..00000000 --- a/ruby/Rakefile +++ /dev/null @@ -1,167 +0,0 @@ -# Rake doc: http://rake.rubyforge.org/files/doc/rakefile_rdoc.html -require 'rake' -require 'net/ftp' -require 'net/http' -require 'uri' -include Rake - -ENV["RUBYOPT"] = nil -EXTENSION = "RubySFML" -RUBY_VER = "ruby-1.8.6-p111" -GEMS_VER = "rubygems-0.9.4" -ROOT_DIR = Dir.pwd -RUBY_DIR = "#{ROOT_DIR}/#{RUBY_VER}" -GEMS_DIR = "#{ROOT_DIR}/#{GEMS_VER}" -EXTENSION_DIR = "#{ROOT_DIR}/#{EXTENSION}" -RUBY_URL = "ftp://ftp.ruby-lang.org/pub/ruby/1.8/#{RUBY_VER}.tar.gz" - -# These are needed to build Ruby's zlib extension -raise "You forgot to run vcvars32.bat!" unless ENV['INCLUDE'] and ENV['LIB'] -ENV['INCLUDE'] += ";#{ROOT_DIR}/../extlibs/headers;#{ROOT_DIR}/zlib" -ENV['LIB'] += ";#{ROOT_DIR}/../extlibs/libs-vc2005;#{ROOT_DIR}/zlib" - -# Need this for the Unix utils, like gzip.exe and tar.exe, to run -ENV['PATH'] += ";#{ROOT_DIR}" - - -desc "Deletes all compiled and installed Ruby files for a clean rebuild" -task :cleanRuby do |t| - rm_r "bin" rescue nil - rm_r "lib" rescue nil - rm_r "man" rescue nil - rm_r RUBY_DIR rescue nil - rm_r GEMS_DIR rescue nil - rm "#{RUBY_VER}.tar" rescue nil - rm "#{RUBY_VER}.tar.gz" rescue nil -end - -desc "Gets the Ruby source code from the FTP server" -task :getRuby do |t| - tar = "#{RUBY_VER}.tar" - tgz = "#{tar}.gz" - unless File.exists?(tar) or File.exists?(tgz) - puts "Downloading #{RUBY_URL}. Please wait..." - Net::FTP.open("ftp.ruby-lang.org") do |ftp| - ftp.login - files = ftp.chdir("pub/ruby/1.8") - ftp.getbinaryfile(tgz, tgz) - end - end -end - -desc "Unpacks the Ruby source tarball" -task :unpackRuby => [:getRuby] do |t| - unless File.exists?(RUBY_DIR) - tar = "#{RUBY_VER}.tar" - tgz = "#{tar}.gz" - sh "gzip", "-d", tgz if File.exists?(tgz) - sh "tar", "-xvf", tar - end - - unless File.exists?(GEMS_DIR) - sh "unzip", "#{GEMS_VER}.zip" - end -end - -desc "Builds ruby.exe from the source code" -task :buildRuby => [:unpackRuby] do |t| - unless File.exists? "#{RUBY_DIR}/ruby.exe" - Dir.chdir RUBY_DIR - sh "win32\\configure.bat", "--target=i686-mswin32" - sh "nmake" - Dir.chdir ROOT_DIR - end -end - -desc "Installs #{RUBY_VER} and copies the extlibs into the bin folder" -task :installRuby => [:buildRuby] do |t| - unless File.exists? "#{ROOT_DIR}/bin/ruby.exe" - Dir.chdir RUBY_DIR - sh "nmake", "DESTDIR=\"#{ROOT_DIR}\"", "install" - Dir.chdir ROOT_DIR - end - - unless File.exists? "bin/zlib1.dll" - cp Dir["../extlibs/bin/*.dll"], "bin" - cp Dir["zlib/*.dll"], "bin" - cp "#{RUBY_DIR}/.ext/i386-mswin32_80/zlib.so", "lib/ruby/1.8/i386-mswin32" - end - - unless File.exists? "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/rubygems.rb" - Dir.chdir GEMS_DIR - sh "../bin/ruby.exe", "setup.rb" - rm_r "#{ROOT_DIR}/lib/ruby/gems/1.8/doc/rubygems-0.9.4" rescue nil - Dir.chdir ROOT_DIR - end -end - -desc "Deletes all compiled and installed RubySFML files for a clean rebuild" -task :cleanExtension do |t| - dirs = [EXTENSION_DIR, "#{ROOT_DIR}/RubyOpenGL/gl", "#{ROOT_DIR}/RubyOpenGL/glu"] - dirs.each {|d| - rm Dir["#{d}/*.so"] - rm Dir["#{d}/*.def"] - rm Dir["#{d}/*.pdb"] - rm Dir["#{d}/*.lib"] - rm Dir["#{d}/*.exp"] - rm Dir["#{d}/*.log"] - rm Dir["#{d}/*.obj"] - rm "#{d}/Makefile" rescue nil - } - rm "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80/RubySFML.so" rescue nil - rm "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80/gl.so" rescue nil - rm "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80/glu.so" rescue nil -end - -desc "Builds the SFMLRuby extension" -task :buildExtension => [:installRuby] do |t| - unless File.exists? "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80/gl.so" and File.exists? "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80/glu.so" - Dir.chdir "#{ROOT_DIR}/RubyOpenGL/gl" - sh "../../bin/ruby.exe", "extconf.rb" - sh "nmake" - cp "gl.so", "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80" - Dir.chdir "#{ROOT_DIR}/RubyOpenGL/glu" - sh "../../bin/ruby.exe", "extconf.rb" - sh "nmake" - cp "glu.so", "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80" - Dir.chdir ROOT_DIR - end - - inc = "../../include" - lib = "../../lib/vc2005" - ext = "#{EXTENSION_DIR}/RubySFML.so" - File.delete(ext) unless uptodate?(ext, Dir["../lib/vc2005/*.lib"]) rescue nil - - Dir.chdir EXTENSION_DIR - sh "../bin/ruby.exe", "extconf-win.rb", "--with-SFML-include=#{inc}", "--with-SFML-lib=#{lib}" - sh "nmake" - cp "RubySFML.so", "#{ROOT_DIR}/lib/ruby/site_ruby/1.8/i386-msvcr80" - cp "RubySFML.rb", "#{ROOT_DIR}/lib/ruby/site_ruby/1.8" - Dir.chdir ROOT_DIR -end - -desc "Builds everything and runs test.rb" -task :test => [:buildExtension] do |t| - Dir.chdir "#{ROOT_DIR}/test" - sh "../bin/ruby.exe", "test.rb" - Dir.chdir ROOT_DIR -end - -desc "Zips up the compiled binaries for distribution" -task :package => [:buildExtension] do |t| - sh "zip", "-r", "RubySFML.zip", "LICENSE.txt", "bin", "doc", "lib", "test" -end - -desc "Deletes all files generated by this build" -task :clean => [:cleanExtension, :cleanRuby] do |t| - rm "RubySFML.zip" rescue nil -end - -desc "Deletes and rebuilds everything" -task :rebuild => [:clean, :package] do |t| - rm "RubySFML.zip" rescue nil -end - -desc "(Same as 'rake package')" -task :default => [:package] - diff --git a/ruby/RubyOpenGL/common/common.h b/ruby/RubyOpenGL/common/common.h deleted file mode 100644 index dcd279fd..00000000 --- a/ruby/RubyOpenGL/common/common.h +++ /dev/null @@ -1,333 +0,0 @@ -/* - * Last edit by previous maintainer: - * 2000/01/06 16:37:43, kusano - * - * Copyright (C) 1999 - 2005 Yoshi - * Copyright (C) 2006 John M. Gabriele - * Copyright (C) 2007 James Adam - * - * This program is distributed under the terms of the MIT license. - * See the included MIT-LICENSE file for the terms of this license. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef _RBOGL_H_ -#define _RBOGL_H_ - -#include - -#ifdef __APPLE__ -#include -#include -#include -#include -#elif defined WIN32 -#include -#include -#else -#include -#include -#endif - -#include "gl-enums.h" - -#ifdef __APPLE__ -#ifndef APIENTRY -#define APIENTRY /* to nothing */ -#endif -#endif - -typedef struct RArray RArray; - -extern VALUE cProc; - -#define LOAD_GL_FUNC(_NAME_) \ -if (fptr_##_NAME_==NULL) \ -fptr_##_NAME_ = load_gl_function(#_NAME_, 1); - -#define FORCE_PIXEL_STORE_MODE \ - glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT); \ - glPixelStorei(GL_PACK_ALIGNMENT, 1); \ - glPixelStorei(GL_PACK_SKIP_PIXELS, 0); \ - glPixelStorei(GL_PACK_SKIP_ROWS, 0); \ - glPixelStorei(GL_PACK_ROW_LENGTH, 0); \ - glPixelStorei(GL_PACK_SKIP_IMAGES, 0); \ - glPixelStorei(GL_PACK_IMAGE_HEIGHT, 0); -/* glPixelStorei(GL_PACK_SKIP_VOLUMES_SGIS, 0); - glPixelStorei(GL_PACK_IMAGE_DEPTH_SGIS, 0); */ - -#define RESTORE_PIXEL_STORE_MODE \ - glPopClientAttrib(); - - -/* -------------------------------------------------------------------- */ -#ifndef NUM2DBL -#define NUM2DBL(_val) num2double(_val) - -static inline double num2double( VALUE val ) -{ - struct RFloat* flt; - if (NIL_P(val)) return 0; - flt = RFLOAT(f_float(0, val)); - return flt->value; -} -#endif - -/* -------------------------------------------------------------------- */ -#define ARY2INTEGRAL(_type_,_convert_) \ -static inline int ary2c##_type_( arg, cary, maxlen ) \ -VALUE arg; \ -GL##_type_ cary[]; \ -int maxlen; \ -{ \ - int i; \ - struct RArray* ary; \ - VALUE entry; \ - ary = RARRAY(rb_Array(arg)); \ - if (maxlen < 1) \ - maxlen = ary->len; \ - else \ - maxlen = maxlen < ary->len ? maxlen : ary->len; \ - for (i=0; i < maxlen; i++) \ - { \ - entry = rb_ary_entry((VALUE)ary,i); \ - cary[i] = (GL##_type_)_convert_(entry); \ - } \ - return i; \ -} - -ARY2INTEGRAL(int,NUM2INT) -ARY2INTEGRAL(uint,NUM2UINT) -ARY2INTEGRAL(byte,NUM2INT) -ARY2INTEGRAL(ubyte,NUM2INT) -ARY2INTEGRAL(short,NUM2INT) -ARY2INTEGRAL(ushort,NUM2INT) -ARY2INTEGRAL(boolean,NUM2INT) -#undef ARY2INTEGRAL - -/* -------------------------------------------------------------------- */ -static inline int ary2cflt(arg, cary, maxlen) -VALUE arg; -float cary[]; -int maxlen; -{ - int i; - struct RArray* ary; - ary = RARRAY(rb_Array(arg)); - if (maxlen < 1) - maxlen = ary->len; - else - maxlen = maxlen < ary->len ? maxlen : ary->len; - for (i=0; i < maxlen; i++) - cary[i] = (float)NUM2DBL(rb_ary_entry((VALUE)ary,i)); - return i; -} - -/* -------------------------------------------------------------------- */ -static inline int ary2cdbl(arg, cary, maxlen) -VALUE arg; -double cary[]; -int maxlen; -{ - int i; - struct RArray* ary; - ary = RARRAY(rb_Array(arg)); - if (maxlen < 1) - maxlen = ary->len; - else - maxlen = maxlen < ary->len ? maxlen : ary->len; - for (i=0; i < maxlen; i++) - cary[i] = NUM2DBL(rb_ary_entry((VALUE)ary,i)); - return i; -} - -/* -------------------------------------------------------------------- */ -static inline void mary2ary(src, ary) -VALUE src; -VALUE ary; -{ - struct RArray* tmp_ary; - int i; - tmp_ary = RARRAY(rb_Array(src)); - for (i = 0; i < tmp_ary->len; i++) - { - if (TYPE(tmp_ary->ptr[i]) == T_ARRAY) - mary2ary((VALUE)tmp_ary->ptr[i], ary); - else - rb_ary_push(ary, tmp_ary->ptr[i]); - } -} - -/* -------------------------------------------------------------------- */ -static inline void ary2cmat4x4dbl(ary, cary) -VALUE ary; -double cary[]; -{ - int i,j; - RArray *ary_r,*ary_c; - memset(cary, 0x0, sizeof(double[4*4])); - ary_c = RARRAY(rb_Array(ary)); - if (TYPE(ary_c->ptr[0]) != T_ARRAY) - ary2cdbl((VALUE)ary_c, cary, 16); - else - { - for (i = 0; i < ary_c->len && i < 4; i++) - { - ary_r = RARRAY(rb_Array(ary_c->ptr[i])); - for(j = 0; j < ary_r->len && j < 4; j++) - cary[i*4+j] = (GLdouble)NUM2DBL(ary_r->ptr[j]); - } - } -} - -static inline void ary2cmat4x4flt(ary, cary) -VALUE ary; -float cary[]; -{ - int i,j; - RArray *ary_r,*ary_c; - memset(cary, 0x0, sizeof(float[4*4])); - ary_c = RARRAY(rb_Array(ary)); - if (TYPE(ary_c->ptr[0]) != T_ARRAY) - ary2cflt((VALUE)ary_c, cary, 16); - else - { - for (i = 0; i < ary_c->len && i < 4; i++) - { - ary_r = RARRAY(rb_Array(ary_c->ptr[i])); - for(j = 0; j < ary_r->len && j < 4; j++) - cary[i*4+j] = (GLfloat)NUM2DBL(ary_r->ptr[j]); - } - } -} - -/* -------------------------------------------------------------------- */ -/*Need to find proper size for glReadPixels array*/ -static inline int glformat_size(GLenum format) -{ - switch(format) - { - case GL_COLOR_INDEX: - case GL_RED: - case GL_GREEN: - case GL_BLUE: - case GL_ALPHA: - case GL_STENCIL_INDEX: - case GL_DEPTH_COMPONENT: - case GL_LUMINANCE: - return 1; - - case GL_LUMINANCE_ALPHA: - return 2; - - case GL_RGB: - case GL_BGR_EXT: - return 3; - - case GL_RGBA: - case GL_BGRA_EXT: - case GL_ABGR_EXT: - return 4; - case 1: - case 2: - case 3: - case 4: - return format; - default: - return -1; - } -} - -/* -------------------------------------------------------------------- */ -static inline int gltype_size(GLenum type) -{ - switch(type) - { - case GL_BYTE: - case GL_UNSIGNED_BYTE: - case GL_UNSIGNED_BYTE_3_3_2: - case GL_UNSIGNED_BYTE_2_3_3_REV: - return 1; - - case GL_SHORT: - case GL_UNSIGNED_SHORT: - case GL_UNSIGNED_SHORT_5_6_5: - case GL_UNSIGNED_SHORT_5_6_5_REV: - case GL_UNSIGNED_SHORT_4_4_4_4: - case GL_UNSIGNED_SHORT_4_4_4_4_REV: - case GL_UNSIGNED_SHORT_5_5_5_1: - case GL_UNSIGNED_SHORT_1_5_5_5_REV: - return 2; - - case GL_INT: - case GL_UNSIGNED_INT: - case GL_FLOAT: - case GL_UNSIGNED_INT_8_8_8_8: - case GL_UNSIGNED_INT_8_8_8_8_REV: - case GL_UNSIGNED_INT_10_10_10_2: - case GL_UNSIGNED_INT_2_10_10_10_REV: - return 4; - - case GL_BITMAP: - return 0; - - default: - return -1; - } -} - -/* -------------------------------------------------------------------- */ -static inline VALUE allocate_buffer_with_string( int size ) -{ - return rb_str_new(NULL, size); -} - -/* -------------------------------------------------------------------- */ -static inline void *load_gl_function(const char *name,int raise) -{ - void *func_ptr = NULL; - -#if defined(__APPLE__) - static const struct mach_header* library = NULL; - char* symbolName; - NSSymbol symbol; - if (library == NULL) - library = NSAddImage("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL",NSADDIMAGE_OPTION_RETURN_ON_ERROR); - - if (library == NULL) - rb_raise(rb_eRuntimeError,"Can't load OpenGL library for dynamic loading"); - - /* prepend a '_' for the Unix C symbol mangling convention */ - symbolName = ALLOC_N(char,strlen(name) + 2); - symbolName[0] = '_'; - strcpy(symbolName+1, name); - - symbol = NSLookupSymbolInImage(library,symbolName,NSLOOKUPSYMBOLINIMAGE_OPTION_BIND | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR); - xfree(symbolName); - - if (symbol == NULL) - func_ptr = NULL; - else - func_ptr = NSAddressOfSymbol(symbol); -#elif defined(WIN32) || defined(_WIN32) - func_ptr = wglGetProcAddress((LPCSTR)name); -#elif defined(GLX_VERSION_1_4) - func_ptr = glXGetProcAddress((const GLubyte *)name); -#else - func_ptr = glXGetProcAddressARB((const GLubyte *)name); -#endif - - if (func_ptr == NULL && raise == 1) - rb_raise(rb_eNotImpError,"Function %s is not available at this machine",name); - - return func_ptr; -} - -#endif /* _RBOGL_H_ */ diff --git a/ruby/RubyOpenGL/common/gl-enums.h b/ruby/RubyOpenGL/common/gl-enums.h deleted file mode 100644 index 678e666c..00000000 --- a/ruby/RubyOpenGL/common/gl-enums.h +++ /dev/null @@ -1,10387 +0,0 @@ -/* GL types - define if system GLheaders are not recent */ - -/* GL base */ -#ifndef GL_VERSION_1_5 -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -#endif - -#ifndef GL_VERSION_2_0 -typedef char GLchar; -#endif - -/* new GL types introduced by ARB extensions */ -#ifndef GL_ARB_half_float_pixel -typedef unsigned short GLhalfARB; -#endif - -#ifndef GL_ARB_shader_objects -typedef char GLcharARB; -typedef unsigned int GLhandleARB; -#endif - -#ifndef GL_ARB_vertex_buffer_object -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -#endif - -/* new GL types introduced by other extensions */ -#ifndef GL_NV_half_float -typedef unsigned short GLhalfNV; -#endif - -/* List of GL enumerators */ - -/* The code below was genereated on Sun Feb 11 01:24:24 +0100 2007 - source: http://www.opengl.org/registry/api/enum.spec - http://www.opengl.org/registry/api/enumext.spec -*/ - -#ifndef _GLENUMS_H_ -#define _GLENUMS_H_ - -#ifndef GL_VERSION_1_1 -#define GL_VERSION_1_1 1 -#endif -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 -#endif -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 -#endif -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 -#endif -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 -#endif -#ifndef GL_ARB_imaging -#define GL_ARB_imaging 1 -#endif -#ifndef GL_EXT_abgr -#define GL_EXT_abgr 1 -#endif -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 -#endif -#ifndef GL_EXT_blend_logic_op -#define GL_EXT_blend_logic_op 1 -#endif -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 -#endif -#ifndef GL_EXT_blend_subtract -#define GL_EXT_blend_subtract 1 -#endif -#ifndef GL_EXT_cmyka -#define GL_EXT_cmyka 1 -#endif -#ifndef GL_EXT_convolution -#define GL_EXT_convolution 1 -#endif -#ifndef GL_EXT_copy_texture -#define GL_EXT_copy_texture 1 -#endif -#ifndef GL_EXT_histogram -#define GL_EXT_histogram 1 -#endif -#ifndef GL_EXT_packed_pixels -#define GL_EXT_packed_pixels 1 -#endif -#ifndef GL_EXT_point_parameters -#define GL_EXT_point_parameters 1 -#endif -#ifndef GL_EXT_polygon_offset -#define GL_EXT_polygon_offset 1 -#endif -#ifndef GL_EXT_rescale_normal -#define GL_EXT_rescale_normal 1 -#endif -#ifndef GL_EXT_shared_texture_palette -#define GL_EXT_shared_texture_palette 1 -#endif -#ifndef GL_EXT_subtexture -#define GL_EXT_subtexture 1 -#endif -#ifndef GL_EXT_texture -#define GL_EXT_texture 1 -#endif -#ifndef GL_EXT_texture3D -#define GL_EXT_texture3D 1 -#endif -#ifndef GL_EXT_texture_object -#define GL_EXT_texture_object 1 -#endif -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 -#endif -#ifndef GL_SGIS_detail_texture -#define GL_SGIS_detail_texture 1 -#endif -#ifndef GL_SGIS_fog_function -#define GL_SGIS_fog_function 1 -#endif -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 -#endif -#ifndef GL_SGIS_multisample -#define GL_SGIS_multisample 1 -#endif -#ifndef GL_SGIS_pixel_texture -#define GL_SGIS_pixel_texture 1 -#endif -#ifndef GL_SGIS_point_line_texgen -#define GL_SGIS_point_line_texgen 1 -#endif -#ifndef GL_SGIS_point_parameters -#define GL_SGIS_point_parameters 1 -#endif -#ifndef GL_SGIS_sharpen_texture -#define GL_SGIS_sharpen_texture 1 -#endif -#ifndef GL_SGIS_texture4D -#define GL_SGIS_texture4D 1 -#endif -#ifndef GL_SGIS_texture_border_clamp -#define GL_SGIS_texture_border_clamp 1 -#endif -#ifndef GL_SGIS_texture_edge_clamp -#define GL_SGIS_texture_edge_clamp 1 -#endif -#ifndef GL_SGIS_texture_filter4 -#define GL_SGIS_texture_filter4 1 -#endif -#ifndef GL_SGIS_texture_lod -#define GL_SGIS_texture_lod 1 -#endif -#ifndef GL_SGIS_texture_select -#define GL_SGIS_texture_select 1 -#endif -#ifndef GL_SGIX_async -#define GL_SGIX_async 1 -#endif -#ifndef GL_SGIX_async_histogram -#define GL_SGIX_async_histogram 1 -#endif -#ifndef GL_SGIX_async_pixel -#define GL_SGIX_async_pixel 1 -#endif -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_SGIX_blend_alpha_minmax 1 -#endif -#ifndef GL_SGIX_calligraphic_fragment -#define GL_SGIX_calligraphic_fragment 1 -#endif -#ifndef GL_SGIX_clipmap -#define GL_SGIX_clipmap 1 -#endif -#ifndef GL_SGIX_convolution_accuracy -#define GL_SGIX_convolution_accuracy 1 -#endif -#ifndef GL_SGIX_depth_texture -#define GL_SGIX_depth_texture 1 -#endif -#ifndef GL_SGIX_flush_raster -#define GL_SGIX_flush_raster 1 -#endif -#ifndef GL_SGIX_fog_offset -#define GL_SGIX_fog_offset 1 -#endif -#ifndef GL_SGIX_fragment_lighting -#define GL_SGIX_fragment_lighting 1 -#endif -#ifndef GL_SGIX_framezoom -#define GL_SGIX_framezoom 1 -#endif -#ifndef GL_SGIX_icc_texture -#define GL_SGIX_icc_texture 1 -#endif -#ifndef GL_SGIX_impact_pixel_texture -#define GL_SGIX_impact_pixel_texture 1 -#endif -#ifndef GL_SGIX_instruments -#define GL_SGIX_instruments 1 -#endif -#ifndef GL_SGIX_interlace -#define GL_SGIX_interlace 1 -#endif -#ifndef GL_SGIX_ir_instrument1 -#define GL_SGIX_ir_instrument1 1 -#endif -#ifndef GL_SGIX_list_priority -#define GL_SGIX_list_priority 1 -#endif -#ifndef GL_SGIX_pixel_texture -#define GL_SGIX_pixel_texture 1 -#endif -#ifndef GL_SGIX_pixel_tiles -#define GL_SGIX_pixel_tiles 1 -#endif -#ifndef GL_SGIX_polynomial_ffd -#define GL_SGIX_polynomial_ffd 1 -#endif -#ifndef GL_SGIX_reference_plane -#define GL_SGIX_reference_plane 1 -#endif -#ifndef GL_SGIX_resample -#define GL_SGIX_resample 1 -#endif -#ifndef GL_SGIX_scalebias_hint -#define GL_SGIX_scalebias_hint 1 -#endif -#ifndef GL_SGIX_shadow -#define GL_SGIX_shadow 1 -#endif -#ifndef GL_SGIX_shadow_ambient -#define GL_SGIX_shadow_ambient 1 -#endif -#ifndef GL_SGIX_sprite -#define GL_SGIX_sprite 1 -#endif -#ifndef GL_SGIX_subsample -#define GL_SGIX_subsample 1 -#endif -#ifndef GL_SGIX_tag_sample_buffer -#define GL_SGIX_tag_sample_buffer 1 -#endif -#ifndef GL_SGIX_texture_add_env -#define GL_SGIX_texture_add_env 1 -#endif -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_SGIX_texture_coordinate_clamp 1 -#endif -#ifndef GL_SGIX_texture_lod_bias -#define GL_SGIX_texture_lod_bias 1 -#endif -#ifndef GL_SGIX_texture_multi_buffer -#define GL_SGIX_texture_multi_buffer 1 -#endif -#ifndef GL_SGIX_texture_scale_bias -#define GL_SGIX_texture_scale_bias 1 -#endif -#ifndef GL_SGIX_vertex_preclip -#define GL_SGIX_vertex_preclip 1 -#endif -#ifndef GL_SGIX_ycrcb -#define GL_SGIX_ycrcb 1 -#endif -#ifndef GL_SGI_color_matrix -#define GL_SGI_color_matrix 1 -#endif -#ifndef GL_SGI_color_table -#define GL_SGI_color_table 1 -#endif -#ifndef GL_SGI_texture_color_table -#define GL_SGI_texture_color_table 1 -#endif -#ifndef GL_CURRENT_BIT -#define GL_CURRENT_BIT 0x00000001 -#endif -#ifndef GL_POINT_BIT -#define GL_POINT_BIT 0x00000002 -#endif -#ifndef GL_LINE_BIT -#define GL_LINE_BIT 0x00000004 -#endif -#ifndef GL_POLYGON_BIT -#define GL_POLYGON_BIT 0x00000008 -#endif -#ifndef GL_POLYGON_STIPPLE_BIT -#define GL_POLYGON_STIPPLE_BIT 0x00000010 -#endif -#ifndef GL_PIXEL_MODE_BIT -#define GL_PIXEL_MODE_BIT 0x00000020 -#endif -#ifndef GL_LIGHTING_BIT -#define GL_LIGHTING_BIT 0x00000040 -#endif -#ifndef GL_FOG_BIT -#define GL_FOG_BIT 0x00000080 -#endif -#ifndef GL_DEPTH_BUFFER_BIT -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#endif -#ifndef GL_ACCUM_BUFFER_BIT -#define GL_ACCUM_BUFFER_BIT 0x00000200 -#endif -#ifndef GL_STENCIL_BUFFER_BIT -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#endif -#ifndef GL_VIEWPORT_BIT -#define GL_VIEWPORT_BIT 0x00000800 -#endif -#ifndef GL_TRANSFORM_BIT -#define GL_TRANSFORM_BIT 0x00001000 -#endif -#ifndef GL_ENABLE_BIT -#define GL_ENABLE_BIT 0x00002000 -#endif -#ifndef GL_COLOR_BUFFER_BIT -#define GL_COLOR_BUFFER_BIT 0x00004000 -#endif -#ifndef GL_HINT_BIT -#define GL_HINT_BIT 0x00008000 -#endif -#ifndef GL_EVAL_BIT -#define GL_EVAL_BIT 0x00010000 -#endif -#ifndef GL_LIST_BIT -#define GL_LIST_BIT 0x00020000 -#endif -#ifndef GL_TEXTURE_BIT -#define GL_TEXTURE_BIT 0x00040000 -#endif -#ifndef GL_SCISSOR_BIT -#define GL_SCISSOR_BIT 0x00080000 -#endif -#ifndef GL_ALL_ATTRIB_BITS -#define GL_ALL_ATTRIB_BITS 0xFFFFFFFF -#endif -#ifndef GL_CLIENT_PIXEL_STORE_BIT -#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 -#endif -#ifndef GL_CLIENT_VERTEX_ARRAY_BIT -#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 -#endif -#ifndef GL_CLIENT_ALL_ATTRIB_BITS -#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF -#endif -#ifndef GL_FALSE -#define GL_FALSE 0 -#endif -#ifndef GL_TRUE -#define GL_TRUE 1 -#endif -#ifndef GL_POINTS -#define GL_POINTS 0x0000 -#endif -#ifndef GL_LINES -#define GL_LINES 0x0001 -#endif -#ifndef GL_LINE_LOOP -#define GL_LINE_LOOP 0x0002 -#endif -#ifndef GL_LINE_STRIP -#define GL_LINE_STRIP 0x0003 -#endif -#ifndef GL_TRIANGLES -#define GL_TRIANGLES 0x0004 -#endif -#ifndef GL_TRIANGLE_STRIP -#define GL_TRIANGLE_STRIP 0x0005 -#endif -#ifndef GL_TRIANGLE_FAN -#define GL_TRIANGLE_FAN 0x0006 -#endif -#ifndef GL_QUADS -#define GL_QUADS 0x0007 -#endif -#ifndef GL_QUAD_STRIP -#define GL_QUAD_STRIP 0x0008 -#endif -#ifndef GL_POLYGON -#define GL_POLYGON 0x0009 -#endif -#ifndef GL_ACCUM -#define GL_ACCUM 0x0100 -#endif -#ifndef GL_LOAD -#define GL_LOAD 0x0101 -#endif -#ifndef GL_RETURN -#define GL_RETURN 0x0102 -#endif -#ifndef GL_MULT -#define GL_MULT 0x0103 -#endif -#ifndef GL_ADD -#define GL_ADD 0x0104 -#endif -#ifndef GL_NEVER -#define GL_NEVER 0x0200 -#endif -#ifndef GL_LESS -#define GL_LESS 0x0201 -#endif -#ifndef GL_EQUAL -#define GL_EQUAL 0x0202 -#endif -#ifndef GL_LEQUAL -#define GL_LEQUAL 0x0203 -#endif -#ifndef GL_GREATER -#define GL_GREATER 0x0204 -#endif -#ifndef GL_NOTEQUAL -#define GL_NOTEQUAL 0x0205 -#endif -#ifndef GL_GEQUAL -#define GL_GEQUAL 0x0206 -#endif -#ifndef GL_ALWAYS -#define GL_ALWAYS 0x0207 -#endif -#ifndef GL_ZERO -#define GL_ZERO 0 -#endif -#ifndef GL_ONE -#define GL_ONE 1 -#endif -#ifndef GL_SRC_COLOR -#define GL_SRC_COLOR 0x0300 -#endif -#ifndef GL_ONE_MINUS_SRC_COLOR -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#endif -#ifndef GL_SRC_ALPHA -#define GL_SRC_ALPHA 0x0302 -#endif -#ifndef GL_ONE_MINUS_SRC_ALPHA -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#endif -#ifndef GL_DST_ALPHA -#define GL_DST_ALPHA 0x0304 -#endif -#ifndef GL_ONE_MINUS_DST_ALPHA -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -#endif -#ifndef GL_DST_COLOR -#define GL_DST_COLOR 0x0306 -#endif -#ifndef GL_ONE_MINUS_DST_COLOR -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#endif -#ifndef GL_SRC_ALPHA_SATURATE -#define GL_SRC_ALPHA_SATURATE 0x0308 -#endif -#ifndef GL_NONE -#define GL_NONE 0 -#endif -#ifndef GL_FRONT_LEFT -#define GL_FRONT_LEFT 0x0400 -#endif -#ifndef GL_FRONT_RIGHT -#define GL_FRONT_RIGHT 0x0401 -#endif -#ifndef GL_BACK_LEFT -#define GL_BACK_LEFT 0x0402 -#endif -#ifndef GL_BACK_RIGHT -#define GL_BACK_RIGHT 0x0403 -#endif -#ifndef GL_FRONT -#define GL_FRONT 0x0404 -#endif -#ifndef GL_BACK -#define GL_BACK 0x0405 -#endif -#ifndef GL_LEFT -#define GL_LEFT 0x0406 -#endif -#ifndef GL_RIGHT -#define GL_RIGHT 0x0407 -#endif -#ifndef GL_FRONT_AND_BACK -#define GL_FRONT_AND_BACK 0x0408 -#endif -#ifndef GL_AUX0 -#define GL_AUX0 0x0409 -#endif -#ifndef GL_AUX1 -#define GL_AUX1 0x040A -#endif -#ifndef GL_AUX2 -#define GL_AUX2 0x040B -#endif -#ifndef GL_AUX3 -#define GL_AUX3 0x040C -#endif -#ifndef GL_NO_ERROR -#define GL_NO_ERROR 0 -#endif -#ifndef GL_INVALID_ENUM -#define GL_INVALID_ENUM 0x0500 -#endif -#ifndef GL_INVALID_VALUE -#define GL_INVALID_VALUE 0x0501 -#endif -#ifndef GL_INVALID_OPERATION -#define GL_INVALID_OPERATION 0x0502 -#endif -#ifndef GL_STACK_OVERFLOW -#define GL_STACK_OVERFLOW 0x0503 -#endif -#ifndef GL_STACK_UNDERFLOW -#define GL_STACK_UNDERFLOW 0x0504 -#endif -#ifndef GL_OUT_OF_MEMORY -#define GL_OUT_OF_MEMORY 0x0505 -#endif -#ifndef GL_2D -#define GL_2D 0x0600 -#endif -#ifndef GL_3D -#define GL_3D 0x0601 -#endif -#ifndef GL_3D_COLOR -#define GL_3D_COLOR 0x0602 -#endif -#ifndef GL_3D_COLOR_TEXTURE -#define GL_3D_COLOR_TEXTURE 0x0603 -#endif -#ifndef GL_4D_COLOR_TEXTURE -#define GL_4D_COLOR_TEXTURE 0x0604 -#endif -#ifndef GL_PASS_THROUGH_TOKEN -#define GL_PASS_THROUGH_TOKEN 0x0700 -#endif -#ifndef GL_POINT_TOKEN -#define GL_POINT_TOKEN 0x0701 -#endif -#ifndef GL_LINE_TOKEN -#define GL_LINE_TOKEN 0x0702 -#endif -#ifndef GL_POLYGON_TOKEN -#define GL_POLYGON_TOKEN 0x0703 -#endif -#ifndef GL_BITMAP_TOKEN -#define GL_BITMAP_TOKEN 0x0704 -#endif -#ifndef GL_DRAW_PIXEL_TOKEN -#define GL_DRAW_PIXEL_TOKEN 0x0705 -#endif -#ifndef GL_COPY_PIXEL_TOKEN -#define GL_COPY_PIXEL_TOKEN 0x0706 -#endif -#ifndef GL_LINE_RESET_TOKEN -#define GL_LINE_RESET_TOKEN 0x0707 -#endif -#ifndef GL_TEXTURE_DEFORMATION_BIT_SGIX -#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 -#endif -#ifndef GL_GEOMETRY_DEFORMATION_BIT_SGIX -#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 -#endif -#ifndef GL_EXP -#define GL_EXP 0x0800 -#endif -#ifndef GL_EXP2 -#define GL_EXP2 0x0801 -#endif -#ifndef GL_CW -#define GL_CW 0x0900 -#endif -#ifndef GL_CCW -#define GL_CCW 0x0901 -#endif -#ifndef GL_COEFF -#define GL_COEFF 0x0A00 -#endif -#ifndef GL_ORDER -#define GL_ORDER 0x0A01 -#endif -#ifndef GL_DOMAIN -#define GL_DOMAIN 0x0A02 -#endif -#ifndef GL_PIXEL_MAP_I_TO_I -#define GL_PIXEL_MAP_I_TO_I 0x0C70 -#endif -#ifndef GL_PIXEL_MAP_S_TO_S -#define GL_PIXEL_MAP_S_TO_S 0x0C71 -#endif -#ifndef GL_PIXEL_MAP_I_TO_R -#define GL_PIXEL_MAP_I_TO_R 0x0C72 -#endif -#ifndef GL_PIXEL_MAP_I_TO_G -#define GL_PIXEL_MAP_I_TO_G 0x0C73 -#endif -#ifndef GL_PIXEL_MAP_I_TO_B -#define GL_PIXEL_MAP_I_TO_B 0x0C74 -#endif -#ifndef GL_PIXEL_MAP_I_TO_A -#define GL_PIXEL_MAP_I_TO_A 0x0C75 -#endif -#ifndef GL_PIXEL_MAP_R_TO_R -#define GL_PIXEL_MAP_R_TO_R 0x0C76 -#endif -#ifndef GL_PIXEL_MAP_G_TO_G -#define GL_PIXEL_MAP_G_TO_G 0x0C77 -#endif -#ifndef GL_PIXEL_MAP_B_TO_B -#define GL_PIXEL_MAP_B_TO_B 0x0C78 -#endif -#ifndef GL_PIXEL_MAP_A_TO_A -#define GL_PIXEL_MAP_A_TO_A 0x0C79 -#endif -#ifndef GL_VERTEX_ARRAY_POINTER -#define GL_VERTEX_ARRAY_POINTER 0x808E -#endif -#ifndef GL_NORMAL_ARRAY_POINTER -#define GL_NORMAL_ARRAY_POINTER 0x808F -#endif -#ifndef GL_COLOR_ARRAY_POINTER -#define GL_COLOR_ARRAY_POINTER 0x8090 -#endif -#ifndef GL_INDEX_ARRAY_POINTER -#define GL_INDEX_ARRAY_POINTER 0x8091 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_POINTER -#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 -#endif -#ifndef GL_EDGE_FLAG_ARRAY_POINTER -#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 -#endif -#ifndef GL_FEEDBACK_BUFFER_POINTER -#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 -#endif -#ifndef GL_SELECTION_BUFFER_POINTER -#define GL_SELECTION_BUFFER_POINTER 0x0DF3 -#endif -#ifndef GL_CURRENT_COLOR -#define GL_CURRENT_COLOR 0x0B00 -#endif -#ifndef GL_CURRENT_INDEX -#define GL_CURRENT_INDEX 0x0B01 -#endif -#ifndef GL_CURRENT_NORMAL -#define GL_CURRENT_NORMAL 0x0B02 -#endif -#ifndef GL_CURRENT_TEXTURE_COORDS -#define GL_CURRENT_TEXTURE_COORDS 0x0B03 -#endif -#ifndef GL_CURRENT_RASTER_COLOR -#define GL_CURRENT_RASTER_COLOR 0x0B04 -#endif -#ifndef GL_CURRENT_RASTER_INDEX -#define GL_CURRENT_RASTER_INDEX 0x0B05 -#endif -#ifndef GL_CURRENT_RASTER_TEXTURE_COORDS -#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 -#endif -#ifndef GL_CURRENT_RASTER_POSITION -#define GL_CURRENT_RASTER_POSITION 0x0B07 -#endif -#ifndef GL_CURRENT_RASTER_POSITION_VALID -#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 -#endif -#ifndef GL_CURRENT_RASTER_DISTANCE -#define GL_CURRENT_RASTER_DISTANCE 0x0B09 -#endif -#ifndef GL_POINT_SMOOTH -#define GL_POINT_SMOOTH 0x0B10 -#endif -#ifndef GL_POINT_SIZE -#define GL_POINT_SIZE 0x0B11 -#endif -#ifndef GL_POINT_SIZE_RANGE -#define GL_POINT_SIZE_RANGE 0x0B12 -#endif -#ifndef GL_POINT_SIZE_GRANULARITY -#define GL_POINT_SIZE_GRANULARITY 0x0B13 -#endif -#ifndef GL_LINE_SMOOTH -#define GL_LINE_SMOOTH 0x0B20 -#endif -#ifndef GL_LINE_WIDTH -#define GL_LINE_WIDTH 0x0B21 -#endif -#ifndef GL_LINE_WIDTH_RANGE -#define GL_LINE_WIDTH_RANGE 0x0B22 -#endif -#ifndef GL_LINE_WIDTH_GRANULARITY -#define GL_LINE_WIDTH_GRANULARITY 0x0B23 -#endif -#ifndef GL_LINE_STIPPLE -#define GL_LINE_STIPPLE 0x0B24 -#endif -#ifndef GL_LINE_STIPPLE_PATTERN -#define GL_LINE_STIPPLE_PATTERN 0x0B25 -#endif -#ifndef GL_LINE_STIPPLE_REPEAT -#define GL_LINE_STIPPLE_REPEAT 0x0B26 -#endif -#ifndef GL_LIST_MODE -#define GL_LIST_MODE 0x0B30 -#endif -#ifndef GL_MAX_LIST_NESTING -#define GL_MAX_LIST_NESTING 0x0B31 -#endif -#ifndef GL_LIST_BASE -#define GL_LIST_BASE 0x0B32 -#endif -#ifndef GL_LIST_INDEX -#define GL_LIST_INDEX 0x0B33 -#endif -#ifndef GL_POLYGON_MODE -#define GL_POLYGON_MODE 0x0B40 -#endif -#ifndef GL_POLYGON_SMOOTH -#define GL_POLYGON_SMOOTH 0x0B41 -#endif -#ifndef GL_POLYGON_STIPPLE -#define GL_POLYGON_STIPPLE 0x0B42 -#endif -#ifndef GL_EDGE_FLAG -#define GL_EDGE_FLAG 0x0B43 -#endif -#ifndef GL_CULL_FACE -#define GL_CULL_FACE 0x0B44 -#endif -#ifndef GL_CULL_FACE_MODE -#define GL_CULL_FACE_MODE 0x0B45 -#endif -#ifndef GL_FRONT_FACE -#define GL_FRONT_FACE 0x0B46 -#endif -#ifndef GL_LIGHTING -#define GL_LIGHTING 0x0B50 -#endif -#ifndef GL_LIGHT_MODEL_LOCAL_VIEWER -#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 -#endif -#ifndef GL_LIGHT_MODEL_TWO_SIDE -#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 -#endif -#ifndef GL_LIGHT_MODEL_AMBIENT -#define GL_LIGHT_MODEL_AMBIENT 0x0B53 -#endif -#ifndef GL_SHADE_MODEL -#define GL_SHADE_MODEL 0x0B54 -#endif -#ifndef GL_COLOR_MATERIAL_FACE -#define GL_COLOR_MATERIAL_FACE 0x0B55 -#endif -#ifndef GL_COLOR_MATERIAL_PARAMETER -#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 -#endif -#ifndef GL_COLOR_MATERIAL -#define GL_COLOR_MATERIAL 0x0B57 -#endif -#ifndef GL_FOG -#define GL_FOG 0x0B60 -#endif -#ifndef GL_FOG_INDEX -#define GL_FOG_INDEX 0x0B61 -#endif -#ifndef GL_FOG_DENSITY -#define GL_FOG_DENSITY 0x0B62 -#endif -#ifndef GL_FOG_START -#define GL_FOG_START 0x0B63 -#endif -#ifndef GL_FOG_END -#define GL_FOG_END 0x0B64 -#endif -#ifndef GL_FOG_MODE -#define GL_FOG_MODE 0x0B65 -#endif -#ifndef GL_FOG_COLOR -#define GL_FOG_COLOR 0x0B66 -#endif -#ifndef GL_DEPTH_RANGE -#define GL_DEPTH_RANGE 0x0B70 -#endif -#ifndef GL_DEPTH_TEST -#define GL_DEPTH_TEST 0x0B71 -#endif -#ifndef GL_DEPTH_WRITEMASK -#define GL_DEPTH_WRITEMASK 0x0B72 -#endif -#ifndef GL_DEPTH_CLEAR_VALUE -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#endif -#ifndef GL_DEPTH_FUNC -#define GL_DEPTH_FUNC 0x0B74 -#endif -#ifndef GL_ACCUM_CLEAR_VALUE -#define GL_ACCUM_CLEAR_VALUE 0x0B80 -#endif -#ifndef GL_STENCIL_TEST -#define GL_STENCIL_TEST 0x0B90 -#endif -#ifndef GL_STENCIL_CLEAR_VALUE -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#endif -#ifndef GL_STENCIL_FUNC -#define GL_STENCIL_FUNC 0x0B92 -#endif -#ifndef GL_STENCIL_VALUE_MASK -#define GL_STENCIL_VALUE_MASK 0x0B93 -#endif -#ifndef GL_STENCIL_FAIL -#define GL_STENCIL_FAIL 0x0B94 -#endif -#ifndef GL_STENCIL_PASS_DEPTH_FAIL -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#endif -#ifndef GL_STENCIL_PASS_DEPTH_PASS -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#endif -#ifndef GL_STENCIL_REF -#define GL_STENCIL_REF 0x0B97 -#endif -#ifndef GL_STENCIL_WRITEMASK -#define GL_STENCIL_WRITEMASK 0x0B98 -#endif -#ifndef GL_MATRIX_MODE -#define GL_MATRIX_MODE 0x0BA0 -#endif -#ifndef GL_NORMALIZE -#define GL_NORMALIZE 0x0BA1 -#endif -#ifndef GL_VIEWPORT -#define GL_VIEWPORT 0x0BA2 -#endif -#ifndef GL_MODELVIEW_STACK_DEPTH -#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 -#endif -#ifndef GL_PROJECTION_STACK_DEPTH -#define GL_PROJECTION_STACK_DEPTH 0x0BA4 -#endif -#ifndef GL_TEXTURE_STACK_DEPTH -#define GL_TEXTURE_STACK_DEPTH 0x0BA5 -#endif -#ifndef GL_MODELVIEW_MATRIX -#define GL_MODELVIEW_MATRIX 0x0BA6 -#endif -#ifndef GL_PROJECTION_MATRIX -#define GL_PROJECTION_MATRIX 0x0BA7 -#endif -#ifndef GL_TEXTURE_MATRIX -#define GL_TEXTURE_MATRIX 0x0BA8 -#endif -#ifndef GL_ATTRIB_STACK_DEPTH -#define GL_ATTRIB_STACK_DEPTH 0x0BB0 -#endif -#ifndef GL_CLIENT_ATTRIB_STACK_DEPTH -#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 -#endif -#ifndef GL_ALPHA_TEST -#define GL_ALPHA_TEST 0x0BC0 -#endif -#ifndef GL_ALPHA_TEST_FUNC -#define GL_ALPHA_TEST_FUNC 0x0BC1 -#endif -#ifndef GL_ALPHA_TEST_REF -#define GL_ALPHA_TEST_REF 0x0BC2 -#endif -#ifndef GL_DITHER -#define GL_DITHER 0x0BD0 -#endif -#ifndef GL_BLEND_DST -#define GL_BLEND_DST 0x0BE0 -#endif -#ifndef GL_BLEND_SRC -#define GL_BLEND_SRC 0x0BE1 -#endif -#ifndef GL_BLEND -#define GL_BLEND 0x0BE2 -#endif -#ifndef GL_LOGIC_OP_MODE -#define GL_LOGIC_OP_MODE 0x0BF0 -#endif -#ifndef GL_INDEX_LOGIC_OP -#define GL_INDEX_LOGIC_OP 0x0BF1 -#endif -#ifndef GL_LOGIC_OP -#define GL_LOGIC_OP 0x0BF1 -#endif -#ifndef GL_COLOR_LOGIC_OP -#define GL_COLOR_LOGIC_OP 0x0BF2 -#endif -#ifndef GL_AUX_BUFFERS -#define GL_AUX_BUFFERS 0x0C00 -#endif -#ifndef GL_DRAW_BUFFER -#define GL_DRAW_BUFFER 0x0C01 -#endif -#ifndef GL_READ_BUFFER -#define GL_READ_BUFFER 0x0C02 -#endif -#ifndef GL_SCISSOR_BOX -#define GL_SCISSOR_BOX 0x0C10 -#endif -#ifndef GL_SCISSOR_TEST -#define GL_SCISSOR_TEST 0x0C11 -#endif -#ifndef GL_INDEX_CLEAR_VALUE -#define GL_INDEX_CLEAR_VALUE 0x0C20 -#endif -#ifndef GL_INDEX_WRITEMASK -#define GL_INDEX_WRITEMASK 0x0C21 -#endif -#ifndef GL_COLOR_CLEAR_VALUE -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#endif -#ifndef GL_COLOR_WRITEMASK -#define GL_COLOR_WRITEMASK 0x0C23 -#endif -#ifndef GL_INDEX_MODE -#define GL_INDEX_MODE 0x0C30 -#endif -#ifndef GL_RGBA_MODE -#define GL_RGBA_MODE 0x0C31 -#endif -#ifndef GL_DOUBLEBUFFER -#define GL_DOUBLEBUFFER 0x0C32 -#endif -#ifndef GL_STEREO -#define GL_STEREO 0x0C33 -#endif -#ifndef GL_RENDER_MODE -#define GL_RENDER_MODE 0x0C40 -#endif -#ifndef GL_PERSPECTIVE_CORRECTION_HINT -#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 -#endif -#ifndef GL_POINT_SMOOTH_HINT -#define GL_POINT_SMOOTH_HINT 0x0C51 -#endif -#ifndef GL_LINE_SMOOTH_HINT -#define GL_LINE_SMOOTH_HINT 0x0C52 -#endif -#ifndef GL_POLYGON_SMOOTH_HINT -#define GL_POLYGON_SMOOTH_HINT 0x0C53 -#endif -#ifndef GL_FOG_HINT -#define GL_FOG_HINT 0x0C54 -#endif -#ifndef GL_TEXTURE_GEN_S -#define GL_TEXTURE_GEN_S 0x0C60 -#endif -#ifndef GL_TEXTURE_GEN_T -#define GL_TEXTURE_GEN_T 0x0C61 -#endif -#ifndef GL_TEXTURE_GEN_R -#define GL_TEXTURE_GEN_R 0x0C62 -#endif -#ifndef GL_TEXTURE_GEN_Q -#define GL_TEXTURE_GEN_Q 0x0C63 -#endif -#ifndef GL_PIXEL_MAP_I_TO_I_SIZE -#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 -#endif -#ifndef GL_PIXEL_MAP_S_TO_S_SIZE -#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 -#endif -#ifndef GL_PIXEL_MAP_I_TO_R_SIZE -#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 -#endif -#ifndef GL_PIXEL_MAP_I_TO_G_SIZE -#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 -#endif -#ifndef GL_PIXEL_MAP_I_TO_B_SIZE -#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 -#endif -#ifndef GL_PIXEL_MAP_I_TO_A_SIZE -#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 -#endif -#ifndef GL_PIXEL_MAP_R_TO_R_SIZE -#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 -#endif -#ifndef GL_PIXEL_MAP_G_TO_G_SIZE -#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 -#endif -#ifndef GL_PIXEL_MAP_B_TO_B_SIZE -#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 -#endif -#ifndef GL_PIXEL_MAP_A_TO_A_SIZE -#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 -#endif -#ifndef GL_UNPACK_SWAP_BYTES -#define GL_UNPACK_SWAP_BYTES 0x0CF0 -#endif -#ifndef GL_UNPACK_LSB_FIRST -#define GL_UNPACK_LSB_FIRST 0x0CF1 -#endif -#ifndef GL_UNPACK_ROW_LENGTH -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#endif -#ifndef GL_UNPACK_SKIP_ROWS -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#endif -#ifndef GL_UNPACK_SKIP_PIXELS -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#endif -#ifndef GL_UNPACK_ALIGNMENT -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#endif -#ifndef GL_PACK_SWAP_BYTES -#define GL_PACK_SWAP_BYTES 0x0D00 -#endif -#ifndef GL_PACK_LSB_FIRST -#define GL_PACK_LSB_FIRST 0x0D01 -#endif -#ifndef GL_PACK_ROW_LENGTH -#define GL_PACK_ROW_LENGTH 0x0D02 -#endif -#ifndef GL_PACK_SKIP_ROWS -#define GL_PACK_SKIP_ROWS 0x0D03 -#endif -#ifndef GL_PACK_SKIP_PIXELS -#define GL_PACK_SKIP_PIXELS 0x0D04 -#endif -#ifndef GL_PACK_ALIGNMENT -#define GL_PACK_ALIGNMENT 0x0D05 -#endif -#ifndef GL_MAP_COLOR -#define GL_MAP_COLOR 0x0D10 -#endif -#ifndef GL_MAP_STENCIL -#define GL_MAP_STENCIL 0x0D11 -#endif -#ifndef GL_INDEX_SHIFT -#define GL_INDEX_SHIFT 0x0D12 -#endif -#ifndef GL_INDEX_OFFSET -#define GL_INDEX_OFFSET 0x0D13 -#endif -#ifndef GL_RED_SCALE -#define GL_RED_SCALE 0x0D14 -#endif -#ifndef GL_RED_BIAS -#define GL_RED_BIAS 0x0D15 -#endif -#ifndef GL_ZOOM_X -#define GL_ZOOM_X 0x0D16 -#endif -#ifndef GL_ZOOM_Y -#define GL_ZOOM_Y 0x0D17 -#endif -#ifndef GL_GREEN_SCALE -#define GL_GREEN_SCALE 0x0D18 -#endif -#ifndef GL_GREEN_BIAS -#define GL_GREEN_BIAS 0x0D19 -#endif -#ifndef GL_BLUE_SCALE -#define GL_BLUE_SCALE 0x0D1A -#endif -#ifndef GL_BLUE_BIAS -#define GL_BLUE_BIAS 0x0D1B -#endif -#ifndef GL_ALPHA_SCALE -#define GL_ALPHA_SCALE 0x0D1C -#endif -#ifndef GL_ALPHA_BIAS -#define GL_ALPHA_BIAS 0x0D1D -#endif -#ifndef GL_DEPTH_SCALE -#define GL_DEPTH_SCALE 0x0D1E -#endif -#ifndef GL_DEPTH_BIAS -#define GL_DEPTH_BIAS 0x0D1F -#endif -#ifndef GL_MAX_EVAL_ORDER -#define GL_MAX_EVAL_ORDER 0x0D30 -#endif -#ifndef GL_MAX_LIGHTS -#define GL_MAX_LIGHTS 0x0D31 -#endif -#ifndef GL_MAX_CLIP_PLANES -#define GL_MAX_CLIP_PLANES 0x0D32 -#endif -#ifndef GL_MAX_TEXTURE_SIZE -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#endif -#ifndef GL_MAX_PIXEL_MAP_TABLE -#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 -#endif -#ifndef GL_MAX_ATTRIB_STACK_DEPTH -#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 -#endif -#ifndef GL_MAX_MODELVIEW_STACK_DEPTH -#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 -#endif -#ifndef GL_MAX_NAME_STACK_DEPTH -#define GL_MAX_NAME_STACK_DEPTH 0x0D37 -#endif -#ifndef GL_MAX_PROJECTION_STACK_DEPTH -#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 -#endif -#ifndef GL_MAX_TEXTURE_STACK_DEPTH -#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 -#endif -#ifndef GL_MAX_VIEWPORT_DIMS -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#endif -#ifndef GL_MAX_CLIENT_ATTRIB_STACK_DEPTH -#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B -#endif -#ifndef GL_SUBPIXEL_BITS -#define GL_SUBPIXEL_BITS 0x0D50 -#endif -#ifndef GL_INDEX_BITS -#define GL_INDEX_BITS 0x0D51 -#endif -#ifndef GL_RED_BITS -#define GL_RED_BITS 0x0D52 -#endif -#ifndef GL_GREEN_BITS -#define GL_GREEN_BITS 0x0D53 -#endif -#ifndef GL_BLUE_BITS -#define GL_BLUE_BITS 0x0D54 -#endif -#ifndef GL_ALPHA_BITS -#define GL_ALPHA_BITS 0x0D55 -#endif -#ifndef GL_DEPTH_BITS -#define GL_DEPTH_BITS 0x0D56 -#endif -#ifndef GL_STENCIL_BITS -#define GL_STENCIL_BITS 0x0D57 -#endif -#ifndef GL_ACCUM_RED_BITS -#define GL_ACCUM_RED_BITS 0x0D58 -#endif -#ifndef GL_ACCUM_GREEN_BITS -#define GL_ACCUM_GREEN_BITS 0x0D59 -#endif -#ifndef GL_ACCUM_BLUE_BITS -#define GL_ACCUM_BLUE_BITS 0x0D5A -#endif -#ifndef GL_ACCUM_ALPHA_BITS -#define GL_ACCUM_ALPHA_BITS 0x0D5B -#endif -#ifndef GL_NAME_STACK_DEPTH -#define GL_NAME_STACK_DEPTH 0x0D70 -#endif -#ifndef GL_AUTO_NORMAL -#define GL_AUTO_NORMAL 0x0D80 -#endif -#ifndef GL_MAP1_COLOR_4 -#define GL_MAP1_COLOR_4 0x0D90 -#endif -#ifndef GL_MAP1_INDEX -#define GL_MAP1_INDEX 0x0D91 -#endif -#ifndef GL_MAP1_NORMAL -#define GL_MAP1_NORMAL 0x0D92 -#endif -#ifndef GL_MAP1_TEXTURE_COORD_1 -#define GL_MAP1_TEXTURE_COORD_1 0x0D93 -#endif -#ifndef GL_MAP1_TEXTURE_COORD_2 -#define GL_MAP1_TEXTURE_COORD_2 0x0D94 -#endif -#ifndef GL_MAP1_TEXTURE_COORD_3 -#define GL_MAP1_TEXTURE_COORD_3 0x0D95 -#endif -#ifndef GL_MAP1_TEXTURE_COORD_4 -#define GL_MAP1_TEXTURE_COORD_4 0x0D96 -#endif -#ifndef GL_MAP1_VERTEX_3 -#define GL_MAP1_VERTEX_3 0x0D97 -#endif -#ifndef GL_MAP1_VERTEX_4 -#define GL_MAP1_VERTEX_4 0x0D98 -#endif -#ifndef GL_MAP2_COLOR_4 -#define GL_MAP2_COLOR_4 0x0DB0 -#endif -#ifndef GL_MAP2_INDEX -#define GL_MAP2_INDEX 0x0DB1 -#endif -#ifndef GL_MAP2_NORMAL -#define GL_MAP2_NORMAL 0x0DB2 -#endif -#ifndef GL_MAP2_TEXTURE_COORD_1 -#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 -#endif -#ifndef GL_MAP2_TEXTURE_COORD_2 -#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 -#endif -#ifndef GL_MAP2_TEXTURE_COORD_3 -#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 -#endif -#ifndef GL_MAP2_TEXTURE_COORD_4 -#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 -#endif -#ifndef GL_MAP2_VERTEX_3 -#define GL_MAP2_VERTEX_3 0x0DB7 -#endif -#ifndef GL_MAP2_VERTEX_4 -#define GL_MAP2_VERTEX_4 0x0DB8 -#endif -#ifndef GL_MAP1_GRID_DOMAIN -#define GL_MAP1_GRID_DOMAIN 0x0DD0 -#endif -#ifndef GL_MAP1_GRID_SEGMENTS -#define GL_MAP1_GRID_SEGMENTS 0x0DD1 -#endif -#ifndef GL_MAP2_GRID_DOMAIN -#define GL_MAP2_GRID_DOMAIN 0x0DD2 -#endif -#ifndef GL_MAP2_GRID_SEGMENTS -#define GL_MAP2_GRID_SEGMENTS 0x0DD3 -#endif -#ifndef GL_TEXTURE_1D -#define GL_TEXTURE_1D 0x0DE0 -#endif -#ifndef GL_TEXTURE_2D -#define GL_TEXTURE_2D 0x0DE1 -#endif -#ifndef GL_FEEDBACK_BUFFER_SIZE -#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 -#endif -#ifndef GL_FEEDBACK_BUFFER_TYPE -#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 -#endif -#ifndef GL_SELECTION_BUFFER_SIZE -#define GL_SELECTION_BUFFER_SIZE 0x0DF4 -#endif -#ifndef GL_POLYGON_OFFSET_UNITS -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#endif -#ifndef GL_POLYGON_OFFSET_POINT -#define GL_POLYGON_OFFSET_POINT 0x2A01 -#endif -#ifndef GL_POLYGON_OFFSET_LINE -#define GL_POLYGON_OFFSET_LINE 0x2A02 -#endif -#ifndef GL_POLYGON_OFFSET_FILL -#define GL_POLYGON_OFFSET_FILL 0x8037 -#endif -#ifndef GL_POLYGON_OFFSET_FACTOR -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#endif -#ifndef GL_TEXTURE_BINDING_1D -#define GL_TEXTURE_BINDING_1D 0x8068 -#endif -#ifndef GL_TEXTURE_BINDING_2D -#define GL_TEXTURE_BINDING_2D 0x8069 -#endif -#ifndef GL_TEXTURE_BINDING_3D -#define GL_TEXTURE_BINDING_3D 0x806A -#endif -#ifndef GL_VERTEX_ARRAY -#define GL_VERTEX_ARRAY 0x8074 -#endif -#ifndef GL_NORMAL_ARRAY -#define GL_NORMAL_ARRAY 0x8075 -#endif -#ifndef GL_COLOR_ARRAY -#define GL_COLOR_ARRAY 0x8076 -#endif -#ifndef GL_INDEX_ARRAY -#define GL_INDEX_ARRAY 0x8077 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY -#define GL_TEXTURE_COORD_ARRAY 0x8078 -#endif -#ifndef GL_EDGE_FLAG_ARRAY -#define GL_EDGE_FLAG_ARRAY 0x8079 -#endif -#ifndef GL_VERTEX_ARRAY_SIZE -#define GL_VERTEX_ARRAY_SIZE 0x807A -#endif -#ifndef GL_VERTEX_ARRAY_TYPE -#define GL_VERTEX_ARRAY_TYPE 0x807B -#endif -#ifndef GL_VERTEX_ARRAY_STRIDE -#define GL_VERTEX_ARRAY_STRIDE 0x807C -#endif -#ifndef GL_NORMAL_ARRAY_TYPE -#define GL_NORMAL_ARRAY_TYPE 0x807E -#endif -#ifndef GL_NORMAL_ARRAY_STRIDE -#define GL_NORMAL_ARRAY_STRIDE 0x807F -#endif -#ifndef GL_COLOR_ARRAY_SIZE -#define GL_COLOR_ARRAY_SIZE 0x8081 -#endif -#ifndef GL_COLOR_ARRAY_TYPE -#define GL_COLOR_ARRAY_TYPE 0x8082 -#endif -#ifndef GL_COLOR_ARRAY_STRIDE -#define GL_COLOR_ARRAY_STRIDE 0x8083 -#endif -#ifndef GL_INDEX_ARRAY_TYPE -#define GL_INDEX_ARRAY_TYPE 0x8085 -#endif -#ifndef GL_INDEX_ARRAY_STRIDE -#define GL_INDEX_ARRAY_STRIDE 0x8086 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_SIZE -#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_TYPE -#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_STRIDE -#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A -#endif -#ifndef GL_EDGE_FLAG_ARRAY_STRIDE -#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C -#endif -#ifndef GL_TEXTURE_WIDTH -#define GL_TEXTURE_WIDTH 0x1000 -#endif -#ifndef GL_TEXTURE_HEIGHT -#define GL_TEXTURE_HEIGHT 0x1001 -#endif -#ifndef GL_TEXTURE_INTERNAL_FORMAT -#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 -#endif -#ifndef GL_TEXTURE_COMPONENTS -#define GL_TEXTURE_COMPONENTS 0x1003 -#endif -#ifndef GL_TEXTURE_BORDER_COLOR -#define GL_TEXTURE_BORDER_COLOR 0x1004 -#endif -#ifndef GL_TEXTURE_BORDER -#define GL_TEXTURE_BORDER 0x1005 -#endif -#ifndef GL_TEXTURE_RED_SIZE -#define GL_TEXTURE_RED_SIZE 0x805C -#endif -#ifndef GL_TEXTURE_GREEN_SIZE -#define GL_TEXTURE_GREEN_SIZE 0x805D -#endif -#ifndef GL_TEXTURE_BLUE_SIZE -#define GL_TEXTURE_BLUE_SIZE 0x805E -#endif -#ifndef GL_TEXTURE_ALPHA_SIZE -#define GL_TEXTURE_ALPHA_SIZE 0x805F -#endif -#ifndef GL_TEXTURE_LUMINANCE_SIZE -#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 -#endif -#ifndef GL_TEXTURE_INTENSITY_SIZE -#define GL_TEXTURE_INTENSITY_SIZE 0x8061 -#endif -#ifndef GL_TEXTURE_PRIORITY -#define GL_TEXTURE_PRIORITY 0x8066 -#endif -#ifndef GL_TEXTURE_RESIDENT -#define GL_TEXTURE_RESIDENT 0x8067 -#endif -#ifndef GL_DONT_CARE -#define GL_DONT_CARE 0x1100 -#endif -#ifndef GL_FASTEST -#define GL_FASTEST 0x1101 -#endif -#ifndef GL_NICEST -#define GL_NICEST 0x1102 -#endif -#ifndef GL_AMBIENT -#define GL_AMBIENT 0x1200 -#endif -#ifndef GL_DIFFUSE -#define GL_DIFFUSE 0x1201 -#endif -#ifndef GL_SPECULAR -#define GL_SPECULAR 0x1202 -#endif -#ifndef GL_POSITION -#define GL_POSITION 0x1203 -#endif -#ifndef GL_SPOT_DIRECTION -#define GL_SPOT_DIRECTION 0x1204 -#endif -#ifndef GL_SPOT_EXPONENT -#define GL_SPOT_EXPONENT 0x1205 -#endif -#ifndef GL_SPOT_CUTOFF -#define GL_SPOT_CUTOFF 0x1206 -#endif -#ifndef GL_CONSTANT_ATTENUATION -#define GL_CONSTANT_ATTENUATION 0x1207 -#endif -#ifndef GL_LINEAR_ATTENUATION -#define GL_LINEAR_ATTENUATION 0x1208 -#endif -#ifndef GL_QUADRATIC_ATTENUATION -#define GL_QUADRATIC_ATTENUATION 0x1209 -#endif -#ifndef GL_COMPILE -#define GL_COMPILE 0x1300 -#endif -#ifndef GL_COMPILE_AND_EXECUTE -#define GL_COMPILE_AND_EXECUTE 0x1301 -#endif -#ifndef GL_BYTE -#define GL_BYTE 0x1400 -#endif -#ifndef GL_UNSIGNED_BYTE -#define GL_UNSIGNED_BYTE 0x1401 -#endif -#ifndef GL_SHORT -#define GL_SHORT 0x1402 -#endif -#ifndef GL_UNSIGNED_SHORT -#define GL_UNSIGNED_SHORT 0x1403 -#endif -#ifndef GL_INT -#define GL_INT 0x1404 -#endif -#ifndef GL_UNSIGNED_INT -#define GL_UNSIGNED_INT 0x1405 -#endif -#ifndef GL_FLOAT -#define GL_FLOAT 0x1406 -#endif -#ifndef GL_2_BYTES -#define GL_2_BYTES 0x1407 -#endif -#ifndef GL_3_BYTES -#define GL_3_BYTES 0x1408 -#endif -#ifndef GL_4_BYTES -#define GL_4_BYTES 0x1409 -#endif -#ifndef GL_DOUBLE -#define GL_DOUBLE 0x140A -#endif -#ifndef GL_DOUBLE_EXT -#define GL_DOUBLE_EXT 0x140A -#endif -#ifndef GL_CLEAR -#define GL_CLEAR 0x1500 -#endif -#ifndef GL_AND -#define GL_AND 0x1501 -#endif -#ifndef GL_AND_REVERSE -#define GL_AND_REVERSE 0x1502 -#endif -#ifndef GL_COPY -#define GL_COPY 0x1503 -#endif -#ifndef GL_AND_INVERTED -#define GL_AND_INVERTED 0x1504 -#endif -#ifndef GL_NOOP -#define GL_NOOP 0x1505 -#endif -#ifndef GL_XOR -#define GL_XOR 0x1506 -#endif -#ifndef GL_OR -#define GL_OR 0x1507 -#endif -#ifndef GL_NOR -#define GL_NOR 0x1508 -#endif -#ifndef GL_EQUIV -#define GL_EQUIV 0x1509 -#endif -#ifndef GL_INVERT -#define GL_INVERT 0x150A -#endif -#ifndef GL_OR_REVERSE -#define GL_OR_REVERSE 0x150B -#endif -#ifndef GL_COPY_INVERTED -#define GL_COPY_INVERTED 0x150C -#endif -#ifndef GL_OR_INVERTED -#define GL_OR_INVERTED 0x150D -#endif -#ifndef GL_NAND -#define GL_NAND 0x150E -#endif -#ifndef GL_SET -#define GL_SET 0x150F -#endif -#ifndef GL_EMISSION -#define GL_EMISSION 0x1600 -#endif -#ifndef GL_SHININESS -#define GL_SHININESS 0x1601 -#endif -#ifndef GL_AMBIENT_AND_DIFFUSE -#define GL_AMBIENT_AND_DIFFUSE 0x1602 -#endif -#ifndef GL_COLOR_INDEXES -#define GL_COLOR_INDEXES 0x1603 -#endif -#ifndef GL_MODELVIEW -#define GL_MODELVIEW 0x1700 -#endif -#ifndef GL_PROJECTION -#define GL_PROJECTION 0x1701 -#endif -#ifndef GL_TEXTURE -#define GL_TEXTURE 0x1702 -#endif -#ifndef GL_COLOR -#define GL_COLOR 0x1800 -#endif -#ifndef GL_DEPTH -#define GL_DEPTH 0x1801 -#endif -#ifndef GL_STENCIL -#define GL_STENCIL 0x1802 -#endif -#ifndef GL_COLOR_INDEX -#define GL_COLOR_INDEX 0x1900 -#endif -#ifndef GL_STENCIL_INDEX -#define GL_STENCIL_INDEX 0x1901 -#endif -#ifndef GL_DEPTH_COMPONENT -#define GL_DEPTH_COMPONENT 0x1902 -#endif -#ifndef GL_RED -#define GL_RED 0x1903 -#endif -#ifndef GL_GREEN -#define GL_GREEN 0x1904 -#endif -#ifndef GL_BLUE -#define GL_BLUE 0x1905 -#endif -#ifndef GL_ALPHA -#define GL_ALPHA 0x1906 -#endif -#ifndef GL_RGB -#define GL_RGB 0x1907 -#endif -#ifndef GL_RGBA -#define GL_RGBA 0x1908 -#endif -#ifndef GL_LUMINANCE -#define GL_LUMINANCE 0x1909 -#endif -#ifndef GL_LUMINANCE_ALPHA -#define GL_LUMINANCE_ALPHA 0x190A -#endif -#ifndef GL_BITMAP -#define GL_BITMAP 0x1A00 -#endif -#ifndef GL_POINT -#define GL_POINT 0x1B00 -#endif -#ifndef GL_LINE -#define GL_LINE 0x1B01 -#endif -#ifndef GL_FILL -#define GL_FILL 0x1B02 -#endif -#ifndef GL_RENDER -#define GL_RENDER 0x1C00 -#endif -#ifndef GL_FEEDBACK -#define GL_FEEDBACK 0x1C01 -#endif -#ifndef GL_SELECT -#define GL_SELECT 0x1C02 -#endif -#ifndef GL_FLAT -#define GL_FLAT 0x1D00 -#endif -#ifndef GL_SMOOTH -#define GL_SMOOTH 0x1D01 -#endif -#ifndef GL_KEEP -#define GL_KEEP 0x1E00 -#endif -#ifndef GL_REPLACE -#define GL_REPLACE 0x1E01 -#endif -#ifndef GL_INCR -#define GL_INCR 0x1E02 -#endif -#ifndef GL_DECR -#define GL_DECR 0x1E03 -#endif -#ifndef GL_VENDOR -#define GL_VENDOR 0x1F00 -#endif -#ifndef GL_RENDERER -#define GL_RENDERER 0x1F01 -#endif -#ifndef GL_VERSION -#define GL_VERSION 0x1F02 -#endif -#ifndef GL_EXTENSIONS -#define GL_EXTENSIONS 0x1F03 -#endif -#ifndef GL_S -#define GL_S 0x2000 -#endif -#ifndef GL_T -#define GL_T 0x2001 -#endif -#ifndef GL_R -#define GL_R 0x2002 -#endif -#ifndef GL_Q -#define GL_Q 0x2003 -#endif -#ifndef GL_MODULATE -#define GL_MODULATE 0x2100 -#endif -#ifndef GL_DECAL -#define GL_DECAL 0x2101 -#endif -#ifndef GL_TEXTURE_ENV_MODE -#define GL_TEXTURE_ENV_MODE 0x2200 -#endif -#ifndef GL_TEXTURE_ENV_COLOR -#define GL_TEXTURE_ENV_COLOR 0x2201 -#endif -#ifndef GL_TEXTURE_ENV -#define GL_TEXTURE_ENV 0x2300 -#endif -#ifndef GL_EYE_LINEAR -#define GL_EYE_LINEAR 0x2400 -#endif -#ifndef GL_OBJECT_LINEAR -#define GL_OBJECT_LINEAR 0x2401 -#endif -#ifndef GL_SPHERE_MAP -#define GL_SPHERE_MAP 0x2402 -#endif -#ifndef GL_TEXTURE_GEN_MODE -#define GL_TEXTURE_GEN_MODE 0x2500 -#endif -#ifndef GL_OBJECT_PLANE -#define GL_OBJECT_PLANE 0x2501 -#endif -#ifndef GL_EYE_PLANE -#define GL_EYE_PLANE 0x2502 -#endif -#ifndef GL_NEAREST -#define GL_NEAREST 0x2600 -#endif -#ifndef GL_LINEAR -#define GL_LINEAR 0x2601 -#endif -#ifndef GL_NEAREST_MIPMAP_NEAREST -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#endif -#ifndef GL_LINEAR_MIPMAP_NEAREST -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#endif -#ifndef GL_NEAREST_MIPMAP_LINEAR -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#endif -#ifndef GL_LINEAR_MIPMAP_LINEAR -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#endif -#ifndef GL_TEXTURE_MAG_FILTER -#define GL_TEXTURE_MAG_FILTER 0x2800 -#endif -#ifndef GL_TEXTURE_MIN_FILTER -#define GL_TEXTURE_MIN_FILTER 0x2801 -#endif -#ifndef GL_TEXTURE_WRAP_S -#define GL_TEXTURE_WRAP_S 0x2802 -#endif -#ifndef GL_TEXTURE_WRAP_T -#define GL_TEXTURE_WRAP_T 0x2803 -#endif -#ifndef GL_PROXY_TEXTURE_1D -#define GL_PROXY_TEXTURE_1D 0x8063 -#endif -#ifndef GL_PROXY_TEXTURE_2D -#define GL_PROXY_TEXTURE_2D 0x8064 -#endif -#ifndef GL_CLAMP -#define GL_CLAMP 0x2900 -#endif -#ifndef GL_REPEAT -#define GL_REPEAT 0x2901 -#endif -#ifndef GL_R3_G3_B2 -#define GL_R3_G3_B2 0x2A10 -#endif -#ifndef GL_ALPHA4 -#define GL_ALPHA4 0x803B -#endif -#ifndef GL_ALPHA8 -#define GL_ALPHA8 0x803C -#endif -#ifndef GL_ALPHA12 -#define GL_ALPHA12 0x803D -#endif -#ifndef GL_ALPHA16 -#define GL_ALPHA16 0x803E -#endif -#ifndef GL_LUMINANCE4 -#define GL_LUMINANCE4 0x803F -#endif -#ifndef GL_LUMINANCE8 -#define GL_LUMINANCE8 0x8040 -#endif -#ifndef GL_LUMINANCE12 -#define GL_LUMINANCE12 0x8041 -#endif -#ifndef GL_LUMINANCE16 -#define GL_LUMINANCE16 0x8042 -#endif -#ifndef GL_LUMINANCE4_ALPHA4 -#define GL_LUMINANCE4_ALPHA4 0x8043 -#endif -#ifndef GL_LUMINANCE6_ALPHA2 -#define GL_LUMINANCE6_ALPHA2 0x8044 -#endif -#ifndef GL_LUMINANCE8_ALPHA8 -#define GL_LUMINANCE8_ALPHA8 0x8045 -#endif -#ifndef GL_LUMINANCE12_ALPHA4 -#define GL_LUMINANCE12_ALPHA4 0x8046 -#endif -#ifndef GL_LUMINANCE12_ALPHA12 -#define GL_LUMINANCE12_ALPHA12 0x8047 -#endif -#ifndef GL_LUMINANCE16_ALPHA16 -#define GL_LUMINANCE16_ALPHA16 0x8048 -#endif -#ifndef GL_INTENSITY -#define GL_INTENSITY 0x8049 -#endif -#ifndef GL_INTENSITY4 -#define GL_INTENSITY4 0x804A -#endif -#ifndef GL_INTENSITY8 -#define GL_INTENSITY8 0x804B -#endif -#ifndef GL_INTENSITY12 -#define GL_INTENSITY12 0x804C -#endif -#ifndef GL_INTENSITY16 -#define GL_INTENSITY16 0x804D -#endif -#ifndef GL_RGB4 -#define GL_RGB4 0x804F -#endif -#ifndef GL_RGB5 -#define GL_RGB5 0x8050 -#endif -#ifndef GL_RGB8 -#define GL_RGB8 0x8051 -#endif -#ifndef GL_RGB10 -#define GL_RGB10 0x8052 -#endif -#ifndef GL_RGB12 -#define GL_RGB12 0x8053 -#endif -#ifndef GL_RGB16 -#define GL_RGB16 0x8054 -#endif -#ifndef GL_RGBA2 -#define GL_RGBA2 0x8055 -#endif -#ifndef GL_RGBA4 -#define GL_RGBA4 0x8056 -#endif -#ifndef GL_RGB5_A1 -#define GL_RGB5_A1 0x8057 -#endif -#ifndef GL_RGBA8 -#define GL_RGBA8 0x8058 -#endif -#ifndef GL_RGB10_A2 -#define GL_RGB10_A2 0x8059 -#endif -#ifndef GL_RGBA12 -#define GL_RGBA12 0x805A -#endif -#ifndef GL_RGBA16 -#define GL_RGBA16 0x805B -#endif -#ifndef GL_V2F -#define GL_V2F 0x2A20 -#endif -#ifndef GL_V3F -#define GL_V3F 0x2A21 -#endif -#ifndef GL_C4UB_V2F -#define GL_C4UB_V2F 0x2A22 -#endif -#ifndef GL_C4UB_V3F -#define GL_C4UB_V3F 0x2A23 -#endif -#ifndef GL_C3F_V3F -#define GL_C3F_V3F 0x2A24 -#endif -#ifndef GL_N3F_V3F -#define GL_N3F_V3F 0x2A25 -#endif -#ifndef GL_C4F_N3F_V3F -#define GL_C4F_N3F_V3F 0x2A26 -#endif -#ifndef GL_T2F_V3F -#define GL_T2F_V3F 0x2A27 -#endif -#ifndef GL_T4F_V4F -#define GL_T4F_V4F 0x2A28 -#endif -#ifndef GL_T2F_C4UB_V3F -#define GL_T2F_C4UB_V3F 0x2A29 -#endif -#ifndef GL_T2F_C3F_V3F -#define GL_T2F_C3F_V3F 0x2A2A -#endif -#ifndef GL_T2F_N3F_V3F -#define GL_T2F_N3F_V3F 0x2A2B -#endif -#ifndef GL_T2F_C4F_N3F_V3F -#define GL_T2F_C4F_N3F_V3F 0x2A2C -#endif -#ifndef GL_T4F_C4F_N3F_V4F -#define GL_T4F_C4F_N3F_V4F 0x2A2D -#endif -#ifndef GL_CLIP_PLANE0 -#define GL_CLIP_PLANE0 0x3000 -#endif -#ifndef GL_CLIP_PLANE1 -#define GL_CLIP_PLANE1 0x3001 -#endif -#ifndef GL_CLIP_PLANE2 -#define GL_CLIP_PLANE2 0x3002 -#endif -#ifndef GL_CLIP_PLANE3 -#define GL_CLIP_PLANE3 0x3003 -#endif -#ifndef GL_CLIP_PLANE4 -#define GL_CLIP_PLANE4 0x3004 -#endif -#ifndef GL_CLIP_PLANE5 -#define GL_CLIP_PLANE5 0x3005 -#endif -#ifndef GL_LIGHT0 -#define GL_LIGHT0 0x4000 -#endif -#ifndef GL_LIGHT1 -#define GL_LIGHT1 0x4001 -#endif -#ifndef GL_LIGHT2 -#define GL_LIGHT2 0x4002 -#endif -#ifndef GL_LIGHT3 -#define GL_LIGHT3 0x4003 -#endif -#ifndef GL_LIGHT4 -#define GL_LIGHT4 0x4004 -#endif -#ifndef GL_LIGHT5 -#define GL_LIGHT5 0x4005 -#endif -#ifndef GL_LIGHT6 -#define GL_LIGHT6 0x4006 -#endif -#ifndef GL_LIGHT7 -#define GL_LIGHT7 0x4007 -#endif -#ifndef GL_ABGR_EXT -#define GL_ABGR_EXT 0x8000 -#endif -#ifndef GL_CONSTANT_COLOR -#define GL_CONSTANT_COLOR 0x8001 -#endif -#ifndef GL_CONSTANT_COLOR_EXT -#define GL_CONSTANT_COLOR_EXT 0x8001 -#endif -#ifndef GL_ONE_MINUS_CONSTANT_COLOR -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#endif -#ifndef GL_ONE_MINUS_CONSTANT_COLOR_EXT -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#endif -#ifndef GL_CONSTANT_ALPHA -#define GL_CONSTANT_ALPHA 0x8003 -#endif -#ifndef GL_CONSTANT_ALPHA_EXT -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#endif -#ifndef GL_ONE_MINUS_CONSTANT_ALPHA -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#endif -#ifndef GL_ONE_MINUS_CONSTANT_ALPHA_EXT -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#endif -#ifndef GL_BLEND_COLOR -#define GL_BLEND_COLOR 0x8005 -#endif -#ifndef GL_BLEND_COLOR_EXT -#define GL_BLEND_COLOR_EXT 0x8005 -#endif -#ifndef GL_FUNC_ADD -#define GL_FUNC_ADD 0x8006 -#endif -#ifndef GL_FUNC_ADD_EXT -#define GL_FUNC_ADD_EXT 0x8006 -#endif -#ifndef GL_MIN -#define GL_MIN 0x8007 -#endif -#ifndef GL_MIN_EXT -#define GL_MIN_EXT 0x8007 -#endif -#ifndef GL_MAX -#define GL_MAX 0x8008 -#endif -#ifndef GL_MAX_EXT -#define GL_MAX_EXT 0x8008 -#endif -#ifndef GL_BLEND_EQUATION -#define GL_BLEND_EQUATION 0x8009 -#endif -#ifndef GL_BLEND_EQUATION_EXT -#define GL_BLEND_EQUATION_EXT 0x8009 -#endif -#ifndef GL_FUNC_SUBTRACT -#define GL_FUNC_SUBTRACT 0x800A -#endif -#ifndef GL_FUNC_SUBTRACT_EXT -#define GL_FUNC_SUBTRACT_EXT 0x800A -#endif -#ifndef GL_FUNC_REVERSE_SUBTRACT -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#endif -#ifndef GL_FUNC_REVERSE_SUBTRACT_EXT -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B -#endif -#ifndef GL_CMYK_EXT -#define GL_CMYK_EXT 0x800C -#endif -#ifndef GL_CMYKA_EXT -#define GL_CMYKA_EXT 0x800D -#endif -#ifndef GL_PACK_CMYK_HINT_EXT -#define GL_PACK_CMYK_HINT_EXT 0x800E -#endif -#ifndef GL_UNPACK_CMYK_HINT_EXT -#define GL_UNPACK_CMYK_HINT_EXT 0x800F -#endif -#ifndef GL_CONVOLUTION_1D -#define GL_CONVOLUTION_1D 0x8010 -#endif -#ifndef GL_CONVOLUTION_1D_EXT -#define GL_CONVOLUTION_1D_EXT 0x8010 -#endif -#ifndef GL_CONVOLUTION_2D -#define GL_CONVOLUTION_2D 0x8011 -#endif -#ifndef GL_CONVOLUTION_2D_EXT -#define GL_CONVOLUTION_2D_EXT 0x8011 -#endif -#ifndef GL_SEPARABLE_2D -#define GL_SEPARABLE_2D 0x8012 -#endif -#ifndef GL_SEPARABLE_2D_EXT -#define GL_SEPARABLE_2D_EXT 0x8012 -#endif -#ifndef GL_CONVOLUTION_BORDER_MODE -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#endif -#ifndef GL_CONVOLUTION_BORDER_MODE_EXT -#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 -#endif -#ifndef GL_CONVOLUTION_FILTER_SCALE -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#endif -#ifndef GL_CONVOLUTION_FILTER_SCALE_EXT -#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 -#endif -#ifndef GL_CONVOLUTION_FILTER_BIAS -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#endif -#ifndef GL_CONVOLUTION_FILTER_BIAS_EXT -#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 -#endif -#ifndef GL_REDUCE -#define GL_REDUCE 0x8016 -#endif -#ifndef GL_REDUCE_EXT -#define GL_REDUCE_EXT 0x8016 -#endif -#ifndef GL_CONVOLUTION_FORMAT -#define GL_CONVOLUTION_FORMAT 0x8017 -#endif -#ifndef GL_CONVOLUTION_FORMAT_EXT -#define GL_CONVOLUTION_FORMAT_EXT 0x8017 -#endif -#ifndef GL_CONVOLUTION_WIDTH -#define GL_CONVOLUTION_WIDTH 0x8018 -#endif -#ifndef GL_CONVOLUTION_WIDTH_EXT -#define GL_CONVOLUTION_WIDTH_EXT 0x8018 -#endif -#ifndef GL_CONVOLUTION_HEIGHT -#define GL_CONVOLUTION_HEIGHT 0x8019 -#endif -#ifndef GL_CONVOLUTION_HEIGHT_EXT -#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 -#endif -#ifndef GL_MAX_CONVOLUTION_WIDTH -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#endif -#ifndef GL_MAX_CONVOLUTION_WIDTH_EXT -#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A -#endif -#ifndef GL_MAX_CONVOLUTION_HEIGHT -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#endif -#ifndef GL_MAX_CONVOLUTION_HEIGHT_EXT -#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B -#endif -#ifndef GL_POST_CONVOLUTION_RED_SCALE -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#endif -#ifndef GL_POST_CONVOLUTION_RED_SCALE_EXT -#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C -#endif -#ifndef GL_POST_CONVOLUTION_GREEN_SCALE -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#endif -#ifndef GL_POST_CONVOLUTION_GREEN_SCALE_EXT -#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D -#endif -#ifndef GL_POST_CONVOLUTION_BLUE_SCALE -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#endif -#ifndef GL_POST_CONVOLUTION_BLUE_SCALE_EXT -#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E -#endif -#ifndef GL_POST_CONVOLUTION_ALPHA_SCALE -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#endif -#ifndef GL_POST_CONVOLUTION_ALPHA_SCALE_EXT -#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F -#endif -#ifndef GL_POST_CONVOLUTION_RED_BIAS -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#endif -#ifndef GL_POST_CONVOLUTION_RED_BIAS_EXT -#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 -#endif -#ifndef GL_POST_CONVOLUTION_GREEN_BIAS -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#endif -#ifndef GL_POST_CONVOLUTION_GREEN_BIAS_EXT -#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 -#endif -#ifndef GL_POST_CONVOLUTION_BLUE_BIAS -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#endif -#ifndef GL_POST_CONVOLUTION_BLUE_BIAS_EXT -#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 -#endif -#ifndef GL_POST_CONVOLUTION_ALPHA_BIAS -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#endif -#ifndef GL_POST_CONVOLUTION_ALPHA_BIAS_EXT -#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 -#endif -#ifndef GL_HISTOGRAM -#define GL_HISTOGRAM 0x8024 -#endif -#ifndef GL_HISTOGRAM_EXT -#define GL_HISTOGRAM_EXT 0x8024 -#endif -#ifndef GL_PROXY_HISTOGRAM -#define GL_PROXY_HISTOGRAM 0x8025 -#endif -#ifndef GL_PROXY_HISTOGRAM_EXT -#define GL_PROXY_HISTOGRAM_EXT 0x8025 -#endif -#ifndef GL_HISTOGRAM_WIDTH -#define GL_HISTOGRAM_WIDTH 0x8026 -#endif -#ifndef GL_HISTOGRAM_WIDTH_EXT -#define GL_HISTOGRAM_WIDTH_EXT 0x8026 -#endif -#ifndef GL_HISTOGRAM_FORMAT -#define GL_HISTOGRAM_FORMAT 0x8027 -#endif -#ifndef GL_HISTOGRAM_FORMAT_EXT -#define GL_HISTOGRAM_FORMAT_EXT 0x8027 -#endif -#ifndef GL_HISTOGRAM_RED_SIZE -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#endif -#ifndef GL_HISTOGRAM_RED_SIZE_EXT -#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 -#endif -#ifndef GL_HISTOGRAM_GREEN_SIZE -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#endif -#ifndef GL_HISTOGRAM_GREEN_SIZE_EXT -#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 -#endif -#ifndef GL_HISTOGRAM_BLUE_SIZE -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#endif -#ifndef GL_HISTOGRAM_BLUE_SIZE_EXT -#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A -#endif -#ifndef GL_HISTOGRAM_ALPHA_SIZE -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#endif -#ifndef GL_HISTOGRAM_ALPHA_SIZE_EXT -#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B -#endif -#ifndef GL_HISTOGRAM_LUMINANCE_SIZE -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#endif -#ifndef GL_HISTOGRAM_LUMINANCE_SIZE_EXT -#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C -#endif -#ifndef GL_HISTOGRAM_SINK -#define GL_HISTOGRAM_SINK 0x802D -#endif -#ifndef GL_HISTOGRAM_SINK_EXT -#define GL_HISTOGRAM_SINK_EXT 0x802D -#endif -#ifndef GL_MINMAX -#define GL_MINMAX 0x802E -#endif -#ifndef GL_MINMAX_EXT -#define GL_MINMAX_EXT 0x802E -#endif -#ifndef GL_MINMAX_FORMAT -#define GL_MINMAX_FORMAT 0x802F -#endif -#ifndef GL_MINMAX_FORMAT_EXT -#define GL_MINMAX_FORMAT_EXT 0x802F -#endif -#ifndef GL_MINMAX_SINK -#define GL_MINMAX_SINK 0x8030 -#endif -#ifndef GL_MINMAX_SINK_EXT -#define GL_MINMAX_SINK_EXT 0x8030 -#endif -#ifndef GL_TABLE_TOO_LARGE -#define GL_TABLE_TOO_LARGE 0x8031 -#endif -#ifndef GL_TABLE_TOO_LARGE_EXT -#define GL_TABLE_TOO_LARGE_EXT 0x8031 -#endif -#ifndef GL_UNSIGNED_BYTE_3_3_2 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#endif -#ifndef GL_UNSIGNED_BYTE_3_3_2_EXT -#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 -#endif -#ifndef GL_UNSIGNED_SHORT_4_4_4_4 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#endif -#ifndef GL_UNSIGNED_SHORT_4_4_4_4_EXT -#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 -#endif -#ifndef GL_UNSIGNED_SHORT_5_5_5_1 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#endif -#ifndef GL_UNSIGNED_SHORT_5_5_5_1_EXT -#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 -#endif -#ifndef GL_UNSIGNED_INT_8_8_8_8 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#endif -#ifndef GL_UNSIGNED_INT_8_8_8_8_EXT -#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 -#endif -#ifndef GL_UNSIGNED_INT_10_10_10_2 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#endif -#ifndef GL_UNSIGNED_INT_10_10_10_2_EXT -#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 -#endif -#ifndef GL_UNSIGNED_BYTE_2_3_3_REV -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#endif -#ifndef GL_UNSIGNED_BYTE_2_3_3_REV_EXT -#define GL_UNSIGNED_BYTE_2_3_3_REV_EXT 0x8362 -#endif -#ifndef GL_UNSIGNED_SHORT_5_6_5 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#endif -#ifndef GL_UNSIGNED_SHORT_5_6_5_EXT -#define GL_UNSIGNED_SHORT_5_6_5_EXT 0x8363 -#endif -#ifndef GL_UNSIGNED_SHORT_5_6_5_REV -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#endif -#ifndef GL_UNSIGNED_SHORT_5_6_5_REV_EXT -#define GL_UNSIGNED_SHORT_5_6_5_REV_EXT 0x8364 -#endif -#ifndef GL_UNSIGNED_SHORT_4_4_4_4_REV -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#endif -#ifndef GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT -#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 -#endif -#ifndef GL_UNSIGNED_SHORT_1_5_5_5_REV -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#endif -#ifndef GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT -#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 -#endif -#ifndef GL_UNSIGNED_INT_8_8_8_8_REV -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#endif -#ifndef GL_UNSIGNED_INT_8_8_8_8_REV_EXT -#define GL_UNSIGNED_INT_8_8_8_8_REV_EXT 0x8367 -#endif -#ifndef GL_UNSIGNED_INT_2_10_10_10_REV -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#endif -#ifndef GL_UNSIGNED_INT_2_10_10_10_REV_EXT -#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 -#endif -#ifndef GL_POLYGON_OFFSET_EXT -#define GL_POLYGON_OFFSET_EXT 0x8037 -#endif -#ifndef GL_POLYGON_OFFSET_FACTOR_EXT -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#endif -#ifndef GL_POLYGON_OFFSET_BIAS_EXT -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 -#endif -#ifndef GL_RESCALE_NORMAL -#define GL_RESCALE_NORMAL 0x803A -#endif -#ifndef GL_RESCALE_NORMAL_EXT -#define GL_RESCALE_NORMAL_EXT 0x803A -#endif -#ifndef GL_ALPHA4_EXT -#define GL_ALPHA4_EXT 0x803B -#endif -#ifndef GL_ALPHA8_EXT -#define GL_ALPHA8_EXT 0x803C -#endif -#ifndef GL_ALPHA12_EXT -#define GL_ALPHA12_EXT 0x803D -#endif -#ifndef GL_ALPHA16_EXT -#define GL_ALPHA16_EXT 0x803E -#endif -#ifndef GL_LUMINANCE4_EXT -#define GL_LUMINANCE4_EXT 0x803F -#endif -#ifndef GL_LUMINANCE8_EXT -#define GL_LUMINANCE8_EXT 0x8040 -#endif -#ifndef GL_LUMINANCE12_EXT -#define GL_LUMINANCE12_EXT 0x8041 -#endif -#ifndef GL_LUMINANCE16_EXT -#define GL_LUMINANCE16_EXT 0x8042 -#endif -#ifndef GL_LUMINANCE4_ALPHA4_EXT -#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 -#endif -#ifndef GL_LUMINANCE6_ALPHA2_EXT -#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 -#endif -#ifndef GL_LUMINANCE8_ALPHA8_EXT -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#endif -#ifndef GL_LUMINANCE12_ALPHA4_EXT -#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 -#endif -#ifndef GL_LUMINANCE12_ALPHA12_EXT -#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 -#endif -#ifndef GL_LUMINANCE16_ALPHA16_EXT -#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 -#endif -#ifndef GL_INTENSITY_EXT -#define GL_INTENSITY_EXT 0x8049 -#endif -#ifndef GL_INTENSITY4_EXT -#define GL_INTENSITY4_EXT 0x804A -#endif -#ifndef GL_INTENSITY8_EXT -#define GL_INTENSITY8_EXT 0x804B -#endif -#ifndef GL_INTENSITY12_EXT -#define GL_INTENSITY12_EXT 0x804C -#endif -#ifndef GL_INTENSITY16_EXT -#define GL_INTENSITY16_EXT 0x804D -#endif -#ifndef GL_RGB2_EXT -#define GL_RGB2_EXT 0x804E -#endif -#ifndef GL_RGB4_EXT -#define GL_RGB4_EXT 0x804F -#endif -#ifndef GL_RGB5_EXT -#define GL_RGB5_EXT 0x8050 -#endif -#ifndef GL_RGB8_EXT -#define GL_RGB8_EXT 0x8051 -#endif -#ifndef GL_RGB10_EXT -#define GL_RGB10_EXT 0x8052 -#endif -#ifndef GL_RGB12_EXT -#define GL_RGB12_EXT 0x8053 -#endif -#ifndef GL_RGB16_EXT -#define GL_RGB16_EXT 0x8054 -#endif -#ifndef GL_RGBA2_EXT -#define GL_RGBA2_EXT 0x8055 -#endif -#ifndef GL_RGBA4_EXT -#define GL_RGBA4_EXT 0x8056 -#endif -#ifndef GL_RGB5_A1_EXT -#define GL_RGB5_A1_EXT 0x8057 -#endif -#ifndef GL_RGBA8_EXT -#define GL_RGBA8_EXT 0x8058 -#endif -#ifndef GL_RGB10_A2_EXT -#define GL_RGB10_A2_EXT 0x8059 -#endif -#ifndef GL_RGBA12_EXT -#define GL_RGBA12_EXT 0x805A -#endif -#ifndef GL_RGBA16_EXT -#define GL_RGBA16_EXT 0x805B -#endif -#ifndef GL_TEXTURE_RED_SIZE_EXT -#define GL_TEXTURE_RED_SIZE_EXT 0x805C -#endif -#ifndef GL_TEXTURE_GREEN_SIZE_EXT -#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D -#endif -#ifndef GL_TEXTURE_BLUE_SIZE_EXT -#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E -#endif -#ifndef GL_TEXTURE_ALPHA_SIZE_EXT -#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F -#endif -#ifndef GL_TEXTURE_LUMINANCE_SIZE_EXT -#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 -#endif -#ifndef GL_TEXTURE_INTENSITY_SIZE_EXT -#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 -#endif -#ifndef GL_REPLACE_EXT -#define GL_REPLACE_EXT 0x8062 -#endif -#ifndef GL_PROXY_TEXTURE_1D_EXT -#define GL_PROXY_TEXTURE_1D_EXT 0x8063 -#endif -#ifndef GL_PROXY_TEXTURE_2D_EXT -#define GL_PROXY_TEXTURE_2D_EXT 0x8064 -#endif -#ifndef GL_TEXTURE_TOO_LARGE_EXT -#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 -#endif -#ifndef GL_TEXTURE_PRIORITY_EXT -#define GL_TEXTURE_PRIORITY_EXT 0x8066 -#endif -#ifndef GL_TEXTURE_RESIDENT_EXT -#define GL_TEXTURE_RESIDENT_EXT 0x8067 -#endif -#ifndef GL_TEXTURE_1D_BINDING_EXT -#define GL_TEXTURE_1D_BINDING_EXT 0x8068 -#endif -#ifndef GL_TEXTURE_2D_BINDING_EXT -#define GL_TEXTURE_2D_BINDING_EXT 0x8069 -#endif -#ifndef GL_TEXTURE_3D_BINDING_EXT -#define GL_TEXTURE_3D_BINDING_EXT 0x806A -#endif -#ifndef GL_PACK_SKIP_IMAGES -#define GL_PACK_SKIP_IMAGES 0x806B -#endif -#ifndef GL_PACK_SKIP_IMAGES_EXT -#define GL_PACK_SKIP_IMAGES_EXT 0x806B -#endif -#ifndef GL_PACK_IMAGE_HEIGHT -#define GL_PACK_IMAGE_HEIGHT 0x806C -#endif -#ifndef GL_PACK_IMAGE_HEIGHT_EXT -#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C -#endif -#ifndef GL_UNPACK_SKIP_IMAGES -#define GL_UNPACK_SKIP_IMAGES 0x806D -#endif -#ifndef GL_UNPACK_SKIP_IMAGES_EXT -#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D -#endif -#ifndef GL_UNPACK_IMAGE_HEIGHT -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#endif -#ifndef GL_UNPACK_IMAGE_HEIGHT_EXT -#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E -#endif -#ifndef GL_TEXTURE_3D -#define GL_TEXTURE_3D 0x806F -#endif -#ifndef GL_TEXTURE_3D_EXT -#define GL_TEXTURE_3D_EXT 0x806F -#endif -#ifndef GL_PROXY_TEXTURE_3D -#define GL_PROXY_TEXTURE_3D 0x8070 -#endif -#ifndef GL_PROXY_TEXTURE_3D_EXT -#define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#endif -#ifndef GL_TEXTURE_DEPTH -#define GL_TEXTURE_DEPTH 0x8071 -#endif -#ifndef GL_TEXTURE_DEPTH_EXT -#define GL_TEXTURE_DEPTH_EXT 0x8071 -#endif -#ifndef GL_TEXTURE_WRAP_R -#define GL_TEXTURE_WRAP_R 0x8072 -#endif -#ifndef GL_TEXTURE_WRAP_R_EXT -#define GL_TEXTURE_WRAP_R_EXT 0x8072 -#endif -#ifndef GL_MAX_3D_TEXTURE_SIZE -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#endif -#ifndef GL_MAX_3D_TEXTURE_SIZE_EXT -#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 -#endif -#ifndef GL_VERTEX_ARRAY_EXT -#define GL_VERTEX_ARRAY_EXT 0x8074 -#endif -#ifndef GL_NORMAL_ARRAY_EXT -#define GL_NORMAL_ARRAY_EXT 0x8075 -#endif -#ifndef GL_COLOR_ARRAY_EXT -#define GL_COLOR_ARRAY_EXT 0x8076 -#endif -#ifndef GL_INDEX_ARRAY_EXT -#define GL_INDEX_ARRAY_EXT 0x8077 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_EXT -#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 -#endif -#ifndef GL_EDGE_FLAG_ARRAY_EXT -#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 -#endif -#ifndef GL_VERTEX_ARRAY_SIZE_EXT -#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A -#endif -#ifndef GL_VERTEX_ARRAY_TYPE_EXT -#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B -#endif -#ifndef GL_VERTEX_ARRAY_STRIDE_EXT -#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C -#endif -#ifndef GL_VERTEX_ARRAY_COUNT_EXT -#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D -#endif -#ifndef GL_NORMAL_ARRAY_TYPE_EXT -#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E -#endif -#ifndef GL_NORMAL_ARRAY_STRIDE_EXT -#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F -#endif -#ifndef GL_NORMAL_ARRAY_COUNT_EXT -#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 -#endif -#ifndef GL_COLOR_ARRAY_SIZE_EXT -#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 -#endif -#ifndef GL_COLOR_ARRAY_TYPE_EXT -#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 -#endif -#ifndef GL_COLOR_ARRAY_STRIDE_EXT -#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 -#endif -#ifndef GL_COLOR_ARRAY_COUNT_EXT -#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 -#endif -#ifndef GL_INDEX_ARRAY_TYPE_EXT -#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 -#endif -#ifndef GL_INDEX_ARRAY_STRIDE_EXT -#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 -#endif -#ifndef GL_INDEX_ARRAY_COUNT_EXT -#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_SIZE_EXT -#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_TYPE_EXT -#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_STRIDE_EXT -#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_COUNT_EXT -#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B -#endif -#ifndef GL_EDGE_FLAG_ARRAY_STRIDE_EXT -#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C -#endif -#ifndef GL_EDGE_FLAG_ARRAY_COUNT_EXT -#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D -#endif -#ifndef GL_VERTEX_ARRAY_POINTER_EXT -#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E -#endif -#ifndef GL_NORMAL_ARRAY_POINTER_EXT -#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F -#endif -#ifndef GL_COLOR_ARRAY_POINTER_EXT -#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 -#endif -#ifndef GL_INDEX_ARRAY_POINTER_EXT -#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_POINTER_EXT -#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 -#endif -#ifndef GL_EDGE_FLAG_ARRAY_POINTER_EXT -#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 -#endif -#ifndef GL_INTERLACE_SGIX -#define GL_INTERLACE_SGIX 0x8094 -#endif -#ifndef GL_DETAIL_TEXTURE_2D_SGIS -#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 -#endif -#ifndef GL_DETAIL_TEXTURE_2D_BINDING_SGIS -#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 -#endif -#ifndef GL_LINEAR_DETAIL_SGIS -#define GL_LINEAR_DETAIL_SGIS 0x8097 -#endif -#ifndef GL_LINEAR_DETAIL_ALPHA_SGIS -#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 -#endif -#ifndef GL_LINEAR_DETAIL_COLOR_SGIS -#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 -#endif -#ifndef GL_DETAIL_TEXTURE_LEVEL_SGIS -#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A -#endif -#ifndef GL_DETAIL_TEXTURE_MODE_SGIS -#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B -#endif -#ifndef GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS -#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C -#endif -#ifndef GL_MULTISAMPLE -#define GL_MULTISAMPLE 0x809D -#endif -#ifndef GL_MULTISAMPLE_ARB -#define GL_MULTISAMPLE_ARB 0x809D -#endif -#ifndef GL_SAMPLE_ALPHA_TO_COVERAGE -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#endif -#ifndef GL_SAMPLE_ALPHA_TO_COVERAGE_ARB -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E -#endif -#ifndef GL_SAMPLE_ALPHA_TO_ONE -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#endif -#ifndef GL_SAMPLE_ALPHA_TO_ONE_ARB -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#endif -#ifndef GL_SAMPLE_COVERAGE -#define GL_SAMPLE_COVERAGE 0x80A0 -#endif -#ifndef GL_SAMPLE_COVERAGE_ARB -#define GL_SAMPLE_COVERAGE_ARB 0x80A0 -#endif -#ifndef GL_SAMPLE_BUFFERS -#define GL_SAMPLE_BUFFERS 0x80A8 -#endif -#ifndef GL_SAMPLE_BUFFERS_ARB -#define GL_SAMPLE_BUFFERS_ARB 0x80A8 -#endif -#ifndef GL_SAMPLES -#define GL_SAMPLES 0x80A9 -#endif -#ifndef GL_SAMPLES_ARB -#define GL_SAMPLES_ARB 0x80A9 -#endif -#ifndef GL_SAMPLE_COVERAGE_VALUE -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#endif -#ifndef GL_SAMPLE_COVERAGE_VALUE_ARB -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#endif -#ifndef GL_SAMPLE_COVERAGE_INVERT -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#endif -#ifndef GL_SAMPLE_COVERAGE_INVERT_ARB -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#endif -#ifndef GL_MULTISAMPLE_SGIS -#define GL_MULTISAMPLE_SGIS 0x809D -#endif -#ifndef GL_SAMPLE_ALPHA_TO_MASK_SGIS -#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E -#endif -#ifndef GL_SAMPLE_ALPHA_TO_ONE_SGIS -#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F -#endif -#ifndef GL_SAMPLE_MASK_SGIS -#define GL_SAMPLE_MASK_SGIS 0x80A0 -#endif -#ifndef GL_1PASS_SGIS -#define GL_1PASS_SGIS 0x80A1 -#endif -#ifndef GL_2PASS_0_SGIS -#define GL_2PASS_0_SGIS 0x80A2 -#endif -#ifndef GL_2PASS_1_SGIS -#define GL_2PASS_1_SGIS 0x80A3 -#endif -#ifndef GL_4PASS_0_SGIS -#define GL_4PASS_0_SGIS 0x80A4 -#endif -#ifndef GL_4PASS_1_SGIS -#define GL_4PASS_1_SGIS 0x80A5 -#endif -#ifndef GL_4PASS_2_SGIS -#define GL_4PASS_2_SGIS 0x80A6 -#endif -#ifndef GL_4PASS_3_SGIS -#define GL_4PASS_3_SGIS 0x80A7 -#endif -#ifndef GL_SAMPLE_BUFFERS_SGIS -#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 -#endif -#ifndef GL_SAMPLES_SGIS -#define GL_SAMPLES_SGIS 0x80A9 -#endif -#ifndef GL_SAMPLE_MASK_VALUE_SGIS -#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA -#endif -#ifndef GL_SAMPLE_MASK_INVERT_SGIS -#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB -#endif -#ifndef GL_SAMPLE_PATTERN_SGIS -#define GL_SAMPLE_PATTERN_SGIS 0x80AC -#endif -#ifndef GL_LINEAR_SHARPEN_SGIS -#define GL_LINEAR_SHARPEN_SGIS 0x80AD -#endif -#ifndef GL_LINEAR_SHARPEN_ALPHA_SGIS -#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE -#endif -#ifndef GL_LINEAR_SHARPEN_COLOR_SGIS -#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF -#endif -#ifndef GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS -#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 -#endif -#ifndef GL_COLOR_MATRIX -#define GL_COLOR_MATRIX 0x80B1 -#endif -#ifndef GL_COLOR_MATRIX_SGI -#define GL_COLOR_MATRIX_SGI 0x80B1 -#endif -#ifndef GL_COLOR_MATRIX_STACK_DEPTH -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#endif -#ifndef GL_COLOR_MATRIX_STACK_DEPTH_SGI -#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 -#endif -#ifndef GL_MAX_COLOR_MATRIX_STACK_DEPTH -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#endif -#ifndef GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 -#endif -#ifndef GL_POST_COLOR_MATRIX_RED_SCALE -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#endif -#ifndef GL_POST_COLOR_MATRIX_RED_SCALE_SGI -#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 -#endif -#ifndef GL_POST_COLOR_MATRIX_GREEN_SCALE -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#endif -#ifndef GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI -#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 -#endif -#ifndef GL_POST_COLOR_MATRIX_BLUE_SCALE -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#endif -#ifndef GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI -#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 -#endif -#ifndef GL_POST_COLOR_MATRIX_ALPHA_SCALE -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#endif -#ifndef GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 -#endif -#ifndef GL_POST_COLOR_MATRIX_RED_BIAS -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#endif -#ifndef GL_POST_COLOR_MATRIX_RED_BIAS_SGI -#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 -#endif -#ifndef GL_POST_COLOR_MATRIX_GREEN_BIAS -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#endif -#ifndef GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI -#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 -#endif -#ifndef GL_POST_COLOR_MATRIX_BLUE_BIAS -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#endif -#ifndef GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI -#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA -#endif -#ifndef GL_POST_COLOR_MATRIX_ALPHA_BIAS -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#endif -#ifndef GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB -#endif -#ifndef GL_TEXTURE_COLOR_TABLE_SGI -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#endif -#ifndef GL_PROXY_TEXTURE_COLOR_TABLE_SGI -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD -#endif -#ifndef GL_TEXTURE_ENV_BIAS_SGIX -#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE -#endif -#ifndef GL_SHADOW_AMBIENT_SGIX -#define GL_SHADOW_AMBIENT_SGIX 0x80BF -#endif -#ifndef GL_COLOR_TABLE -#define GL_COLOR_TABLE 0x80D0 -#endif -#ifndef GL_COLOR_TABLE_SGI -#define GL_COLOR_TABLE_SGI 0x80D0 -#endif -#ifndef GL_POST_CONVOLUTION_COLOR_TABLE -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#endif -#ifndef GL_POST_CONVOLUTION_COLOR_TABLE_SGI -#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 -#endif -#ifndef GL_POST_COLOR_MATRIX_COLOR_TABLE -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#endif -#ifndef GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI -#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 -#endif -#ifndef GL_PROXY_COLOR_TABLE -#define GL_PROXY_COLOR_TABLE 0x80D3 -#endif -#ifndef GL_PROXY_COLOR_TABLE_SGI -#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 -#endif -#ifndef GL_PROXY_POST_CONVOLUTION_COLOR_TABLE -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#endif -#ifndef GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 -#endif -#ifndef GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#endif -#ifndef GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 -#endif -#ifndef GL_COLOR_TABLE_SCALE -#define GL_COLOR_TABLE_SCALE 0x80D6 -#endif -#ifndef GL_COLOR_TABLE_SCALE_SGI -#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 -#endif -#ifndef GL_COLOR_TABLE_BIAS -#define GL_COLOR_TABLE_BIAS 0x80D7 -#endif -#ifndef GL_COLOR_TABLE_BIAS_SGI -#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 -#endif -#ifndef GL_COLOR_TABLE_FORMAT -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#endif -#ifndef GL_COLOR_TABLE_FORMAT_SGI -#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 -#endif -#ifndef GL_COLOR_TABLE_WIDTH -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#endif -#ifndef GL_COLOR_TABLE_WIDTH_SGI -#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 -#endif -#ifndef GL_COLOR_TABLE_RED_SIZE -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#endif -#ifndef GL_COLOR_TABLE_RED_SIZE_SGI -#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA -#endif -#ifndef GL_COLOR_TABLE_GREEN_SIZE -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#endif -#ifndef GL_COLOR_TABLE_GREEN_SIZE_SGI -#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB -#endif -#ifndef GL_COLOR_TABLE_BLUE_SIZE -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#endif -#ifndef GL_COLOR_TABLE_BLUE_SIZE_SGI -#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC -#endif -#ifndef GL_COLOR_TABLE_ALPHA_SIZE -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#endif -#ifndef GL_COLOR_TABLE_ALPHA_SIZE_SGI -#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD -#endif -#ifndef GL_COLOR_TABLE_LUMINANCE_SIZE -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#endif -#ifndef GL_COLOR_TABLE_LUMINANCE_SIZE_SGI -#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE -#endif -#ifndef GL_COLOR_TABLE_INTENSITY_SIZE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#endif -#ifndef GL_COLOR_TABLE_INTENSITY_SIZE_SGI -#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF -#endif -#ifndef GL_BGR -#define GL_BGR 0x80E0 -#endif -#ifndef GL_BGR_EXT -#define GL_BGR_EXT 0x80E0 -#endif -#ifndef GL_BGRA -#define GL_BGRA 0x80E1 -#endif -#ifndef GL_BGRA_EXT -#define GL_BGRA_EXT 0x80E1 -#endif -#ifndef GL_MAX_ELEMENTS_VERTICES -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#endif -#ifndef GL_MAX_ELEMENTS_INDICES -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#endif -#ifndef GL_DUAL_ALPHA4_SGIS -#define GL_DUAL_ALPHA4_SGIS 0x8110 -#endif -#ifndef GL_DUAL_ALPHA8_SGIS -#define GL_DUAL_ALPHA8_SGIS 0x8111 -#endif -#ifndef GL_DUAL_ALPHA12_SGIS -#define GL_DUAL_ALPHA12_SGIS 0x8112 -#endif -#ifndef GL_DUAL_ALPHA16_SGIS -#define GL_DUAL_ALPHA16_SGIS 0x8113 -#endif -#ifndef GL_DUAL_LUMINANCE4_SGIS -#define GL_DUAL_LUMINANCE4_SGIS 0x8114 -#endif -#ifndef GL_DUAL_LUMINANCE8_SGIS -#define GL_DUAL_LUMINANCE8_SGIS 0x8115 -#endif -#ifndef GL_DUAL_LUMINANCE12_SGIS -#define GL_DUAL_LUMINANCE12_SGIS 0x8116 -#endif -#ifndef GL_DUAL_LUMINANCE16_SGIS -#define GL_DUAL_LUMINANCE16_SGIS 0x8117 -#endif -#ifndef GL_DUAL_INTENSITY4_SGIS -#define GL_DUAL_INTENSITY4_SGIS 0x8118 -#endif -#ifndef GL_DUAL_INTENSITY8_SGIS -#define GL_DUAL_INTENSITY8_SGIS 0x8119 -#endif -#ifndef GL_DUAL_INTENSITY12_SGIS -#define GL_DUAL_INTENSITY12_SGIS 0x811A -#endif -#ifndef GL_DUAL_INTENSITY16_SGIS -#define GL_DUAL_INTENSITY16_SGIS 0x811B -#endif -#ifndef GL_DUAL_LUMINANCE_ALPHA4_SGIS -#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C -#endif -#ifndef GL_DUAL_LUMINANCE_ALPHA8_SGIS -#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D -#endif -#ifndef GL_QUAD_ALPHA4_SGIS -#define GL_QUAD_ALPHA4_SGIS 0x811E -#endif -#ifndef GL_QUAD_ALPHA8_SGIS -#define GL_QUAD_ALPHA8_SGIS 0x811F -#endif -#ifndef GL_QUAD_LUMINANCE4_SGIS -#define GL_QUAD_LUMINANCE4_SGIS 0x8120 -#endif -#ifndef GL_QUAD_LUMINANCE8_SGIS -#define GL_QUAD_LUMINANCE8_SGIS 0x8121 -#endif -#ifndef GL_QUAD_INTENSITY4_SGIS -#define GL_QUAD_INTENSITY4_SGIS 0x8122 -#endif -#ifndef GL_QUAD_INTENSITY8_SGIS -#define GL_QUAD_INTENSITY8_SGIS 0x8123 -#endif -#ifndef GL_DUAL_TEXTURE_SELECT_SGIS -#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 -#endif -#ifndef GL_QUAD_TEXTURE_SELECT_SGIS -#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 -#endif -#ifndef GL_POINT_SIZE_MIN -#define GL_POINT_SIZE_MIN 0x8126 -#endif -#ifndef GL_POINT_SIZE_MIN_ARB -#define GL_POINT_SIZE_MIN_ARB 0x8126 -#endif -#ifndef GL_POINT_SIZE_MIN_EXT -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#endif -#ifndef GL_POINT_SIZE_MIN_SGIS -#define GL_POINT_SIZE_MIN_SGIS 0x8126 -#endif -#ifndef GL_POINT_SIZE_MAX -#define GL_POINT_SIZE_MAX 0x8127 -#endif -#ifndef GL_POINT_SIZE_MAX_ARB -#define GL_POINT_SIZE_MAX_ARB 0x8127 -#endif -#ifndef GL_POINT_SIZE_MAX_EXT -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#endif -#ifndef GL_POINT_SIZE_MAX_SGIS -#define GL_POINT_SIZE_MAX_SGIS 0x8127 -#endif -#ifndef GL_POINT_FADE_THRESHOLD_SIZE -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#endif -#ifndef GL_POINT_FADE_THRESHOLD_SIZE_ARB -#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 -#endif -#ifndef GL_POINT_FADE_THRESHOLD_SIZE_EXT -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#endif -#ifndef GL_POINT_FADE_THRESHOLD_SIZE_SGIS -#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 -#endif -#ifndef GL_POINT_DISTANCE_ATTENUATION -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#endif -#ifndef GL_POINT_DISTANCE_ATTENUATION_ARB -#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 -#endif -#ifndef GL_DISTANCE_ATTENUATION_EXT -#define GL_DISTANCE_ATTENUATION_EXT 0x8129 -#endif -#ifndef GL_DISTANCE_ATTENUATION_SGIS -#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 -#endif -#ifndef GL_FOG_FUNC_SGIS -#define GL_FOG_FUNC_SGIS 0x812A -#endif -#ifndef GL_FOG_FUNC_POINTS_SGIS -#define GL_FOG_FUNC_POINTS_SGIS 0x812B -#endif -#ifndef GL_MAX_FOG_FUNC_POINTS_SGIS -#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C -#endif -#ifndef GL_CLAMP_TO_BORDER -#define GL_CLAMP_TO_BORDER 0x812D -#endif -#ifndef GL_CLAMP_TO_BORDER_ARB -#define GL_CLAMP_TO_BORDER_ARB 0x812D -#endif -#ifndef GL_CLAMP_TO_BORDER_SGIS -#define GL_CLAMP_TO_BORDER_SGIS 0x812D -#endif -#ifndef GL_TEXTURE_MULTI_BUFFER_HINT_SGIX -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E -#endif -#ifndef GL_CLAMP_TO_EDGE -#define GL_CLAMP_TO_EDGE 0x812F -#endif -#ifndef GL_CLAMP_TO_EDGE_SGIS -#define GL_CLAMP_TO_EDGE_SGIS 0x812F -#endif -#ifndef GL_PACK_SKIP_VOLUMES_SGIS -#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 -#endif -#ifndef GL_PACK_IMAGE_DEPTH_SGIS -#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 -#endif -#ifndef GL_UNPACK_SKIP_VOLUMES_SGIS -#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 -#endif -#ifndef GL_UNPACK_IMAGE_DEPTH_SGIS -#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 -#endif -#ifndef GL_TEXTURE_4D_SGIS -#define GL_TEXTURE_4D_SGIS 0x8134 -#endif -#ifndef GL_PROXY_TEXTURE_4D_SGIS -#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 -#endif -#ifndef GL_TEXTURE_4DSIZE_SGIS -#define GL_TEXTURE_4DSIZE_SGIS 0x8136 -#endif -#ifndef GL_TEXTURE_WRAP_Q_SGIS -#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 -#endif -#ifndef GL_MAX_4D_TEXTURE_SIZE_SGIS -#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 -#endif -#ifndef GL_TEXTURE_4D_BINDING_SGIS -#define GL_TEXTURE_4D_BINDING_SGIS 0x814F -#endif -#ifndef GL_PIXEL_TEX_GEN_SGIX -#define GL_PIXEL_TEX_GEN_SGIX 0x8139 -#endif -#ifndef GL_PIXEL_TEX_GEN_MODE_SGIX -#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B -#endif -#ifndef GL_TEXTURE_MIN_LOD -#define GL_TEXTURE_MIN_LOD 0x813A -#endif -#ifndef GL_TEXTURE_MIN_LOD_SGIS -#define GL_TEXTURE_MIN_LOD_SGIS 0x813A -#endif -#ifndef GL_TEXTURE_MAX_LOD -#define GL_TEXTURE_MAX_LOD 0x813B -#endif -#ifndef GL_TEXTURE_MAX_LOD_SGIS -#define GL_TEXTURE_MAX_LOD_SGIS 0x813B -#endif -#ifndef GL_TEXTURE_BASE_LEVEL -#define GL_TEXTURE_BASE_LEVEL 0x813C -#endif -#ifndef GL_TEXTURE_BASE_LEVEL_SGIS -#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C -#endif -#ifndef GL_TEXTURE_MAX_LEVEL -#define GL_TEXTURE_MAX_LEVEL 0x813D -#endif -#ifndef GL_TEXTURE_MAX_LEVEL_SGIS -#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D -#endif -#ifndef GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX -#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E -#endif -#ifndef GL_PIXEL_TILE_CACHE_INCREMENT_SGIX -#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F -#endif -#ifndef GL_PIXEL_TILE_WIDTH_SGIX -#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 -#endif -#ifndef GL_PIXEL_TILE_HEIGHT_SGIX -#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 -#endif -#ifndef GL_PIXEL_TILE_GRID_WIDTH_SGIX -#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 -#endif -#ifndef GL_PIXEL_TILE_GRID_HEIGHT_SGIX -#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 -#endif -#ifndef GL_PIXEL_TILE_GRID_DEPTH_SGIX -#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 -#endif -#ifndef GL_PIXEL_TILE_CACHE_SIZE_SGIX -#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 -#endif -#ifndef GL_FILTER4_SGIS -#define GL_FILTER4_SGIS 0x8146 -#endif -#ifndef GL_TEXTURE_FILTER4_SIZE_SGIS -#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 -#endif -#ifndef GL_SPRITE_SGIX -#define GL_SPRITE_SGIX 0x8148 -#endif -#ifndef GL_SPRITE_MODE_SGIX -#define GL_SPRITE_MODE_SGIX 0x8149 -#endif -#ifndef GL_SPRITE_AXIS_SGIX -#define GL_SPRITE_AXIS_SGIX 0x814A -#endif -#ifndef GL_SPRITE_TRANSLATION_SGIX -#define GL_SPRITE_TRANSLATION_SGIX 0x814B -#endif -#ifndef GL_SPRITE_AXIAL_SGIX -#define GL_SPRITE_AXIAL_SGIX 0x814C -#endif -#ifndef GL_SPRITE_OBJECT_ALIGNED_SGIX -#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D -#endif -#ifndef GL_SPRITE_EYE_ALIGNED_SGIX -#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E -#endif -#ifndef GL_IGNORE_BORDER_HP -#define GL_IGNORE_BORDER_HP 0x8150 -#endif -#ifndef GL_CONSTANT_BORDER -#define GL_CONSTANT_BORDER 0x8151 -#endif -#ifndef GL_CONSTANT_BORDER_HP -#define GL_CONSTANT_BORDER_HP 0x8151 -#endif -#ifndef GL_REPLICATE_BORDER -#define GL_REPLICATE_BORDER 0x8153 -#endif -#ifndef GL_REPLICATE_BORDER_HP -#define GL_REPLICATE_BORDER_HP 0x8153 -#endif -#ifndef GL_CONVOLUTION_BORDER_COLOR -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -#endif -#ifndef GL_CONVOLUTION_BORDER_COLOR_HP -#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 -#endif -#ifndef GL_LINEAR_CLIPMAP_LINEAR_SGIX -#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 -#endif -#ifndef GL_TEXTURE_CLIPMAP_CENTER_SGIX -#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 -#endif -#ifndef GL_TEXTURE_CLIPMAP_FRAME_SGIX -#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 -#endif -#ifndef GL_TEXTURE_CLIPMAP_OFFSET_SGIX -#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 -#endif -#ifndef GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX -#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 -#endif -#ifndef GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX -#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 -#endif -#ifndef GL_TEXTURE_CLIPMAP_DEPTH_SGIX -#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 -#endif -#ifndef GL_MAX_CLIPMAP_DEPTH_SGIX -#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 -#endif -#ifndef GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX -#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 -#endif -#ifndef GL_NEAREST_CLIPMAP_NEAREST_SGIX -#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D -#endif -#ifndef GL_NEAREST_CLIPMAP_LINEAR_SGIX -#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E -#endif -#ifndef GL_LINEAR_CLIPMAP_NEAREST_SGIX -#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F -#endif -#ifndef GL_POST_TEXTURE_FILTER_BIAS_SGIX -#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 -#endif -#ifndef GL_POST_TEXTURE_FILTER_SCALE_SGIX -#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A -#endif -#ifndef GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX -#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B -#endif -#ifndef GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX -#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C -#endif -#ifndef GL_REFERENCE_PLANE_SGIX -#define GL_REFERENCE_PLANE_SGIX 0x817D -#endif -#ifndef GL_REFERENCE_PLANE_EQUATION_SGIX -#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E -#endif -#ifndef GL_IR_INSTRUMENT1_SGIX -#define GL_IR_INSTRUMENT1_SGIX 0x817F -#endif -#ifndef GL_INSTRUMENT_BUFFER_POINTER_SGIX -#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 -#endif -#ifndef GL_INSTRUMENT_MEASUREMENTS_SGIX -#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 -#endif -#ifndef GL_LIST_PRIORITY_SGIX -#define GL_LIST_PRIORITY_SGIX 0x8182 -#endif -#ifndef GL_CALLIGRAPHIC_FRAGMENT_SGIX -#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 -#endif -#ifndef GL_PIXEL_TEX_GEN_Q_CEILING_SGIX -#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 -#endif -#ifndef GL_PIXEL_TEX_GEN_Q_ROUND_SGIX -#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 -#endif -#ifndef GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX -#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 -#endif -#ifndef GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX -#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 -#endif -#ifndef GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX -#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 -#endif -#ifndef GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX -#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 -#endif -#ifndef GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX -#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A -#endif -#ifndef GL_FRAMEZOOM_SGIX -#define GL_FRAMEZOOM_SGIX 0x818B -#endif -#ifndef GL_FRAMEZOOM_FACTOR_SGIX -#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C -#endif -#ifndef GL_MAX_FRAMEZOOM_FACTOR_SGIX -#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D -#endif -#ifndef GL_TEXTURE_LOD_BIAS_S_SGIX -#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E -#endif -#ifndef GL_TEXTURE_LOD_BIAS_T_SGIX -#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F -#endif -#ifndef GL_TEXTURE_LOD_BIAS_R_SGIX -#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 -#endif -#ifndef GL_GENERATE_MIPMAP -#define GL_GENERATE_MIPMAP 0x8191 -#endif -#ifndef GL_GENERATE_MIPMAP_SGIS -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#endif -#ifndef GL_GENERATE_MIPMAP_HINT -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#endif -#ifndef GL_GENERATE_MIPMAP_HINT_SGIS -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#endif -#ifndef GL_GEOMETRY_DEFORMATION_SGIX -#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 -#endif -#ifndef GL_TEXTURE_DEFORMATION_SGIX -#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 -#endif -#ifndef GL_DEFORMATIONS_MASK_SGIX -#define GL_DEFORMATIONS_MASK_SGIX 0x8196 -#endif -#ifndef GL_MAX_DEFORMATION_ORDER_SGIX -#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 -#endif -#ifndef GL_FOG_OFFSET_SGIX -#define GL_FOG_OFFSET_SGIX 0x8198 -#endif -#ifndef GL_FOG_OFFSET_VALUE_SGIX -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 -#endif -#ifndef GL_TEXTURE_COMPARE_SGIX -#define GL_TEXTURE_COMPARE_SGIX 0x819A -#endif -#ifndef GL_TEXTURE_COMPARE_OPERATOR_SGIX -#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B -#endif -#ifndef GL_TEXTURE_LEQUAL_R_SGIX -#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C -#endif -#ifndef GL_TEXTURE_GEQUAL_R_SGIX -#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D -#endif -#ifndef GL_DEPTH_COMPONENT16 -#define GL_DEPTH_COMPONENT16 0x81A5 -#endif -#ifndef GL_DEPTH_COMPONENT16_SGIX -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#endif -#ifndef GL_DEPTH_COMPONENT24 -#define GL_DEPTH_COMPONENT24 0x81A6 -#endif -#ifndef GL_DEPTH_COMPONENT24_SGIX -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#endif -#ifndef GL_DEPTH_COMPONENT32 -#define GL_DEPTH_COMPONENT32 0x81A7 -#endif -#ifndef GL_DEPTH_COMPONENT32_SGIX -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 -#endif -#ifndef GL_YCRCB_422_SGIX -#define GL_YCRCB_422_SGIX 0x81BB -#endif -#ifndef GL_YCRCB_444_SGIX -#define GL_YCRCB_444_SGIX 0x81BC -#endif -#ifndef GL_TEXTURE_COLOR_WRITEMASK_SGIS -#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF -#endif -#ifndef GL_EYE_DISTANCE_TO_POINT_SGIS -#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 -#endif -#ifndef GL_OBJECT_DISTANCE_TO_POINT_SGIS -#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 -#endif -#ifndef GL_EYE_DISTANCE_TO_LINE_SGIS -#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 -#endif -#ifndef GL_OBJECT_DISTANCE_TO_LINE_SGIS -#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 -#endif -#ifndef GL_EYE_POINT_SGIS -#define GL_EYE_POINT_SGIS 0x81F4 -#endif -#ifndef GL_OBJECT_POINT_SGIS -#define GL_OBJECT_POINT_SGIS 0x81F5 -#endif -#ifndef GL_EYE_LINE_SGIS -#define GL_EYE_LINE_SGIS 0x81F6 -#endif -#ifndef GL_OBJECT_LINE_SGIS -#define GL_OBJECT_LINE_SGIS 0x81F7 -#endif -#ifndef GL_LIGHT_MODEL_COLOR_CONTROL -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#endif -#ifndef GL_LIGHT_MODEL_COLOR_CONTROL_EXT -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#endif -#ifndef GL_SINGLE_COLOR -#define GL_SINGLE_COLOR 0x81F9 -#endif -#ifndef GL_SINGLE_COLOR_EXT -#define GL_SINGLE_COLOR_EXT 0x81F9 -#endif -#ifndef GL_SEPARATE_SPECULAR_COLOR -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#endif -#ifndef GL_SEPARATE_SPECULAR_COLOR_EXT -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA -#endif -#ifndef GL_SHARED_TEXTURE_PALETTE_EXT -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB -#endif -#ifndef GL_CONVOLUTION_HINT_SGIX -#define GL_CONVOLUTION_HINT_SGIX 0x8316 -#endif -#ifndef GL_ALPHA_MIN_SGIX -#define GL_ALPHA_MIN_SGIX 0x8320 -#endif -#ifndef GL_ALPHA_MAX_SGIX -#define GL_ALPHA_MAX_SGIX 0x8321 -#endif -#ifndef GL_ASYNC_MARKER_SGIX -#define GL_ASYNC_MARKER_SGIX 0x8329 -#endif -#ifndef GL_ASYNC_HISTOGRAM_SGIX -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#endif -#ifndef GL_MAX_ASYNC_HISTOGRAM_SGIX -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D -#endif -#ifndef GL_PIXEL_TRANSFORM_2D_EXT -#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 -#endif -#ifndef GL_PIXEL_MAG_FILTER_EXT -#define GL_PIXEL_MAG_FILTER_EXT 0x8331 -#endif -#ifndef GL_PIXEL_MIN_FILTER_EXT -#define GL_PIXEL_MIN_FILTER_EXT 0x8332 -#endif -#ifndef GL_PIXEL_CUBIC_WEIGHT_EXT -#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 -#endif -#ifndef GL_CUBIC_EXT -#define GL_CUBIC_EXT 0x8334 -#endif -#ifndef GL_AVERAGE_EXT -#define GL_AVERAGE_EXT 0x8335 -#endif -#ifndef GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT -#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 -#endif -#ifndef GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT -#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 -#endif -#ifndef GL_PIXEL_TRANSFORM_2D_MATRIX_EXT -#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 -#endif -#ifndef GL_PIXEL_TEXTURE_SGIS -#define GL_PIXEL_TEXTURE_SGIS 0x8353 -#endif -#ifndef GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS -#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 -#endif -#ifndef GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS -#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 -#endif -#ifndef GL_PIXEL_GROUP_COLOR_SGIS -#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 -#endif -#ifndef GL_ASYNC_TEX_IMAGE_SGIX -#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C -#endif -#ifndef GL_ASYNC_DRAW_PIXELS_SGIX -#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D -#endif -#ifndef GL_ASYNC_READ_PIXELS_SGIX -#define GL_ASYNC_READ_PIXELS_SGIX 0x835E -#endif -#ifndef GL_MAX_ASYNC_TEX_IMAGE_SGIX -#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F -#endif -#ifndef GL_MAX_ASYNC_DRAW_PIXELS_SGIX -#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 -#endif -#ifndef GL_MAX_ASYNC_READ_PIXELS_SGIX -#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 -#endif -#ifndef GL_TEXTURE_MAX_CLAMP_S_SGIX -#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 -#endif -#ifndef GL_TEXTURE_MAX_CLAMP_T_SGIX -#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A -#endif -#ifndef GL_TEXTURE_MAX_CLAMP_R_SGIX -#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B -#endif -#ifndef GL_FOG_FACTOR_TO_ALPHA_SGIX -#define GL_FOG_FACTOR_TO_ALPHA_SGIX 0x836F -#endif -#ifndef GL_VERTEX_PRECLIP_SGIX -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#endif -#ifndef GL_VERTEX_PRECLIP_HINT_SGIX -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF -#endif -#ifndef GL_COMPRESSED_RGB_S3TC_DXT1_EXT -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#endif -#ifndef GL_COMPRESSED_RGBA_S3TC_DXT1_EXT -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#endif -#ifndef GL_COMPRESSED_RGBA_S3TC_DXT3_EXT -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#endif -#ifndef GL_COMPRESSED_RGBA_S3TC_DXT5_EXT -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 -#endif -#ifndef GL_PARALLEL_ARRAYS_INTEL -#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 -#endif -#ifndef GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL -#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 -#endif -#ifndef GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL -#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 -#endif -#ifndef GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL -#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL -#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 -#endif -#ifndef GL_FRAGMENT_LIGHTING_SGIX -#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 -#endif -#ifndef GL_FRAGMENT_COLOR_MATERIAL_SGIX -#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 -#endif -#ifndef GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX -#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 -#endif -#ifndef GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX -#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 -#endif -#ifndef GL_MAX_FRAGMENT_LIGHTS_SGIX -#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 -#endif -#ifndef GL_MAX_ACTIVE_LIGHTS_SGIX -#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 -#endif -#ifndef GL_CURRENT_RASTER_NORMAL_SGIX -#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 -#endif -#ifndef GL_LIGHT_ENV_MODE_SGIX -#define GL_LIGHT_ENV_MODE_SGIX 0x8407 -#endif -#ifndef GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX -#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 -#endif -#ifndef GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX -#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 -#endif -#ifndef GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX -#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A -#endif -#ifndef GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX -#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B -#endif -#ifndef GL_FRAGMENT_LIGHT0_SGIX -#define GL_FRAGMENT_LIGHT0_SGIX 0x840C -#endif -#ifndef GL_FRAGMENT_LIGHT1_SGIX -#define GL_FRAGMENT_LIGHT1_SGIX 0x840D -#endif -#ifndef GL_FRAGMENT_LIGHT2_SGIX -#define GL_FRAGMENT_LIGHT2_SGIX 0x840E -#endif -#ifndef GL_FRAGMENT_LIGHT3_SGIX -#define GL_FRAGMENT_LIGHT3_SGIX 0x840F -#endif -#ifndef GL_FRAGMENT_LIGHT4_SGIX -#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 -#endif -#ifndef GL_FRAGMENT_LIGHT5_SGIX -#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 -#endif -#ifndef GL_FRAGMENT_LIGHT6_SGIX -#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 -#endif -#ifndef GL_FRAGMENT_LIGHT7_SGIX -#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 -#endif -#ifndef GL_PACK_RESAMPLE_SGIX -#define GL_PACK_RESAMPLE_SGIX 0x842C -#endif -#ifndef GL_UNPACK_RESAMPLE_SGIX -#define GL_UNPACK_RESAMPLE_SGIX 0x842D -#endif -#ifndef GL_RESAMPLE_REPLICATE_SGIX -#define GL_RESAMPLE_REPLICATE_SGIX 0x842E -#endif -#ifndef GL_RESAMPLE_ZERO_FILL_SGIX -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F -#endif -#ifndef GL_RESAMPLE_DECIMATE_SGIX -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#endif -#ifndef GL_SMOOTH_POINT_SIZE_RANGE -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#endif -#ifndef GL_SMOOTH_POINT_SIZE_GRANULARITY -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#endif -#ifndef GL_SMOOTH_LINE_WIDTH_RANGE -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#endif -#ifndef GL_SMOOTH_LINE_WIDTH_GRANULARITY -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#endif -#ifndef GL_ALIASED_POINT_SIZE_RANGE -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#endif -#ifndef GL_ALIASED_LINE_WIDTH_RANGE -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#endif -#ifndef GL_PACK_SUBSAMPLE_RATE_SGIX -#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 -#endif -#ifndef GL_UNPACK_SUBSAMPLE_RATE_SGIX -#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 -#endif -#ifndef GL_PIXEL_SUBSAMPLE_4444_SGIX -#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 -#endif -#ifndef GL_PIXEL_SUBSAMPLE_2424_SGIX -#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 -#endif -#ifndef GL_PIXEL_SUBSAMPLE_4242_SGIX -#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 -#endif -#ifndef GL_UNSIGNED_BYTE_3_3_2 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#endif -#ifndef GL_UNSIGNED_SHORT_4_4_4_4 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#endif -#ifndef GL_UNSIGNED_SHORT_5_5_5_1 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#endif -#ifndef GL_UNSIGNED_INT_8_8_8_8 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#endif -#ifndef GL_UNSIGNED_INT_10_10_10_2 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#endif -#ifndef GL_RESCALE_NORMAL -#define GL_RESCALE_NORMAL 0x803A -#endif -#ifndef GL_TEXTURE_BINDING_3D -#define GL_TEXTURE_BINDING_3D 0x806A -#endif -#ifndef GL_PACK_SKIP_IMAGES -#define GL_PACK_SKIP_IMAGES 0x806B -#endif -#ifndef GL_PACK_IMAGE_HEIGHT -#define GL_PACK_IMAGE_HEIGHT 0x806C -#endif -#ifndef GL_UNPACK_SKIP_IMAGES -#define GL_UNPACK_SKIP_IMAGES 0x806D -#endif -#ifndef GL_UNPACK_IMAGE_HEIGHT -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#endif -#ifndef GL_TEXTURE_3D -#define GL_TEXTURE_3D 0x806F -#endif -#ifndef GL_PROXY_TEXTURE_3D -#define GL_PROXY_TEXTURE_3D 0x8070 -#endif -#ifndef GL_TEXTURE_DEPTH -#define GL_TEXTURE_DEPTH 0x8071 -#endif -#ifndef GL_TEXTURE_WRAP_R -#define GL_TEXTURE_WRAP_R 0x8072 -#endif -#ifndef GL_MAX_3D_TEXTURE_SIZE -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#endif -#ifndef GL_UNSIGNED_BYTE_2_3_3_REV -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#endif -#ifndef GL_UNSIGNED_SHORT_5_6_5 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#endif -#ifndef GL_UNSIGNED_SHORT_5_6_5_REV -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#endif -#ifndef GL_UNSIGNED_SHORT_4_4_4_4_REV -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#endif -#ifndef GL_UNSIGNED_SHORT_1_5_5_5_REV -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#endif -#ifndef GL_UNSIGNED_INT_8_8_8_8_REV -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#endif -#ifndef GL_UNSIGNED_INT_2_10_10_10_REV -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#endif -#ifndef GL_BGR -#define GL_BGR 0x80E0 -#endif -#ifndef GL_BGRA -#define GL_BGRA 0x80E1 -#endif -#ifndef GL_MAX_ELEMENTS_VERTICES -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#endif -#ifndef GL_MAX_ELEMENTS_INDICES -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#endif -#ifndef GL_CLAMP_TO_EDGE -#define GL_CLAMP_TO_EDGE 0x812F -#endif -#ifndef GL_TEXTURE_MIN_LOD -#define GL_TEXTURE_MIN_LOD 0x813A -#endif -#ifndef GL_TEXTURE_MAX_LOD -#define GL_TEXTURE_MAX_LOD 0x813B -#endif -#ifndef GL_TEXTURE_BASE_LEVEL -#define GL_TEXTURE_BASE_LEVEL 0x813C -#endif -#ifndef GL_TEXTURE_MAX_LEVEL -#define GL_TEXTURE_MAX_LEVEL 0x813D -#endif -#ifndef GL_LIGHT_MODEL_COLOR_CONTROL -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#endif -#ifndef GL_SINGLE_COLOR -#define GL_SINGLE_COLOR 0x81F9 -#endif -#ifndef GL_SEPARATE_SPECULAR_COLOR -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#endif -#ifndef GL_SMOOTH_POINT_SIZE_RANGE -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#endif -#ifndef GL_SMOOTH_POINT_SIZE_GRANULARITY -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#endif -#ifndef GL_SMOOTH_LINE_WIDTH_RANGE -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#endif -#ifndef GL_SMOOTH_LINE_WIDTH_GRANULARITY -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#endif -#ifndef GL_ALIASED_POINT_SIZE_RANGE -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#endif -#ifndef GL_ALIASED_LINE_WIDTH_RANGE -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#endif -#ifndef GL_CONSTANT_COLOR -#define GL_CONSTANT_COLOR 0x8001 -#endif -#ifndef GL_ONE_MINUS_CONSTANT_COLOR -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#endif -#ifndef GL_CONSTANT_ALPHA -#define GL_CONSTANT_ALPHA 0x8003 -#endif -#ifndef GL_ONE_MINUS_CONSTANT_ALPHA -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#endif -#ifndef GL_BLEND_COLOR -#define GL_BLEND_COLOR 0x8005 -#endif -#ifndef GL_FUNC_ADD -#define GL_FUNC_ADD 0x8006 -#endif -#ifndef GL_MIN -#define GL_MIN 0x8007 -#endif -#ifndef GL_MAX -#define GL_MAX 0x8008 -#endif -#ifndef GL_BLEND_EQUATION -#define GL_BLEND_EQUATION 0x8009 -#endif -#ifndef GL_FUNC_SUBTRACT -#define GL_FUNC_SUBTRACT 0x800A -#endif -#ifndef GL_FUNC_REVERSE_SUBTRACT -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#endif -#ifndef GL_CONVOLUTION_1D -#define GL_CONVOLUTION_1D 0x8010 -#endif -#ifndef GL_CONVOLUTION_2D -#define GL_CONVOLUTION_2D 0x8011 -#endif -#ifndef GL_SEPARABLE_2D -#define GL_SEPARABLE_2D 0x8012 -#endif -#ifndef GL_CONVOLUTION_BORDER_MODE -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#endif -#ifndef GL_CONVOLUTION_FILTER_SCALE -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#endif -#ifndef GL_CONVOLUTION_FILTER_BIAS -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#endif -#ifndef GL_REDUCE -#define GL_REDUCE 0x8016 -#endif -#ifndef GL_CONVOLUTION_FORMAT -#define GL_CONVOLUTION_FORMAT 0x8017 -#endif -#ifndef GL_CONVOLUTION_WIDTH -#define GL_CONVOLUTION_WIDTH 0x8018 -#endif -#ifndef GL_CONVOLUTION_HEIGHT -#define GL_CONVOLUTION_HEIGHT 0x8019 -#endif -#ifndef GL_MAX_CONVOLUTION_WIDTH -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#endif -#ifndef GL_MAX_CONVOLUTION_HEIGHT -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#endif -#ifndef GL_POST_CONVOLUTION_RED_SCALE -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#endif -#ifndef GL_POST_CONVOLUTION_GREEN_SCALE -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#endif -#ifndef GL_POST_CONVOLUTION_BLUE_SCALE -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#endif -#ifndef GL_POST_CONVOLUTION_ALPHA_SCALE -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#endif -#ifndef GL_POST_CONVOLUTION_RED_BIAS -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#endif -#ifndef GL_POST_CONVOLUTION_GREEN_BIAS -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#endif -#ifndef GL_POST_CONVOLUTION_BLUE_BIAS -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#endif -#ifndef GL_POST_CONVOLUTION_ALPHA_BIAS -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#endif -#ifndef GL_HISTOGRAM -#define GL_HISTOGRAM 0x8024 -#endif -#ifndef GL_PROXY_HISTOGRAM -#define GL_PROXY_HISTOGRAM 0x8025 -#endif -#ifndef GL_HISTOGRAM_WIDTH -#define GL_HISTOGRAM_WIDTH 0x8026 -#endif -#ifndef GL_HISTOGRAM_FORMAT -#define GL_HISTOGRAM_FORMAT 0x8027 -#endif -#ifndef GL_HISTOGRAM_RED_SIZE -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#endif -#ifndef GL_HISTOGRAM_GREEN_SIZE -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#endif -#ifndef GL_HISTOGRAM_BLUE_SIZE -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#endif -#ifndef GL_HISTOGRAM_ALPHA_SIZE -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#endif -#ifndef GL_HISTOGRAM_LUMINANCE_SIZE -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#endif -#ifndef GL_HISTOGRAM_SINK -#define GL_HISTOGRAM_SINK 0x802D -#endif -#ifndef GL_MINMAX -#define GL_MINMAX 0x802E -#endif -#ifndef GL_MINMAX_FORMAT -#define GL_MINMAX_FORMAT 0x802F -#endif -#ifndef GL_MINMAX_SINK -#define GL_MINMAX_SINK 0x8030 -#endif -#ifndef GL_TABLE_TOO_LARGE -#define GL_TABLE_TOO_LARGE 0x8031 -#endif -#ifndef GL_COLOR_MATRIX -#define GL_COLOR_MATRIX 0x80B1 -#endif -#ifndef GL_COLOR_MATRIX_STACK_DEPTH -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#endif -#ifndef GL_MAX_COLOR_MATRIX_STACK_DEPTH -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#endif -#ifndef GL_POST_COLOR_MATRIX_RED_SCALE -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#endif -#ifndef GL_POST_COLOR_MATRIX_GREEN_SCALE -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#endif -#ifndef GL_POST_COLOR_MATRIX_BLUE_SCALE -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#endif -#ifndef GL_POST_COLOR_MATRIX_ALPHA_SCALE -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#endif -#ifndef GL_POST_COLOR_MATRIX_RED_BIAS -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#endif -#ifndef GL_POST_COLOR_MATRIX_GREEN_BIAS -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#endif -#ifndef GL_POST_COLOR_MATRIX_BLUE_BIAS -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#endif -#ifndef GL_POST_COLOR_MATRIX_ALPHA_BIAS -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#endif -#ifndef GL_COLOR_TABLE -#define GL_COLOR_TABLE 0x80D0 -#endif -#ifndef GL_POST_CONVOLUTION_COLOR_TABLE -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#endif -#ifndef GL_POST_COLOR_MATRIX_COLOR_TABLE -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#endif -#ifndef GL_PROXY_COLOR_TABLE -#define GL_PROXY_COLOR_TABLE 0x80D3 -#endif -#ifndef GL_PROXY_POST_CONVOLUTION_COLOR_TABLE -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#endif -#ifndef GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#endif -#ifndef GL_COLOR_TABLE_SCALE -#define GL_COLOR_TABLE_SCALE 0x80D6 -#endif -#ifndef GL_COLOR_TABLE_BIAS -#define GL_COLOR_TABLE_BIAS 0x80D7 -#endif -#ifndef GL_COLOR_TABLE_FORMAT -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#endif -#ifndef GL_COLOR_TABLE_WIDTH -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#endif -#ifndef GL_COLOR_TABLE_RED_SIZE -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#endif -#ifndef GL_COLOR_TABLE_GREEN_SIZE -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#endif -#ifndef GL_COLOR_TABLE_BLUE_SIZE -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#endif -#ifndef GL_COLOR_TABLE_ALPHA_SIZE -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#endif -#ifndef GL_COLOR_TABLE_LUMINANCE_SIZE -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#endif -#ifndef GL_COLOR_TABLE_INTENSITY_SIZE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#endif -#ifndef GL_CONSTANT_BORDER -#define GL_CONSTANT_BORDER 0x8151 -#endif -#ifndef GL_REPLICATE_BORDER -#define GL_REPLICATE_BORDER 0x8153 -#endif -#ifndef GL_CONVOLUTION_BORDER_COLOR -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 -#endif -#ifndef GL_TEXTURE0 -#define GL_TEXTURE0 0x84C0 -#endif -#ifndef GL_TEXTURE1 -#define GL_TEXTURE1 0x84C1 -#endif -#ifndef GL_TEXTURE2 -#define GL_TEXTURE2 0x84C2 -#endif -#ifndef GL_TEXTURE3 -#define GL_TEXTURE3 0x84C3 -#endif -#ifndef GL_TEXTURE4 -#define GL_TEXTURE4 0x84C4 -#endif -#ifndef GL_TEXTURE5 -#define GL_TEXTURE5 0x84C5 -#endif -#ifndef GL_TEXTURE6 -#define GL_TEXTURE6 0x84C6 -#endif -#ifndef GL_TEXTURE7 -#define GL_TEXTURE7 0x84C7 -#endif -#ifndef GL_TEXTURE8 -#define GL_TEXTURE8 0x84C8 -#endif -#ifndef GL_TEXTURE9 -#define GL_TEXTURE9 0x84C9 -#endif -#ifndef GL_TEXTURE10 -#define GL_TEXTURE10 0x84CA -#endif -#ifndef GL_TEXTURE11 -#define GL_TEXTURE11 0x84CB -#endif -#ifndef GL_TEXTURE12 -#define GL_TEXTURE12 0x84CC -#endif -#ifndef GL_TEXTURE13 -#define GL_TEXTURE13 0x84CD -#endif -#ifndef GL_TEXTURE14 -#define GL_TEXTURE14 0x84CE -#endif -#ifndef GL_TEXTURE15 -#define GL_TEXTURE15 0x84CF -#endif -#ifndef GL_TEXTURE16 -#define GL_TEXTURE16 0x84D0 -#endif -#ifndef GL_TEXTURE17 -#define GL_TEXTURE17 0x84D1 -#endif -#ifndef GL_TEXTURE18 -#define GL_TEXTURE18 0x84D2 -#endif -#ifndef GL_TEXTURE19 -#define GL_TEXTURE19 0x84D3 -#endif -#ifndef GL_TEXTURE20 -#define GL_TEXTURE20 0x84D4 -#endif -#ifndef GL_TEXTURE21 -#define GL_TEXTURE21 0x84D5 -#endif -#ifndef GL_TEXTURE22 -#define GL_TEXTURE22 0x84D6 -#endif -#ifndef GL_TEXTURE23 -#define GL_TEXTURE23 0x84D7 -#endif -#ifndef GL_TEXTURE24 -#define GL_TEXTURE24 0x84D8 -#endif -#ifndef GL_TEXTURE25 -#define GL_TEXTURE25 0x84D9 -#endif -#ifndef GL_TEXTURE26 -#define GL_TEXTURE26 0x84DA -#endif -#ifndef GL_TEXTURE27 -#define GL_TEXTURE27 0x84DB -#endif -#ifndef GL_TEXTURE28 -#define GL_TEXTURE28 0x84DC -#endif -#ifndef GL_TEXTURE29 -#define GL_TEXTURE29 0x84DD -#endif -#ifndef GL_TEXTURE30 -#define GL_TEXTURE30 0x84DE -#endif -#ifndef GL_TEXTURE31 -#define GL_TEXTURE31 0x84DF -#endif -#ifndef GL_ACTIVE_TEXTURE -#define GL_ACTIVE_TEXTURE 0x84E0 -#endif -#ifndef GL_CLIENT_ACTIVE_TEXTURE -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#endif -#ifndef GL_MAX_TEXTURE_UNITS -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#endif -#ifndef GL_TRANSPOSE_MODELVIEW_MATRIX -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#endif -#ifndef GL_TRANSPOSE_PROJECTION_MATRIX -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#endif -#ifndef GL_TRANSPOSE_TEXTURE_MATRIX -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#endif -#ifndef GL_TRANSPOSE_COLOR_MATRIX -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -#endif -#ifndef GL_MULTISAMPLE -#define GL_MULTISAMPLE 0x809D -#endif -#ifndef GL_SAMPLE_ALPHA_TO_COVERAGE -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#endif -#ifndef GL_SAMPLE_ALPHA_TO_ONE -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#endif -#ifndef GL_SAMPLE_COVERAGE -#define GL_SAMPLE_COVERAGE 0x80A0 -#endif -#ifndef GL_SAMPLE_BUFFERS -#define GL_SAMPLE_BUFFERS 0x80A8 -#endif -#ifndef GL_SAMPLES -#define GL_SAMPLES 0x80A9 -#endif -#ifndef GL_SAMPLE_COVERAGE_VALUE -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#endif -#ifndef GL_SAMPLE_COVERAGE_INVERT -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#endif -#ifndef GL_MULTISAMPLE_BIT -#define GL_MULTISAMPLE_BIT 0x20000000 -#endif -#ifndef GL_NORMAL_MAP -#define GL_NORMAL_MAP 0x8511 -#endif -#ifndef GL_REFLECTION_MAP -#define GL_REFLECTION_MAP 0x8512 -#endif -#ifndef GL_TEXTURE_CUBE_MAP -#define GL_TEXTURE_CUBE_MAP 0x8513 -#endif -#ifndef GL_TEXTURE_BINDING_CUBE_MAP -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_POSITIVE_X -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_NEGATIVE_X -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_POSITIVE_Y -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_NEGATIVE_Y -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_POSITIVE_Z -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_NEGATIVE_Z -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#endif -#ifndef GL_PROXY_TEXTURE_CUBE_MAP -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#endif -#ifndef GL_MAX_CUBE_MAP_TEXTURE_SIZE -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#endif -#ifndef GL_COMPRESSED_ALPHA -#define GL_COMPRESSED_ALPHA 0x84E9 -#endif -#ifndef GL_COMPRESSED_LUMINANCE -#define GL_COMPRESSED_LUMINANCE 0x84EA -#endif -#ifndef GL_COMPRESSED_LUMINANCE_ALPHA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#endif -#ifndef GL_COMPRESSED_INTENSITY -#define GL_COMPRESSED_INTENSITY 0x84EC -#endif -#ifndef GL_COMPRESSED_RGB -#define GL_COMPRESSED_RGB 0x84ED -#endif -#ifndef GL_COMPRESSED_RGBA -#define GL_COMPRESSED_RGBA 0x84EE -#endif -#ifndef GL_TEXTURE_COMPRESSION_HINT -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#endif -#ifndef GL_TEXTURE_COMPRESSED_IMAGE_SIZE -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#endif -#ifndef GL_TEXTURE_COMPRESSED -#define GL_TEXTURE_COMPRESSED 0x86A1 -#endif -#ifndef GL_NUM_COMPRESSED_TEXTURE_FORMATS -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#endif -#ifndef GL_COMPRESSED_TEXTURE_FORMATS -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#endif -#ifndef GL_CLAMP_TO_BORDER -#define GL_CLAMP_TO_BORDER 0x812D -#endif -#ifndef GL_COMBINE -#define GL_COMBINE 0x8570 -#endif -#ifndef GL_COMBINE_RGB -#define GL_COMBINE_RGB 0x8571 -#endif -#ifndef GL_COMBINE_ALPHA -#define GL_COMBINE_ALPHA 0x8572 -#endif -#ifndef GL_SOURCE0_RGB -#define GL_SOURCE0_RGB 0x8580 -#endif -#ifndef GL_SOURCE1_RGB -#define GL_SOURCE1_RGB 0x8581 -#endif -#ifndef GL_SOURCE2_RGB -#define GL_SOURCE2_RGB 0x8582 -#endif -#ifndef GL_SOURCE0_ALPHA -#define GL_SOURCE0_ALPHA 0x8588 -#endif -#ifndef GL_SOURCE1_ALPHA -#define GL_SOURCE1_ALPHA 0x8589 -#endif -#ifndef GL_SOURCE2_ALPHA -#define GL_SOURCE2_ALPHA 0x858A -#endif -#ifndef GL_OPERAND0_RGB -#define GL_OPERAND0_RGB 0x8590 -#endif -#ifndef GL_OPERAND1_RGB -#define GL_OPERAND1_RGB 0x8591 -#endif -#ifndef GL_OPERAND2_RGB -#define GL_OPERAND2_RGB 0x8592 -#endif -#ifndef GL_OPERAND0_ALPHA -#define GL_OPERAND0_ALPHA 0x8598 -#endif -#ifndef GL_OPERAND1_ALPHA -#define GL_OPERAND1_ALPHA 0x8599 -#endif -#ifndef GL_OPERAND2_ALPHA -#define GL_OPERAND2_ALPHA 0x859A -#endif -#ifndef GL_RGB_SCALE -#define GL_RGB_SCALE 0x8573 -#endif -#ifndef GL_ADD_SIGNED -#define GL_ADD_SIGNED 0x8574 -#endif -#ifndef GL_INTERPOLATE -#define GL_INTERPOLATE 0x8575 -#endif -#ifndef GL_SUBTRACT -#define GL_SUBTRACT 0x84E7 -#endif -#ifndef GL_CONSTANT -#define GL_CONSTANT 0x8576 -#endif -#ifndef GL_PRIMARY_COLOR -#define GL_PRIMARY_COLOR 0x8577 -#endif -#ifndef GL_PREVIOUS -#define GL_PREVIOUS 0x8578 -#endif -#ifndef GL_DOT3_RGB -#define GL_DOT3_RGB 0x86AE -#endif -#ifndef GL_DOT3_RGBA -#define GL_DOT3_RGBA 0x86AF -#endif -#ifndef GL_BLEND_DST_RGB -#define GL_BLEND_DST_RGB 0x80C8 -#endif -#ifndef GL_BLEND_SRC_RGB -#define GL_BLEND_SRC_RGB 0x80C9 -#endif -#ifndef GL_BLEND_DST_ALPHA -#define GL_BLEND_DST_ALPHA 0x80CA -#endif -#ifndef GL_BLEND_SRC_ALPHA -#define GL_BLEND_SRC_ALPHA 0x80CB -#endif -#ifndef GL_POINT_SIZE_MIN -#define GL_POINT_SIZE_MIN 0x8126 -#endif -#ifndef GL_POINT_SIZE_MAX -#define GL_POINT_SIZE_MAX 0x8127 -#endif -#ifndef GL_POINT_FADE_THRESHOLD_SIZE -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#endif -#ifndef GL_POINT_DISTANCE_ATTENUATION -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#endif -#ifndef GL_GENERATE_MIPMAP -#define GL_GENERATE_MIPMAP 0x8191 -#endif -#ifndef GL_GENERATE_MIPMAP_HINT -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#endif -#ifndef GL_DEPTH_COMPONENT16 -#define GL_DEPTH_COMPONENT16 0x81A5 -#endif -#ifndef GL_DEPTH_COMPONENT24 -#define GL_DEPTH_COMPONENT24 0x81A6 -#endif -#ifndef GL_DEPTH_COMPONENT32 -#define GL_DEPTH_COMPONENT32 0x81A7 -#endif -#ifndef GL_MIRRORED_REPEAT -#define GL_MIRRORED_REPEAT 0x8370 -#endif -#ifndef GL_FOG_COORDINATE_SOURCE -#define GL_FOG_COORDINATE_SOURCE 0x8450 -#endif -#ifndef GL_FOG_COORDINATE -#define GL_FOG_COORDINATE 0x8451 -#endif -#ifndef GL_FRAGMENT_DEPTH -#define GL_FRAGMENT_DEPTH 0x8452 -#endif -#ifndef GL_CURRENT_FOG_COORDINATE -#define GL_CURRENT_FOG_COORDINATE 0x8453 -#endif -#ifndef GL_FOG_COORDINATE_ARRAY_TYPE -#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 -#endif -#ifndef GL_FOG_COORDINATE_ARRAY_STRIDE -#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 -#endif -#ifndef GL_FOG_COORDINATE_ARRAY_POINTER -#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 -#endif -#ifndef GL_FOG_COORDINATE_ARRAY -#define GL_FOG_COORDINATE_ARRAY 0x8457 -#endif -#ifndef GL_COLOR_SUM -#define GL_COLOR_SUM 0x8458 -#endif -#ifndef GL_CURRENT_SECONDARY_COLOR -#define GL_CURRENT_SECONDARY_COLOR 0x8459 -#endif -#ifndef GL_SECONDARY_COLOR_ARRAY_SIZE -#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A -#endif -#ifndef GL_SECONDARY_COLOR_ARRAY_TYPE -#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B -#endif -#ifndef GL_SECONDARY_COLOR_ARRAY_STRIDE -#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C -#endif -#ifndef GL_SECONDARY_COLOR_ARRAY_POINTER -#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D -#endif -#ifndef GL_SECONDARY_COLOR_ARRAY -#define GL_SECONDARY_COLOR_ARRAY 0x845E -#endif -#ifndef GL_MAX_TEXTURE_LOD_BIAS -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#endif -#ifndef GL_TEXTURE_FILTER_CONTROL -#define GL_TEXTURE_FILTER_CONTROL 0x8500 -#endif -#ifndef GL_TEXTURE_LOD_BIAS -#define GL_TEXTURE_LOD_BIAS 0x8501 -#endif -#ifndef GL_INCR_WRAP -#define GL_INCR_WRAP 0x8507 -#endif -#ifndef GL_DECR_WRAP -#define GL_DECR_WRAP 0x8508 -#endif -#ifndef GL_TEXTURE_DEPTH_SIZE -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#endif -#ifndef GL_DEPTH_TEXTURE_MODE -#define GL_DEPTH_TEXTURE_MODE 0x884B -#endif -#ifndef GL_TEXTURE_COMPARE_MODE -#define GL_TEXTURE_COMPARE_MODE 0x884C -#endif -#ifndef GL_TEXTURE_COMPARE_FUNC -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#endif -#ifndef GL_COMPARE_R_TO_TEXTURE -#define GL_COMPARE_R_TO_TEXTURE 0x884E -#endif -#ifndef GL_BUFFER_SIZE -#define GL_BUFFER_SIZE 0x8764 -#endif -#ifndef GL_BUFFER_USAGE -#define GL_BUFFER_USAGE 0x8765 -#endif -#ifndef GL_QUERY_COUNTER_BITS -#define GL_QUERY_COUNTER_BITS 0x8864 -#endif -#ifndef GL_CURRENT_QUERY -#define GL_CURRENT_QUERY 0x8865 -#endif -#ifndef GL_QUERY_RESULT -#define GL_QUERY_RESULT 0x8866 -#endif -#ifndef GL_QUERY_RESULT_AVAILABLE -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#endif -#ifndef GL_ARRAY_BUFFER -#define GL_ARRAY_BUFFER 0x8892 -#endif -#ifndef GL_ELEMENT_ARRAY_BUFFER -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#endif -#ifndef GL_ARRAY_BUFFER_BINDING -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#endif -#ifndef GL_ELEMENT_ARRAY_BUFFER_BINDING -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#endif -#ifndef GL_VERTEX_ARRAY_BUFFER_BINDING -#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 -#endif -#ifndef GL_NORMAL_ARRAY_BUFFER_BINDING -#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 -#endif -#ifndef GL_COLOR_ARRAY_BUFFER_BINDING -#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 -#endif -#ifndef GL_INDEX_ARRAY_BUFFER_BINDING -#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A -#endif -#ifndef GL_EDGE_FLAG_ARRAY_BUFFER_BINDING -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B -#endif -#ifndef GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C -#endif -#ifndef GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D -#endif -#ifndef GL_WEIGHT_ARRAY_BUFFER_BINDING -#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#endif -#ifndef GL_READ_ONLY -#define GL_READ_ONLY 0x88B8 -#endif -#ifndef GL_WRITE_ONLY -#define GL_WRITE_ONLY 0x88B9 -#endif -#ifndef GL_READ_WRITE -#define GL_READ_WRITE 0x88BA -#endif -#ifndef GL_BUFFER_ACCESS -#define GL_BUFFER_ACCESS 0x88BB -#endif -#ifndef GL_BUFFER_MAPPED -#define GL_BUFFER_MAPPED 0x88BC -#endif -#ifndef GL_BUFFER_MAP_POINTER -#define GL_BUFFER_MAP_POINTER 0x88BD -#endif -#ifndef GL_STREAM_DRAW -#define GL_STREAM_DRAW 0x88E0 -#endif -#ifndef GL_STREAM_READ -#define GL_STREAM_READ 0x88E1 -#endif -#ifndef GL_STREAM_COPY -#define GL_STREAM_COPY 0x88E2 -#endif -#ifndef GL_STATIC_DRAW -#define GL_STATIC_DRAW 0x88E4 -#endif -#ifndef GL_STATIC_READ -#define GL_STATIC_READ 0x88E5 -#endif -#ifndef GL_STATIC_COPY -#define GL_STATIC_COPY 0x88E6 -#endif -#ifndef GL_DYNAMIC_DRAW -#define GL_DYNAMIC_DRAW 0x88E8 -#endif -#ifndef GL_DYNAMIC_READ -#define GL_DYNAMIC_READ 0x88E9 -#endif -#ifndef GL_DYNAMIC_COPY -#define GL_DYNAMIC_COPY 0x88EA -#endif -#ifndef GL_SAMPLES_PASSED -#define GL_SAMPLES_PASSED 0x8914 -#endif -#ifndef GL_FOG_COORD_SRC -#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE -#endif -#ifndef GL_FOG_COORD -#define GL_FOG_COORD GL_FOG_COORDINATE -#endif -#ifndef GL_CURRENT_FOG_COORD -#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE -#endif -#ifndef GL_FOG_COORD_ARRAY_TYPE -#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE -#endif -#ifndef GL_FOG_COORD_ARRAY_STRIDE -#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE -#endif -#ifndef GL_FOG_COORD_ARRAY_POINTER -#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER -#endif -#ifndef GL_FOG_COORD_ARRAY -#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY -#endif -#ifndef GL_FOG_COORD_ARRAY_BUFFER_BINDING -#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING -#endif -#ifndef GL_SRC0_RGB -#define GL_SRC0_RGB GL_SOURCE0_RGB -#endif -#ifndef GL_SRC1_RGB -#define GL_SRC1_RGB GL_SOURCE1_RGB -#endif -#ifndef GL_SRC2_RGB -#define GL_SRC2_RGB GL_SOURCE2_RGB -#endif -#ifndef GL_SRC0_ALPHA -#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA -#endif -#ifndef GL_SRC1_ALPHA -#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA -#endif -#ifndef GL_SRC2_ALPHA -#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA -#endif -#ifndef GL_BLEND_EQUATION_RGB -#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY_ENABLED -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY_SIZE -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY_STRIDE -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY_TYPE -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#endif -#ifndef GL_CURRENT_VERTEX_ATTRIB -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#endif -#ifndef GL_VERTEX_PROGRAM_POINT_SIZE -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#endif -#ifndef GL_VERTEX_PROGRAM_TWO_SIDE -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY_POINTER -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#endif -#ifndef GL_STENCIL_BACK_FUNC -#define GL_STENCIL_BACK_FUNC 0x8800 -#endif -#ifndef GL_STENCIL_BACK_FAIL -#define GL_STENCIL_BACK_FAIL 0x8801 -#endif -#ifndef GL_STENCIL_BACK_PASS_DEPTH_FAIL -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#endif -#ifndef GL_STENCIL_BACK_PASS_DEPTH_PASS -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#endif -#ifndef GL_MAX_DRAW_BUFFERS -#define GL_MAX_DRAW_BUFFERS 0x8824 -#endif -#ifndef GL_DRAW_BUFFER0 -#define GL_DRAW_BUFFER0 0x8825 -#endif -#ifndef GL_DRAW_BUFFER1 -#define GL_DRAW_BUFFER1 0x8826 -#endif -#ifndef GL_DRAW_BUFFER2 -#define GL_DRAW_BUFFER2 0x8827 -#endif -#ifndef GL_DRAW_BUFFER3 -#define GL_DRAW_BUFFER3 0x8828 -#endif -#ifndef GL_DRAW_BUFFER4 -#define GL_DRAW_BUFFER4 0x8829 -#endif -#ifndef GL_DRAW_BUFFER5 -#define GL_DRAW_BUFFER5 0x882A -#endif -#ifndef GL_DRAW_BUFFER6 -#define GL_DRAW_BUFFER6 0x882B -#endif -#ifndef GL_DRAW_BUFFER7 -#define GL_DRAW_BUFFER7 0x882C -#endif -#ifndef GL_DRAW_BUFFER8 -#define GL_DRAW_BUFFER8 0x882D -#endif -#ifndef GL_DRAW_BUFFER9 -#define GL_DRAW_BUFFER9 0x882E -#endif -#ifndef GL_DRAW_BUFFER10 -#define GL_DRAW_BUFFER10 0x882F -#endif -#ifndef GL_DRAW_BUFFER11 -#define GL_DRAW_BUFFER11 0x8830 -#endif -#ifndef GL_DRAW_BUFFER12 -#define GL_DRAW_BUFFER12 0x8831 -#endif -#ifndef GL_DRAW_BUFFER13 -#define GL_DRAW_BUFFER13 0x8832 -#endif -#ifndef GL_DRAW_BUFFER14 -#define GL_DRAW_BUFFER14 0x8833 -#endif -#ifndef GL_DRAW_BUFFER15 -#define GL_DRAW_BUFFER15 0x8834 -#endif -#ifndef GL_BLEND_EQUATION_ALPHA -#define GL_BLEND_EQUATION_ALPHA 0x883D -#endif -#ifndef GL_POINT_SPRITE -#define GL_POINT_SPRITE 0x8861 -#endif -#ifndef GL_COORD_REPLACE -#define GL_COORD_REPLACE 0x8862 -#endif -#ifndef GL_MAX_VERTEX_ATTRIBS -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY_NORMALIZED -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#endif -#ifndef GL_MAX_TEXTURE_COORDS -#define GL_MAX_TEXTURE_COORDS 0x8871 -#endif -#ifndef GL_MAX_TEXTURE_IMAGE_UNITS -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#endif -#ifndef GL_FRAGMENT_SHADER -#define GL_FRAGMENT_SHADER 0x8B30 -#endif -#ifndef GL_VERTEX_SHADER -#define GL_VERTEX_SHADER 0x8B31 -#endif -#ifndef GL_MAX_FRAGMENT_UNIFORM_COMPONENTS -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#endif -#ifndef GL_MAX_VERTEX_UNIFORM_COMPONENTS -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#endif -#ifndef GL_MAX_VARYING_FLOATS -#define GL_MAX_VARYING_FLOATS 0x8B4B -#endif -#ifndef GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#endif -#ifndef GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#endif -#ifndef GL_SHADER_TYPE -#define GL_SHADER_TYPE 0x8B4F -#endif -#ifndef GL_FLOAT_VEC2 -#define GL_FLOAT_VEC2 0x8B50 -#endif -#ifndef GL_FLOAT_VEC3 -#define GL_FLOAT_VEC3 0x8B51 -#endif -#ifndef GL_FLOAT_VEC4 -#define GL_FLOAT_VEC4 0x8B52 -#endif -#ifndef GL_INT_VEC2 -#define GL_INT_VEC2 0x8B53 -#endif -#ifndef GL_INT_VEC3 -#define GL_INT_VEC3 0x8B54 -#endif -#ifndef GL_INT_VEC4 -#define GL_INT_VEC4 0x8B55 -#endif -#ifndef GL_BOOL -#define GL_BOOL 0x8B56 -#endif -#ifndef GL_BOOL_VEC2 -#define GL_BOOL_VEC2 0x8B57 -#endif -#ifndef GL_BOOL_VEC3 -#define GL_BOOL_VEC3 0x8B58 -#endif -#ifndef GL_BOOL_VEC4 -#define GL_BOOL_VEC4 0x8B59 -#endif -#ifndef GL_FLOAT_MAT2 -#define GL_FLOAT_MAT2 0x8B5A -#endif -#ifndef GL_FLOAT_MAT3 -#define GL_FLOAT_MAT3 0x8B5B -#endif -#ifndef GL_FLOAT_MAT4 -#define GL_FLOAT_MAT4 0x8B5C -#endif -#ifndef GL_SAMPLER_1D -#define GL_SAMPLER_1D 0x8B5D -#endif -#ifndef GL_SAMPLER_2D -#define GL_SAMPLER_2D 0x8B5E -#endif -#ifndef GL_SAMPLER_3D -#define GL_SAMPLER_3D 0x8B5F -#endif -#ifndef GL_SAMPLER_CUBE -#define GL_SAMPLER_CUBE 0x8B60 -#endif -#ifndef GL_SAMPLER_1D_SHADOW -#define GL_SAMPLER_1D_SHADOW 0x8B61 -#endif -#ifndef GL_SAMPLER_2D_SHADOW -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#endif -#ifndef GL_DELETE_STATUS -#define GL_DELETE_STATUS 0x8B80 -#endif -#ifndef GL_COMPILE_STATUS -#define GL_COMPILE_STATUS 0x8B81 -#endif -#ifndef GL_LINK_STATUS -#define GL_LINK_STATUS 0x8B82 -#endif -#ifndef GL_VALIDATE_STATUS -#define GL_VALIDATE_STATUS 0x8B83 -#endif -#ifndef GL_INFO_LOG_LENGTH -#define GL_INFO_LOG_LENGTH 0x8B84 -#endif -#ifndef GL_ATTACHED_SHADERS -#define GL_ATTACHED_SHADERS 0x8B85 -#endif -#ifndef GL_ACTIVE_UNIFORMS -#define GL_ACTIVE_UNIFORMS 0x8B86 -#endif -#ifndef GL_ACTIVE_UNIFORM_MAX_LENGTH -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#endif -#ifndef GL_SHADER_SOURCE_LENGTH -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#endif -#ifndef GL_ACTIVE_ATTRIBUTES -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#endif -#ifndef GL_ACTIVE_ATTRIBUTE_MAX_LENGTH -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#endif -#ifndef GL_FRAGMENT_SHADER_DERIVATIVE_HINT -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#endif -#ifndef GL_SHADING_LANGUAGE_VERSION -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#endif -#ifndef GL_CURRENT_PROGRAM -#define GL_CURRENT_PROGRAM 0x8B8D -#endif -#ifndef GL_POINT_SPRITE_COORD_ORIGIN -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#endif -#ifndef GL_LOWER_LEFT -#define GL_LOWER_LEFT 0x8CA1 -#endif -#ifndef GL_UPPER_LEFT -#define GL_UPPER_LEFT 0x8CA2 -#endif -#ifndef GL_STENCIL_BACK_REF -#define GL_STENCIL_BACK_REF 0x8CA3 -#endif -#ifndef GL_STENCIL_BACK_VALUE_MASK -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#endif -#ifndef GL_STENCIL_BACK_WRITEMASK -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#endif -#ifndef GL_CURRENT_RASTER_SECONDARY_COLOR -#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F -#endif -#ifndef GL_PIXEL_PACK_BUFFER -#define GL_PIXEL_PACK_BUFFER 0x88EB -#endif -#ifndef GL_PIXEL_UNPACK_BUFFER -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#endif -#ifndef GL_PIXEL_PACK_BUFFER_BINDING -#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED -#endif -#ifndef GL_PIXEL_UNPACK_BUFFER_BINDING -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF -#endif -#ifndef GL_FLOAT_MAT2x3 -#define GL_FLOAT_MAT2x3 0x8B65 -#endif -#ifndef GL_FLOAT_MAT2x4 -#define GL_FLOAT_MAT2x4 0x8B66 -#endif -#ifndef GL_FLOAT_MAT3x2 -#define GL_FLOAT_MAT3x2 0x8B67 -#endif -#ifndef GL_FLOAT_MAT3x4 -#define GL_FLOAT_MAT3x4 0x8B68 -#endif -#ifndef GL_FLOAT_MAT4x2 -#define GL_FLOAT_MAT4x2 0x8B69 -#endif -#ifndef GL_FLOAT_MAT4x3 -#define GL_FLOAT_MAT4x3 0x8B6A -#endif -#ifndef GL_SRGB -#define GL_SRGB 0x8C40 -#endif -#ifndef GL_SRGB8 -#define GL_SRGB8 0x8C41 -#endif -#ifndef GL_SRGB_ALPHA -#define GL_SRGB_ALPHA 0x8C42 -#endif -#ifndef GL_SRGB8_ALPHA8 -#define GL_SRGB8_ALPHA8 0x8C43 -#endif -#ifndef GL_SLUMINANCE_ALPHA -#define GL_SLUMINANCE_ALPHA 0x8C44 -#endif -#ifndef GL_SLUMINANCE8_ALPHA8 -#define GL_SLUMINANCE8_ALPHA8 0x8C45 -#endif -#ifndef GL_SLUMINANCE -#define GL_SLUMINANCE 0x8C46 -#endif -#ifndef GL_SLUMINANCE8 -#define GL_SLUMINANCE8 0x8C47 -#endif -#ifndef GL_COMPRESSED_SRGB -#define GL_COMPRESSED_SRGB 0x8C48 -#endif -#ifndef GL_COMPRESSED_SRGB_ALPHA -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#endif -#ifndef GL_COMPRESSED_SLUMINANCE -#define GL_COMPRESSED_SLUMINANCE 0x8C4A -#endif -#ifndef GL_COMPRESSED_SLUMINANCE_ALPHA -#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B -#endif -#ifndef GL_TEXTURE0_ARB -#define GL_TEXTURE0_ARB 0x84C0 -#endif -#ifndef GL_TEXTURE1_ARB -#define GL_TEXTURE1_ARB 0x84C1 -#endif -#ifndef GL_TEXTURE2_ARB -#define GL_TEXTURE2_ARB 0x84C2 -#endif -#ifndef GL_TEXTURE3_ARB -#define GL_TEXTURE3_ARB 0x84C3 -#endif -#ifndef GL_TEXTURE4_ARB -#define GL_TEXTURE4_ARB 0x84C4 -#endif -#ifndef GL_TEXTURE5_ARB -#define GL_TEXTURE5_ARB 0x84C5 -#endif -#ifndef GL_TEXTURE6_ARB -#define GL_TEXTURE6_ARB 0x84C6 -#endif -#ifndef GL_TEXTURE7_ARB -#define GL_TEXTURE7_ARB 0x84C7 -#endif -#ifndef GL_TEXTURE8_ARB -#define GL_TEXTURE8_ARB 0x84C8 -#endif -#ifndef GL_TEXTURE9_ARB -#define GL_TEXTURE9_ARB 0x84C9 -#endif -#ifndef GL_TEXTURE10_ARB -#define GL_TEXTURE10_ARB 0x84CA -#endif -#ifndef GL_TEXTURE11_ARB -#define GL_TEXTURE11_ARB 0x84CB -#endif -#ifndef GL_TEXTURE12_ARB -#define GL_TEXTURE12_ARB 0x84CC -#endif -#ifndef GL_TEXTURE13_ARB -#define GL_TEXTURE13_ARB 0x84CD -#endif -#ifndef GL_TEXTURE14_ARB -#define GL_TEXTURE14_ARB 0x84CE -#endif -#ifndef GL_TEXTURE15_ARB -#define GL_TEXTURE15_ARB 0x84CF -#endif -#ifndef GL_TEXTURE16_ARB -#define GL_TEXTURE16_ARB 0x84D0 -#endif -#ifndef GL_TEXTURE17_ARB -#define GL_TEXTURE17_ARB 0x84D1 -#endif -#ifndef GL_TEXTURE18_ARB -#define GL_TEXTURE18_ARB 0x84D2 -#endif -#ifndef GL_TEXTURE19_ARB -#define GL_TEXTURE19_ARB 0x84D3 -#endif -#ifndef GL_TEXTURE20_ARB -#define GL_TEXTURE20_ARB 0x84D4 -#endif -#ifndef GL_TEXTURE21_ARB -#define GL_TEXTURE21_ARB 0x84D5 -#endif -#ifndef GL_TEXTURE22_ARB -#define GL_TEXTURE22_ARB 0x84D6 -#endif -#ifndef GL_TEXTURE23_ARB -#define GL_TEXTURE23_ARB 0x84D7 -#endif -#ifndef GL_TEXTURE24_ARB -#define GL_TEXTURE24_ARB 0x84D8 -#endif -#ifndef GL_TEXTURE25_ARB -#define GL_TEXTURE25_ARB 0x84D9 -#endif -#ifndef GL_TEXTURE26_ARB -#define GL_TEXTURE26_ARB 0x84DA -#endif -#ifndef GL_TEXTURE27_ARB -#define GL_TEXTURE27_ARB 0x84DB -#endif -#ifndef GL_TEXTURE28_ARB -#define GL_TEXTURE28_ARB 0x84DC -#endif -#ifndef GL_TEXTURE29_ARB -#define GL_TEXTURE29_ARB 0x84DD -#endif -#ifndef GL_TEXTURE30_ARB -#define GL_TEXTURE30_ARB 0x84DE -#endif -#ifndef GL_TEXTURE31_ARB -#define GL_TEXTURE31_ARB 0x84DF -#endif -#ifndef GL_ACTIVE_TEXTURE_ARB -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#endif -#ifndef GL_CLIENT_ACTIVE_TEXTURE_ARB -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#endif -#ifndef GL_MAX_TEXTURE_UNITS_ARB -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 -#endif -#ifndef GL_TRANSPOSE_MODELVIEW_MATRIX_ARB -#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 -#endif -#ifndef GL_TRANSPOSE_PROJECTION_MATRIX_ARB -#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 -#endif -#ifndef GL_TRANSPOSE_TEXTURE_MATRIX_ARB -#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 -#endif -#ifndef GL_TRANSPOSE_COLOR_MATRIX_ARB -#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 -#endif -#ifndef GL_MULTISAMPLE_ARB -#define GL_MULTISAMPLE_ARB 0x809D -#endif -#ifndef GL_SAMPLE_ALPHA_TO_COVERAGE_ARB -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E -#endif -#ifndef GL_SAMPLE_ALPHA_TO_ONE_ARB -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#endif -#ifndef GL_SAMPLE_COVERAGE_ARB -#define GL_SAMPLE_COVERAGE_ARB 0x80A0 -#endif -#ifndef GL_SAMPLE_BUFFERS_ARB -#define GL_SAMPLE_BUFFERS_ARB 0x80A8 -#endif -#ifndef GL_SAMPLES_ARB -#define GL_SAMPLES_ARB 0x80A9 -#endif -#ifndef GL_SAMPLE_COVERAGE_VALUE_ARB -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#endif -#ifndef GL_SAMPLE_COVERAGE_INVERT_ARB -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#endif -#ifndef GL_MULTISAMPLE_BIT_ARB -#define GL_MULTISAMPLE_BIT_ARB 0x20000000 -#endif -#ifndef GL_NORMAL_MAP_ARB -#define GL_NORMAL_MAP_ARB 0x8511 -#endif -#ifndef GL_REFLECTION_MAP_ARB -#define GL_REFLECTION_MAP_ARB 0x8512 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_ARB -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#endif -#ifndef GL_TEXTURE_BINDING_CUBE_MAP_ARB -#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A -#endif -#ifndef GL_PROXY_TEXTURE_CUBE_MAP_ARB -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B -#endif -#ifndef GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C -#endif -#ifndef GL_COMPRESSED_ALPHA_ARB -#define GL_COMPRESSED_ALPHA_ARB 0x84E9 -#endif -#ifndef GL_COMPRESSED_LUMINANCE_ARB -#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA -#endif -#ifndef GL_COMPRESSED_LUMINANCE_ALPHA_ARB -#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB -#endif -#ifndef GL_COMPRESSED_INTENSITY_ARB -#define GL_COMPRESSED_INTENSITY_ARB 0x84EC -#endif -#ifndef GL_COMPRESSED_RGB_ARB -#define GL_COMPRESSED_RGB_ARB 0x84ED -#endif -#ifndef GL_COMPRESSED_RGBA_ARB -#define GL_COMPRESSED_RGBA_ARB 0x84EE -#endif -#ifndef GL_TEXTURE_COMPRESSION_HINT_ARB -#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF -#endif -#ifndef GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 -#endif -#ifndef GL_TEXTURE_COMPRESSED_ARB -#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 -#endif -#ifndef GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 -#endif -#ifndef GL_COMPRESSED_TEXTURE_FORMATS_ARB -#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 -#endif -#ifndef GL_CLAMP_TO_BORDER_ARB -#define GL_CLAMP_TO_BORDER_ARB 0x812D -#endif -#ifndef GL_POINT_SIZE_MIN_ARB -#define GL_POINT_SIZE_MIN_ARB 0x8126 -#endif -#ifndef GL_POINT_SIZE_MAX_ARB -#define GL_POINT_SIZE_MAX_ARB 0x8127 -#endif -#ifndef GL_POINT_FADE_THRESHOLD_SIZE_ARB -#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 -#endif -#ifndef GL_POINT_DISTANCE_ATTENUATION_ARB -#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 -#endif -#ifndef GL_MAX_VERTEX_UNITS_ARB -#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 -#endif -#ifndef GL_ACTIVE_VERTEX_UNITS_ARB -#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 -#endif -#ifndef GL_WEIGHT_SUM_UNITY_ARB -#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 -#endif -#ifndef GL_VERTEX_BLEND_ARB -#define GL_VERTEX_BLEND_ARB 0x86A7 -#endif -#ifndef GL_CURRENT_WEIGHT_ARB -#define GL_CURRENT_WEIGHT_ARB 0x86A8 -#endif -#ifndef GL_WEIGHT_ARRAY_TYPE_ARB -#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 -#endif -#ifndef GL_WEIGHT_ARRAY_STRIDE_ARB -#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA -#endif -#ifndef GL_WEIGHT_ARRAY_SIZE_ARB -#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB -#endif -#ifndef GL_WEIGHT_ARRAY_POINTER_ARB -#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC -#endif -#ifndef GL_WEIGHT_ARRAY_ARB -#define GL_WEIGHT_ARRAY_ARB 0x86AD -#endif -#ifndef GL_MODELVIEW0_ARB -#define GL_MODELVIEW0_ARB 0x1700 -#endif -#ifndef GL_MODELVIEW1_ARB -#define GL_MODELVIEW1_ARB 0x850A -#endif -#ifndef GL_MODELVIEW2_ARB -#define GL_MODELVIEW2_ARB 0x8722 -#endif -#ifndef GL_MODELVIEW3_ARB -#define GL_MODELVIEW3_ARB 0x8723 -#endif -#ifndef GL_MODELVIEW4_ARB -#define GL_MODELVIEW4_ARB 0x8724 -#endif -#ifndef GL_MODELVIEW5_ARB -#define GL_MODELVIEW5_ARB 0x8725 -#endif -#ifndef GL_MODELVIEW6_ARB -#define GL_MODELVIEW6_ARB 0x8726 -#endif -#ifndef GL_MODELVIEW7_ARB -#define GL_MODELVIEW7_ARB 0x8727 -#endif -#ifndef GL_MODELVIEW8_ARB -#define GL_MODELVIEW8_ARB 0x8728 -#endif -#ifndef GL_MODELVIEW9_ARB -#define GL_MODELVIEW9_ARB 0x8729 -#endif -#ifndef GL_MODELVIEW10_ARB -#define GL_MODELVIEW10_ARB 0x872A -#endif -#ifndef GL_MODELVIEW11_ARB -#define GL_MODELVIEW11_ARB 0x872B -#endif -#ifndef GL_MODELVIEW12_ARB -#define GL_MODELVIEW12_ARB 0x872C -#endif -#ifndef GL_MODELVIEW13_ARB -#define GL_MODELVIEW13_ARB 0x872D -#endif -#ifndef GL_MODELVIEW14_ARB -#define GL_MODELVIEW14_ARB 0x872E -#endif -#ifndef GL_MODELVIEW15_ARB -#define GL_MODELVIEW15_ARB 0x872F -#endif -#ifndef GL_MODELVIEW16_ARB -#define GL_MODELVIEW16_ARB 0x8730 -#endif -#ifndef GL_MODELVIEW17_ARB -#define GL_MODELVIEW17_ARB 0x8731 -#endif -#ifndef GL_MODELVIEW18_ARB -#define GL_MODELVIEW18_ARB 0x8732 -#endif -#ifndef GL_MODELVIEW19_ARB -#define GL_MODELVIEW19_ARB 0x8733 -#endif -#ifndef GL_MODELVIEW20_ARB -#define GL_MODELVIEW20_ARB 0x8734 -#endif -#ifndef GL_MODELVIEW21_ARB -#define GL_MODELVIEW21_ARB 0x8735 -#endif -#ifndef GL_MODELVIEW22_ARB -#define GL_MODELVIEW22_ARB 0x8736 -#endif -#ifndef GL_MODELVIEW23_ARB -#define GL_MODELVIEW23_ARB 0x8737 -#endif -#ifndef GL_MODELVIEW24_ARB -#define GL_MODELVIEW24_ARB 0x8738 -#endif -#ifndef GL_MODELVIEW25_ARB -#define GL_MODELVIEW25_ARB 0x8739 -#endif -#ifndef GL_MODELVIEW26_ARB -#define GL_MODELVIEW26_ARB 0x873A -#endif -#ifndef GL_MODELVIEW27_ARB -#define GL_MODELVIEW27_ARB 0x873B -#endif -#ifndef GL_MODELVIEW28_ARB -#define GL_MODELVIEW28_ARB 0x873C -#endif -#ifndef GL_MODELVIEW29_ARB -#define GL_MODELVIEW29_ARB 0x873D -#endif -#ifndef GL_MODELVIEW30_ARB -#define GL_MODELVIEW30_ARB 0x873E -#endif -#ifndef GL_MODELVIEW31_ARB -#define GL_MODELVIEW31_ARB 0x873F -#endif -#ifndef GL_MATRIX_PALETTE_ARB -#define GL_MATRIX_PALETTE_ARB 0x8840 -#endif -#ifndef GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB -#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 -#endif -#ifndef GL_MAX_PALETTE_MATRICES_ARB -#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 -#endif -#ifndef GL_CURRENT_PALETTE_MATRIX_ARB -#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 -#endif -#ifndef GL_MATRIX_INDEX_ARRAY_ARB -#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 -#endif -#ifndef GL_CURRENT_MATRIX_INDEX_ARB -#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 -#endif -#ifndef GL_MATRIX_INDEX_ARRAY_SIZE_ARB -#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 -#endif -#ifndef GL_MATRIX_INDEX_ARRAY_TYPE_ARB -#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 -#endif -#ifndef GL_MATRIX_INDEX_ARRAY_STRIDE_ARB -#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 -#endif -#ifndef GL_MATRIX_INDEX_ARRAY_POINTER_ARB -#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 -#endif -#ifndef GL_COMBINE_ARB -#define GL_COMBINE_ARB 0x8570 -#endif -#ifndef GL_COMBINE_RGB_ARB -#define GL_COMBINE_RGB_ARB 0x8571 -#endif -#ifndef GL_COMBINE_ALPHA_ARB -#define GL_COMBINE_ALPHA_ARB 0x8572 -#endif -#ifndef GL_SOURCE0_RGB_ARB -#define GL_SOURCE0_RGB_ARB 0x8580 -#endif -#ifndef GL_SOURCE1_RGB_ARB -#define GL_SOURCE1_RGB_ARB 0x8581 -#endif -#ifndef GL_SOURCE2_RGB_ARB -#define GL_SOURCE2_RGB_ARB 0x8582 -#endif -#ifndef GL_SOURCE0_ALPHA_ARB -#define GL_SOURCE0_ALPHA_ARB 0x8588 -#endif -#ifndef GL_SOURCE1_ALPHA_ARB -#define GL_SOURCE1_ALPHA_ARB 0x8589 -#endif -#ifndef GL_SOURCE2_ALPHA_ARB -#define GL_SOURCE2_ALPHA_ARB 0x858A -#endif -#ifndef GL_OPERAND0_RGB_ARB -#define GL_OPERAND0_RGB_ARB 0x8590 -#endif -#ifndef GL_OPERAND1_RGB_ARB -#define GL_OPERAND1_RGB_ARB 0x8591 -#endif -#ifndef GL_OPERAND2_RGB_ARB -#define GL_OPERAND2_RGB_ARB 0x8592 -#endif -#ifndef GL_OPERAND0_ALPHA_ARB -#define GL_OPERAND0_ALPHA_ARB 0x8598 -#endif -#ifndef GL_OPERAND1_ALPHA_ARB -#define GL_OPERAND1_ALPHA_ARB 0x8599 -#endif -#ifndef GL_OPERAND2_ALPHA_ARB -#define GL_OPERAND2_ALPHA_ARB 0x859A -#endif -#ifndef GL_RGB_SCALE_ARB -#define GL_RGB_SCALE_ARB 0x8573 -#endif -#ifndef GL_ADD_SIGNED_ARB -#define GL_ADD_SIGNED_ARB 0x8574 -#endif -#ifndef GL_INTERPOLATE_ARB -#define GL_INTERPOLATE_ARB 0x8575 -#endif -#ifndef GL_SUBTRACT_ARB -#define GL_SUBTRACT_ARB 0x84E7 -#endif -#ifndef GL_CONSTANT_ARB -#define GL_CONSTANT_ARB 0x8576 -#endif -#ifndef GL_PRIMARY_COLOR_ARB -#define GL_PRIMARY_COLOR_ARB 0x8577 -#endif -#ifndef GL_PREVIOUS_ARB -#define GL_PREVIOUS_ARB 0x8578 -#endif -#ifndef GL_DOT3_RGB_ARB -#define GL_DOT3_RGB_ARB 0x86AE -#endif -#ifndef GL_DOT3_RGBA_ARB -#define GL_DOT3_RGBA_ARB 0x86AF -#endif -#ifndef GL_MIRRORED_REPEAT_ARB -#define GL_MIRRORED_REPEAT_ARB 0x8370 -#endif -#ifndef GL_DEPTH_COMPONENT16_ARB -#define GL_DEPTH_COMPONENT16_ARB 0x81A5 -#endif -#ifndef GL_DEPTH_COMPONENT24_ARB -#define GL_DEPTH_COMPONENT24_ARB 0x81A6 -#endif -#ifndef GL_DEPTH_COMPONENT32_ARB -#define GL_DEPTH_COMPONENT32_ARB 0x81A7 -#endif -#ifndef GL_TEXTURE_DEPTH_SIZE_ARB -#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A -#endif -#ifndef GL_DEPTH_TEXTURE_MODE_ARB -#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B -#endif -#ifndef GL_TEXTURE_COMPARE_FAIL_VALUE_ARB -#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF -#endif -#ifndef GL_COLOR_SUM_ARB -#define GL_COLOR_SUM_ARB 0x8458 -#endif -#ifndef GL_VERTEX_PROGRAM_ARB -#define GL_VERTEX_PROGRAM_ARB 0x8620 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB -#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB -#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 -#endif -#ifndef GL_CURRENT_VERTEX_ATTRIB_ARB -#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 -#endif -#ifndef GL_PROGRAM_LENGTH_ARB -#define GL_PROGRAM_LENGTH_ARB 0x8627 -#endif -#ifndef GL_PROGRAM_STRING_ARB -#define GL_PROGRAM_STRING_ARB 0x8628 -#endif -#ifndef GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB -#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E -#endif -#ifndef GL_MAX_PROGRAM_MATRICES_ARB -#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F -#endif -#ifndef GL_CURRENT_MATRIX_STACK_DEPTH_ARB -#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 -#endif -#ifndef GL_CURRENT_MATRIX_ARB -#define GL_CURRENT_MATRIX_ARB 0x8641 -#endif -#ifndef GL_VERTEX_PROGRAM_POINT_SIZE_ARB -#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 -#endif -#ifndef GL_VERTEX_PROGRAM_TWO_SIDE_ARB -#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB -#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 -#endif -#ifndef GL_PROGRAM_ERROR_POSITION_ARB -#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B -#endif -#ifndef GL_PROGRAM_BINDING_ARB -#define GL_PROGRAM_BINDING_ARB 0x8677 -#endif -#ifndef GL_MAX_VERTEX_ATTRIBS_ARB -#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A -#endif -#ifndef GL_PROGRAM_ERROR_STRING_ARB -#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 -#endif -#ifndef GL_PROGRAM_FORMAT_ASCII_ARB -#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 -#endif -#ifndef GL_PROGRAM_FORMAT_ARB -#define GL_PROGRAM_FORMAT_ARB 0x8876 -#endif -#ifndef GL_PROGRAM_INSTRUCTIONS_ARB -#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 -#endif -#ifndef GL_MAX_PROGRAM_INSTRUCTIONS_ARB -#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 -#endif -#ifndef GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB -#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 -#endif -#ifndef GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB -#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 -#endif -#ifndef GL_PROGRAM_TEMPORARIES_ARB -#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 -#endif -#ifndef GL_MAX_PROGRAM_TEMPORARIES_ARB -#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 -#endif -#ifndef GL_PROGRAM_NATIVE_TEMPORARIES_ARB -#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 -#endif -#ifndef GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB -#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 -#endif -#ifndef GL_PROGRAM_PARAMETERS_ARB -#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 -#endif -#ifndef GL_MAX_PROGRAM_PARAMETERS_ARB -#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 -#endif -#ifndef GL_PROGRAM_NATIVE_PARAMETERS_ARB -#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA -#endif -#ifndef GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB -#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB -#endif -#ifndef GL_PROGRAM_ATTRIBS_ARB -#define GL_PROGRAM_ATTRIBS_ARB 0x88AC -#endif -#ifndef GL_MAX_PROGRAM_ATTRIBS_ARB -#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD -#endif -#ifndef GL_PROGRAM_NATIVE_ATTRIBS_ARB -#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE -#endif -#ifndef GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB -#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF -#endif -#ifndef GL_PROGRAM_ADDRESS_REGISTERS_ARB -#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 -#endif -#ifndef GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB -#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 -#endif -#ifndef GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB -#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 -#endif -#ifndef GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB -#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 -#endif -#ifndef GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB -#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 -#endif -#ifndef GL_MAX_PROGRAM_ENV_PARAMETERS_ARB -#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 -#endif -#ifndef GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB -#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 -#endif -#ifndef GL_TRANSPOSE_CURRENT_MATRIX_ARB -#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 -#endif -#ifndef GL_MATRIX0_ARB -#define GL_MATRIX0_ARB 0x88C0 -#endif -#ifndef GL_MATRIX1_ARB -#define GL_MATRIX1_ARB 0x88C1 -#endif -#ifndef GL_MATRIX2_ARB -#define GL_MATRIX2_ARB 0x88C2 -#endif -#ifndef GL_MATRIX3_ARB -#define GL_MATRIX3_ARB 0x88C3 -#endif -#ifndef GL_MATRIX4_ARB -#define GL_MATRIX4_ARB 0x88C4 -#endif -#ifndef GL_MATRIX5_ARB -#define GL_MATRIX5_ARB 0x88C5 -#endif -#ifndef GL_MATRIX6_ARB -#define GL_MATRIX6_ARB 0x88C6 -#endif -#ifndef GL_MATRIX7_ARB -#define GL_MATRIX7_ARB 0x88C7 -#endif -#ifndef GL_MATRIX8_ARB -#define GL_MATRIX8_ARB 0x88C8 -#endif -#ifndef GL_MATRIX9_ARB -#define GL_MATRIX9_ARB 0x88C9 -#endif -#ifndef GL_MATRIX10_ARB -#define GL_MATRIX10_ARB 0x88CA -#endif -#ifndef GL_MATRIX11_ARB -#define GL_MATRIX11_ARB 0x88CB -#endif -#ifndef GL_MATRIX12_ARB -#define GL_MATRIX12_ARB 0x88CC -#endif -#ifndef GL_MATRIX13_ARB -#define GL_MATRIX13_ARB 0x88CD -#endif -#ifndef GL_MATRIX14_ARB -#define GL_MATRIX14_ARB 0x88CE -#endif -#ifndef GL_MATRIX15_ARB -#define GL_MATRIX15_ARB 0x88CF -#endif -#ifndef GL_MATRIX16_ARB -#define GL_MATRIX16_ARB 0x88D0 -#endif -#ifndef GL_MATRIX17_ARB -#define GL_MATRIX17_ARB 0x88D1 -#endif -#ifndef GL_MATRIX18_ARB -#define GL_MATRIX18_ARB 0x88D2 -#endif -#ifndef GL_MATRIX19_ARB -#define GL_MATRIX19_ARB 0x88D3 -#endif -#ifndef GL_MATRIX20_ARB -#define GL_MATRIX20_ARB 0x88D4 -#endif -#ifndef GL_MATRIX21_ARB -#define GL_MATRIX21_ARB 0x88D5 -#endif -#ifndef GL_MATRIX22_ARB -#define GL_MATRIX22_ARB 0x88D6 -#endif -#ifndef GL_MATRIX23_ARB -#define GL_MATRIX23_ARB 0x88D7 -#endif -#ifndef GL_MATRIX24_ARB -#define GL_MATRIX24_ARB 0x88D8 -#endif -#ifndef GL_MATRIX25_ARB -#define GL_MATRIX25_ARB 0x88D9 -#endif -#ifndef GL_MATRIX26_ARB -#define GL_MATRIX26_ARB 0x88DA -#endif -#ifndef GL_MATRIX27_ARB -#define GL_MATRIX27_ARB 0x88DB -#endif -#ifndef GL_MATRIX28_ARB -#define GL_MATRIX28_ARB 0x88DC -#endif -#ifndef GL_MATRIX29_ARB -#define GL_MATRIX29_ARB 0x88DD -#endif -#ifndef GL_MATRIX30_ARB -#define GL_MATRIX30_ARB 0x88DE -#endif -#ifndef GL_MATRIX31_ARB -#define GL_MATRIX31_ARB 0x88DF -#endif -#ifndef GL_FRAGMENT_PROGRAM_ARB -#define GL_FRAGMENT_PROGRAM_ARB 0x8804 -#endif -#ifndef GL_PROGRAM_ALU_INSTRUCTIONS_ARB -#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 -#endif -#ifndef GL_PROGRAM_TEX_INSTRUCTIONS_ARB -#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 -#endif -#ifndef GL_PROGRAM_TEX_INDIRECTIONS_ARB -#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 -#endif -#ifndef GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB -#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 -#endif -#ifndef GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB -#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 -#endif -#ifndef GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB -#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A -#endif -#ifndef GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB -#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B -#endif -#ifndef GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB -#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C -#endif -#ifndef GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB -#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D -#endif -#ifndef GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB -#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E -#endif -#ifndef GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB -#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F -#endif -#ifndef GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB -#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 -#endif -#ifndef GL_MAX_TEXTURE_COORDS_ARB -#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 -#endif -#ifndef GL_MAX_TEXTURE_IMAGE_UNITS_ARB -#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 -#endif -#ifndef GL_BUFFER_SIZE_ARB -#define GL_BUFFER_SIZE_ARB 0x8764 -#endif -#ifndef GL_BUFFER_USAGE_ARB -#define GL_BUFFER_USAGE_ARB 0x8765 -#endif -#ifndef GL_ARRAY_BUFFER_ARB -#define GL_ARRAY_BUFFER_ARB 0x8892 -#endif -#ifndef GL_ELEMENT_ARRAY_BUFFER_ARB -#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 -#endif -#ifndef GL_ARRAY_BUFFER_BINDING_ARB -#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 -#endif -#ifndef GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB -#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 -#endif -#ifndef GL_VERTEX_ARRAY_BUFFER_BINDING_ARB -#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 -#endif -#ifndef GL_NORMAL_ARRAY_BUFFER_BINDING_ARB -#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 -#endif -#ifndef GL_COLOR_ARRAY_BUFFER_BINDING_ARB -#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 -#endif -#ifndef GL_INDEX_ARRAY_BUFFER_BINDING_ARB -#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A -#endif -#ifndef GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B -#endif -#ifndef GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C -#endif -#ifndef GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D -#endif -#ifndef GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB -#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F -#endif -#ifndef GL_READ_ONLY_ARB -#define GL_READ_ONLY_ARB 0x88B8 -#endif -#ifndef GL_WRITE_ONLY_ARB -#define GL_WRITE_ONLY_ARB 0x88B9 -#endif -#ifndef GL_READ_WRITE_ARB -#define GL_READ_WRITE_ARB 0x88BA -#endif -#ifndef GL_BUFFER_ACCESS_ARB -#define GL_BUFFER_ACCESS_ARB 0x88BB -#endif -#ifndef GL_BUFFER_MAPPED_ARB -#define GL_BUFFER_MAPPED_ARB 0x88BC -#endif -#ifndef GL_BUFFER_MAP_POINTER_ARB -#define GL_BUFFER_MAP_POINTER_ARB 0x88BD -#endif -#ifndef GL_STREAM_DRAW_ARB -#define GL_STREAM_DRAW_ARB 0x88E0 -#endif -#ifndef GL_STREAM_READ_ARB -#define GL_STREAM_READ_ARB 0x88E1 -#endif -#ifndef GL_STREAM_COPY_ARB -#define GL_STREAM_COPY_ARB 0x88E2 -#endif -#ifndef GL_STATIC_DRAW_ARB -#define GL_STATIC_DRAW_ARB 0x88E4 -#endif -#ifndef GL_STATIC_READ_ARB -#define GL_STATIC_READ_ARB 0x88E5 -#endif -#ifndef GL_STATIC_COPY_ARB -#define GL_STATIC_COPY_ARB 0x88E6 -#endif -#ifndef GL_DYNAMIC_DRAW_ARB -#define GL_DYNAMIC_DRAW_ARB 0x88E8 -#endif -#ifndef GL_DYNAMIC_READ_ARB -#define GL_DYNAMIC_READ_ARB 0x88E9 -#endif -#ifndef GL_DYNAMIC_COPY_ARB -#define GL_DYNAMIC_COPY_ARB 0x88EA -#endif -#ifndef GL_QUERY_COUNTER_BITS_ARB -#define GL_QUERY_COUNTER_BITS_ARB 0x8864 -#endif -#ifndef GL_CURRENT_QUERY_ARB -#define GL_CURRENT_QUERY_ARB 0x8865 -#endif -#ifndef GL_QUERY_RESULT_ARB -#define GL_QUERY_RESULT_ARB 0x8866 -#endif -#ifndef GL_QUERY_RESULT_AVAILABLE_ARB -#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 -#endif -#ifndef GL_SAMPLES_PASSED_ARB -#define GL_SAMPLES_PASSED_ARB 0x8914 -#endif -#ifndef GL_PROGRAM_OBJECT_ARB -#define GL_PROGRAM_OBJECT_ARB 0x8B40 -#endif -#ifndef GL_SHADER_OBJECT_ARB -#define GL_SHADER_OBJECT_ARB 0x8B48 -#endif -#ifndef GL_OBJECT_TYPE_ARB -#define GL_OBJECT_TYPE_ARB 0x8B4E -#endif -#ifndef GL_OBJECT_SUBTYPE_ARB -#define GL_OBJECT_SUBTYPE_ARB 0x8B4F -#endif -#ifndef GL_FLOAT_VEC2_ARB -#define GL_FLOAT_VEC2_ARB 0x8B50 -#endif -#ifndef GL_FLOAT_VEC3_ARB -#define GL_FLOAT_VEC3_ARB 0x8B51 -#endif -#ifndef GL_FLOAT_VEC4_ARB -#define GL_FLOAT_VEC4_ARB 0x8B52 -#endif -#ifndef GL_INT_VEC2_ARB -#define GL_INT_VEC2_ARB 0x8B53 -#endif -#ifndef GL_INT_VEC3_ARB -#define GL_INT_VEC3_ARB 0x8B54 -#endif -#ifndef GL_INT_VEC4_ARB -#define GL_INT_VEC4_ARB 0x8B55 -#endif -#ifndef GL_BOOL_ARB -#define GL_BOOL_ARB 0x8B56 -#endif -#ifndef GL_BOOL_VEC2_ARB -#define GL_BOOL_VEC2_ARB 0x8B57 -#endif -#ifndef GL_BOOL_VEC3_ARB -#define GL_BOOL_VEC3_ARB 0x8B58 -#endif -#ifndef GL_BOOL_VEC4_ARB -#define GL_BOOL_VEC4_ARB 0x8B59 -#endif -#ifndef GL_FLOAT_MAT2_ARB -#define GL_FLOAT_MAT2_ARB 0x8B5A -#endif -#ifndef GL_FLOAT_MAT3_ARB -#define GL_FLOAT_MAT3_ARB 0x8B5B -#endif -#ifndef GL_FLOAT_MAT4_ARB -#define GL_FLOAT_MAT4_ARB 0x8B5C -#endif -#ifndef GL_SAMPLER_1D_ARB -#define GL_SAMPLER_1D_ARB 0x8B5D -#endif -#ifndef GL_SAMPLER_2D_ARB -#define GL_SAMPLER_2D_ARB 0x8B5E -#endif -#ifndef GL_SAMPLER_3D_ARB -#define GL_SAMPLER_3D_ARB 0x8B5F -#endif -#ifndef GL_SAMPLER_CUBE_ARB -#define GL_SAMPLER_CUBE_ARB 0x8B60 -#endif -#ifndef GL_SAMPLER_1D_SHADOW_ARB -#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 -#endif -#ifndef GL_SAMPLER_2D_SHADOW_ARB -#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 -#endif -#ifndef GL_SAMPLER_2D_RECT_ARB -#define GL_SAMPLER_2D_RECT_ARB 0x8B63 -#endif -#ifndef GL_SAMPLER_2D_RECT_SHADOW_ARB -#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 -#endif -#ifndef GL_OBJECT_DELETE_STATUS_ARB -#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 -#endif -#ifndef GL_OBJECT_COMPILE_STATUS_ARB -#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 -#endif -#ifndef GL_OBJECT_LINK_STATUS_ARB -#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 -#endif -#ifndef GL_OBJECT_VALIDATE_STATUS_ARB -#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 -#endif -#ifndef GL_OBJECT_INFO_LOG_LENGTH_ARB -#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 -#endif -#ifndef GL_OBJECT_ATTACHED_OBJECTS_ARB -#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 -#endif -#ifndef GL_OBJECT_ACTIVE_UNIFORMS_ARB -#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 -#endif -#ifndef GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB -#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 -#endif -#ifndef GL_OBJECT_SHADER_SOURCE_LENGTH_ARB -#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 -#endif -#ifndef GL_VERTEX_SHADER_ARB -#define GL_VERTEX_SHADER_ARB 0x8B31 -#endif -#ifndef GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A -#endif -#ifndef GL_MAX_VARYING_FLOATS_ARB -#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B -#endif -#ifndef GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C -#endif -#ifndef GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D -#endif -#ifndef GL_OBJECT_ACTIVE_ATTRIBUTES_ARB -#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 -#endif -#ifndef GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB -#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A -#endif -#ifndef GL_FRAGMENT_SHADER_ARB -#define GL_FRAGMENT_SHADER_ARB 0x8B30 -#endif -#ifndef GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 -#endif -#ifndef GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B -#endif -#ifndef GL_SHADING_LANGUAGE_VERSION_ARB -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C -#endif -#ifndef GL_POINT_SPRITE_ARB -#define GL_POINT_SPRITE_ARB 0x8861 -#endif -#ifndef GL_COORD_REPLACE_ARB -#define GL_COORD_REPLACE_ARB 0x8862 -#endif -#ifndef GL_MAX_DRAW_BUFFERS_ARB -#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 -#endif -#ifndef GL_DRAW_BUFFER0_ARB -#define GL_DRAW_BUFFER0_ARB 0x8825 -#endif -#ifndef GL_DRAW_BUFFER1_ARB -#define GL_DRAW_BUFFER1_ARB 0x8826 -#endif -#ifndef GL_DRAW_BUFFER2_ARB -#define GL_DRAW_BUFFER2_ARB 0x8827 -#endif -#ifndef GL_DRAW_BUFFER3_ARB -#define GL_DRAW_BUFFER3_ARB 0x8828 -#endif -#ifndef GL_DRAW_BUFFER4_ARB -#define GL_DRAW_BUFFER4_ARB 0x8829 -#endif -#ifndef GL_DRAW_BUFFER5_ARB -#define GL_DRAW_BUFFER5_ARB 0x882A -#endif -#ifndef GL_DRAW_BUFFER6_ARB -#define GL_DRAW_BUFFER6_ARB 0x882B -#endif -#ifndef GL_DRAW_BUFFER7_ARB -#define GL_DRAW_BUFFER7_ARB 0x882C -#endif -#ifndef GL_DRAW_BUFFER8_ARB -#define GL_DRAW_BUFFER8_ARB 0x882D -#endif -#ifndef GL_DRAW_BUFFER9_ARB -#define GL_DRAW_BUFFER9_ARB 0x882E -#endif -#ifndef GL_DRAW_BUFFER10_ARB -#define GL_DRAW_BUFFER10_ARB 0x882F -#endif -#ifndef GL_DRAW_BUFFER11_ARB -#define GL_DRAW_BUFFER11_ARB 0x8830 -#endif -#ifndef GL_DRAW_BUFFER12_ARB -#define GL_DRAW_BUFFER12_ARB 0x8831 -#endif -#ifndef GL_DRAW_BUFFER13_ARB -#define GL_DRAW_BUFFER13_ARB 0x8832 -#endif -#ifndef GL_DRAW_BUFFER14_ARB -#define GL_DRAW_BUFFER14_ARB 0x8833 -#endif -#ifndef GL_DRAW_BUFFER15_ARB -#define GL_DRAW_BUFFER15_ARB 0x8834 -#endif -#ifndef GL_TEXTURE_RECTANGLE_ARB -#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 -#endif -#ifndef GL_TEXTURE_BINDING_RECTANGLE_ARB -#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 -#endif -#ifndef GL_PROXY_TEXTURE_RECTANGLE_ARB -#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 -#endif -#ifndef GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 -#endif -#ifndef GL_RGBA_FLOAT_MODE_ARB -#define GL_RGBA_FLOAT_MODE_ARB 0x8820 -#endif -#ifndef GL_CLAMP_VERTEX_COLOR_ARB -#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A -#endif -#ifndef GL_CLAMP_FRAGMENT_COLOR_ARB -#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B -#endif -#ifndef GL_CLAMP_READ_COLOR_ARB -#define GL_CLAMP_READ_COLOR_ARB 0x891C -#endif -#ifndef GL_FIXED_ONLY_ARB -#define GL_FIXED_ONLY_ARB 0x891D -#endif -#ifndef GL_HALF_FLOAT_ARB -#define GL_HALF_FLOAT_ARB 0x140B -#endif -#ifndef GL_TEXTURE_RED_TYPE_ARB -#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 -#endif -#ifndef GL_TEXTURE_GREEN_TYPE_ARB -#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 -#endif -#ifndef GL_TEXTURE_BLUE_TYPE_ARB -#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 -#endif -#ifndef GL_TEXTURE_ALPHA_TYPE_ARB -#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 -#endif -#ifndef GL_TEXTURE_LUMINANCE_TYPE_ARB -#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 -#endif -#ifndef GL_TEXTURE_INTENSITY_TYPE_ARB -#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 -#endif -#ifndef GL_TEXTURE_DEPTH_TYPE_ARB -#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 -#endif -#ifndef GL_UNSIGNED_NORMALIZED_ARB -#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 -#endif -#ifndef GL_RGBA32F_ARB -#define GL_RGBA32F_ARB 0x8814 -#endif -#ifndef GL_RGB32F_ARB -#define GL_RGB32F_ARB 0x8815 -#endif -#ifndef GL_ALPHA32F_ARB -#define GL_ALPHA32F_ARB 0x8816 -#endif -#ifndef GL_INTENSITY32F_ARB -#define GL_INTENSITY32F_ARB 0x8817 -#endif -#ifndef GL_LUMINANCE32F_ARB -#define GL_LUMINANCE32F_ARB 0x8818 -#endif -#ifndef GL_LUMINANCE_ALPHA32F_ARB -#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 -#endif -#ifndef GL_RGBA16F_ARB -#define GL_RGBA16F_ARB 0x881A -#endif -#ifndef GL_RGB16F_ARB -#define GL_RGB16F_ARB 0x881B -#endif -#ifndef GL_ALPHA16F_ARB -#define GL_ALPHA16F_ARB 0x881C -#endif -#ifndef GL_INTENSITY16F_ARB -#define GL_INTENSITY16F_ARB 0x881D -#endif -#ifndef GL_LUMINANCE16F_ARB -#define GL_LUMINANCE16F_ARB 0x881E -#endif -#ifndef GL_LUMINANCE_ALPHA16F_ARB -#define GL_LUMINANCE_ALPHA16F_ARB 0x881F -#endif -#ifndef GL_PIXEL_PACK_BUFFER_ARB -#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB -#endif -#ifndef GL_PIXEL_UNPACK_BUFFER_ARB -#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC -#endif -#ifndef GL_PIXEL_PACK_BUFFER_BINDING_ARB -#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED -#endif -#ifndef GL_PIXEL_UNPACK_BUFFER_BINDING_ARB -#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF -#endif -#ifndef GL_ABGR_EXT -#define GL_ABGR_EXT 0x8000 -#endif -#ifndef GL_CONSTANT_COLOR_EXT -#define GL_CONSTANT_COLOR_EXT 0x8001 -#endif -#ifndef GL_ONE_MINUS_CONSTANT_COLOR_EXT -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#endif -#ifndef GL_CONSTANT_ALPHA_EXT -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#endif -#ifndef GL_ONE_MINUS_CONSTANT_ALPHA_EXT -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#endif -#ifndef GL_BLEND_COLOR_EXT -#define GL_BLEND_COLOR_EXT 0x8005 -#endif -#ifndef GL_POLYGON_OFFSET_EXT -#define GL_POLYGON_OFFSET_EXT 0x8037 -#endif -#ifndef GL_POLYGON_OFFSET_FACTOR_EXT -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#endif -#ifndef GL_POLYGON_OFFSET_BIAS_EXT -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 -#endif -#ifndef GL_ALPHA4_EXT -#define GL_ALPHA4_EXT 0x803B -#endif -#ifndef GL_ALPHA8_EXT -#define GL_ALPHA8_EXT 0x803C -#endif -#ifndef GL_ALPHA12_EXT -#define GL_ALPHA12_EXT 0x803D -#endif -#ifndef GL_ALPHA16_EXT -#define GL_ALPHA16_EXT 0x803E -#endif -#ifndef GL_LUMINANCE4_EXT -#define GL_LUMINANCE4_EXT 0x803F -#endif -#ifndef GL_LUMINANCE8_EXT -#define GL_LUMINANCE8_EXT 0x8040 -#endif -#ifndef GL_LUMINANCE12_EXT -#define GL_LUMINANCE12_EXT 0x8041 -#endif -#ifndef GL_LUMINANCE16_EXT -#define GL_LUMINANCE16_EXT 0x8042 -#endif -#ifndef GL_LUMINANCE4_ALPHA4_EXT -#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 -#endif -#ifndef GL_LUMINANCE6_ALPHA2_EXT -#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 -#endif -#ifndef GL_LUMINANCE8_ALPHA8_EXT -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#endif -#ifndef GL_LUMINANCE12_ALPHA4_EXT -#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 -#endif -#ifndef GL_LUMINANCE12_ALPHA12_EXT -#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 -#endif -#ifndef GL_LUMINANCE16_ALPHA16_EXT -#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 -#endif -#ifndef GL_INTENSITY_EXT -#define GL_INTENSITY_EXT 0x8049 -#endif -#ifndef GL_INTENSITY4_EXT -#define GL_INTENSITY4_EXT 0x804A -#endif -#ifndef GL_INTENSITY8_EXT -#define GL_INTENSITY8_EXT 0x804B -#endif -#ifndef GL_INTENSITY12_EXT -#define GL_INTENSITY12_EXT 0x804C -#endif -#ifndef GL_INTENSITY16_EXT -#define GL_INTENSITY16_EXT 0x804D -#endif -#ifndef GL_RGB2_EXT -#define GL_RGB2_EXT 0x804E -#endif -#ifndef GL_RGB4_EXT -#define GL_RGB4_EXT 0x804F -#endif -#ifndef GL_RGB5_EXT -#define GL_RGB5_EXT 0x8050 -#endif -#ifndef GL_RGB8_EXT -#define GL_RGB8_EXT 0x8051 -#endif -#ifndef GL_RGB10_EXT -#define GL_RGB10_EXT 0x8052 -#endif -#ifndef GL_RGB12_EXT -#define GL_RGB12_EXT 0x8053 -#endif -#ifndef GL_RGB16_EXT -#define GL_RGB16_EXT 0x8054 -#endif -#ifndef GL_RGBA2_EXT -#define GL_RGBA2_EXT 0x8055 -#endif -#ifndef GL_RGBA4_EXT -#define GL_RGBA4_EXT 0x8056 -#endif -#ifndef GL_RGB5_A1_EXT -#define GL_RGB5_A1_EXT 0x8057 -#endif -#ifndef GL_RGBA8_EXT -#define GL_RGBA8_EXT 0x8058 -#endif -#ifndef GL_RGB10_A2_EXT -#define GL_RGB10_A2_EXT 0x8059 -#endif -#ifndef GL_RGBA12_EXT -#define GL_RGBA12_EXT 0x805A -#endif -#ifndef GL_RGBA16_EXT -#define GL_RGBA16_EXT 0x805B -#endif -#ifndef GL_TEXTURE_RED_SIZE_EXT -#define GL_TEXTURE_RED_SIZE_EXT 0x805C -#endif -#ifndef GL_TEXTURE_GREEN_SIZE_EXT -#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D -#endif -#ifndef GL_TEXTURE_BLUE_SIZE_EXT -#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E -#endif -#ifndef GL_TEXTURE_ALPHA_SIZE_EXT -#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F -#endif -#ifndef GL_TEXTURE_LUMINANCE_SIZE_EXT -#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 -#endif -#ifndef GL_TEXTURE_INTENSITY_SIZE_EXT -#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 -#endif -#ifndef GL_REPLACE_EXT -#define GL_REPLACE_EXT 0x8062 -#endif -#ifndef GL_PROXY_TEXTURE_1D_EXT -#define GL_PROXY_TEXTURE_1D_EXT 0x8063 -#endif -#ifndef GL_PROXY_TEXTURE_2D_EXT -#define GL_PROXY_TEXTURE_2D_EXT 0x8064 -#endif -#ifndef GL_TEXTURE_TOO_LARGE_EXT -#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 -#endif -#ifndef GL_PACK_SKIP_IMAGES_EXT -#define GL_PACK_SKIP_IMAGES_EXT 0x806B -#endif -#ifndef GL_PACK_IMAGE_HEIGHT_EXT -#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C -#endif -#ifndef GL_UNPACK_SKIP_IMAGES_EXT -#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D -#endif -#ifndef GL_UNPACK_IMAGE_HEIGHT_EXT -#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E -#endif -#ifndef GL_TEXTURE_3D_EXT -#define GL_TEXTURE_3D_EXT 0x806F -#endif -#ifndef GL_PROXY_TEXTURE_3D_EXT -#define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#endif -#ifndef GL_TEXTURE_DEPTH_EXT -#define GL_TEXTURE_DEPTH_EXT 0x8071 -#endif -#ifndef GL_TEXTURE_WRAP_R_EXT -#define GL_TEXTURE_WRAP_R_EXT 0x8072 -#endif -#ifndef GL_MAX_3D_TEXTURE_SIZE_EXT -#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 -#endif -#ifndef GL_FILTER4_SGIS -#define GL_FILTER4_SGIS 0x8146 -#endif -#ifndef GL_TEXTURE_FILTER4_SIZE_SGIS -#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 -#endif -#ifndef GL_HISTOGRAM_EXT -#define GL_HISTOGRAM_EXT 0x8024 -#endif -#ifndef GL_PROXY_HISTOGRAM_EXT -#define GL_PROXY_HISTOGRAM_EXT 0x8025 -#endif -#ifndef GL_HISTOGRAM_WIDTH_EXT -#define GL_HISTOGRAM_WIDTH_EXT 0x8026 -#endif -#ifndef GL_HISTOGRAM_FORMAT_EXT -#define GL_HISTOGRAM_FORMAT_EXT 0x8027 -#endif -#ifndef GL_HISTOGRAM_RED_SIZE_EXT -#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 -#endif -#ifndef GL_HISTOGRAM_GREEN_SIZE_EXT -#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 -#endif -#ifndef GL_HISTOGRAM_BLUE_SIZE_EXT -#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A -#endif -#ifndef GL_HISTOGRAM_ALPHA_SIZE_EXT -#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B -#endif -#ifndef GL_HISTOGRAM_LUMINANCE_SIZE_EXT -#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C -#endif -#ifndef GL_HISTOGRAM_SINK_EXT -#define GL_HISTOGRAM_SINK_EXT 0x802D -#endif -#ifndef GL_MINMAX_EXT -#define GL_MINMAX_EXT 0x802E -#endif -#ifndef GL_MINMAX_FORMAT_EXT -#define GL_MINMAX_FORMAT_EXT 0x802F -#endif -#ifndef GL_MINMAX_SINK_EXT -#define GL_MINMAX_SINK_EXT 0x8030 -#endif -#ifndef GL_TABLE_TOO_LARGE_EXT -#define GL_TABLE_TOO_LARGE_EXT 0x8031 -#endif -#ifndef GL_CONVOLUTION_1D_EXT -#define GL_CONVOLUTION_1D_EXT 0x8010 -#endif -#ifndef GL_CONVOLUTION_2D_EXT -#define GL_CONVOLUTION_2D_EXT 0x8011 -#endif -#ifndef GL_SEPARABLE_2D_EXT -#define GL_SEPARABLE_2D_EXT 0x8012 -#endif -#ifndef GL_CONVOLUTION_BORDER_MODE_EXT -#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 -#endif -#ifndef GL_CONVOLUTION_FILTER_SCALE_EXT -#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 -#endif -#ifndef GL_CONVOLUTION_FILTER_BIAS_EXT -#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 -#endif -#ifndef GL_REDUCE_EXT -#define GL_REDUCE_EXT 0x8016 -#endif -#ifndef GL_CONVOLUTION_FORMAT_EXT -#define GL_CONVOLUTION_FORMAT_EXT 0x8017 -#endif -#ifndef GL_CONVOLUTION_WIDTH_EXT -#define GL_CONVOLUTION_WIDTH_EXT 0x8018 -#endif -#ifndef GL_CONVOLUTION_HEIGHT_EXT -#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 -#endif -#ifndef GL_MAX_CONVOLUTION_WIDTH_EXT -#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A -#endif -#ifndef GL_MAX_CONVOLUTION_HEIGHT_EXT -#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B -#endif -#ifndef GL_POST_CONVOLUTION_RED_SCALE_EXT -#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C -#endif -#ifndef GL_POST_CONVOLUTION_GREEN_SCALE_EXT -#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D -#endif -#ifndef GL_POST_CONVOLUTION_BLUE_SCALE_EXT -#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E -#endif -#ifndef GL_POST_CONVOLUTION_ALPHA_SCALE_EXT -#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F -#endif -#ifndef GL_POST_CONVOLUTION_RED_BIAS_EXT -#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 -#endif -#ifndef GL_POST_CONVOLUTION_GREEN_BIAS_EXT -#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 -#endif -#ifndef GL_POST_CONVOLUTION_BLUE_BIAS_EXT -#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 -#endif -#ifndef GL_POST_CONVOLUTION_ALPHA_BIAS_EXT -#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 -#endif -#ifndef GL_COLOR_MATRIX_SGI -#define GL_COLOR_MATRIX_SGI 0x80B1 -#endif -#ifndef GL_COLOR_MATRIX_STACK_DEPTH_SGI -#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 -#endif -#ifndef GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 -#endif -#ifndef GL_POST_COLOR_MATRIX_RED_SCALE_SGI -#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 -#endif -#ifndef GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI -#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 -#endif -#ifndef GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI -#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 -#endif -#ifndef GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 -#endif -#ifndef GL_POST_COLOR_MATRIX_RED_BIAS_SGI -#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 -#endif -#ifndef GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI -#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 -#endif -#ifndef GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI -#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA -#endif -#ifndef GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB -#endif -#ifndef GL_COLOR_TABLE_SGI -#define GL_COLOR_TABLE_SGI 0x80D0 -#endif -#ifndef GL_POST_CONVOLUTION_COLOR_TABLE_SGI -#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 -#endif -#ifndef GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI -#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 -#endif -#ifndef GL_PROXY_COLOR_TABLE_SGI -#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 -#endif -#ifndef GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 -#endif -#ifndef GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 -#endif -#ifndef GL_COLOR_TABLE_SCALE_SGI -#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 -#endif -#ifndef GL_COLOR_TABLE_BIAS_SGI -#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 -#endif -#ifndef GL_COLOR_TABLE_FORMAT_SGI -#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 -#endif -#ifndef GL_COLOR_TABLE_WIDTH_SGI -#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 -#endif -#ifndef GL_COLOR_TABLE_RED_SIZE_SGI -#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA -#endif -#ifndef GL_COLOR_TABLE_GREEN_SIZE_SGI -#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB -#endif -#ifndef GL_COLOR_TABLE_BLUE_SIZE_SGI -#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC -#endif -#ifndef GL_COLOR_TABLE_ALPHA_SIZE_SGI -#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD -#endif -#ifndef GL_COLOR_TABLE_LUMINANCE_SIZE_SGI -#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE -#endif -#ifndef GL_COLOR_TABLE_INTENSITY_SIZE_SGI -#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF -#endif -#ifndef GL_PIXEL_TEXTURE_SGIS -#define GL_PIXEL_TEXTURE_SGIS 0x8353 -#endif -#ifndef GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS -#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 -#endif -#ifndef GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS -#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 -#endif -#ifndef GL_PIXEL_GROUP_COLOR_SGIS -#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 -#endif -#ifndef GL_PIXEL_TEX_GEN_SGIX -#define GL_PIXEL_TEX_GEN_SGIX 0x8139 -#endif -#ifndef GL_PIXEL_TEX_GEN_MODE_SGIX -#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B -#endif -#ifndef GL_PACK_SKIP_VOLUMES_SGIS -#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 -#endif -#ifndef GL_PACK_IMAGE_DEPTH_SGIS -#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 -#endif -#ifndef GL_UNPACK_SKIP_VOLUMES_SGIS -#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 -#endif -#ifndef GL_UNPACK_IMAGE_DEPTH_SGIS -#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 -#endif -#ifndef GL_TEXTURE_4D_SGIS -#define GL_TEXTURE_4D_SGIS 0x8134 -#endif -#ifndef GL_PROXY_TEXTURE_4D_SGIS -#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 -#endif -#ifndef GL_TEXTURE_4DSIZE_SGIS -#define GL_TEXTURE_4DSIZE_SGIS 0x8136 -#endif -#ifndef GL_TEXTURE_WRAP_Q_SGIS -#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 -#endif -#ifndef GL_MAX_4D_TEXTURE_SIZE_SGIS -#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 -#endif -#ifndef GL_TEXTURE_4D_BINDING_SGIS -#define GL_TEXTURE_4D_BINDING_SGIS 0x814F -#endif -#ifndef GL_TEXTURE_COLOR_TABLE_SGI -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#endif -#ifndef GL_PROXY_TEXTURE_COLOR_TABLE_SGI -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD -#endif -#ifndef GL_CMYK_EXT -#define GL_CMYK_EXT 0x800C -#endif -#ifndef GL_CMYKA_EXT -#define GL_CMYKA_EXT 0x800D -#endif -#ifndef GL_PACK_CMYK_HINT_EXT -#define GL_PACK_CMYK_HINT_EXT 0x800E -#endif -#ifndef GL_UNPACK_CMYK_HINT_EXT -#define GL_UNPACK_CMYK_HINT_EXT 0x800F -#endif -#ifndef GL_TEXTURE_PRIORITY_EXT -#define GL_TEXTURE_PRIORITY_EXT 0x8066 -#endif -#ifndef GL_TEXTURE_RESIDENT_EXT -#define GL_TEXTURE_RESIDENT_EXT 0x8067 -#endif -#ifndef GL_TEXTURE_1D_BINDING_EXT -#define GL_TEXTURE_1D_BINDING_EXT 0x8068 -#endif -#ifndef GL_TEXTURE_2D_BINDING_EXT -#define GL_TEXTURE_2D_BINDING_EXT 0x8069 -#endif -#ifndef GL_TEXTURE_3D_BINDING_EXT -#define GL_TEXTURE_3D_BINDING_EXT 0x806A -#endif -#ifndef GL_DETAIL_TEXTURE_2D_SGIS -#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 -#endif -#ifndef GL_DETAIL_TEXTURE_2D_BINDING_SGIS -#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 -#endif -#ifndef GL_LINEAR_DETAIL_SGIS -#define GL_LINEAR_DETAIL_SGIS 0x8097 -#endif -#ifndef GL_LINEAR_DETAIL_ALPHA_SGIS -#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 -#endif -#ifndef GL_LINEAR_DETAIL_COLOR_SGIS -#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 -#endif -#ifndef GL_DETAIL_TEXTURE_LEVEL_SGIS -#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A -#endif -#ifndef GL_DETAIL_TEXTURE_MODE_SGIS -#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B -#endif -#ifndef GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS -#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C -#endif -#ifndef GL_LINEAR_SHARPEN_SGIS -#define GL_LINEAR_SHARPEN_SGIS 0x80AD -#endif -#ifndef GL_LINEAR_SHARPEN_ALPHA_SGIS -#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE -#endif -#ifndef GL_LINEAR_SHARPEN_COLOR_SGIS -#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF -#endif -#ifndef GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS -#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 -#endif -#ifndef GL_UNSIGNED_BYTE_3_3_2_EXT -#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 -#endif -#ifndef GL_UNSIGNED_SHORT_4_4_4_4_EXT -#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 -#endif -#ifndef GL_UNSIGNED_SHORT_5_5_5_1_EXT -#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 -#endif -#ifndef GL_UNSIGNED_INT_8_8_8_8_EXT -#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 -#endif -#ifndef GL_UNSIGNED_INT_10_10_10_2_EXT -#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 -#endif -#ifndef GL_TEXTURE_MIN_LOD_SGIS -#define GL_TEXTURE_MIN_LOD_SGIS 0x813A -#endif -#ifndef GL_TEXTURE_MAX_LOD_SGIS -#define GL_TEXTURE_MAX_LOD_SGIS 0x813B -#endif -#ifndef GL_TEXTURE_BASE_LEVEL_SGIS -#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C -#endif -#ifndef GL_TEXTURE_MAX_LEVEL_SGIS -#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D -#endif -#ifndef GL_MULTISAMPLE_SGIS -#define GL_MULTISAMPLE_SGIS 0x809D -#endif -#ifndef GL_SAMPLE_ALPHA_TO_MASK_SGIS -#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E -#endif -#ifndef GL_SAMPLE_ALPHA_TO_ONE_SGIS -#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F -#endif -#ifndef GL_SAMPLE_MASK_SGIS -#define GL_SAMPLE_MASK_SGIS 0x80A0 -#endif -#ifndef GL_1PASS_SGIS -#define GL_1PASS_SGIS 0x80A1 -#endif -#ifndef GL_2PASS_0_SGIS -#define GL_2PASS_0_SGIS 0x80A2 -#endif -#ifndef GL_2PASS_1_SGIS -#define GL_2PASS_1_SGIS 0x80A3 -#endif -#ifndef GL_4PASS_0_SGIS -#define GL_4PASS_0_SGIS 0x80A4 -#endif -#ifndef GL_4PASS_1_SGIS -#define GL_4PASS_1_SGIS 0x80A5 -#endif -#ifndef GL_4PASS_2_SGIS -#define GL_4PASS_2_SGIS 0x80A6 -#endif -#ifndef GL_4PASS_3_SGIS -#define GL_4PASS_3_SGIS 0x80A7 -#endif -#ifndef GL_SAMPLE_BUFFERS_SGIS -#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 -#endif -#ifndef GL_SAMPLES_SGIS -#define GL_SAMPLES_SGIS 0x80A9 -#endif -#ifndef GL_SAMPLE_MASK_VALUE_SGIS -#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA -#endif -#ifndef GL_SAMPLE_MASK_INVERT_SGIS -#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB -#endif -#ifndef GL_SAMPLE_PATTERN_SGIS -#define GL_SAMPLE_PATTERN_SGIS 0x80AC -#endif -#ifndef GL_RESCALE_NORMAL_EXT -#define GL_RESCALE_NORMAL_EXT 0x803A -#endif -#ifndef GL_VERTEX_ARRAY_EXT -#define GL_VERTEX_ARRAY_EXT 0x8074 -#endif -#ifndef GL_NORMAL_ARRAY_EXT -#define GL_NORMAL_ARRAY_EXT 0x8075 -#endif -#ifndef GL_COLOR_ARRAY_EXT -#define GL_COLOR_ARRAY_EXT 0x8076 -#endif -#ifndef GL_INDEX_ARRAY_EXT -#define GL_INDEX_ARRAY_EXT 0x8077 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_EXT -#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 -#endif -#ifndef GL_EDGE_FLAG_ARRAY_EXT -#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 -#endif -#ifndef GL_VERTEX_ARRAY_SIZE_EXT -#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A -#endif -#ifndef GL_VERTEX_ARRAY_TYPE_EXT -#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B -#endif -#ifndef GL_VERTEX_ARRAY_STRIDE_EXT -#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C -#endif -#ifndef GL_VERTEX_ARRAY_COUNT_EXT -#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D -#endif -#ifndef GL_NORMAL_ARRAY_TYPE_EXT -#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E -#endif -#ifndef GL_NORMAL_ARRAY_STRIDE_EXT -#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F -#endif -#ifndef GL_NORMAL_ARRAY_COUNT_EXT -#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 -#endif -#ifndef GL_COLOR_ARRAY_SIZE_EXT -#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 -#endif -#ifndef GL_COLOR_ARRAY_TYPE_EXT -#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 -#endif -#ifndef GL_COLOR_ARRAY_STRIDE_EXT -#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 -#endif -#ifndef GL_COLOR_ARRAY_COUNT_EXT -#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 -#endif -#ifndef GL_INDEX_ARRAY_TYPE_EXT -#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 -#endif -#ifndef GL_INDEX_ARRAY_STRIDE_EXT -#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 -#endif -#ifndef GL_INDEX_ARRAY_COUNT_EXT -#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_SIZE_EXT -#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_TYPE_EXT -#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_STRIDE_EXT -#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_COUNT_EXT -#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B -#endif -#ifndef GL_EDGE_FLAG_ARRAY_STRIDE_EXT -#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C -#endif -#ifndef GL_EDGE_FLAG_ARRAY_COUNT_EXT -#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D -#endif -#ifndef GL_VERTEX_ARRAY_POINTER_EXT -#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E -#endif -#ifndef GL_NORMAL_ARRAY_POINTER_EXT -#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F -#endif -#ifndef GL_COLOR_ARRAY_POINTER_EXT -#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 -#endif -#ifndef GL_INDEX_ARRAY_POINTER_EXT -#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_POINTER_EXT -#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 -#endif -#ifndef GL_EDGE_FLAG_ARRAY_POINTER_EXT -#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 -#endif -#ifndef GL_GENERATE_MIPMAP_SGIS -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#endif -#ifndef GL_GENERATE_MIPMAP_HINT_SGIS -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 -#endif -#ifndef GL_LINEAR_CLIPMAP_LINEAR_SGIX -#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 -#endif -#ifndef GL_TEXTURE_CLIPMAP_CENTER_SGIX -#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 -#endif -#ifndef GL_TEXTURE_CLIPMAP_FRAME_SGIX -#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 -#endif -#ifndef GL_TEXTURE_CLIPMAP_OFFSET_SGIX -#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 -#endif -#ifndef GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX -#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 -#endif -#ifndef GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX -#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 -#endif -#ifndef GL_TEXTURE_CLIPMAP_DEPTH_SGIX -#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 -#endif -#ifndef GL_MAX_CLIPMAP_DEPTH_SGIX -#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 -#endif -#ifndef GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX -#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 -#endif -#ifndef GL_NEAREST_CLIPMAP_NEAREST_SGIX -#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D -#endif -#ifndef GL_NEAREST_CLIPMAP_LINEAR_SGIX -#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E -#endif -#ifndef GL_LINEAR_CLIPMAP_NEAREST_SGIX -#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F -#endif -#ifndef GL_TEXTURE_COMPARE_SGIX -#define GL_TEXTURE_COMPARE_SGIX 0x819A -#endif -#ifndef GL_TEXTURE_COMPARE_OPERATOR_SGIX -#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B -#endif -#ifndef GL_TEXTURE_LEQUAL_R_SGIX -#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C -#endif -#ifndef GL_TEXTURE_GEQUAL_R_SGIX -#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D -#endif -#ifndef GL_CLAMP_TO_EDGE_SGIS -#define GL_CLAMP_TO_EDGE_SGIS 0x812F -#endif -#ifndef GL_CLAMP_TO_BORDER_SGIS -#define GL_CLAMP_TO_BORDER_SGIS 0x812D -#endif -#ifndef GL_FUNC_ADD_EXT -#define GL_FUNC_ADD_EXT 0x8006 -#endif -#ifndef GL_MIN_EXT -#define GL_MIN_EXT 0x8007 -#endif -#ifndef GL_MAX_EXT -#define GL_MAX_EXT 0x8008 -#endif -#ifndef GL_BLEND_EQUATION_EXT -#define GL_BLEND_EQUATION_EXT 0x8009 -#endif -#ifndef GL_FUNC_SUBTRACT_EXT -#define GL_FUNC_SUBTRACT_EXT 0x800A -#endif -#ifndef GL_FUNC_REVERSE_SUBTRACT_EXT -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B -#endif -#ifndef GL_INTERLACE_SGIX -#define GL_INTERLACE_SGIX 0x8094 -#endif -#ifndef GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX -#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E -#endif -#ifndef GL_PIXEL_TILE_CACHE_INCREMENT_SGIX -#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F -#endif -#ifndef GL_PIXEL_TILE_WIDTH_SGIX -#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 -#endif -#ifndef GL_PIXEL_TILE_HEIGHT_SGIX -#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 -#endif -#ifndef GL_PIXEL_TILE_GRID_WIDTH_SGIX -#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 -#endif -#ifndef GL_PIXEL_TILE_GRID_HEIGHT_SGIX -#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 -#endif -#ifndef GL_PIXEL_TILE_GRID_DEPTH_SGIX -#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 -#endif -#ifndef GL_PIXEL_TILE_CACHE_SIZE_SGIX -#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 -#endif -#ifndef GL_DUAL_ALPHA4_SGIS -#define GL_DUAL_ALPHA4_SGIS 0x8110 -#endif -#ifndef GL_DUAL_ALPHA8_SGIS -#define GL_DUAL_ALPHA8_SGIS 0x8111 -#endif -#ifndef GL_DUAL_ALPHA12_SGIS -#define GL_DUAL_ALPHA12_SGIS 0x8112 -#endif -#ifndef GL_DUAL_ALPHA16_SGIS -#define GL_DUAL_ALPHA16_SGIS 0x8113 -#endif -#ifndef GL_DUAL_LUMINANCE4_SGIS -#define GL_DUAL_LUMINANCE4_SGIS 0x8114 -#endif -#ifndef GL_DUAL_LUMINANCE8_SGIS -#define GL_DUAL_LUMINANCE8_SGIS 0x8115 -#endif -#ifndef GL_DUAL_LUMINANCE12_SGIS -#define GL_DUAL_LUMINANCE12_SGIS 0x8116 -#endif -#ifndef GL_DUAL_LUMINANCE16_SGIS -#define GL_DUAL_LUMINANCE16_SGIS 0x8117 -#endif -#ifndef GL_DUAL_INTENSITY4_SGIS -#define GL_DUAL_INTENSITY4_SGIS 0x8118 -#endif -#ifndef GL_DUAL_INTENSITY8_SGIS -#define GL_DUAL_INTENSITY8_SGIS 0x8119 -#endif -#ifndef GL_DUAL_INTENSITY12_SGIS -#define GL_DUAL_INTENSITY12_SGIS 0x811A -#endif -#ifndef GL_DUAL_INTENSITY16_SGIS -#define GL_DUAL_INTENSITY16_SGIS 0x811B -#endif -#ifndef GL_DUAL_LUMINANCE_ALPHA4_SGIS -#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C -#endif -#ifndef GL_DUAL_LUMINANCE_ALPHA8_SGIS -#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D -#endif -#ifndef GL_QUAD_ALPHA4_SGIS -#define GL_QUAD_ALPHA4_SGIS 0x811E -#endif -#ifndef GL_QUAD_ALPHA8_SGIS -#define GL_QUAD_ALPHA8_SGIS 0x811F -#endif -#ifndef GL_QUAD_LUMINANCE4_SGIS -#define GL_QUAD_LUMINANCE4_SGIS 0x8120 -#endif -#ifndef GL_QUAD_LUMINANCE8_SGIS -#define GL_QUAD_LUMINANCE8_SGIS 0x8121 -#endif -#ifndef GL_QUAD_INTENSITY4_SGIS -#define GL_QUAD_INTENSITY4_SGIS 0x8122 -#endif -#ifndef GL_QUAD_INTENSITY8_SGIS -#define GL_QUAD_INTENSITY8_SGIS 0x8123 -#endif -#ifndef GL_DUAL_TEXTURE_SELECT_SGIS -#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 -#endif -#ifndef GL_QUAD_TEXTURE_SELECT_SGIS -#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 -#endif -#ifndef GL_SPRITE_SGIX -#define GL_SPRITE_SGIX 0x8148 -#endif -#ifndef GL_SPRITE_MODE_SGIX -#define GL_SPRITE_MODE_SGIX 0x8149 -#endif -#ifndef GL_SPRITE_AXIS_SGIX -#define GL_SPRITE_AXIS_SGIX 0x814A -#endif -#ifndef GL_SPRITE_TRANSLATION_SGIX -#define GL_SPRITE_TRANSLATION_SGIX 0x814B -#endif -#ifndef GL_SPRITE_AXIAL_SGIX -#define GL_SPRITE_AXIAL_SGIX 0x814C -#endif -#ifndef GL_SPRITE_OBJECT_ALIGNED_SGIX -#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D -#endif -#ifndef GL_SPRITE_EYE_ALIGNED_SGIX -#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E -#endif -#ifndef GL_TEXTURE_MULTI_BUFFER_HINT_SGIX -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E -#endif -#ifndef GL_POINT_SIZE_MIN_EXT -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#endif -#ifndef GL_POINT_SIZE_MAX_EXT -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#endif -#ifndef GL_POINT_FADE_THRESHOLD_SIZE_EXT -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#endif -#ifndef GL_DISTANCE_ATTENUATION_EXT -#define GL_DISTANCE_ATTENUATION_EXT 0x8129 -#endif -#ifndef GL_POINT_SIZE_MIN_SGIS -#define GL_POINT_SIZE_MIN_SGIS 0x8126 -#endif -#ifndef GL_POINT_SIZE_MAX_SGIS -#define GL_POINT_SIZE_MAX_SGIS 0x8127 -#endif -#ifndef GL_POINT_FADE_THRESHOLD_SIZE_SGIS -#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 -#endif -#ifndef GL_DISTANCE_ATTENUATION_SGIS -#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 -#endif -#ifndef GL_INSTRUMENT_BUFFER_POINTER_SGIX -#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 -#endif -#ifndef GL_INSTRUMENT_MEASUREMENTS_SGIX -#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 -#endif -#ifndef GL_POST_TEXTURE_FILTER_BIAS_SGIX -#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 -#endif -#ifndef GL_POST_TEXTURE_FILTER_SCALE_SGIX -#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A -#endif -#ifndef GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX -#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B -#endif -#ifndef GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX -#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C -#endif -#ifndef GL_FRAMEZOOM_SGIX -#define GL_FRAMEZOOM_SGIX 0x818B -#endif -#ifndef GL_FRAMEZOOM_FACTOR_SGIX -#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C -#endif -#ifndef GL_MAX_FRAMEZOOM_FACTOR_SGIX -#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D -#endif -#ifndef GL_TEXTURE_DEFORMATION_BIT_SGIX -#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 -#endif -#ifndef GL_GEOMETRY_DEFORMATION_BIT_SGIX -#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 -#endif -#ifndef GL_GEOMETRY_DEFORMATION_SGIX -#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 -#endif -#ifndef GL_TEXTURE_DEFORMATION_SGIX -#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 -#endif -#ifndef GL_DEFORMATIONS_MASK_SGIX -#define GL_DEFORMATIONS_MASK_SGIX 0x8196 -#endif -#ifndef GL_MAX_DEFORMATION_ORDER_SGIX -#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 -#endif -#ifndef GL_REFERENCE_PLANE_SGIX -#define GL_REFERENCE_PLANE_SGIX 0x817D -#endif -#ifndef GL_REFERENCE_PLANE_EQUATION_SGIX -#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E -#endif -#ifndef GL_DEPTH_COMPONENT16_SGIX -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#endif -#ifndef GL_DEPTH_COMPONENT24_SGIX -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#endif -#ifndef GL_DEPTH_COMPONENT32_SGIX -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 -#endif -#ifndef GL_FOG_FUNC_SGIS -#define GL_FOG_FUNC_SGIS 0x812A -#endif -#ifndef GL_FOG_FUNC_POINTS_SGIS -#define GL_FOG_FUNC_POINTS_SGIS 0x812B -#endif -#ifndef GL_MAX_FOG_FUNC_POINTS_SGIS -#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C -#endif -#ifndef GL_FOG_OFFSET_SGIX -#define GL_FOG_OFFSET_SGIX 0x8198 -#endif -#ifndef GL_FOG_OFFSET_VALUE_SGIX -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 -#endif -#ifndef GL_IMAGE_SCALE_X_HP -#define GL_IMAGE_SCALE_X_HP 0x8155 -#endif -#ifndef GL_IMAGE_SCALE_Y_HP -#define GL_IMAGE_SCALE_Y_HP 0x8156 -#endif -#ifndef GL_IMAGE_TRANSLATE_X_HP -#define GL_IMAGE_TRANSLATE_X_HP 0x8157 -#endif -#ifndef GL_IMAGE_TRANSLATE_Y_HP -#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 -#endif -#ifndef GL_IMAGE_ROTATE_ANGLE_HP -#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 -#endif -#ifndef GL_IMAGE_ROTATE_ORIGIN_X_HP -#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A -#endif -#ifndef GL_IMAGE_ROTATE_ORIGIN_Y_HP -#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B -#endif -#ifndef GL_IMAGE_MAG_FILTER_HP -#define GL_IMAGE_MAG_FILTER_HP 0x815C -#endif -#ifndef GL_IMAGE_MIN_FILTER_HP -#define GL_IMAGE_MIN_FILTER_HP 0x815D -#endif -#ifndef GL_IMAGE_CUBIC_WEIGHT_HP -#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E -#endif -#ifndef GL_CUBIC_HP -#define GL_CUBIC_HP 0x815F -#endif -#ifndef GL_AVERAGE_HP -#define GL_AVERAGE_HP 0x8160 -#endif -#ifndef GL_IMAGE_TRANSFORM_2D_HP -#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 -#endif -#ifndef GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP -#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 -#endif -#ifndef GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP -#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 -#endif -#ifndef GL_IGNORE_BORDER_HP -#define GL_IGNORE_BORDER_HP 0x8150 -#endif -#ifndef GL_CONSTANT_BORDER_HP -#define GL_CONSTANT_BORDER_HP 0x8151 -#endif -#ifndef GL_REPLICATE_BORDER_HP -#define GL_REPLICATE_BORDER_HP 0x8153 -#endif -#ifndef GL_CONVOLUTION_BORDER_COLOR_HP -#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 -#endif -#ifndef GL_TEXTURE_ENV_BIAS_SGIX -#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE -#endif -#ifndef GL_VERTEX_DATA_HINT_PGI -#define GL_VERTEX_DATA_HINT_PGI 0x1A22A -#endif -#ifndef GL_VERTEX_CONSISTENT_HINT_PGI -#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B -#endif -#ifndef GL_MATERIAL_SIDE_HINT_PGI -#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C -#endif -#ifndef GL_MAX_VERTEX_HINT_PGI -#define GL_MAX_VERTEX_HINT_PGI 0x1A22D -#endif -#ifndef GL_COLOR3_BIT_PGI -#define GL_COLOR3_BIT_PGI 0x00010000 -#endif -#ifndef GL_COLOR4_BIT_PGI -#define GL_COLOR4_BIT_PGI 0x00020000 -#endif -#ifndef GL_EDGEFLAG_BIT_PGI -#define GL_EDGEFLAG_BIT_PGI 0x00040000 -#endif -#ifndef GL_INDEX_BIT_PGI -#define GL_INDEX_BIT_PGI 0x00080000 -#endif -#ifndef GL_MAT_AMBIENT_BIT_PGI -#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 -#endif -#ifndef GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI -#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 -#endif -#ifndef GL_MAT_DIFFUSE_BIT_PGI -#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 -#endif -#ifndef GL_MAT_EMISSION_BIT_PGI -#define GL_MAT_EMISSION_BIT_PGI 0x00800000 -#endif -#ifndef GL_MAT_COLOR_INDEXES_BIT_PGI -#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 -#endif -#ifndef GL_MAT_SHININESS_BIT_PGI -#define GL_MAT_SHININESS_BIT_PGI 0x02000000 -#endif -#ifndef GL_MAT_SPECULAR_BIT_PGI -#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 -#endif -#ifndef GL_NORMAL_BIT_PGI -#define GL_NORMAL_BIT_PGI 0x08000000 -#endif -#ifndef GL_TEXCOORD1_BIT_PGI -#define GL_TEXCOORD1_BIT_PGI 0x10000000 -#endif -#ifndef GL_TEXCOORD2_BIT_PGI -#define GL_TEXCOORD2_BIT_PGI 0x20000000 -#endif -#ifndef GL_TEXCOORD3_BIT_PGI -#define GL_TEXCOORD3_BIT_PGI 0x40000000 -#endif -#ifndef GL_TEXCOORD4_BIT_PGI -#define GL_TEXCOORD4_BIT_PGI 0x80000000 -#endif -#ifndef GL_VERTEX23_BIT_PGI -#define GL_VERTEX23_BIT_PGI 0x00000004 -#endif -#ifndef GL_VERTEX4_BIT_PGI -#define GL_VERTEX4_BIT_PGI 0x00000008 -#endif -#ifndef GL_PREFER_DOUBLEBUFFER_HINT_PGI -#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 -#endif -#ifndef GL_CONSERVE_MEMORY_HINT_PGI -#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD -#endif -#ifndef GL_RECLAIM_MEMORY_HINT_PGI -#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE -#endif -#ifndef GL_NATIVE_GRAPHICS_HANDLE_PGI -#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 -#endif -#ifndef GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI -#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 -#endif -#ifndef GL_NATIVE_GRAPHICS_END_HINT_PGI -#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 -#endif -#ifndef GL_ALWAYS_FAST_HINT_PGI -#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C -#endif -#ifndef GL_ALWAYS_SOFT_HINT_PGI -#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D -#endif -#ifndef GL_ALLOW_DRAW_OBJ_HINT_PGI -#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E -#endif -#ifndef GL_ALLOW_DRAW_WIN_HINT_PGI -#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F -#endif -#ifndef GL_ALLOW_DRAW_FRG_HINT_PGI -#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 -#endif -#ifndef GL_ALLOW_DRAW_MEM_HINT_PGI -#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 -#endif -#ifndef GL_STRICT_DEPTHFUNC_HINT_PGI -#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 -#endif -#ifndef GL_STRICT_LIGHTING_HINT_PGI -#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 -#endif -#ifndef GL_STRICT_SCISSOR_HINT_PGI -#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 -#endif -#ifndef GL_FULL_STIPPLE_HINT_PGI -#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 -#endif -#ifndef GL_CLIP_NEAR_HINT_PGI -#define GL_CLIP_NEAR_HINT_PGI 0x1A220 -#endif -#ifndef GL_CLIP_FAR_HINT_PGI -#define GL_CLIP_FAR_HINT_PGI 0x1A221 -#endif -#ifndef GL_WIDE_LINE_HINT_PGI -#define GL_WIDE_LINE_HINT_PGI 0x1A222 -#endif -#ifndef GL_BACK_NORMALS_HINT_PGI -#define GL_BACK_NORMALS_HINT_PGI 0x1A223 -#endif -#ifndef GL_COLOR_INDEX1_EXT -#define GL_COLOR_INDEX1_EXT 0x80E2 -#endif -#ifndef GL_COLOR_INDEX2_EXT -#define GL_COLOR_INDEX2_EXT 0x80E3 -#endif -#ifndef GL_COLOR_INDEX4_EXT -#define GL_COLOR_INDEX4_EXT 0x80E4 -#endif -#ifndef GL_COLOR_INDEX8_EXT -#define GL_COLOR_INDEX8_EXT 0x80E5 -#endif -#ifndef GL_COLOR_INDEX12_EXT -#define GL_COLOR_INDEX12_EXT 0x80E6 -#endif -#ifndef GL_COLOR_INDEX16_EXT -#define GL_COLOR_INDEX16_EXT 0x80E7 -#endif -#ifndef GL_TEXTURE_INDEX_SIZE_EXT -#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED -#endif -#ifndef GL_CLIP_VOLUME_CLIPPING_HINT_EXT -#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 -#endif -#ifndef GL_LIST_PRIORITY_SGIX -#define GL_LIST_PRIORITY_SGIX 0x8182 -#endif -#ifndef GL_IR_INSTRUMENT1_SGIX -#define GL_IR_INSTRUMENT1_SGIX 0x817F -#endif -#ifndef GL_CALLIGRAPHIC_FRAGMENT_SGIX -#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 -#endif -#ifndef GL_TEXTURE_LOD_BIAS_S_SGIX -#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E -#endif -#ifndef GL_TEXTURE_LOD_BIAS_T_SGIX -#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F -#endif -#ifndef GL_TEXTURE_LOD_BIAS_R_SGIX -#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 -#endif -#ifndef GL_SHADOW_AMBIENT_SGIX -#define GL_SHADOW_AMBIENT_SGIX 0x80BF -#endif -#ifndef GL_INDEX_MATERIAL_EXT -#define GL_INDEX_MATERIAL_EXT 0x81B8 -#endif -#ifndef GL_INDEX_MATERIAL_PARAMETER_EXT -#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 -#endif -#ifndef GL_INDEX_MATERIAL_FACE_EXT -#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA -#endif -#ifndef GL_INDEX_TEST_EXT -#define GL_INDEX_TEST_EXT 0x81B5 -#endif -#ifndef GL_INDEX_TEST_FUNC_EXT -#define GL_INDEX_TEST_FUNC_EXT 0x81B6 -#endif -#ifndef GL_INDEX_TEST_REF_EXT -#define GL_INDEX_TEST_REF_EXT 0x81B7 -#endif -#ifndef GL_IUI_V2F_EXT -#define GL_IUI_V2F_EXT 0x81AD -#endif -#ifndef GL_IUI_V3F_EXT -#define GL_IUI_V3F_EXT 0x81AE -#endif -#ifndef GL_IUI_N3F_V2F_EXT -#define GL_IUI_N3F_V2F_EXT 0x81AF -#endif -#ifndef GL_IUI_N3F_V3F_EXT -#define GL_IUI_N3F_V3F_EXT 0x81B0 -#endif -#ifndef GL_T2F_IUI_V2F_EXT -#define GL_T2F_IUI_V2F_EXT 0x81B1 -#endif -#ifndef GL_T2F_IUI_V3F_EXT -#define GL_T2F_IUI_V3F_EXT 0x81B2 -#endif -#ifndef GL_T2F_IUI_N3F_V2F_EXT -#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 -#endif -#ifndef GL_T2F_IUI_N3F_V3F_EXT -#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 -#endif -#ifndef GL_ARRAY_ELEMENT_LOCK_FIRST_EXT -#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 -#endif -#ifndef GL_ARRAY_ELEMENT_LOCK_COUNT_EXT -#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 -#endif -#ifndef GL_CULL_VERTEX_EXT -#define GL_CULL_VERTEX_EXT 0x81AA -#endif -#ifndef GL_CULL_VERTEX_EYE_POSITION_EXT -#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB -#endif -#ifndef GL_CULL_VERTEX_OBJECT_POSITION_EXT -#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC -#endif -#ifndef GL_YCRCB_422_SGIX -#define GL_YCRCB_422_SGIX 0x81BB -#endif -#ifndef GL_YCRCB_444_SGIX -#define GL_YCRCB_444_SGIX 0x81BC -#endif -#ifndef GL_FRAGMENT_LIGHTING_SGIX -#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 -#endif -#ifndef GL_FRAGMENT_COLOR_MATERIAL_SGIX -#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 -#endif -#ifndef GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX -#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 -#endif -#ifndef GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX -#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 -#endif -#ifndef GL_MAX_FRAGMENT_LIGHTS_SGIX -#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 -#endif -#ifndef GL_MAX_ACTIVE_LIGHTS_SGIX -#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 -#endif -#ifndef GL_CURRENT_RASTER_NORMAL_SGIX -#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 -#endif -#ifndef GL_LIGHT_ENV_MODE_SGIX -#define GL_LIGHT_ENV_MODE_SGIX 0x8407 -#endif -#ifndef GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX -#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 -#endif -#ifndef GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX -#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 -#endif -#ifndef GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX -#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A -#endif -#ifndef GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX -#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B -#endif -#ifndef GL_FRAGMENT_LIGHT0_SGIX -#define GL_FRAGMENT_LIGHT0_SGIX 0x840C -#endif -#ifndef GL_FRAGMENT_LIGHT1_SGIX -#define GL_FRAGMENT_LIGHT1_SGIX 0x840D -#endif -#ifndef GL_FRAGMENT_LIGHT2_SGIX -#define GL_FRAGMENT_LIGHT2_SGIX 0x840E -#endif -#ifndef GL_FRAGMENT_LIGHT3_SGIX -#define GL_FRAGMENT_LIGHT3_SGIX 0x840F -#endif -#ifndef GL_FRAGMENT_LIGHT4_SGIX -#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 -#endif -#ifndef GL_FRAGMENT_LIGHT5_SGIX -#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 -#endif -#ifndef GL_FRAGMENT_LIGHT6_SGIX -#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 -#endif -#ifndef GL_FRAGMENT_LIGHT7_SGIX -#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 -#endif -#ifndef GL_RASTER_POSITION_UNCLIPPED_IBM -#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 -#endif -#ifndef GL_TEXTURE_LIGHTING_MODE_HP -#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 -#endif -#ifndef GL_TEXTURE_POST_SPECULAR_HP -#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 -#endif -#ifndef GL_TEXTURE_PRE_SPECULAR_HP -#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 -#endif -#ifndef GL_MAX_ELEMENTS_VERTICES_EXT -#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 -#endif -#ifndef GL_MAX_ELEMENTS_INDICES_EXT -#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 -#endif -#ifndef GL_PHONG_WIN -#define GL_PHONG_WIN 0x80EA -#endif -#ifndef GL_PHONG_HINT_WIN -#define GL_PHONG_HINT_WIN 0x80EB -#endif -#ifndef GL_FOG_SPECULAR_TEXTURE_WIN -#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC -#endif -#ifndef GL_FRAGMENT_MATERIAL_EXT -#define GL_FRAGMENT_MATERIAL_EXT 0x8349 -#endif -#ifndef GL_FRAGMENT_NORMAL_EXT -#define GL_FRAGMENT_NORMAL_EXT 0x834A -#endif -#ifndef GL_FRAGMENT_COLOR_EXT -#define GL_FRAGMENT_COLOR_EXT 0x834C -#endif -#ifndef GL_ATTENUATION_EXT -#define GL_ATTENUATION_EXT 0x834D -#endif -#ifndef GL_SHADOW_ATTENUATION_EXT -#define GL_SHADOW_ATTENUATION_EXT 0x834E -#endif -#ifndef GL_TEXTURE_APPLICATION_MODE_EXT -#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F -#endif -#ifndef GL_TEXTURE_LIGHT_EXT -#define GL_TEXTURE_LIGHT_EXT 0x8350 -#endif -#ifndef GL_TEXTURE_MATERIAL_FACE_EXT -#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 -#endif -#ifndef GL_TEXTURE_MATERIAL_PARAMETER_EXT -#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 -#endif -#ifndef GL_ALPHA_MIN_SGIX -#define GL_ALPHA_MIN_SGIX 0x8320 -#endif -#ifndef GL_ALPHA_MAX_SGIX -#define GL_ALPHA_MAX_SGIX 0x8321 -#endif -#ifndef GL_PIXEL_TEX_GEN_Q_CEILING_SGIX -#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 -#endif -#ifndef GL_PIXEL_TEX_GEN_Q_ROUND_SGIX -#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 -#endif -#ifndef GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX -#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 -#endif -#ifndef GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX -#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 -#endif -#ifndef GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX -#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 -#endif -#ifndef GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX -#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 -#endif -#ifndef GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX -#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A -#endif -#ifndef GL_BGR_EXT -#define GL_BGR_EXT 0x80E0 -#endif -#ifndef GL_BGRA_EXT -#define GL_BGRA_EXT 0x80E1 -#endif -#ifndef GL_ASYNC_MARKER_SGIX -#define GL_ASYNC_MARKER_SGIX 0x8329 -#endif -#ifndef GL_ASYNC_TEX_IMAGE_SGIX -#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C -#endif -#ifndef GL_ASYNC_DRAW_PIXELS_SGIX -#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D -#endif -#ifndef GL_ASYNC_READ_PIXELS_SGIX -#define GL_ASYNC_READ_PIXELS_SGIX 0x835E -#endif -#ifndef GL_MAX_ASYNC_TEX_IMAGE_SGIX -#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F -#endif -#ifndef GL_MAX_ASYNC_DRAW_PIXELS_SGIX -#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 -#endif -#ifndef GL_MAX_ASYNC_READ_PIXELS_SGIX -#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 -#endif -#ifndef GL_ASYNC_HISTOGRAM_SGIX -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#endif -#ifndef GL_MAX_ASYNC_HISTOGRAM_SGIX -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D -#endif -#ifndef GL_PARALLEL_ARRAYS_INTEL -#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 -#endif -#ifndef GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL -#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 -#endif -#ifndef GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL -#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 -#endif -#ifndef GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL -#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL -#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 -#endif -#ifndef GL_OCCLUSION_TEST_HP -#define GL_OCCLUSION_TEST_HP 0x8165 -#endif -#ifndef GL_OCCLUSION_TEST_RESULT_HP -#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 -#endif -#ifndef GL_PIXEL_TRANSFORM_2D_EXT -#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 -#endif -#ifndef GL_PIXEL_MAG_FILTER_EXT -#define GL_PIXEL_MAG_FILTER_EXT 0x8331 -#endif -#ifndef GL_PIXEL_MIN_FILTER_EXT -#define GL_PIXEL_MIN_FILTER_EXT 0x8332 -#endif -#ifndef GL_PIXEL_CUBIC_WEIGHT_EXT -#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 -#endif -#ifndef GL_CUBIC_EXT -#define GL_CUBIC_EXT 0x8334 -#endif -#ifndef GL_AVERAGE_EXT -#define GL_AVERAGE_EXT 0x8335 -#endif -#ifndef GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT -#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 -#endif -#ifndef GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT -#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 -#endif -#ifndef GL_PIXEL_TRANSFORM_2D_MATRIX_EXT -#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 -#endif -#ifndef GL_SHARED_TEXTURE_PALETTE_EXT -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB -#endif -#ifndef GL_LIGHT_MODEL_COLOR_CONTROL_EXT -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#endif -#ifndef GL_SINGLE_COLOR_EXT -#define GL_SINGLE_COLOR_EXT 0x81F9 -#endif -#ifndef GL_SEPARATE_SPECULAR_COLOR_EXT -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA -#endif -#ifndef GL_COLOR_SUM_EXT -#define GL_COLOR_SUM_EXT 0x8458 -#endif -#ifndef GL_CURRENT_SECONDARY_COLOR_EXT -#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 -#endif -#ifndef GL_SECONDARY_COLOR_ARRAY_SIZE_EXT -#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A -#endif -#ifndef GL_SECONDARY_COLOR_ARRAY_TYPE_EXT -#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B -#endif -#ifndef GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT -#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C -#endif -#ifndef GL_SECONDARY_COLOR_ARRAY_POINTER_EXT -#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D -#endif -#ifndef GL_SECONDARY_COLOR_ARRAY_EXT -#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E -#endif -#ifndef GL_PERTURB_EXT -#define GL_PERTURB_EXT 0x85AE -#endif -#ifndef GL_TEXTURE_NORMAL_EXT -#define GL_TEXTURE_NORMAL_EXT 0x85AF -#endif -#ifndef GL_FOG_COORDINATE_SOURCE_EXT -#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 -#endif -#ifndef GL_FOG_COORDINATE_EXT -#define GL_FOG_COORDINATE_EXT 0x8451 -#endif -#ifndef GL_FRAGMENT_DEPTH_EXT -#define GL_FRAGMENT_DEPTH_EXT 0x8452 -#endif -#ifndef GL_CURRENT_FOG_COORDINATE_EXT -#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 -#endif -#ifndef GL_FOG_COORDINATE_ARRAY_TYPE_EXT -#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 -#endif -#ifndef GL_FOG_COORDINATE_ARRAY_STRIDE_EXT -#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 -#endif -#ifndef GL_FOG_COORDINATE_ARRAY_POINTER_EXT -#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 -#endif -#ifndef GL_FOG_COORDINATE_ARRAY_EXT -#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 -#endif -#ifndef GL_SCREEN_COORDINATES_REND -#define GL_SCREEN_COORDINATES_REND 0x8490 -#endif -#ifndef GL_INVERTED_SCREEN_W_REND -#define GL_INVERTED_SCREEN_W_REND 0x8491 -#endif -#ifndef GL_TANGENT_ARRAY_EXT -#define GL_TANGENT_ARRAY_EXT 0x8439 -#endif -#ifndef GL_BINORMAL_ARRAY_EXT -#define GL_BINORMAL_ARRAY_EXT 0x843A -#endif -#ifndef GL_CURRENT_TANGENT_EXT -#define GL_CURRENT_TANGENT_EXT 0x843B -#endif -#ifndef GL_CURRENT_BINORMAL_EXT -#define GL_CURRENT_BINORMAL_EXT 0x843C -#endif -#ifndef GL_TANGENT_ARRAY_TYPE_EXT -#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E -#endif -#ifndef GL_TANGENT_ARRAY_STRIDE_EXT -#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F -#endif -#ifndef GL_BINORMAL_ARRAY_TYPE_EXT -#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 -#endif -#ifndef GL_BINORMAL_ARRAY_STRIDE_EXT -#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 -#endif -#ifndef GL_TANGENT_ARRAY_POINTER_EXT -#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 -#endif -#ifndef GL_BINORMAL_ARRAY_POINTER_EXT -#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 -#endif -#ifndef GL_MAP1_TANGENT_EXT -#define GL_MAP1_TANGENT_EXT 0x8444 -#endif -#ifndef GL_MAP2_TANGENT_EXT -#define GL_MAP2_TANGENT_EXT 0x8445 -#endif -#ifndef GL_MAP1_BINORMAL_EXT -#define GL_MAP1_BINORMAL_EXT 0x8446 -#endif -#ifndef GL_MAP2_BINORMAL_EXT -#define GL_MAP2_BINORMAL_EXT 0x8447 -#endif -#ifndef GL_COMBINE_EXT -#define GL_COMBINE_EXT 0x8570 -#endif -#ifndef GL_COMBINE_RGB_EXT -#define GL_COMBINE_RGB_EXT 0x8571 -#endif -#ifndef GL_COMBINE_ALPHA_EXT -#define GL_COMBINE_ALPHA_EXT 0x8572 -#endif -#ifndef GL_RGB_SCALE_EXT -#define GL_RGB_SCALE_EXT 0x8573 -#endif -#ifndef GL_ADD_SIGNED_EXT -#define GL_ADD_SIGNED_EXT 0x8574 -#endif -#ifndef GL_INTERPOLATE_EXT -#define GL_INTERPOLATE_EXT 0x8575 -#endif -#ifndef GL_CONSTANT_EXT -#define GL_CONSTANT_EXT 0x8576 -#endif -#ifndef GL_PRIMARY_COLOR_EXT -#define GL_PRIMARY_COLOR_EXT 0x8577 -#endif -#ifndef GL_PREVIOUS_EXT -#define GL_PREVIOUS_EXT 0x8578 -#endif -#ifndef GL_SOURCE0_RGB_EXT -#define GL_SOURCE0_RGB_EXT 0x8580 -#endif -#ifndef GL_SOURCE1_RGB_EXT -#define GL_SOURCE1_RGB_EXT 0x8581 -#endif -#ifndef GL_SOURCE2_RGB_EXT -#define GL_SOURCE2_RGB_EXT 0x8582 -#endif -#ifndef GL_SOURCE0_ALPHA_EXT -#define GL_SOURCE0_ALPHA_EXT 0x8588 -#endif -#ifndef GL_SOURCE1_ALPHA_EXT -#define GL_SOURCE1_ALPHA_EXT 0x8589 -#endif -#ifndef GL_SOURCE2_ALPHA_EXT -#define GL_SOURCE2_ALPHA_EXT 0x858A -#endif -#ifndef GL_OPERAND0_RGB_EXT -#define GL_OPERAND0_RGB_EXT 0x8590 -#endif -#ifndef GL_OPERAND1_RGB_EXT -#define GL_OPERAND1_RGB_EXT 0x8591 -#endif -#ifndef GL_OPERAND2_RGB_EXT -#define GL_OPERAND2_RGB_EXT 0x8592 -#endif -#ifndef GL_OPERAND0_ALPHA_EXT -#define GL_OPERAND0_ALPHA_EXT 0x8598 -#endif -#ifndef GL_OPERAND1_ALPHA_EXT -#define GL_OPERAND1_ALPHA_EXT 0x8599 -#endif -#ifndef GL_OPERAND2_ALPHA_EXT -#define GL_OPERAND2_ALPHA_EXT 0x859A -#endif -#ifndef GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE -#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 -#endif -#ifndef GL_TRANSFORM_HINT_APPLE -#define GL_TRANSFORM_HINT_APPLE 0x85B1 -#endif -#ifndef GL_FOG_SCALE_SGIX -#define GL_FOG_SCALE_SGIX 0x81FC -#endif -#ifndef GL_FOG_SCALE_VALUE_SGIX -#define GL_FOG_SCALE_VALUE_SGIX 0x81FD -#endif -#ifndef GL_UNPACK_CONSTANT_DATA_SUNX -#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 -#endif -#ifndef GL_TEXTURE_CONSTANT_DATA_SUNX -#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 -#endif -#ifndef GL_GLOBAL_ALPHA_SUN -#define GL_GLOBAL_ALPHA_SUN 0x81D9 -#endif -#ifndef GL_GLOBAL_ALPHA_FACTOR_SUN -#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA -#endif -#ifndef GL_RESTART_SUN -#define GL_RESTART_SUN 0x0001 -#endif -#ifndef GL_REPLACE_MIDDLE_SUN -#define GL_REPLACE_MIDDLE_SUN 0x0002 -#endif -#ifndef GL_REPLACE_OLDEST_SUN -#define GL_REPLACE_OLDEST_SUN 0x0003 -#endif -#ifndef GL_TRIANGLE_LIST_SUN -#define GL_TRIANGLE_LIST_SUN 0x81D7 -#endif -#ifndef GL_REPLACEMENT_CODE_SUN -#define GL_REPLACEMENT_CODE_SUN 0x81D8 -#endif -#ifndef GL_REPLACEMENT_CODE_ARRAY_SUN -#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 -#endif -#ifndef GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN -#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 -#endif -#ifndef GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN -#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 -#endif -#ifndef GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN -#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 -#endif -#ifndef GL_R1UI_V3F_SUN -#define GL_R1UI_V3F_SUN 0x85C4 -#endif -#ifndef GL_R1UI_C4UB_V3F_SUN -#define GL_R1UI_C4UB_V3F_SUN 0x85C5 -#endif -#ifndef GL_R1UI_C3F_V3F_SUN -#define GL_R1UI_C3F_V3F_SUN 0x85C6 -#endif -#ifndef GL_R1UI_N3F_V3F_SUN -#define GL_R1UI_N3F_V3F_SUN 0x85C7 -#endif -#ifndef GL_R1UI_C4F_N3F_V3F_SUN -#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 -#endif -#ifndef GL_R1UI_T2F_V3F_SUN -#define GL_R1UI_T2F_V3F_SUN 0x85C9 -#endif -#ifndef GL_R1UI_T2F_N3F_V3F_SUN -#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA -#endif -#ifndef GL_R1UI_T2F_C4F_N3F_V3F_SUN -#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB -#endif -#ifndef GL_BLEND_DST_RGB_EXT -#define GL_BLEND_DST_RGB_EXT 0x80C8 -#endif -#ifndef GL_BLEND_SRC_RGB_EXT -#define GL_BLEND_SRC_RGB_EXT 0x80C9 -#endif -#ifndef GL_BLEND_DST_ALPHA_EXT -#define GL_BLEND_DST_ALPHA_EXT 0x80CA -#endif -#ifndef GL_BLEND_SRC_ALPHA_EXT -#define GL_BLEND_SRC_ALPHA_EXT 0x80CB -#endif -#ifndef GL_RED_MIN_CLAMP_INGR -#define GL_RED_MIN_CLAMP_INGR 0x8560 -#endif -#ifndef GL_GREEN_MIN_CLAMP_INGR -#define GL_GREEN_MIN_CLAMP_INGR 0x8561 -#endif -#ifndef GL_BLUE_MIN_CLAMP_INGR -#define GL_BLUE_MIN_CLAMP_INGR 0x8562 -#endif -#ifndef GL_ALPHA_MIN_CLAMP_INGR -#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 -#endif -#ifndef GL_RED_MAX_CLAMP_INGR -#define GL_RED_MAX_CLAMP_INGR 0x8564 -#endif -#ifndef GL_GREEN_MAX_CLAMP_INGR -#define GL_GREEN_MAX_CLAMP_INGR 0x8565 -#endif -#ifndef GL_BLUE_MAX_CLAMP_INGR -#define GL_BLUE_MAX_CLAMP_INGR 0x8566 -#endif -#ifndef GL_ALPHA_MAX_CLAMP_INGR -#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 -#endif -#ifndef GL_INTERLACE_READ_INGR -#define GL_INTERLACE_READ_INGR 0x8568 -#endif -#ifndef GL_INCR_WRAP_EXT -#define GL_INCR_WRAP_EXT 0x8507 -#endif -#ifndef GL_DECR_WRAP_EXT -#define GL_DECR_WRAP_EXT 0x8508 -#endif -#ifndef GL_422_EXT -#define GL_422_EXT 0x80CC -#endif -#ifndef GL_422_REV_EXT -#define GL_422_REV_EXT 0x80CD -#endif -#ifndef GL_422_AVERAGE_EXT -#define GL_422_AVERAGE_EXT 0x80CE -#endif -#ifndef GL_422_REV_AVERAGE_EXT -#define GL_422_REV_AVERAGE_EXT 0x80CF -#endif -#ifndef GL_NORMAL_MAP_NV -#define GL_NORMAL_MAP_NV 0x8511 -#endif -#ifndef GL_REFLECTION_MAP_NV -#define GL_REFLECTION_MAP_NV 0x8512 -#endif -#ifndef GL_NORMAL_MAP_EXT -#define GL_NORMAL_MAP_EXT 0x8511 -#endif -#ifndef GL_REFLECTION_MAP_EXT -#define GL_REFLECTION_MAP_EXT 0x8512 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_EXT -#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 -#endif -#ifndef GL_TEXTURE_BINDING_CUBE_MAP_EXT -#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 -#endif -#ifndef GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A -#endif -#ifndef GL_PROXY_TEXTURE_CUBE_MAP_EXT -#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B -#endif -#ifndef GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C -#endif -#ifndef GL_WRAP_BORDER_SUN -#define GL_WRAP_BORDER_SUN 0x81D4 -#endif -#ifndef GL_MAX_TEXTURE_LOD_BIAS_EXT -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD -#endif -#ifndef GL_TEXTURE_FILTER_CONTROL_EXT -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#endif -#ifndef GL_TEXTURE_LOD_BIAS_EXT -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 -#endif -#ifndef GL_TEXTURE_MAX_ANISOTROPY_EXT -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#endif -#ifndef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif -#ifndef GL_MODELVIEW0_STACK_DEPTH_EXT -#define GL_MODELVIEW0_STACK_DEPTH_EXT GL_MODELVIEW_STACK_DEPTH -#endif -#ifndef GL_MODELVIEW1_STACK_DEPTH_EXT -#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 -#endif -#ifndef GL_MODELVIEW0_MATRIX_EXT -#define GL_MODELVIEW0_MATRIX_EXT GL_MODELVIEW_MATRIX -#endif -#ifndef GL_MODELVIEW1_MATRIX_EXT -#define GL_MODELVIEW1_MATRIX_EXT 0x8506 -#endif -#ifndef GL_VERTEX_WEIGHTING_EXT -#define GL_VERTEX_WEIGHTING_EXT 0x8509 -#endif -#ifndef GL_MODELVIEW0_EXT -#define GL_MODELVIEW0_EXT GL_MODELVIEW -#endif -#ifndef GL_MODELVIEW1_EXT -#define GL_MODELVIEW1_EXT 0x850A -#endif -#ifndef GL_CURRENT_VERTEX_WEIGHT_EXT -#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B -#endif -#ifndef GL_VERTEX_WEIGHT_ARRAY_EXT -#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C -#endif -#ifndef GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT -#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D -#endif -#ifndef GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT -#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E -#endif -#ifndef GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT -#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F -#endif -#ifndef GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT -#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 -#endif -#ifndef GL_MAX_SHININESS_NV -#define GL_MAX_SHININESS_NV 0x8504 -#endif -#ifndef GL_MAX_SPOT_EXPONENT_NV -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 -#endif -#ifndef GL_VERTEX_ARRAY_RANGE_NV -#define GL_VERTEX_ARRAY_RANGE_NV 0x851D -#endif -#ifndef GL_VERTEX_ARRAY_RANGE_LENGTH_NV -#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E -#endif -#ifndef GL_VERTEX_ARRAY_RANGE_VALID_NV -#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F -#endif -#ifndef GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV -#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 -#endif -#ifndef GL_VERTEX_ARRAY_RANGE_POINTER_NV -#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 -#endif -#ifndef GL_REGISTER_COMBINERS_NV -#define GL_REGISTER_COMBINERS_NV 0x8522 -#endif -#ifndef GL_VARIABLE_A_NV -#define GL_VARIABLE_A_NV 0x8523 -#endif -#ifndef GL_VARIABLE_B_NV -#define GL_VARIABLE_B_NV 0x8524 -#endif -#ifndef GL_VARIABLE_C_NV -#define GL_VARIABLE_C_NV 0x8525 -#endif -#ifndef GL_VARIABLE_D_NV -#define GL_VARIABLE_D_NV 0x8526 -#endif -#ifndef GL_VARIABLE_E_NV -#define GL_VARIABLE_E_NV 0x8527 -#endif -#ifndef GL_VARIABLE_F_NV -#define GL_VARIABLE_F_NV 0x8528 -#endif -#ifndef GL_VARIABLE_G_NV -#define GL_VARIABLE_G_NV 0x8529 -#endif -#ifndef GL_CONSTANT_COLOR0_NV -#define GL_CONSTANT_COLOR0_NV 0x852A -#endif -#ifndef GL_CONSTANT_COLOR1_NV -#define GL_CONSTANT_COLOR1_NV 0x852B -#endif -#ifndef GL_PRIMARY_COLOR_NV -#define GL_PRIMARY_COLOR_NV 0x852C -#endif -#ifndef GL_SECONDARY_COLOR_NV -#define GL_SECONDARY_COLOR_NV 0x852D -#endif -#ifndef GL_SPARE0_NV -#define GL_SPARE0_NV 0x852E -#endif -#ifndef GL_SPARE1_NV -#define GL_SPARE1_NV 0x852F -#endif -#ifndef GL_DISCARD_NV -#define GL_DISCARD_NV 0x8530 -#endif -#ifndef GL_E_TIMES_F_NV -#define GL_E_TIMES_F_NV 0x8531 -#endif -#ifndef GL_SPARE0_PLUS_SECONDARY_COLOR_NV -#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 -#endif -#ifndef GL_UNSIGNED_IDENTITY_NV -#define GL_UNSIGNED_IDENTITY_NV 0x8536 -#endif -#ifndef GL_UNSIGNED_INVERT_NV -#define GL_UNSIGNED_INVERT_NV 0x8537 -#endif -#ifndef GL_EXPAND_NORMAL_NV -#define GL_EXPAND_NORMAL_NV 0x8538 -#endif -#ifndef GL_EXPAND_NEGATE_NV -#define GL_EXPAND_NEGATE_NV 0x8539 -#endif -#ifndef GL_HALF_BIAS_NORMAL_NV -#define GL_HALF_BIAS_NORMAL_NV 0x853A -#endif -#ifndef GL_HALF_BIAS_NEGATE_NV -#define GL_HALF_BIAS_NEGATE_NV 0x853B -#endif -#ifndef GL_SIGNED_IDENTITY_NV -#define GL_SIGNED_IDENTITY_NV 0x853C -#endif -#ifndef GL_SIGNED_NEGATE_NV -#define GL_SIGNED_NEGATE_NV 0x853D -#endif -#ifndef GL_SCALE_BY_TWO_NV -#define GL_SCALE_BY_TWO_NV 0x853E -#endif -#ifndef GL_SCALE_BY_FOUR_NV -#define GL_SCALE_BY_FOUR_NV 0x853F -#endif -#ifndef GL_SCALE_BY_ONE_HALF_NV -#define GL_SCALE_BY_ONE_HALF_NV 0x8540 -#endif -#ifndef GL_BIAS_BY_NEGATIVE_ONE_HALF_NV -#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 -#endif -#ifndef GL_COMBINER_INPUT_NV -#define GL_COMBINER_INPUT_NV 0x8542 -#endif -#ifndef GL_COMBINER_MAPPING_NV -#define GL_COMBINER_MAPPING_NV 0x8543 -#endif -#ifndef GL_COMBINER_COMPONENT_USAGE_NV -#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 -#endif -#ifndef GL_COMBINER_AB_DOT_PRODUCT_NV -#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 -#endif -#ifndef GL_COMBINER_CD_DOT_PRODUCT_NV -#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 -#endif -#ifndef GL_COMBINER_MUX_SUM_NV -#define GL_COMBINER_MUX_SUM_NV 0x8547 -#endif -#ifndef GL_COMBINER_SCALE_NV -#define GL_COMBINER_SCALE_NV 0x8548 -#endif -#ifndef GL_COMBINER_BIAS_NV -#define GL_COMBINER_BIAS_NV 0x8549 -#endif -#ifndef GL_COMBINER_AB_OUTPUT_NV -#define GL_COMBINER_AB_OUTPUT_NV 0x854A -#endif -#ifndef GL_COMBINER_CD_OUTPUT_NV -#define GL_COMBINER_CD_OUTPUT_NV 0x854B -#endif -#ifndef GL_COMBINER_SUM_OUTPUT_NV -#define GL_COMBINER_SUM_OUTPUT_NV 0x854C -#endif -#ifndef GL_MAX_GENERAL_COMBINERS_NV -#define GL_MAX_GENERAL_COMBINERS_NV 0x854D -#endif -#ifndef GL_NUM_GENERAL_COMBINERS_NV -#define GL_NUM_GENERAL_COMBINERS_NV 0x854E -#endif -#ifndef GL_COLOR_SUM_CLAMP_NV -#define GL_COLOR_SUM_CLAMP_NV 0x854F -#endif -#ifndef GL_COMBINER0_NV -#define GL_COMBINER0_NV 0x8550 -#endif -#ifndef GL_COMBINER1_NV -#define GL_COMBINER1_NV 0x8551 -#endif -#ifndef GL_COMBINER2_NV -#define GL_COMBINER2_NV 0x8552 -#endif -#ifndef GL_COMBINER3_NV -#define GL_COMBINER3_NV 0x8553 -#endif -#ifndef GL_COMBINER4_NV -#define GL_COMBINER4_NV 0x8554 -#endif -#ifndef GL_COMBINER5_NV -#define GL_COMBINER5_NV 0x8555 -#endif -#ifndef GL_COMBINER6_NV -#define GL_COMBINER6_NV 0x8556 -#endif -#ifndef GL_COMBINER7_NV -#define GL_COMBINER7_NV 0x8557 -#endif -#ifndef GL_FOG_DISTANCE_MODE_NV -#define GL_FOG_DISTANCE_MODE_NV 0x855A -#endif -#ifndef GL_EYE_RADIAL_NV -#define GL_EYE_RADIAL_NV 0x855B -#endif -#ifndef GL_EYE_PLANE_ABSOLUTE_NV -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C -#endif -#ifndef GL_EMBOSS_LIGHT_NV -#define GL_EMBOSS_LIGHT_NV 0x855D -#endif -#ifndef GL_EMBOSS_CONSTANT_NV -#define GL_EMBOSS_CONSTANT_NV 0x855E -#endif -#ifndef GL_EMBOSS_MAP_NV -#define GL_EMBOSS_MAP_NV 0x855F -#endif -#ifndef GL_COMBINE4_NV -#define GL_COMBINE4_NV 0x8503 -#endif -#ifndef GL_SOURCE3_RGB_NV -#define GL_SOURCE3_RGB_NV 0x8583 -#endif -#ifndef GL_SOURCE3_ALPHA_NV -#define GL_SOURCE3_ALPHA_NV 0x858B -#endif -#ifndef GL_OPERAND3_RGB_NV -#define GL_OPERAND3_RGB_NV 0x8593 -#endif -#ifndef GL_OPERAND3_ALPHA_NV -#define GL_OPERAND3_ALPHA_NV 0x859B -#endif -#ifndef GL_COMPRESSED_RGB_S3TC_DXT1_EXT -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#endif -#ifndef GL_COMPRESSED_RGBA_S3TC_DXT1_EXT -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#endif -#ifndef GL_COMPRESSED_RGBA_S3TC_DXT3_EXT -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#endif -#ifndef GL_COMPRESSED_RGBA_S3TC_DXT5_EXT -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 -#endif -#ifndef GL_CULL_VERTEX_IBM -#define GL_CULL_VERTEX_IBM 103050 -#endif -#ifndef GL_VERTEX_ARRAY_LIST_IBM -#define GL_VERTEX_ARRAY_LIST_IBM 103070 -#endif -#ifndef GL_NORMAL_ARRAY_LIST_IBM -#define GL_NORMAL_ARRAY_LIST_IBM 103071 -#endif -#ifndef GL_COLOR_ARRAY_LIST_IBM -#define GL_COLOR_ARRAY_LIST_IBM 103072 -#endif -#ifndef GL_INDEX_ARRAY_LIST_IBM -#define GL_INDEX_ARRAY_LIST_IBM 103073 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_LIST_IBM -#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 -#endif -#ifndef GL_EDGE_FLAG_ARRAY_LIST_IBM -#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 -#endif -#ifndef GL_FOG_COORDINATE_ARRAY_LIST_IBM -#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 -#endif -#ifndef GL_SECONDARY_COLOR_ARRAY_LIST_IBM -#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 -#endif -#ifndef GL_VERTEX_ARRAY_LIST_STRIDE_IBM -#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 -#endif -#ifndef GL_NORMAL_ARRAY_LIST_STRIDE_IBM -#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 -#endif -#ifndef GL_COLOR_ARRAY_LIST_STRIDE_IBM -#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 -#endif -#ifndef GL_INDEX_ARRAY_LIST_STRIDE_IBM -#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 -#endif -#ifndef GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM -#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 -#endif -#ifndef GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM -#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 -#endif -#ifndef GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM -#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 -#endif -#ifndef GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM -#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 -#endif -#ifndef GL_PACK_SUBSAMPLE_RATE_SGIX -#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 -#endif -#ifndef GL_UNPACK_SUBSAMPLE_RATE_SGIX -#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 -#endif -#ifndef GL_PIXEL_SUBSAMPLE_4444_SGIX -#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 -#endif -#ifndef GL_PIXEL_SUBSAMPLE_2424_SGIX -#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 -#endif -#ifndef GL_PIXEL_SUBSAMPLE_4242_SGIX -#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 -#endif -#ifndef GL_PACK_SUBSAMPLE_RATE_SGIX -#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 -#endif -#ifndef GL_UNPACK_SUBSAMPLE_RATE_SGIX -#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 -#endif -#ifndef GL_PIXEL_SUBSAMPLE_4444_SGIX -#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 -#endif -#ifndef GL_PIXEL_SUBSAMPLE_2424_SGIX -#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 -#endif -#ifndef GL_PIXEL_SUBSAMPLE_4242_SGIX -#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 -#endif -#ifndef GL_YCRCB_SGIX -#define GL_YCRCB_SGIX 0x8318 -#endif -#ifndef GL_YCRCBA_SGIX -#define GL_YCRCBA_SGIX 0x8319 -#endif -#ifndef GL_DEPTH_PASS_INSTRUMENT_SGIX -#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 -#endif -#ifndef GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX -#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 -#endif -#ifndef GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX -#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 -#endif -#ifndef GL_COMPRESSED_RGB_FXT1_3DFX -#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 -#endif -#ifndef GL_COMPRESSED_RGBA_FXT1_3DFX -#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 -#endif -#ifndef GL_MULTISAMPLE_3DFX -#define GL_MULTISAMPLE_3DFX 0x86B2 -#endif -#ifndef GL_SAMPLE_BUFFERS_3DFX -#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 -#endif -#ifndef GL_SAMPLES_3DFX -#define GL_SAMPLES_3DFX 0x86B4 -#endif -#ifndef GL_MULTISAMPLE_BIT_3DFX -#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 -#endif -#ifndef GL_MULTISAMPLE_EXT -#define GL_MULTISAMPLE_EXT 0x809D -#endif -#ifndef GL_SAMPLE_ALPHA_TO_MASK_EXT -#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E -#endif -#ifndef GL_SAMPLE_ALPHA_TO_ONE_EXT -#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F -#endif -#ifndef GL_SAMPLE_MASK_EXT -#define GL_SAMPLE_MASK_EXT 0x80A0 -#endif -#ifndef GL_1PASS_EXT -#define GL_1PASS_EXT 0x80A1 -#endif -#ifndef GL_2PASS_0_EXT -#define GL_2PASS_0_EXT 0x80A2 -#endif -#ifndef GL_2PASS_1_EXT -#define GL_2PASS_1_EXT 0x80A3 -#endif -#ifndef GL_4PASS_0_EXT -#define GL_4PASS_0_EXT 0x80A4 -#endif -#ifndef GL_4PASS_1_EXT -#define GL_4PASS_1_EXT 0x80A5 -#endif -#ifndef GL_4PASS_2_EXT -#define GL_4PASS_2_EXT 0x80A6 -#endif -#ifndef GL_4PASS_3_EXT -#define GL_4PASS_3_EXT 0x80A7 -#endif -#ifndef GL_SAMPLE_BUFFERS_EXT -#define GL_SAMPLE_BUFFERS_EXT 0x80A8 -#endif -#ifndef GL_SAMPLES_EXT -#define GL_SAMPLES_EXT 0x80A9 -#endif -#ifndef GL_SAMPLE_MASK_VALUE_EXT -#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA -#endif -#ifndef GL_SAMPLE_MASK_INVERT_EXT -#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB -#endif -#ifndef GL_SAMPLE_PATTERN_EXT -#define GL_SAMPLE_PATTERN_EXT 0x80AC -#endif -#ifndef GL_MULTISAMPLE_BIT_EXT -#define GL_MULTISAMPLE_BIT_EXT 0x20000000 -#endif -#ifndef GL_VERTEX_PRECLIP_SGIX -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#endif -#ifndef GL_VERTEX_PRECLIP_HINT_SGIX -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF -#endif -#ifndef GL_CONVOLUTION_HINT_SGIX -#define GL_CONVOLUTION_HINT_SGIX 0x8316 -#endif -#ifndef GL_PACK_RESAMPLE_SGIX -#define GL_PACK_RESAMPLE_SGIX 0x842C -#endif -#ifndef GL_UNPACK_RESAMPLE_SGIX -#define GL_UNPACK_RESAMPLE_SGIX 0x842D -#endif -#ifndef GL_RESAMPLE_REPLICATE_SGIX -#define GL_RESAMPLE_REPLICATE_SGIX 0x842E -#endif -#ifndef GL_RESAMPLE_ZERO_FILL_SGIX -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x842F -#endif -#ifndef GL_RESAMPLE_DECIMATE_SGIX -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#endif -#ifndef GL_EYE_DISTANCE_TO_POINT_SGIS -#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 -#endif -#ifndef GL_OBJECT_DISTANCE_TO_POINT_SGIS -#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 -#endif -#ifndef GL_EYE_DISTANCE_TO_LINE_SGIS -#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 -#endif -#ifndef GL_OBJECT_DISTANCE_TO_LINE_SGIS -#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 -#endif -#ifndef GL_EYE_POINT_SGIS -#define GL_EYE_POINT_SGIS 0x81F4 -#endif -#ifndef GL_OBJECT_POINT_SGIS -#define GL_OBJECT_POINT_SGIS 0x81F5 -#endif -#ifndef GL_EYE_LINE_SGIS -#define GL_EYE_LINE_SGIS 0x81F6 -#endif -#ifndef GL_OBJECT_LINE_SGIS -#define GL_OBJECT_LINE_SGIS 0x81F7 -#endif -#ifndef GL_TEXTURE_COLOR_WRITEMASK_SGIS -#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF -#endif -#ifndef GL_DOT3_RGB_EXT -#define GL_DOT3_RGB_EXT 0x8740 -#endif -#ifndef GL_DOT3_RGBA_EXT -#define GL_DOT3_RGBA_EXT 0x8741 -#endif -#ifndef GL_MIRROR_CLAMP_ATI -#define GL_MIRROR_CLAMP_ATI 0x8742 -#endif -#ifndef GL_MIRROR_CLAMP_TO_EDGE_ATI -#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 -#endif -#ifndef GL_ALL_COMPLETED_NV -#define GL_ALL_COMPLETED_NV 0x84F2 -#endif -#ifndef GL_FENCE_STATUS_NV -#define GL_FENCE_STATUS_NV 0x84F3 -#endif -#ifndef GL_FENCE_CONDITION_NV -#define GL_FENCE_CONDITION_NV 0x84F4 -#endif -#ifndef GL_MIRRORED_REPEAT_IBM -#define GL_MIRRORED_REPEAT_IBM 0x8370 -#endif -#ifndef GL_EVAL_2D_NV -#define GL_EVAL_2D_NV 0x86C0 -#endif -#ifndef GL_EVAL_TRIANGULAR_2D_NV -#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 -#endif -#ifndef GL_MAP_TESSELLATION_NV -#define GL_MAP_TESSELLATION_NV 0x86C2 -#endif -#ifndef GL_MAP_ATTRIB_U_ORDER_NV -#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 -#endif -#ifndef GL_MAP_ATTRIB_V_ORDER_NV -#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 -#endif -#ifndef GL_EVAL_FRACTIONAL_TESSELLATION_NV -#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB0_NV -#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB1_NV -#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB2_NV -#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB3_NV -#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB4_NV -#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB5_NV -#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB6_NV -#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB7_NV -#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB8_NV -#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB9_NV -#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB10_NV -#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB11_NV -#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB12_NV -#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB13_NV -#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB14_NV -#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 -#endif -#ifndef GL_EVAL_VERTEX_ATTRIB15_NV -#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 -#endif -#ifndef GL_MAX_MAP_TESSELLATION_NV -#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 -#endif -#ifndef GL_MAX_RATIONAL_EVAL_ORDER_NV -#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 -#endif -#ifndef GL_DEPTH_STENCIL_NV -#define GL_DEPTH_STENCIL_NV 0x84F9 -#endif -#ifndef GL_UNSIGNED_INT_24_8_NV -#define GL_UNSIGNED_INT_24_8_NV 0x84FA -#endif -#ifndef GL_PER_STAGE_CONSTANTS_NV -#define GL_PER_STAGE_CONSTANTS_NV 0x8535 -#endif -#ifndef GL_TEXTURE_RECTANGLE_NV -#define GL_TEXTURE_RECTANGLE_NV 0x84F5 -#endif -#ifndef GL_TEXTURE_BINDING_RECTANGLE_NV -#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 -#endif -#ifndef GL_PROXY_TEXTURE_RECTANGLE_NV -#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 -#endif -#ifndef GL_MAX_RECTANGLE_TEXTURE_SIZE_NV -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 -#endif -#ifndef GL_OFFSET_TEXTURE_RECTANGLE_NV -#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C -#endif -#ifndef GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV -#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D -#endif -#ifndef GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV -#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E -#endif -#ifndef GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV -#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 -#endif -#ifndef GL_UNSIGNED_INT_S8_S8_8_8_NV -#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA -#endif -#ifndef GL_UNSIGNED_INT_8_8_S8_S8_REV_NV -#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB -#endif -#ifndef GL_DSDT_MAG_INTENSITY_NV -#define GL_DSDT_MAG_INTENSITY_NV 0x86DC -#endif -#ifndef GL_SHADER_CONSISTENT_NV -#define GL_SHADER_CONSISTENT_NV 0x86DD -#endif -#ifndef GL_TEXTURE_SHADER_NV -#define GL_TEXTURE_SHADER_NV 0x86DE -#endif -#ifndef GL_SHADER_OPERATION_NV -#define GL_SHADER_OPERATION_NV 0x86DF -#endif -#ifndef GL_CULL_MODES_NV -#define GL_CULL_MODES_NV 0x86E0 -#endif -#ifndef GL_OFFSET_TEXTURE_MATRIX_NV -#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 -#endif -#ifndef GL_OFFSET_TEXTURE_SCALE_NV -#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 -#endif -#ifndef GL_OFFSET_TEXTURE_BIAS_NV -#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 -#endif -#ifndef GL_OFFSET_TEXTURE_2D_MATRIX_NV -#define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV -#endif -#ifndef GL_OFFSET_TEXTURE_2D_SCALE_NV -#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV -#endif -#ifndef GL_OFFSET_TEXTURE_2D_BIAS_NV -#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV -#endif -#ifndef GL_PREVIOUS_TEXTURE_INPUT_NV -#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 -#endif -#ifndef GL_CONST_EYE_NV -#define GL_CONST_EYE_NV 0x86E5 -#endif -#ifndef GL_PASS_THROUGH_NV -#define GL_PASS_THROUGH_NV 0x86E6 -#endif -#ifndef GL_CULL_FRAGMENT_NV -#define GL_CULL_FRAGMENT_NV 0x86E7 -#endif -#ifndef GL_OFFSET_TEXTURE_2D_NV -#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 -#endif -#ifndef GL_DEPENDENT_AR_TEXTURE_2D_NV -#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 -#endif -#ifndef GL_DEPENDENT_GB_TEXTURE_2D_NV -#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA -#endif -#ifndef GL_DOT_PRODUCT_NV -#define GL_DOT_PRODUCT_NV 0x86EC -#endif -#ifndef GL_DOT_PRODUCT_DEPTH_REPLACE_NV -#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED -#endif -#ifndef GL_DOT_PRODUCT_TEXTURE_2D_NV -#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE -#endif -#ifndef GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV -#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 -#endif -#ifndef GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV -#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 -#endif -#ifndef GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV -#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 -#endif -#ifndef GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV -#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 -#endif -#ifndef GL_HILO_NV -#define GL_HILO_NV 0x86F4 -#endif -#ifndef GL_DSDT_NV -#define GL_DSDT_NV 0x86F5 -#endif -#ifndef GL_DSDT_MAG_NV -#define GL_DSDT_MAG_NV 0x86F6 -#endif -#ifndef GL_DSDT_MAG_VIB_NV -#define GL_DSDT_MAG_VIB_NV 0x86F7 -#endif -#ifndef GL_HILO16_NV -#define GL_HILO16_NV 0x86F8 -#endif -#ifndef GL_SIGNED_HILO_NV -#define GL_SIGNED_HILO_NV 0x86F9 -#endif -#ifndef GL_SIGNED_HILO16_NV -#define GL_SIGNED_HILO16_NV 0x86FA -#endif -#ifndef GL_SIGNED_RGBA_NV -#define GL_SIGNED_RGBA_NV 0x86FB -#endif -#ifndef GL_SIGNED_RGBA8_NV -#define GL_SIGNED_RGBA8_NV 0x86FC -#endif -#ifndef GL_SIGNED_RGB_NV -#define GL_SIGNED_RGB_NV 0x86FE -#endif -#ifndef GL_SIGNED_RGB8_NV -#define GL_SIGNED_RGB8_NV 0x86FF -#endif -#ifndef GL_SIGNED_LUMINANCE_NV -#define GL_SIGNED_LUMINANCE_NV 0x8701 -#endif -#ifndef GL_SIGNED_LUMINANCE8_NV -#define GL_SIGNED_LUMINANCE8_NV 0x8702 -#endif -#ifndef GL_SIGNED_LUMINANCE_ALPHA_NV -#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 -#endif -#ifndef GL_SIGNED_LUMINANCE8_ALPHA8_NV -#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 -#endif -#ifndef GL_SIGNED_ALPHA_NV -#define GL_SIGNED_ALPHA_NV 0x8705 -#endif -#ifndef GL_SIGNED_ALPHA8_NV -#define GL_SIGNED_ALPHA8_NV 0x8706 -#endif -#ifndef GL_SIGNED_INTENSITY_NV -#define GL_SIGNED_INTENSITY_NV 0x8707 -#endif -#ifndef GL_SIGNED_INTENSITY8_NV -#define GL_SIGNED_INTENSITY8_NV 0x8708 -#endif -#ifndef GL_DSDT8_NV -#define GL_DSDT8_NV 0x8709 -#endif -#ifndef GL_DSDT8_MAG8_NV -#define GL_DSDT8_MAG8_NV 0x870A -#endif -#ifndef GL_DSDT8_MAG8_INTENSITY8_NV -#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B -#endif -#ifndef GL_SIGNED_RGB_UNSIGNED_ALPHA_NV -#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C -#endif -#ifndef GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV -#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D -#endif -#ifndef GL_HI_SCALE_NV -#define GL_HI_SCALE_NV 0x870E -#endif -#ifndef GL_LO_SCALE_NV -#define GL_LO_SCALE_NV 0x870F -#endif -#ifndef GL_DS_SCALE_NV -#define GL_DS_SCALE_NV 0x8710 -#endif -#ifndef GL_DT_SCALE_NV -#define GL_DT_SCALE_NV 0x8711 -#endif -#ifndef GL_MAGNITUDE_SCALE_NV -#define GL_MAGNITUDE_SCALE_NV 0x8712 -#endif -#ifndef GL_VIBRANCE_SCALE_NV -#define GL_VIBRANCE_SCALE_NV 0x8713 -#endif -#ifndef GL_HI_BIAS_NV -#define GL_HI_BIAS_NV 0x8714 -#endif -#ifndef GL_LO_BIAS_NV -#define GL_LO_BIAS_NV 0x8715 -#endif -#ifndef GL_DS_BIAS_NV -#define GL_DS_BIAS_NV 0x8716 -#endif -#ifndef GL_DT_BIAS_NV -#define GL_DT_BIAS_NV 0x8717 -#endif -#ifndef GL_MAGNITUDE_BIAS_NV -#define GL_MAGNITUDE_BIAS_NV 0x8718 -#endif -#ifndef GL_VIBRANCE_BIAS_NV -#define GL_VIBRANCE_BIAS_NV 0x8719 -#endif -#ifndef GL_TEXTURE_BORDER_VALUES_NV -#define GL_TEXTURE_BORDER_VALUES_NV 0x871A -#endif -#ifndef GL_TEXTURE_HI_SIZE_NV -#define GL_TEXTURE_HI_SIZE_NV 0x871B -#endif -#ifndef GL_TEXTURE_LO_SIZE_NV -#define GL_TEXTURE_LO_SIZE_NV 0x871C -#endif -#ifndef GL_TEXTURE_DS_SIZE_NV -#define GL_TEXTURE_DS_SIZE_NV 0x871D -#endif -#ifndef GL_TEXTURE_DT_SIZE_NV -#define GL_TEXTURE_DT_SIZE_NV 0x871E -#endif -#ifndef GL_TEXTURE_MAG_SIZE_NV -#define GL_TEXTURE_MAG_SIZE_NV 0x871F -#endif -#ifndef GL_DOT_PRODUCT_TEXTURE_3D_NV -#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF -#endif -#ifndef GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV -#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 -#endif -#ifndef GL_VERTEX_PROGRAM_NV -#define GL_VERTEX_PROGRAM_NV 0x8620 -#endif -#ifndef GL_VERTEX_STATE_PROGRAM_NV -#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 -#endif -#ifndef GL_ATTRIB_ARRAY_SIZE_NV -#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 -#endif -#ifndef GL_ATTRIB_ARRAY_STRIDE_NV -#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 -#endif -#ifndef GL_ATTRIB_ARRAY_TYPE_NV -#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 -#endif -#ifndef GL_CURRENT_ATTRIB_NV -#define GL_CURRENT_ATTRIB_NV 0x8626 -#endif -#ifndef GL_PROGRAM_LENGTH_NV -#define GL_PROGRAM_LENGTH_NV 0x8627 -#endif -#ifndef GL_PROGRAM_STRING_NV -#define GL_PROGRAM_STRING_NV 0x8628 -#endif -#ifndef GL_MODELVIEW_PROJECTION_NV -#define GL_MODELVIEW_PROJECTION_NV 0x8629 -#endif -#ifndef GL_IDENTITY_NV -#define GL_IDENTITY_NV 0x862A -#endif -#ifndef GL_INVERSE_NV -#define GL_INVERSE_NV 0x862B -#endif -#ifndef GL_TRANSPOSE_NV -#define GL_TRANSPOSE_NV 0x862C -#endif -#ifndef GL_INVERSE_TRANSPOSE_NV -#define GL_INVERSE_TRANSPOSE_NV 0x862D -#endif -#ifndef GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV -#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E -#endif -#ifndef GL_MAX_TRACK_MATRICES_NV -#define GL_MAX_TRACK_MATRICES_NV 0x862F -#endif -#ifndef GL_MATRIX0_NV -#define GL_MATRIX0_NV 0x8630 -#endif -#ifndef GL_MATRIX1_NV -#define GL_MATRIX1_NV 0x8631 -#endif -#ifndef GL_MATRIX2_NV -#define GL_MATRIX2_NV 0x8632 -#endif -#ifndef GL_MATRIX3_NV -#define GL_MATRIX3_NV 0x8633 -#endif -#ifndef GL_MATRIX4_NV -#define GL_MATRIX4_NV 0x8634 -#endif -#ifndef GL_MATRIX5_NV -#define GL_MATRIX5_NV 0x8635 -#endif -#ifndef GL_MATRIX6_NV -#define GL_MATRIX6_NV 0x8636 -#endif -#ifndef GL_MATRIX7_NV -#define GL_MATRIX7_NV 0x8637 -#endif -#ifndef GL_CURRENT_MATRIX_STACK_DEPTH_NV -#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 -#endif -#ifndef GL_CURRENT_MATRIX_NV -#define GL_CURRENT_MATRIX_NV 0x8641 -#endif -#ifndef GL_VERTEX_PROGRAM_POINT_SIZE_NV -#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 -#endif -#ifndef GL_VERTEX_PROGRAM_TWO_SIDE_NV -#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 -#endif -#ifndef GL_PROGRAM_PARAMETER_NV -#define GL_PROGRAM_PARAMETER_NV 0x8644 -#endif -#ifndef GL_ATTRIB_ARRAY_POINTER_NV -#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 -#endif -#ifndef GL_PROGRAM_TARGET_NV -#define GL_PROGRAM_TARGET_NV 0x8646 -#endif -#ifndef GL_PROGRAM_RESIDENT_NV -#define GL_PROGRAM_RESIDENT_NV 0x8647 -#endif -#ifndef GL_TRACK_MATRIX_NV -#define GL_TRACK_MATRIX_NV 0x8648 -#endif -#ifndef GL_TRACK_MATRIX_TRANSFORM_NV -#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 -#endif -#ifndef GL_VERTEX_PROGRAM_BINDING_NV -#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A -#endif -#ifndef GL_PROGRAM_ERROR_POSITION_NV -#define GL_PROGRAM_ERROR_POSITION_NV 0x864B -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY0_NV -#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY1_NV -#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY2_NV -#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY3_NV -#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY4_NV -#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY5_NV -#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY6_NV -#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY7_NV -#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY8_NV -#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY9_NV -#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY10_NV -#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY11_NV -#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY12_NV -#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY13_NV -#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY14_NV -#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E -#endif -#ifndef GL_VERTEX_ATTRIB_ARRAY15_NV -#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB0_4_NV -#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB1_4_NV -#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB2_4_NV -#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB3_4_NV -#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB4_4_NV -#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB5_4_NV -#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB6_4_NV -#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB7_4_NV -#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB8_4_NV -#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB9_4_NV -#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB10_4_NV -#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB11_4_NV -#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB12_4_NV -#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB13_4_NV -#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB14_4_NV -#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E -#endif -#ifndef GL_MAP1_VERTEX_ATTRIB15_4_NV -#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB0_4_NV -#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB1_4_NV -#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB2_4_NV -#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB3_4_NV -#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB4_4_NV -#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB5_4_NV -#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB6_4_NV -#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB7_4_NV -#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB8_4_NV -#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB9_4_NV -#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB10_4_NV -#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB11_4_NV -#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB12_4_NV -#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB13_4_NV -#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB14_4_NV -#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E -#endif -#ifndef GL_MAP2_VERTEX_ATTRIB15_4_NV -#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F -#endif -#ifndef GL_TEXTURE_MAX_CLAMP_S_SGIX -#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 -#endif -#ifndef GL_TEXTURE_MAX_CLAMP_T_SGIX -#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A -#endif -#ifndef GL_TEXTURE_MAX_CLAMP_R_SGIX -#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B -#endif -#ifndef GL_SCALEBIAS_HINT_SGIX -#define GL_SCALEBIAS_HINT_SGIX 0x8322 -#endif -#ifndef GL_INTERLACE_OML -#define GL_INTERLACE_OML 0x8980 -#endif -#ifndef GL_INTERLACE_READ_OML -#define GL_INTERLACE_READ_OML 0x8981 -#endif -#ifndef GL_FORMAT_SUBSAMPLE_24_24_OML -#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 -#endif -#ifndef GL_FORMAT_SUBSAMPLE_244_244_OML -#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 -#endif -#ifndef GL_PACK_RESAMPLE_OML -#define GL_PACK_RESAMPLE_OML 0x8984 -#endif -#ifndef GL_UNPACK_RESAMPLE_OML -#define GL_UNPACK_RESAMPLE_OML 0x8985 -#endif -#ifndef GL_RESAMPLE_REPLICATE_OML -#define GL_RESAMPLE_REPLICATE_OML 0x8986 -#endif -#ifndef GL_RESAMPLE_ZERO_FILL_OML -#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 -#endif -#ifndef GL_RESAMPLE_AVERAGE_OML -#define GL_RESAMPLE_AVERAGE_OML 0x8988 -#endif -#ifndef GL_RESAMPLE_DECIMATE_OML -#define GL_RESAMPLE_DECIMATE_OML 0x8989 -#endif -#ifndef GL_DEPTH_STENCIL_TO_RGBA_NV -#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E -#endif -#ifndef GL_DEPTH_STENCIL_TO_BGRA_NV -#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F -#endif -#ifndef GL_BUMP_ROT_MATRIX_ATI -#define GL_BUMP_ROT_MATRIX_ATI 0x8775 -#endif -#ifndef GL_BUMP_ROT_MATRIX_SIZE_ATI -#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 -#endif -#ifndef GL_BUMP_NUM_TEX_UNITS_ATI -#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 -#endif -#ifndef GL_BUMP_TEX_UNITS_ATI -#define GL_BUMP_TEX_UNITS_ATI 0x8778 -#endif -#ifndef GL_DUDV_ATI -#define GL_DUDV_ATI 0x8779 -#endif -#ifndef GL_DU8DV8_ATI -#define GL_DU8DV8_ATI 0x877A -#endif -#ifndef GL_BUMP_ENVMAP_ATI -#define GL_BUMP_ENVMAP_ATI 0x877B -#endif -#ifndef GL_BUMP_TARGET_ATI -#define GL_BUMP_TARGET_ATI 0x877C -#endif -#ifndef GL_FRAGMENT_SHADER_ATI -#define GL_FRAGMENT_SHADER_ATI 0x8920 -#endif -#ifndef GL_REG_0_ATI -#define GL_REG_0_ATI 0x8921 -#endif -#ifndef GL_REG_1_ATI -#define GL_REG_1_ATI 0x8922 -#endif -#ifndef GL_REG_2_ATI -#define GL_REG_2_ATI 0x8923 -#endif -#ifndef GL_REG_3_ATI -#define GL_REG_3_ATI 0x8924 -#endif -#ifndef GL_REG_4_ATI -#define GL_REG_4_ATI 0x8925 -#endif -#ifndef GL_REG_5_ATI -#define GL_REG_5_ATI 0x8926 -#endif -#ifndef GL_REG_6_ATI -#define GL_REG_6_ATI 0x8927 -#endif -#ifndef GL_REG_7_ATI -#define GL_REG_7_ATI 0x8928 -#endif -#ifndef GL_REG_8_ATI -#define GL_REG_8_ATI 0x8929 -#endif -#ifndef GL_REG_9_ATI -#define GL_REG_9_ATI 0x892A -#endif -#ifndef GL_REG_10_ATI -#define GL_REG_10_ATI 0x892B -#endif -#ifndef GL_REG_11_ATI -#define GL_REG_11_ATI 0x892C -#endif -#ifndef GL_REG_12_ATI -#define GL_REG_12_ATI 0x892D -#endif -#ifndef GL_REG_13_ATI -#define GL_REG_13_ATI 0x892E -#endif -#ifndef GL_REG_14_ATI -#define GL_REG_14_ATI 0x892F -#endif -#ifndef GL_REG_15_ATI -#define GL_REG_15_ATI 0x8930 -#endif -#ifndef GL_REG_16_ATI -#define GL_REG_16_ATI 0x8931 -#endif -#ifndef GL_REG_17_ATI -#define GL_REG_17_ATI 0x8932 -#endif -#ifndef GL_REG_18_ATI -#define GL_REG_18_ATI 0x8933 -#endif -#ifndef GL_REG_19_ATI -#define GL_REG_19_ATI 0x8934 -#endif -#ifndef GL_REG_20_ATI -#define GL_REG_20_ATI 0x8935 -#endif -#ifndef GL_REG_21_ATI -#define GL_REG_21_ATI 0x8936 -#endif -#ifndef GL_REG_22_ATI -#define GL_REG_22_ATI 0x8937 -#endif -#ifndef GL_REG_23_ATI -#define GL_REG_23_ATI 0x8938 -#endif -#ifndef GL_REG_24_ATI -#define GL_REG_24_ATI 0x8939 -#endif -#ifndef GL_REG_25_ATI -#define GL_REG_25_ATI 0x893A -#endif -#ifndef GL_REG_26_ATI -#define GL_REG_26_ATI 0x893B -#endif -#ifndef GL_REG_27_ATI -#define GL_REG_27_ATI 0x893C -#endif -#ifndef GL_REG_28_ATI -#define GL_REG_28_ATI 0x893D -#endif -#ifndef GL_REG_29_ATI -#define GL_REG_29_ATI 0x893E -#endif -#ifndef GL_REG_30_ATI -#define GL_REG_30_ATI 0x893F -#endif -#ifndef GL_REG_31_ATI -#define GL_REG_31_ATI 0x8940 -#endif -#ifndef GL_CON_0_ATI -#define GL_CON_0_ATI 0x8941 -#endif -#ifndef GL_CON_1_ATI -#define GL_CON_1_ATI 0x8942 -#endif -#ifndef GL_CON_2_ATI -#define GL_CON_2_ATI 0x8943 -#endif -#ifndef GL_CON_3_ATI -#define GL_CON_3_ATI 0x8944 -#endif -#ifndef GL_CON_4_ATI -#define GL_CON_4_ATI 0x8945 -#endif -#ifndef GL_CON_5_ATI -#define GL_CON_5_ATI 0x8946 -#endif -#ifndef GL_CON_6_ATI -#define GL_CON_6_ATI 0x8947 -#endif -#ifndef GL_CON_7_ATI -#define GL_CON_7_ATI 0x8948 -#endif -#ifndef GL_CON_8_ATI -#define GL_CON_8_ATI 0x8949 -#endif -#ifndef GL_CON_9_ATI -#define GL_CON_9_ATI 0x894A -#endif -#ifndef GL_CON_10_ATI -#define GL_CON_10_ATI 0x894B -#endif -#ifndef GL_CON_11_ATI -#define GL_CON_11_ATI 0x894C -#endif -#ifndef GL_CON_12_ATI -#define GL_CON_12_ATI 0x894D -#endif -#ifndef GL_CON_13_ATI -#define GL_CON_13_ATI 0x894E -#endif -#ifndef GL_CON_14_ATI -#define GL_CON_14_ATI 0x894F -#endif -#ifndef GL_CON_15_ATI -#define GL_CON_15_ATI 0x8950 -#endif -#ifndef GL_CON_16_ATI -#define GL_CON_16_ATI 0x8951 -#endif -#ifndef GL_CON_17_ATI -#define GL_CON_17_ATI 0x8952 -#endif -#ifndef GL_CON_18_ATI -#define GL_CON_18_ATI 0x8953 -#endif -#ifndef GL_CON_19_ATI -#define GL_CON_19_ATI 0x8954 -#endif -#ifndef GL_CON_20_ATI -#define GL_CON_20_ATI 0x8955 -#endif -#ifndef GL_CON_21_ATI -#define GL_CON_21_ATI 0x8956 -#endif -#ifndef GL_CON_22_ATI -#define GL_CON_22_ATI 0x8957 -#endif -#ifndef GL_CON_23_ATI -#define GL_CON_23_ATI 0x8958 -#endif -#ifndef GL_CON_24_ATI -#define GL_CON_24_ATI 0x8959 -#endif -#ifndef GL_CON_25_ATI -#define GL_CON_25_ATI 0x895A -#endif -#ifndef GL_CON_26_ATI -#define GL_CON_26_ATI 0x895B -#endif -#ifndef GL_CON_27_ATI -#define GL_CON_27_ATI 0x895C -#endif -#ifndef GL_CON_28_ATI -#define GL_CON_28_ATI 0x895D -#endif -#ifndef GL_CON_29_ATI -#define GL_CON_29_ATI 0x895E -#endif -#ifndef GL_CON_30_ATI -#define GL_CON_30_ATI 0x895F -#endif -#ifndef GL_CON_31_ATI -#define GL_CON_31_ATI 0x8960 -#endif -#ifndef GL_MOV_ATI -#define GL_MOV_ATI 0x8961 -#endif -#ifndef GL_ADD_ATI -#define GL_ADD_ATI 0x8963 -#endif -#ifndef GL_MUL_ATI -#define GL_MUL_ATI 0x8964 -#endif -#ifndef GL_SUB_ATI -#define GL_SUB_ATI 0x8965 -#endif -#ifndef GL_DOT3_ATI -#define GL_DOT3_ATI 0x8966 -#endif -#ifndef GL_DOT4_ATI -#define GL_DOT4_ATI 0x8967 -#endif -#ifndef GL_MAD_ATI -#define GL_MAD_ATI 0x8968 -#endif -#ifndef GL_LERP_ATI -#define GL_LERP_ATI 0x8969 -#endif -#ifndef GL_CND_ATI -#define GL_CND_ATI 0x896A -#endif -#ifndef GL_CND0_ATI -#define GL_CND0_ATI 0x896B -#endif -#ifndef GL_DOT2_ADD_ATI -#define GL_DOT2_ADD_ATI 0x896C -#endif -#ifndef GL_SECONDARY_INTERPOLATOR_ATI -#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D -#endif -#ifndef GL_NUM_FRAGMENT_REGISTERS_ATI -#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E -#endif -#ifndef GL_NUM_FRAGMENT_CONSTANTS_ATI -#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F -#endif -#ifndef GL_NUM_PASSES_ATI -#define GL_NUM_PASSES_ATI 0x8970 -#endif -#ifndef GL_NUM_INSTRUCTIONS_PER_PASS_ATI -#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 -#endif -#ifndef GL_NUM_INSTRUCTIONS_TOTAL_ATI -#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 -#endif -#ifndef GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI -#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 -#endif -#ifndef GL_NUM_LOOPBACK_COMPONENTS_ATI -#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 -#endif -#ifndef GL_COLOR_ALPHA_PAIRING_ATI -#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 -#endif -#ifndef GL_SWIZZLE_STR_ATI -#define GL_SWIZZLE_STR_ATI 0x8976 -#endif -#ifndef GL_SWIZZLE_STQ_ATI -#define GL_SWIZZLE_STQ_ATI 0x8977 -#endif -#ifndef GL_SWIZZLE_STR_DR_ATI -#define GL_SWIZZLE_STR_DR_ATI 0x8978 -#endif -#ifndef GL_SWIZZLE_STQ_DQ_ATI -#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 -#endif -#ifndef GL_SWIZZLE_STRQ_ATI -#define GL_SWIZZLE_STRQ_ATI 0x897A -#endif -#ifndef GL_SWIZZLE_STRQ_DQ_ATI -#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B -#endif -#ifndef GL_RED_BIT_ATI -#define GL_RED_BIT_ATI 0x00000001 -#endif -#ifndef GL_GREEN_BIT_ATI -#define GL_GREEN_BIT_ATI 0x00000002 -#endif -#ifndef GL_BLUE_BIT_ATI -#define GL_BLUE_BIT_ATI 0x00000004 -#endif -#ifndef GL_2X_BIT_ATI -#define GL_2X_BIT_ATI 0x00000001 -#endif -#ifndef GL_4X_BIT_ATI -#define GL_4X_BIT_ATI 0x00000002 -#endif -#ifndef GL_8X_BIT_ATI -#define GL_8X_BIT_ATI 0x00000004 -#endif -#ifndef GL_HALF_BIT_ATI -#define GL_HALF_BIT_ATI 0x00000008 -#endif -#ifndef GL_QUARTER_BIT_ATI -#define GL_QUARTER_BIT_ATI 0x00000010 -#endif -#ifndef GL_EIGHTH_BIT_ATI -#define GL_EIGHTH_BIT_ATI 0x00000020 -#endif -#ifndef GL_SATURATE_BIT_ATI -#define GL_SATURATE_BIT_ATI 0x00000040 -#endif -#ifndef GL_2X_BIT_ATI -#define GL_2X_BIT_ATI 0x00000001 -#endif -#ifndef GL_COMP_BIT_ATI -#define GL_COMP_BIT_ATI 0x00000002 -#endif -#ifndef GL_NEGATE_BIT_ATI -#define GL_NEGATE_BIT_ATI 0x00000004 -#endif -#ifndef GL_BIAS_BIT_ATI -#define GL_BIAS_BIT_ATI 0x00000008 -#endif -#ifndef GL_PN_TRIANGLES_ATI -#define GL_PN_TRIANGLES_ATI 0x87F0 -#endif -#ifndef GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI -#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 -#endif -#ifndef GL_PN_TRIANGLES_POINT_MODE_ATI -#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 -#endif -#ifndef GL_PN_TRIANGLES_NORMAL_MODE_ATI -#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 -#endif -#ifndef GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI -#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 -#endif -#ifndef GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI -#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 -#endif -#ifndef GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI -#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 -#endif -#ifndef GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI -#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 -#endif -#ifndef GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI -#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 -#endif -#ifndef GL_STATIC_ATI -#define GL_STATIC_ATI 0x8760 -#endif -#ifndef GL_DYNAMIC_ATI -#define GL_DYNAMIC_ATI 0x8761 -#endif -#ifndef GL_PRESERVE_ATI -#define GL_PRESERVE_ATI 0x8762 -#endif -#ifndef GL_DISCARD_ATI -#define GL_DISCARD_ATI 0x8763 -#endif -#ifndef GL_OBJECT_BUFFER_SIZE_ATI -#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 -#endif -#ifndef GL_OBJECT_BUFFER_USAGE_ATI -#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 -#endif -#ifndef GL_ARRAY_OBJECT_BUFFER_ATI -#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 -#endif -#ifndef GL_ARRAY_OBJECT_OFFSET_ATI -#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 -#endif -#ifndef GL_VERTEX_SHADER_EXT -#define GL_VERTEX_SHADER_EXT 0x8780 -#endif -#ifndef GL_VERTEX_SHADER_BINDING_EXT -#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 -#endif -#ifndef GL_OP_INDEX_EXT -#define GL_OP_INDEX_EXT 0x8782 -#endif -#ifndef GL_OP_NEGATE_EXT -#define GL_OP_NEGATE_EXT 0x8783 -#endif -#ifndef GL_OP_DOT3_EXT -#define GL_OP_DOT3_EXT 0x8784 -#endif -#ifndef GL_OP_DOT4_EXT -#define GL_OP_DOT4_EXT 0x8785 -#endif -#ifndef GL_OP_MUL_EXT -#define GL_OP_MUL_EXT 0x8786 -#endif -#ifndef GL_OP_ADD_EXT -#define GL_OP_ADD_EXT 0x8787 -#endif -#ifndef GL_OP_MADD_EXT -#define GL_OP_MADD_EXT 0x8788 -#endif -#ifndef GL_OP_FRAC_EXT -#define GL_OP_FRAC_EXT 0x8789 -#endif -#ifndef GL_OP_MAX_EXT -#define GL_OP_MAX_EXT 0x878A -#endif -#ifndef GL_OP_MIN_EXT -#define GL_OP_MIN_EXT 0x878B -#endif -#ifndef GL_OP_SET_GE_EXT -#define GL_OP_SET_GE_EXT 0x878C -#endif -#ifndef GL_OP_SET_LT_EXT -#define GL_OP_SET_LT_EXT 0x878D -#endif -#ifndef GL_OP_CLAMP_EXT -#define GL_OP_CLAMP_EXT 0x878E -#endif -#ifndef GL_OP_FLOOR_EXT -#define GL_OP_FLOOR_EXT 0x878F -#endif -#ifndef GL_OP_ROUND_EXT -#define GL_OP_ROUND_EXT 0x8790 -#endif -#ifndef GL_OP_EXP_BASE_2_EXT -#define GL_OP_EXP_BASE_2_EXT 0x8791 -#endif -#ifndef GL_OP_LOG_BASE_2_EXT -#define GL_OP_LOG_BASE_2_EXT 0x8792 -#endif -#ifndef GL_OP_POWER_EXT -#define GL_OP_POWER_EXT 0x8793 -#endif -#ifndef GL_OP_RECIP_EXT -#define GL_OP_RECIP_EXT 0x8794 -#endif -#ifndef GL_OP_RECIP_SQRT_EXT -#define GL_OP_RECIP_SQRT_EXT 0x8795 -#endif -#ifndef GL_OP_SUB_EXT -#define GL_OP_SUB_EXT 0x8796 -#endif -#ifndef GL_OP_CROSS_PRODUCT_EXT -#define GL_OP_CROSS_PRODUCT_EXT 0x8797 -#endif -#ifndef GL_OP_MULTIPLY_MATRIX_EXT -#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 -#endif -#ifndef GL_OP_MOV_EXT -#define GL_OP_MOV_EXT 0x8799 -#endif -#ifndef GL_OUTPUT_VERTEX_EXT -#define GL_OUTPUT_VERTEX_EXT 0x879A -#endif -#ifndef GL_OUTPUT_COLOR0_EXT -#define GL_OUTPUT_COLOR0_EXT 0x879B -#endif -#ifndef GL_OUTPUT_COLOR1_EXT -#define GL_OUTPUT_COLOR1_EXT 0x879C -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD0_EXT -#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD1_EXT -#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD2_EXT -#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD3_EXT -#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD4_EXT -#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD5_EXT -#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD6_EXT -#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD7_EXT -#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD8_EXT -#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD9_EXT -#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD10_EXT -#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD11_EXT -#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD12_EXT -#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD13_EXT -#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD14_EXT -#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD15_EXT -#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD16_EXT -#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD17_EXT -#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD18_EXT -#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD19_EXT -#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD20_EXT -#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD21_EXT -#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD22_EXT -#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD23_EXT -#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD24_EXT -#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD25_EXT -#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD26_EXT -#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD27_EXT -#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD28_EXT -#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD29_EXT -#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD30_EXT -#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB -#endif -#ifndef GL_OUTPUT_TEXTURE_COORD31_EXT -#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC -#endif -#ifndef GL_OUTPUT_FOG_EXT -#define GL_OUTPUT_FOG_EXT 0x87BD -#endif -#ifndef GL_SCALAR_EXT -#define GL_SCALAR_EXT 0x87BE -#endif -#ifndef GL_VECTOR_EXT -#define GL_VECTOR_EXT 0x87BF -#endif -#ifndef GL_MATRIX_EXT -#define GL_MATRIX_EXT 0x87C0 -#endif -#ifndef GL_VARIANT_EXT -#define GL_VARIANT_EXT 0x87C1 -#endif -#ifndef GL_INVARIANT_EXT -#define GL_INVARIANT_EXT 0x87C2 -#endif -#ifndef GL_LOCAL_CONSTANT_EXT -#define GL_LOCAL_CONSTANT_EXT 0x87C3 -#endif -#ifndef GL_LOCAL_EXT -#define GL_LOCAL_EXT 0x87C4 -#endif -#ifndef GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT -#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 -#endif -#ifndef GL_MAX_VERTEX_SHADER_VARIANTS_EXT -#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 -#endif -#ifndef GL_MAX_VERTEX_SHADER_INVARIANTS_EXT -#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 -#endif -#ifndef GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT -#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 -#endif -#ifndef GL_MAX_VERTEX_SHADER_LOCALS_EXT -#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 -#endif -#ifndef GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA -#endif -#ifndef GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB -#endif -#ifndef GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC -#endif -#ifndef GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD -#endif -#ifndef GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE -#endif -#ifndef GL_VERTEX_SHADER_INSTRUCTIONS_EXT -#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF -#endif -#ifndef GL_VERTEX_SHADER_VARIANTS_EXT -#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 -#endif -#ifndef GL_VERTEX_SHADER_INVARIANTS_EXT -#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 -#endif -#ifndef GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT -#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 -#endif -#ifndef GL_VERTEX_SHADER_LOCALS_EXT -#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 -#endif -#ifndef GL_VERTEX_SHADER_OPTIMIZED_EXT -#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 -#endif -#ifndef GL_X_EXT -#define GL_X_EXT 0x87D5 -#endif -#ifndef GL_Y_EXT -#define GL_Y_EXT 0x87D6 -#endif -#ifndef GL_Z_EXT -#define GL_Z_EXT 0x87D7 -#endif -#ifndef GL_W_EXT -#define GL_W_EXT 0x87D8 -#endif -#ifndef GL_NEGATIVE_X_EXT -#define GL_NEGATIVE_X_EXT 0x87D9 -#endif -#ifndef GL_NEGATIVE_Y_EXT -#define GL_NEGATIVE_Y_EXT 0x87DA -#endif -#ifndef GL_NEGATIVE_Z_EXT -#define GL_NEGATIVE_Z_EXT 0x87DB -#endif -#ifndef GL_NEGATIVE_W_EXT -#define GL_NEGATIVE_W_EXT 0x87DC -#endif -#ifndef GL_ZERO_EXT -#define GL_ZERO_EXT 0x87DD -#endif -#ifndef GL_ONE_EXT -#define GL_ONE_EXT 0x87DE -#endif -#ifndef GL_NEGATIVE_ONE_EXT -#define GL_NEGATIVE_ONE_EXT 0x87DF -#endif -#ifndef GL_NORMALIZED_RANGE_EXT -#define GL_NORMALIZED_RANGE_EXT 0x87E0 -#endif -#ifndef GL_FULL_RANGE_EXT -#define GL_FULL_RANGE_EXT 0x87E1 -#endif -#ifndef GL_CURRENT_VERTEX_EXT -#define GL_CURRENT_VERTEX_EXT 0x87E2 -#endif -#ifndef GL_MVP_MATRIX_EXT -#define GL_MVP_MATRIX_EXT 0x87E3 -#endif -#ifndef GL_VARIANT_VALUE_EXT -#define GL_VARIANT_VALUE_EXT 0x87E4 -#endif -#ifndef GL_VARIANT_DATATYPE_EXT -#define GL_VARIANT_DATATYPE_EXT 0x87E5 -#endif -#ifndef GL_VARIANT_ARRAY_STRIDE_EXT -#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 -#endif -#ifndef GL_VARIANT_ARRAY_TYPE_EXT -#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 -#endif -#ifndef GL_VARIANT_ARRAY_EXT -#define GL_VARIANT_ARRAY_EXT 0x87E8 -#endif -#ifndef GL_VARIANT_ARRAY_POINTER_EXT -#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 -#endif -#ifndef GL_INVARIANT_VALUE_EXT -#define GL_INVARIANT_VALUE_EXT 0x87EA -#endif -#ifndef GL_INVARIANT_DATATYPE_EXT -#define GL_INVARIANT_DATATYPE_EXT 0x87EB -#endif -#ifndef GL_LOCAL_CONSTANT_VALUE_EXT -#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC -#endif -#ifndef GL_LOCAL_CONSTANT_DATATYPE_EXT -#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED -#endif -#ifndef GL_MAX_VERTEX_STREAMS_ATI -#define GL_MAX_VERTEX_STREAMS_ATI 0x876B -#endif -#ifndef GL_VERTEX_STREAM0_ATI -#define GL_VERTEX_STREAM0_ATI 0x876C -#endif -#ifndef GL_VERTEX_STREAM1_ATI -#define GL_VERTEX_STREAM1_ATI 0x876D -#endif -#ifndef GL_VERTEX_STREAM2_ATI -#define GL_VERTEX_STREAM2_ATI 0x876E -#endif -#ifndef GL_VERTEX_STREAM3_ATI -#define GL_VERTEX_STREAM3_ATI 0x876F -#endif -#ifndef GL_VERTEX_STREAM4_ATI -#define GL_VERTEX_STREAM4_ATI 0x8770 -#endif -#ifndef GL_VERTEX_STREAM5_ATI -#define GL_VERTEX_STREAM5_ATI 0x8771 -#endif -#ifndef GL_VERTEX_STREAM6_ATI -#define GL_VERTEX_STREAM6_ATI 0x8772 -#endif -#ifndef GL_VERTEX_STREAM7_ATI -#define GL_VERTEX_STREAM7_ATI 0x8773 -#endif -#ifndef GL_VERTEX_SOURCE_ATI -#define GL_VERTEX_SOURCE_ATI 0x8774 -#endif -#ifndef GL_ELEMENT_ARRAY_ATI -#define GL_ELEMENT_ARRAY_ATI 0x8768 -#endif -#ifndef GL_ELEMENT_ARRAY_TYPE_ATI -#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 -#endif -#ifndef GL_ELEMENT_ARRAY_POINTER_ATI -#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A -#endif -#ifndef GL_QUAD_MESH_SUN -#define GL_QUAD_MESH_SUN 0x8614 -#endif -#ifndef GL_TRIANGLE_MESH_SUN -#define GL_TRIANGLE_MESH_SUN 0x8615 -#endif -#ifndef GL_SLICE_ACCUM_SUN -#define GL_SLICE_ACCUM_SUN 0x85CC -#endif -#ifndef GL_MULTISAMPLE_FILTER_HINT_NV -#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 -#endif -#ifndef GL_DEPTH_CLAMP_NV -#define GL_DEPTH_CLAMP_NV 0x864F -#endif -#ifndef GL_PIXEL_COUNTER_BITS_NV -#define GL_PIXEL_COUNTER_BITS_NV 0x8864 -#endif -#ifndef GL_CURRENT_OCCLUSION_QUERY_ID_NV -#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 -#endif -#ifndef GL_PIXEL_COUNT_NV -#define GL_PIXEL_COUNT_NV 0x8866 -#endif -#ifndef GL_PIXEL_COUNT_AVAILABLE_NV -#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 -#endif -#ifndef GL_POINT_SPRITE_NV -#define GL_POINT_SPRITE_NV 0x8861 -#endif -#ifndef GL_COORD_REPLACE_NV -#define GL_COORD_REPLACE_NV 0x8862 -#endif -#ifndef GL_POINT_SPRITE_R_MODE_NV -#define GL_POINT_SPRITE_R_MODE_NV 0x8863 -#endif -#ifndef GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 -#endif -#ifndef GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 -#endif -#ifndef GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 -#endif -#ifndef GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 -#endif -#ifndef GL_OFFSET_HILO_TEXTURE_2D_NV -#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 -#endif -#ifndef GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV -#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 -#endif -#ifndef GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 -#endif -#ifndef GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 -#endif -#ifndef GL_DEPENDENT_HILO_TEXTURE_2D_NV -#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 -#endif -#ifndef GL_DEPENDENT_RGB_TEXTURE_3D_NV -#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 -#endif -#ifndef GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV -#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A -#endif -#ifndef GL_DOT_PRODUCT_PASS_THROUGH_NV -#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B -#endif -#ifndef GL_DOT_PRODUCT_TEXTURE_1D_NV -#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C -#endif -#ifndef GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV -#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D -#endif -#ifndef GL_HILO8_NV -#define GL_HILO8_NV 0x885E -#endif -#ifndef GL_SIGNED_HILO8_NV -#define GL_SIGNED_HILO8_NV 0x885F -#endif -#ifndef GL_FORCE_BLUE_TO_ONE_NV -#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 -#endif -#ifndef GL_STENCIL_TEST_TWO_SIDE_EXT -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#endif -#ifndef GL_ACTIVE_STENCIL_FACE_EXT -#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 -#endif -#ifndef GL_TEXT_FRAGMENT_SHADER_ATI -#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 -#endif -#ifndef GL_UNPACK_CLIENT_STORAGE_APPLE -#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 -#endif -#ifndef GL_ELEMENT_ARRAY_APPLE -#define GL_ELEMENT_ARRAY_APPLE 0x8768 -#endif -#ifndef GL_ELEMENT_ARRAY_TYPE_APPLE -#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8769 -#endif -#ifndef GL_ELEMENT_ARRAY_POINTER_APPLE -#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x876A -#endif -#ifndef GL_DRAW_PIXELS_APPLE -#define GL_DRAW_PIXELS_APPLE 0x8A0A -#endif -#ifndef GL_FENCE_APPLE -#define GL_FENCE_APPLE 0x8A0B -#endif -#ifndef GL_VERTEX_ARRAY_BINDING_APPLE -#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 -#endif -#ifndef GL_VERTEX_ARRAY_RANGE_APPLE -#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D -#endif -#ifndef GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE -#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E -#endif -#ifndef GL_VERTEX_ARRAY_STORAGE_HINT_APPLE -#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F -#endif -#ifndef GL_VERTEX_ARRAY_RANGE_POINTER_APPLE -#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 -#endif -#ifndef GL_STORAGE_CACHED_APPLE -#define GL_STORAGE_CACHED_APPLE 0x85BE -#endif -#ifndef GL_STORAGE_SHARED_APPLE -#define GL_STORAGE_SHARED_APPLE 0x85BF -#endif -#ifndef GL_YCBCR_422_APPLE -#define GL_YCBCR_422_APPLE 0x85B9 -#endif -#ifndef GL_UNSIGNED_SHORT_8_8_APPLE -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#endif -#ifndef GL_UNSIGNED_SHORT_8_8_REV_APPLE -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#endif -#ifndef GL_RGB_S3TC -#define GL_RGB_S3TC 0x83A0 -#endif -#ifndef GL_RGB4_S3TC -#define GL_RGB4_S3TC 0x83A1 -#endif -#ifndef GL_RGBA_S3TC -#define GL_RGBA_S3TC 0x83A2 -#endif -#ifndef GL_RGBA4_S3TC -#define GL_RGBA4_S3TC 0x83A3 -#endif -#ifndef GL_MAX_DRAW_BUFFERS_ATI -#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 -#endif -#ifndef GL_DRAW_BUFFER0_ATI -#define GL_DRAW_BUFFER0_ATI 0x8825 -#endif -#ifndef GL_DRAW_BUFFER1_ATI -#define GL_DRAW_BUFFER1_ATI 0x8826 -#endif -#ifndef GL_DRAW_BUFFER2_ATI -#define GL_DRAW_BUFFER2_ATI 0x8827 -#endif -#ifndef GL_DRAW_BUFFER3_ATI -#define GL_DRAW_BUFFER3_ATI 0x8828 -#endif -#ifndef GL_DRAW_BUFFER4_ATI -#define GL_DRAW_BUFFER4_ATI 0x8829 -#endif -#ifndef GL_DRAW_BUFFER5_ATI -#define GL_DRAW_BUFFER5_ATI 0x882A -#endif -#ifndef GL_DRAW_BUFFER6_ATI -#define GL_DRAW_BUFFER6_ATI 0x882B -#endif -#ifndef GL_DRAW_BUFFER7_ATI -#define GL_DRAW_BUFFER7_ATI 0x882C -#endif -#ifndef GL_DRAW_BUFFER8_ATI -#define GL_DRAW_BUFFER8_ATI 0x882D -#endif -#ifndef GL_DRAW_BUFFER9_ATI -#define GL_DRAW_BUFFER9_ATI 0x882E -#endif -#ifndef GL_DRAW_BUFFER10_ATI -#define GL_DRAW_BUFFER10_ATI 0x882F -#endif -#ifndef GL_DRAW_BUFFER11_ATI -#define GL_DRAW_BUFFER11_ATI 0x8830 -#endif -#ifndef GL_DRAW_BUFFER12_ATI -#define GL_DRAW_BUFFER12_ATI 0x8831 -#endif -#ifndef GL_DRAW_BUFFER13_ATI -#define GL_DRAW_BUFFER13_ATI 0x8832 -#endif -#ifndef GL_DRAW_BUFFER14_ATI -#define GL_DRAW_BUFFER14_ATI 0x8833 -#endif -#ifndef GL_DRAW_BUFFER15_ATI -#define GL_DRAW_BUFFER15_ATI 0x8834 -#endif -#ifndef GL_TYPE_RGBA_FLOAT_ATI -#define GL_TYPE_RGBA_FLOAT_ATI 0x8820 -#endif -#ifndef GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI -#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 -#endif -#ifndef GL_MODULATE_ADD_ATI -#define GL_MODULATE_ADD_ATI 0x8744 -#endif -#ifndef GL_MODULATE_SIGNED_ADD_ATI -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#endif -#ifndef GL_MODULATE_SUBTRACT_ATI -#define GL_MODULATE_SUBTRACT_ATI 0x8746 -#endif -#ifndef GL_RGBA_FLOAT32_ATI -#define GL_RGBA_FLOAT32_ATI 0x8814 -#endif -#ifndef GL_RGB_FLOAT32_ATI -#define GL_RGB_FLOAT32_ATI 0x8815 -#endif -#ifndef GL_ALPHA_FLOAT32_ATI -#define GL_ALPHA_FLOAT32_ATI 0x8816 -#endif -#ifndef GL_INTENSITY_FLOAT32_ATI -#define GL_INTENSITY_FLOAT32_ATI 0x8817 -#endif -#ifndef GL_LUMINANCE_FLOAT32_ATI -#define GL_LUMINANCE_FLOAT32_ATI 0x8818 -#endif -#ifndef GL_LUMINANCE_ALPHA_FLOAT32_ATI -#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 -#endif -#ifndef GL_RGBA_FLOAT16_ATI -#define GL_RGBA_FLOAT16_ATI 0x881A -#endif -#ifndef GL_RGB_FLOAT16_ATI -#define GL_RGB_FLOAT16_ATI 0x881B -#endif -#ifndef GL_ALPHA_FLOAT16_ATI -#define GL_ALPHA_FLOAT16_ATI 0x881C -#endif -#ifndef GL_INTENSITY_FLOAT16_ATI -#define GL_INTENSITY_FLOAT16_ATI 0x881D -#endif -#ifndef GL_LUMINANCE_FLOAT16_ATI -#define GL_LUMINANCE_FLOAT16_ATI 0x881E -#endif -#ifndef GL_LUMINANCE_ALPHA_FLOAT16_ATI -#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F -#endif -#ifndef GL_FLOAT_R_NV -#define GL_FLOAT_R_NV 0x8880 -#endif -#ifndef GL_FLOAT_RG_NV -#define GL_FLOAT_RG_NV 0x8881 -#endif -#ifndef GL_FLOAT_RGB_NV -#define GL_FLOAT_RGB_NV 0x8882 -#endif -#ifndef GL_FLOAT_RGBA_NV -#define GL_FLOAT_RGBA_NV 0x8883 -#endif -#ifndef GL_FLOAT_R16_NV -#define GL_FLOAT_R16_NV 0x8884 -#endif -#ifndef GL_FLOAT_R32_NV -#define GL_FLOAT_R32_NV 0x8885 -#endif -#ifndef GL_FLOAT_RG16_NV -#define GL_FLOAT_RG16_NV 0x8886 -#endif -#ifndef GL_FLOAT_RG32_NV -#define GL_FLOAT_RG32_NV 0x8887 -#endif -#ifndef GL_FLOAT_RGB16_NV -#define GL_FLOAT_RGB16_NV 0x8888 -#endif -#ifndef GL_FLOAT_RGB32_NV -#define GL_FLOAT_RGB32_NV 0x8889 -#endif -#ifndef GL_FLOAT_RGBA16_NV -#define GL_FLOAT_RGBA16_NV 0x888A -#endif -#ifndef GL_FLOAT_RGBA32_NV -#define GL_FLOAT_RGBA32_NV 0x888B -#endif -#ifndef GL_TEXTURE_FLOAT_COMPONENTS_NV -#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C -#endif -#ifndef GL_FLOAT_CLEAR_COLOR_VALUE_NV -#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D -#endif -#ifndef GL_FLOAT_RGBA_MODE_NV -#define GL_FLOAT_RGBA_MODE_NV 0x888E -#endif -#ifndef GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV -#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 -#endif -#ifndef GL_FRAGMENT_PROGRAM_NV -#define GL_FRAGMENT_PROGRAM_NV 0x8870 -#endif -#ifndef GL_MAX_TEXTURE_COORDS_NV -#define GL_MAX_TEXTURE_COORDS_NV 0x8871 -#endif -#ifndef GL_MAX_TEXTURE_IMAGE_UNITS_NV -#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 -#endif -#ifndef GL_FRAGMENT_PROGRAM_BINDING_NV -#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 -#endif -#ifndef GL_PROGRAM_ERROR_STRING_NV -#define GL_PROGRAM_ERROR_STRING_NV 0x8874 -#endif -#ifndef GL_HALF_FLOAT_NV -#define GL_HALF_FLOAT_NV 0x140B -#endif -#ifndef GL_WRITE_PIXEL_DATA_RANGE_NV -#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 -#endif -#ifndef GL_READ_PIXEL_DATA_RANGE_NV -#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 -#endif -#ifndef GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV -#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A -#endif -#ifndef GL_READ_PIXEL_DATA_RANGE_LENGTH_NV -#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B -#endif -#ifndef GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV -#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C -#endif -#ifndef GL_READ_PIXEL_DATA_RANGE_POINTER_NV -#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D -#endif -#ifndef GL_PRIMITIVE_RESTART_NV -#define GL_PRIMITIVE_RESTART_NV 0x8558 -#endif -#ifndef GL_PRIMITIVE_RESTART_INDEX_NV -#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 -#endif -#ifndef GL_TEXTURE_UNSIGNED_REMAP_MODE_NV -#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F -#endif -#ifndef GL_STENCIL_BACK_FUNC_ATI -#define GL_STENCIL_BACK_FUNC_ATI 0x8800 -#endif -#ifndef GL_STENCIL_BACK_FAIL_ATI -#define GL_STENCIL_BACK_FAIL_ATI 0x8801 -#endif -#ifndef GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 -#endif -#ifndef GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI -#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 -#endif -#ifndef GL_IMPLEMENTATION_COLOR_READ_TYPE_OES -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#endif -#ifndef GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B -#endif -#ifndef GL_DEPTH_BOUNDS_TEST_EXT -#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 -#endif -#ifndef GL_DEPTH_BOUNDS_EXT -#define GL_DEPTH_BOUNDS_EXT 0x8891 -#endif -#ifndef GL_MIRROR_CLAMP_EXT -#define GL_MIRROR_CLAMP_EXT 0x8742 -#endif -#ifndef GL_MIRROR_CLAMP_TO_EDGE_EXT -#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 -#endif -#ifndef GL_MIRROR_CLAMP_TO_BORDER_EXT -#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 -#endif -#ifndef GL_BLEND_EQUATION_RGB_EXT -#define GL_BLEND_EQUATION_RGB_EXT GL_BLEND_EQUATION -#endif -#ifndef GL_BLEND_EQUATION_ALPHA_EXT -#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D -#endif -#ifndef GL_PACK_INVERT_MESA -#define GL_PACK_INVERT_MESA 0x8758 -#endif -#ifndef GL_UNSIGNED_SHORT_8_8_MESA -#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA -#endif -#ifndef GL_UNSIGNED_SHORT_8_8_REV_MESA -#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB -#endif -#ifndef GL_YCBCR_MESA -#define GL_YCBCR_MESA 0x8757 -#endif -#ifndef GL_PIXEL_PACK_BUFFER_EXT -#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB -#endif -#ifndef GL_PIXEL_UNPACK_BUFFER_EXT -#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC -#endif -#ifndef GL_PIXEL_PACK_BUFFER_BINDING_EXT -#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED -#endif -#ifndef GL_PIXEL_UNPACK_BUFFER_BINDING_EXT -#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF -#endif -#ifndef GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV -#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 -#endif -#ifndef GL_MAX_PROGRAM_CALL_DEPTH_NV -#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 -#endif -#ifndef GL_MAX_PROGRAM_IF_DEPTH_NV -#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 -#endif -#ifndef GL_MAX_PROGRAM_LOOP_DEPTH_NV -#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 -#endif -#ifndef GL_MAX_PROGRAM_LOOP_COUNT_NV -#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 -#endif -#ifndef GL_INVALID_FRAMEBUFFER_OPERATION_EXT -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#endif -#ifndef GL_MAX_RENDERBUFFER_SIZE_EXT -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 -#endif -#ifndef GL_FRAMEBUFFER_BINDING_EXT -#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#endif -#ifndef GL_RENDERBUFFER_BINDING_EXT -#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 -#endif -#ifndef GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 -#endif -#ifndef GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 -#endif -#ifndef GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 -#endif -#ifndef GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 -#endif -#ifndef GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 -#endif -#ifndef GL_FRAMEBUFFER_COMPLETE_EXT -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 -#endif -#ifndef GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 -#endif -#ifndef GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 -#endif -#ifndef GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 -#endif -#ifndef GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA -#endif -#ifndef GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB -#endif -#ifndef GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC -#endif -#ifndef GL_FRAMEBUFFER_UNSUPPORTED_EXT -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD -#endif -#ifndef GL_MAX_COLOR_ATTACHMENTS_EXT -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#endif -#ifndef GL_COLOR_ATTACHMENT0_EXT -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#endif -#ifndef GL_COLOR_ATTACHMENT1_EXT -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#endif -#ifndef GL_COLOR_ATTACHMENT2_EXT -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#endif -#ifndef GL_COLOR_ATTACHMENT3_EXT -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#endif -#ifndef GL_COLOR_ATTACHMENT4_EXT -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#endif -#ifndef GL_COLOR_ATTACHMENT5_EXT -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#endif -#ifndef GL_COLOR_ATTACHMENT6_EXT -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#endif -#ifndef GL_COLOR_ATTACHMENT7_EXT -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#endif -#ifndef GL_COLOR_ATTACHMENT8_EXT -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#endif -#ifndef GL_COLOR_ATTACHMENT9_EXT -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#endif -#ifndef GL_COLOR_ATTACHMENT10_EXT -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#endif -#ifndef GL_COLOR_ATTACHMENT11_EXT -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#endif -#ifndef GL_COLOR_ATTACHMENT12_EXT -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#endif -#ifndef GL_COLOR_ATTACHMENT13_EXT -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#endif -#ifndef GL_COLOR_ATTACHMENT14_EXT -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#endif -#ifndef GL_COLOR_ATTACHMENT15_EXT -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#endif -#ifndef GL_DEPTH_ATTACHMENT_EXT -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#endif -#ifndef GL_STENCIL_ATTACHMENT_EXT -#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 -#endif -#ifndef GL_FRAMEBUFFER_EXT -#define GL_FRAMEBUFFER_EXT 0x8D40 -#endif -#ifndef GL_RENDERBUFFER_EXT -#define GL_RENDERBUFFER_EXT 0x8D41 -#endif -#ifndef GL_RENDERBUFFER_WIDTH_EXT -#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 -#endif -#ifndef GL_RENDERBUFFER_HEIGHT_EXT -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 -#endif -#ifndef GL_RENDERBUFFER_INTERNAL_FORMAT_EXT -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 -#endif -#ifndef GL_STENCIL_INDEX1_EXT -#define GL_STENCIL_INDEX1_EXT 0x8D46 -#endif -#ifndef GL_STENCIL_INDEX4_EXT -#define GL_STENCIL_INDEX4_EXT 0x8D47 -#endif -#ifndef GL_STENCIL_INDEX8_EXT -#define GL_STENCIL_INDEX8_EXT 0x8D48 -#endif -#ifndef GL_STENCIL_INDEX16_EXT -#define GL_STENCIL_INDEX16_EXT 0x8D49 -#endif -#ifndef GL_RENDERBUFFER_RED_SIZE_EXT -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 -#endif -#ifndef GL_RENDERBUFFER_GREEN_SIZE_EXT -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 -#endif -#ifndef GL_RENDERBUFFER_BLUE_SIZE_EXT -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 -#endif -#ifndef GL_RENDERBUFFER_ALPHA_SIZE_EXT -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 -#endif -#ifndef GL_RENDERBUFFER_DEPTH_SIZE_EXT -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 -#endif -#ifndef GL_RENDERBUFFER_STENCIL_SIZE_EXT -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 -#endif -#ifndef GL_DEPTH_STENCIL_EXT -#define GL_DEPTH_STENCIL_EXT 0x84F9 -#endif -#ifndef GL_UNSIGNED_INT_24_8_EXT -#define GL_UNSIGNED_INT_24_8_EXT 0x84FA -#endif -#ifndef GL_DEPTH24_STENCIL8_EXT -#define GL_DEPTH24_STENCIL8_EXT 0x88F0 -#endif -#ifndef GL_TEXTURE_STENCIL_SIZE_EXT -#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 -#endif -#ifndef GL_STENCIL_TAG_BITS_EXT -#define GL_STENCIL_TAG_BITS_EXT 0x88F2 -#endif -#ifndef GL_STENCIL_CLEAR_TAG_VALUE_EXT -#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 -#endif -#ifndef GL_SRGB_EXT -#define GL_SRGB_EXT 0x8C40 -#endif -#ifndef GL_SRGB8_EXT -#define GL_SRGB8_EXT 0x8C41 -#endif -#ifndef GL_SRGB_ALPHA_EXT -#define GL_SRGB_ALPHA_EXT 0x8C42 -#endif -#ifndef GL_SRGB8_ALPHA8_EXT -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#endif -#ifndef GL_SLUMINANCE_ALPHA_EXT -#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 -#endif -#ifndef GL_SLUMINANCE8_ALPHA8_EXT -#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 -#endif -#ifndef GL_SLUMINANCE_EXT -#define GL_SLUMINANCE_EXT 0x8C46 -#endif -#ifndef GL_SLUMINANCE8_EXT -#define GL_SLUMINANCE8_EXT 0x8C47 -#endif -#ifndef GL_COMPRESSED_SRGB_EXT -#define GL_COMPRESSED_SRGB_EXT 0x8C48 -#endif -#ifndef GL_COMPRESSED_SRGB_ALPHA_EXT -#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 -#endif -#ifndef GL_COMPRESSED_SLUMINANCE_EXT -#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A -#endif -#ifndef GL_COMPRESSED_SLUMINANCE_ALPHA_EXT -#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B -#endif -#ifndef GL_COMPRESSED_SRGB_S3TC_DXT1_EXT -#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C -#endif -#ifndef GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D -#endif -#ifndef GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E -#endif -#ifndef GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F -#endif -#ifndef GL_READ_FRAMEBUFFER_EXT -#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 -#endif -#ifndef GL_DRAW_FRAMEBUFFER_EXT -#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 -#endif -#ifndef GL_READ_FRAMEBUFFER_BINDING_EXT -#define GL_READ_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING_EXT -#endif -#ifndef GL_DRAW_FRAMEBUFFER_BINDING_EXT -#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CAA -#endif -#ifndef GL_RENDERBUFFER_SAMPLES_EXT -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#endif -#ifndef GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#endif -#ifndef GL_MAX_SAMPLES_EXT -#define GL_MAX_SAMPLES_EXT 0x8D57 -#endif -#ifndef GL_TEXTURE_1D_STACK_MESAX -#define GL_TEXTURE_1D_STACK_MESAX 0x8759 -#endif -#ifndef GL_TEXTURE_2D_STACK_MESAX -#define GL_TEXTURE_2D_STACK_MESAX 0x875A -#endif -#ifndef GL_PROXY_TEXTURE_1D_STACK_MESAX -#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B -#endif -#ifndef GL_PROXY_TEXTURE_2D_STACK_MESAX -#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C -#endif -#ifndef GL_TEXTURE_1D_STACK_BINDING_MESAX -#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D -#endif -#ifndef GL_TEXTURE_2D_STACK_BINDING_MESAX -#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E -#endif -#ifndef GL_TIME_ELAPSED_EXT -#define GL_TIME_ELAPSED_EXT 0x88BF -#endif -#ifndef GL_BUFFER_SERIALIZED_MODIFY_APPLE -#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 -#endif -#ifndef GL_BUFFER_FLUSHING_UNMAP_APPLE -#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 -#endif -#ifndef GL_ALL_CLIENT_ATTRIB_BITS -#define GL_ALL_CLIENT_ATTRIB_BITS GL_CLIENT_ALL_ATTRIB_BITS -#endif - - -#endif /* _GLENUMS_H */ - diff --git a/ruby/RubyOpenGL/gl/extconf.rb b/ruby/RubyOpenGL/gl/extconf.rb deleted file mode 100644 index 43802872..00000000 --- a/ruby/RubyOpenGL/gl/extconf.rb +++ /dev/null @@ -1,20 +0,0 @@ -require "mkmf" -$CFLAGS = "/MD /O2 /EHsc /DWIN32 /DNDEBUG /D_WINDOWS" -#$CFLAGS = "/MD /Zi /EHsc /DWIN32 /DNDEBUG /D_WINDOWS" -#$LDFLAGS = "/Zi" - -libs = [ - "opengl32", - "glu32", -] - -libs.each {|lib| - unless have_library(lib) - puts "Unable to find #{lib}.lib!" - puts - exit - end -} - -create_makefile("gl") - diff --git a/ruby/RubyOpenGL/gl/gl-1.0-1.1.c b/ruby/RubyOpenGL/gl/gl-1.0-1.1.c deleted file mode 100644 index 756ceaa0..00000000 --- a/ruby/RubyOpenGL/gl/gl-1.0-1.1.c +++ /dev/null @@ -1,5197 +0,0 @@ -/* - * Copyright (C) 1999 - 2005 Yoshi - * Copyright (C) 2006 John M. Gabriele - * - * This program is distributed under the terms of the MIT license. - * See the included MIT-LICENSE file for the terms of this license. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifdef __APPLE__ -#include -#elif defined WIN32 -#include -#include -#else -#include -#endif -#include "../common/common.h" - -#ifndef MAX -#define MAX(a, b) (((a) > (b)) ? (a) : (b)) -#endif - -/* OpenGL 1.0 + 1.1 functions */ - -static VALUE -gl_NewList(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint list; - GLenum mode; - list = (GLuint)NUM2UINT(arg1); - mode = (GLenum)NUM2INT(arg2); - glNewList(list,mode); - return Qnil; -} - -static VALUE -gl_EndList(obj) -VALUE obj; -{ - glEndList(); - return Qnil; -} - -static VALUE -gl_CallList(obj,arg1) -VALUE obj,arg1; -{ - GLuint list; - list = (GLuint)NUM2UINT(arg1); - glCallList(list); - return Qnil; -} - -static VALUE -gl_CallLists(obj,arg1) -VALUE obj,arg1; -{ - GLsizei n; - GLenum type; - GLvoid *lists; - if (TYPE(arg1) == T_STRING) { - type = GL_BYTE; - lists = RSTRING(arg1)->ptr; - n = RSTRING(arg1)->len; - } else if (TYPE(arg1) == T_ARRAY) { - type = GL_INT; - lists = ALLOC_N(GLint, RARRAY(arg1)->len); - n = ary2cint(arg1,lists,0); - } else { - Check_Type(arg1,T_ARRAY); /* force exception */ - return Qnil; /* not reached */ - } - glCallLists(n, type, lists); - if (type == GL_INT) xfree(lists); - return Qnil; -} - -static VALUE -gl_DeleteLists(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint list; - GLsizei range; - list = (GLuint)NUM2UINT(arg1); - range = (GLsizei)NUM2UINT(arg2); - glDeleteLists(list,range); - return Qnil; -} - -static VALUE -gl_GenLists(obj,arg1) -VALUE obj,arg1; -{ - GLsizei range; - GLuint ret; - range = (GLsizei)NUM2UINT(arg1); - ret = glGenLists(range); - return INT2NUM(ret); -} - -static VALUE -gl_ListBase(obj,arg1) -VALUE obj,arg1; -{ - GLuint base; - base = (GLuint)NUM2UINT(arg1); - glListBase(base); - return Qnil; -} - -static VALUE -gl_Begin(obj,arg1) -VALUE obj,arg1; -{ - GLenum mode; - mode = (GLenum)NUM2INT(arg1); - glBegin(mode); - return Qnil; -} - -static VALUE -gl_Bitmap(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7; -{ - GLsizei width; - GLsizei height; - GLfloat xorig; - GLfloat yorig; - GLfloat xmove; - GLfloat ymove; - width = (GLsizei)NUM2UINT(arg1); - height = (GLsizei)NUM2UINT(arg2); - xorig = (GLfloat)NUM2DBL(arg3); - yorig = (GLfloat)NUM2DBL(arg4); - xmove = (GLfloat)NUM2DBL(arg5); - ymove = (GLfloat)NUM2DBL(arg6); - if (TYPE(arg7) == T_FIXNUM || TYPE(arg7) == T_BIGNUM) { /* offset to unpack buffer */ - GLuint offset = NUM2UINT(arg7); - glBitmap(width, height, xorig, yorig, xmove, ymove, (GLvoid *)offset); - } else if (TYPE(arg7) == T_STRING) { - const GLubyte *bitmap; - if (RSTRING(arg7)->len < (width * height / 8)) - rb_raise(rb_eArgError, "string length:%d", RSTRING(arg7)->len); - - bitmap = (const GLubyte*)RSTRING(arg7)->ptr; - glBitmap(width, height, xorig, yorig, xmove, ymove, bitmap); - } else { - Check_Type(arg7,T_STRING); /* force exception */ - } - return Qnil; -} - -static VALUE -gl_Color3b(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLbyte red; - GLbyte green; - GLbyte blue; - red = (GLbyte)NUM2INT(arg1); - green = (GLbyte)NUM2INT(arg2); - blue = (GLbyte)NUM2INT(arg3); - glColor3b(red,green,blue); - return Qnil; -} - -static VALUE -gl_Color3d(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLdouble red; - GLdouble green; - GLdouble blue; - red = (GLdouble)NUM2DBL(arg1); - green = (GLdouble)NUM2DBL(arg2); - blue = (GLdouble)NUM2DBL(arg3); - glColor3d(red,green,blue); - return Qnil; -} - -static VALUE -gl_Color3f(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLfloat red; - GLfloat green; - GLfloat blue; - red = (GLfloat)NUM2DBL(arg1); - green = (GLfloat)NUM2DBL(arg2); - blue = (GLfloat)NUM2DBL(arg3); - glColor3f(red,green,blue); - return Qnil; -} - -static VALUE -gl_Color3i(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint red; - GLint green; - GLint blue; - red = (GLint)NUM2INT(arg1); - green = (GLint)NUM2INT(arg2); - blue = (GLint)NUM2INT(arg3); - glColor3i(red,green,blue); - return Qnil; -} - -static VALUE -gl_Color3s(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLshort red; - GLshort green; - GLshort blue; - red = (GLshort)NUM2INT(arg1); - green = (GLshort)NUM2INT(arg2); - blue = (GLshort)NUM2INT(arg3); - glColor3s(red,green,blue); - return Qnil; -} - -static VALUE -gl_Color3ub(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLubyte red; - GLubyte green; - GLubyte blue; - red = (GLubyte)NUM2INT(arg1); - green = (GLubyte)NUM2INT(arg2); - blue = (GLubyte)NUM2INT(arg3); - glColor3ub(red,green,blue); - return Qnil; -} - -static VALUE -gl_Color3ui(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLuint red; - GLuint green; - GLuint blue; - red = (GLuint)NUM2UINT(arg1); - green = (GLuint)NUM2UINT(arg2); - blue = (GLuint)NUM2UINT(arg3); - glColor3ui(red,green,blue); - return Qnil; -} - -static VALUE -gl_Color3us(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLushort red; - GLushort green; - GLushort blue; - red = (GLushort)NUM2INT(arg1); - green = (GLushort)NUM2INT(arg2); - blue = (GLushort)NUM2INT(arg3); - glColor3us(red,green,blue); - return Qnil; -} - -static VALUE -gl_Color4b(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLbyte red; - GLbyte green; - GLbyte blue; - GLbyte alpha; - red = (GLbyte)NUM2INT(arg1); - green = (GLbyte)NUM2INT(arg2); - blue = (GLbyte)NUM2INT(arg3); - alpha = (GLbyte)NUM2INT(arg4); - glColor4b(red,green,blue,alpha); - return Qnil; -} - -static VALUE -gl_Color4d(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLdouble red; - GLdouble green; - GLdouble blue; - GLdouble alpha; - red = (GLdouble)NUM2DBL(arg1); - green = (GLdouble)NUM2DBL(arg2); - blue = (GLdouble)NUM2DBL(arg3); - alpha = (GLdouble)NUM2DBL(arg4); - glColor4d(red,green,blue,alpha); - return Qnil; -} - -static VALUE -gl_Color4f(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLfloat red; - GLfloat green; - GLfloat blue; - GLfloat alpha; - red = (GLfloat)NUM2DBL(arg1); - green = (GLfloat)NUM2DBL(arg2); - blue = (GLfloat)NUM2DBL(arg3); - alpha = (GLfloat)NUM2DBL(arg4); - glColor4f(red,green,blue,alpha); - return Qnil; -} - -static VALUE -gl_Color4i(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint red; - GLint green; - GLint blue; - GLint alpha; - red = (GLint)NUM2INT(arg1); - green = (GLint)NUM2INT(arg2); - blue = (GLint)NUM2INT(arg3); - alpha = (GLint)NUM2INT(arg4); - glColor4i(red,green,blue,alpha); - return Qnil; -} - -static VALUE -gl_Color4s(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLshort red; - GLshort green; - GLshort blue; - GLshort alpha; - red = (GLshort)NUM2INT(arg1); - green = (GLshort)NUM2INT(arg2); - blue = (GLshort)NUM2INT(arg3); - alpha = (GLshort)NUM2INT(arg4); - glColor4s(red,green,blue,alpha); - return Qnil; -} - -static VALUE -gl_Color4ub(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLubyte red; - GLubyte green; - GLubyte blue; - GLubyte alpha; - red = (GLubyte)NUM2INT(arg1); - green = (GLubyte)NUM2INT(arg2); - blue = (GLubyte)NUM2INT(arg3); - alpha = (GLubyte)NUM2INT(arg4); - glColor4ub(red,green,blue,alpha); - return Qnil; -} - -static VALUE -gl_Color4ui(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLuint red; - GLuint green; - GLuint blue; - GLuint alpha; - red = (GLuint)NUM2UINT(arg1); - green = (GLuint)NUM2UINT(arg2); - blue = (GLuint)NUM2UINT(arg3); - alpha = (GLuint)NUM2UINT(arg4); - glColor4ui(red,green,blue,alpha); - return Qnil; -} - -static VALUE -gl_Color4us(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLushort red; - GLushort green; - GLushort blue; - GLushort alpha; - red = (GLushort)NUM2INT(arg1); - green = (GLushort)NUM2INT(arg2); - blue = (GLushort)NUM2INT(arg3); - alpha = (GLushort)NUM2INT(arg4); - glColor4us(red,green,blue,alpha); - return Qnil; -} - -static VALUE -gl_EdgeFlag(obj,arg1) -VALUE obj,arg1; -{ - GLboolean flag; - flag = (GLboolean)NUM2INT(arg1); - glEdgeFlag(flag); - return Qnil; -} - -static VALUE -gl_EdgeFlagv(obj,arg1) -VALUE obj,arg1; -{ - GLboolean flag[1] = { GL_FALSE }; - Check_Type(arg1,T_ARRAY); - ary2cboolean(arg1,flag,1); - glEdgeFlagv(flag); - return Qnil; -} - -static VALUE -gl_End(obj) -VALUE obj; -{ - glEnd(); - return Qnil; -} - -static VALUE -gl_Indexd(obj,arg1) -VALUE obj,arg1; -{ - GLdouble c; - c = (GLdouble)NUM2DBL(arg1); - glIndexd(c); - return Qnil; -} - -static VALUE -gl_Indexdv(obj,arg1) -VALUE obj,arg1; -{ - GLdouble c[1] = {0.0}; - Check_Type(arg1,T_ARRAY); - ary2cdbl(arg1,c,1); - glIndexdv(c); - return Qnil; -} - -static VALUE -gl_Indexf(obj,arg1) -VALUE obj,arg1; -{ - GLfloat c; - c = (GLfloat)NUM2DBL(arg1); - glIndexf(c); - return Qnil; -} - -static VALUE -gl_Indexfv(obj,arg1) -VALUE obj,arg1; -{ - GLfloat c[1] = {0.0}; - Check_Type(arg1,T_ARRAY); - ary2cflt(arg1,c,1); - glIndexfv(c); - return Qnil; -} - -static VALUE -gl_Indexi(obj,arg1) -VALUE obj,arg1; -{ - GLint c; - c = (GLint)NUM2INT(arg1); - glIndexi(c); - return Qnil; -} - -static VALUE -gl_Indexiv(obj,arg1) -VALUE obj,arg1; -{ - GLint c[1] = {0.0}; - Check_Type(arg1,T_ARRAY); - ary2cint(arg1,c,1); - glIndexiv(c); - return Qnil; -} - -static VALUE -gl_Indexs(obj,arg1) -VALUE obj,arg1; -{ - GLshort c; - c = (GLshort)NUM2INT(arg1); - glIndexs(c); - return Qnil; -} - -static VALUE -gl_Indexsv(obj,arg1) -VALUE obj,arg1; -{ - GLshort c[1] = {0}; - Check_Type(arg1,T_ARRAY); - ary2cshort(arg1,c,1); - glIndexsv(c); - return Qnil; -} - -static VALUE -gl_Normal3b(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLbyte nx; - GLbyte ny; - GLbyte nz; - nx = (GLbyte)NUM2INT(arg1); - ny = (GLbyte)NUM2INT(arg2); - nz = (GLbyte)NUM2INT(arg3); - glNormal3b(nx,ny,nz); - return Qnil; -} - -static VALUE -gl_Normal3d(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLdouble nx; - GLdouble ny; - GLdouble nz; - nx = (GLdouble)NUM2DBL(arg1); - ny = (GLdouble)NUM2DBL(arg2); - nz = (GLdouble)NUM2DBL(arg3); - glNormal3d(nx,ny,nz); - return Qnil; -} - -static VALUE -gl_Normal3f(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLfloat nx; - GLfloat ny; - GLfloat nz; - nx = (GLfloat)NUM2DBL(arg1); - ny = (GLfloat)NUM2DBL(arg2); - nz = (GLfloat)NUM2DBL(arg3); - glNormal3f(nx,ny,nz); - return Qnil; -} - -static VALUE -gl_Normal3i(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint nx; - GLint ny; - GLint nz; - nx = (GLint)NUM2INT(arg1); - ny = (GLint)NUM2INT(arg2); - nz = (GLint)NUM2INT(arg3); - glNormal3i(nx,ny,nz); - return Qnil; -} - -static VALUE -gl_Normal3s(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLshort nx; - GLshort ny; - GLshort nz; - nx = (GLshort)NUM2INT(arg1); - ny = (GLshort)NUM2INT(arg2); - nz = (GLshort)NUM2INT(arg3); - glNormal3s(nx,ny,nz); - return Qnil; -} - -static VALUE -gl_RasterPos2d(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLdouble x; - GLdouble y; - x = (GLdouble)NUM2DBL(arg1); - y = (GLdouble)NUM2DBL(arg2); - glRasterPos2d(x,y); - return Qnil; -} - -static VALUE -gl_RasterPos2f(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLfloat x; - GLfloat y; - x = (GLfloat)NUM2DBL(arg1); - y = (GLfloat)NUM2DBL(arg2); - glRasterPos2f(x,y); - return Qnil; -} - -static VALUE -gl_RasterPos2i(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLint x; - GLint y; - x = (GLint)NUM2INT(arg1); - y = (GLint)NUM2INT(arg2); - glRasterPos2i(x,y); - return Qnil; -} - -static VALUE -gl_RasterPos2s(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLshort x; - GLshort y; - x = (GLshort)NUM2INT(arg1); - y = (GLshort)NUM2INT(arg2); - glRasterPos2s(x,y); - return Qnil; -} - -static VALUE -gl_RasterPos3d(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLdouble x; - GLdouble y; - GLdouble z; - x = (GLdouble)NUM2DBL(arg1); - y = (GLdouble)NUM2DBL(arg2); - z = (GLdouble)NUM2DBL(arg3); - glRasterPos3d(x,y,z); - return Qnil; -} - -static VALUE -gl_RasterPos3f(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLfloat x; - GLfloat y; - GLfloat z; - x = (GLfloat)NUM2DBL(arg1); - y = (GLfloat)NUM2DBL(arg2); - z = (GLfloat)NUM2DBL(arg3); - glRasterPos3f(x,y,z); - return Qnil; -} - -static VALUE -gl_RasterPos3i(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint x; - GLint y; - GLint z; - x = (GLint)NUM2INT(arg1); - y = (GLint)NUM2INT(arg2); - z = (GLint)NUM2INT(arg3); - glRasterPos3i(x,y,z); - return Qnil; -} - -static VALUE -gl_RasterPos3s(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLshort x; - GLshort y; - GLshort z; - x = (GLshort)NUM2INT(arg1); - y = (GLshort)NUM2INT(arg2); - z = (GLshort)NUM2INT(arg3); - glRasterPos3s(x,y,z); - return Qnil; -} - -static VALUE -gl_RasterPos4d(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLdouble x; - GLdouble y; - GLdouble z; - GLdouble w; - x = (GLdouble)NUM2DBL(arg1); - y = (GLdouble)NUM2DBL(arg2); - z = (GLdouble)NUM2DBL(arg3); - w = (GLdouble)NUM2DBL(arg4); - glRasterPos4d(x,y,z,w); - return Qnil; -} - -static VALUE -gl_RasterPos4f(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLfloat x; - GLfloat y; - GLfloat z; - GLfloat w; - x = (GLfloat)NUM2DBL(arg1); - y = (GLfloat)NUM2DBL(arg2); - z = (GLfloat)NUM2DBL(arg3); - w = (GLfloat)NUM2DBL(arg4); - glRasterPos4f(x,y,z,w); - return Qnil; -} - -static VALUE -gl_RasterPos4i(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint x; - GLint y; - GLint z; - GLint w; - x = (GLint)NUM2INT(arg1); - y = (GLint)NUM2INT(arg2); - z = (GLint)NUM2INT(arg3); - w = (GLint)NUM2INT(arg4); - glRasterPos4i(x,y,z,w); - return Qnil; -} - -static VALUE -gl_RasterPos4s(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLshort x; - GLshort y; - GLshort z; - GLshort w; - x = (GLshort)NUM2INT(arg1); - y = (GLshort)NUM2INT(arg2); - z = (GLshort)NUM2INT(arg3); - w = (GLshort)NUM2INT(arg4); - glRasterPos4s(x,y,z,w); - return Qnil; -} - -static VALUE -gl_Rectd(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLdouble x1; - GLdouble y1; - GLdouble x2; - GLdouble y2; - x1 = (GLdouble)NUM2DBL(arg1); - y1 = (GLdouble)NUM2DBL(arg2); - x2 = (GLdouble)NUM2DBL(arg3); - y2 = (GLdouble)NUM2DBL(arg4); - glRectd(x1,y1,x2,y2); - return Qnil; -} - -static VALUE -gl_Rectf(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLfloat x1; - GLfloat y1; - GLfloat x2; - GLfloat y2; - x1 = (GLfloat)NUM2DBL(arg1); - y1 = (GLfloat)NUM2DBL(arg2); - x2 = (GLfloat)NUM2DBL(arg3); - y2 = (GLfloat)NUM2DBL(arg4); - glRectf(x1,y1,x2,y2); - return Qnil; -} - -static VALUE -gl_Recti(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint x1; - GLint y1; - GLint x2; - GLint y2; - x1 = (GLint)NUM2INT(arg1); - y1 = (GLint)NUM2INT(arg2); - x2 = (GLint)NUM2INT(arg3); - y2 = (GLint)NUM2INT(arg4); - glRecti(x1,y1,x2,y2); - return Qnil; -} - -static VALUE -gl_Rects(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLshort x1; - GLshort y1; - GLshort x2; - GLshort y2; - x1 = (GLshort)NUM2INT(arg1); - y1 = (GLshort)NUM2INT(arg2); - x2 = (GLshort)NUM2INT(arg3); - y2 = (GLshort)NUM2INT(arg4); - glRects(x1,y1,x2,y2); - return Qnil; -} - -static VALUE -gl_TexCoord1d(obj,arg1) -VALUE obj,arg1; -{ - GLdouble s; - s = (GLdouble)NUM2DBL(arg1); - glTexCoord1d(s); - return Qnil; -} - -static VALUE -gl_TexCoord1f(obj,arg1) -VALUE obj,arg1; -{ - GLfloat s; - s = (GLfloat)NUM2DBL(arg1); - glTexCoord1f(s); - return Qnil; -} - -static VALUE -gl_TexCoord1i(obj,arg1) -VALUE obj,arg1; -{ - GLint s; - s = (GLint)NUM2INT(arg1); - glTexCoord1i(s); - return Qnil; -} - -static VALUE -gl_TexCoord1s(obj,arg1) -VALUE obj,arg1; -{ - GLshort s; - s = (GLshort)NUM2INT(arg1); - glTexCoord1s(s); - return Qnil; -} - -static VALUE -gl_TexCoord2d(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLdouble s; - GLdouble t; - s = (GLdouble)NUM2DBL(arg1); - t = (GLdouble)NUM2DBL(arg2); - glTexCoord2d(s,t); - return Qnil; -} - -static VALUE -gl_TexCoord2f(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLfloat s; - GLfloat t; - s = (GLfloat)NUM2DBL(arg1); - t = (GLfloat)NUM2DBL(arg2); - glTexCoord2f(s,t); - return Qnil; -} - -static VALUE -gl_TexCoord2i(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLint s; - GLint t; - s = (GLint)NUM2INT(arg1); - t = (GLint)NUM2INT(arg2); - glTexCoord2i(s,t); - return Qnil; -} - -static VALUE -gl_TexCoord2s(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLshort s; - GLshort t; - s = (GLshort)NUM2INT(arg1); - t = (GLshort)NUM2INT(arg2); - glTexCoord2s(s,t); - return Qnil; -} - -static VALUE -gl_TexCoord3d(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLdouble s; - GLdouble t; - GLdouble r; - s = (GLdouble)NUM2DBL(arg1); - t = (GLdouble)NUM2DBL(arg2); - r = (GLdouble)NUM2DBL(arg3); - glTexCoord3d(s,t,r); - return Qnil; -} - -static VALUE -gl_TexCoord3f(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLfloat s; - GLfloat t; - GLfloat r; - s = (GLfloat)NUM2DBL(arg1); - t = (GLfloat)NUM2DBL(arg2); - r = (GLfloat)NUM2DBL(arg3); - glTexCoord3f(s,t,r); - return Qnil; -} - -static VALUE -gl_TexCoord3i(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint s; - GLint t; - GLint r; - s = (GLint)NUM2INT(arg1); - t = (GLint)NUM2INT(arg2); - r = (GLint)NUM2INT(arg3); - glTexCoord3i(s,t,r); - return Qnil; -} - -static VALUE -gl_TexCoord3s(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLshort s; - GLshort t; - GLshort r; - s = (GLshort)NUM2INT(arg1); - t = (GLshort)NUM2INT(arg2); - r = (GLshort)NUM2INT(arg3); - glTexCoord3s(s,t,r); - return Qnil; -} - -static VALUE -gl_TexCoord4d(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLdouble s; - GLdouble t; - GLdouble r; - GLdouble q; - s = (GLdouble)NUM2DBL(arg1); - t = (GLdouble)NUM2DBL(arg2); - r = (GLdouble)NUM2DBL(arg3); - q = (GLdouble)NUM2DBL(arg4); - glTexCoord4d(s,t,r,q); - return Qnil; -} - -static VALUE -gl_TexCoord4f(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLfloat s; - GLfloat t; - GLfloat r; - GLfloat q; - s = (GLfloat)NUM2DBL(arg1); - t = (GLfloat)NUM2DBL(arg2); - r = (GLfloat)NUM2DBL(arg3); - q = (GLfloat)NUM2DBL(arg4); - glTexCoord4f(s,t,r,q); - return Qnil; -} - -static VALUE -gl_TexCoord4i(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint s; - GLint t; - GLint r; - GLint q; - s = (GLint)NUM2INT(arg1); - t = (GLint)NUM2INT(arg2); - r = (GLint)NUM2INT(arg3); - q = (GLint)NUM2INT(arg4); - glTexCoord4i(s,t,r,q); - return Qnil; -} - -static VALUE -gl_TexCoord4s(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLshort s; - GLshort t; - GLshort r; - GLshort q; - s = (GLshort)NUM2INT(arg1); - t = (GLshort)NUM2INT(arg2); - r = (GLshort)NUM2INT(arg3); - q = (GLshort)NUM2INT(arg4); - glTexCoord4s(s,t,r,q); - return Qnil; -} - -static VALUE -gl_Vertex2d(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLdouble x; - GLdouble y; - x = (GLdouble)NUM2DBL(arg1); - y = (GLdouble)NUM2DBL(arg2); - glVertex2d(x,y); - return Qnil; -} - -static VALUE -gl_Vertex2f(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLfloat x; - GLfloat y; - x = (GLfloat)NUM2DBL(arg1); - y = (GLfloat)NUM2DBL(arg2); - glVertex2f(x,y); - return Qnil; -} - -static VALUE -gl_Vertex2i(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLint x; - GLint y; - x = (GLint)NUM2INT(arg1); - y = (GLint)NUM2INT(arg2); - glVertex2i(x,y); - return Qnil; -} - -static VALUE -gl_Vertex2s(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLshort x; - GLshort y; - x = (GLshort)NUM2INT(arg1); - y = (GLshort)NUM2INT(arg2); - glVertex2s(x,y); - return Qnil; -} - -static VALUE -gl_Vertex3d(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLdouble x; - GLdouble y; - GLdouble z; - x = (GLdouble)NUM2DBL(arg1); - y = (GLdouble)NUM2DBL(arg2); - z = (GLdouble)NUM2DBL(arg3); - glVertex3d(x,y,z); - return Qnil; -} - -static VALUE -gl_Vertex3f(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLfloat x; - GLfloat y; - GLfloat z; - x = (GLfloat)NUM2DBL(arg1); - y = (GLfloat)NUM2DBL(arg2); - z = (GLfloat)NUM2DBL(arg3); - glVertex3f(x,y,z); - return Qnil; -} - -static VALUE -gl_Vertex3i(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint x; - GLint y; - GLint z; - x = (GLint)NUM2INT(arg1); - y = (GLint)NUM2INT(arg2); - z = (GLint)NUM2INT(arg3); - glVertex3i(x,y,z); - return Qnil; -} - -static VALUE -gl_Vertex3s(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLshort x; - GLshort y; - GLshort z; - x = (GLshort)NUM2INT(arg1); - y = (GLshort)NUM2INT(arg2); - z = (GLshort)NUM2INT(arg3); - glVertex3s(x,y,z); - return Qnil; -} - -static VALUE -gl_Vertex4d(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLdouble x; - GLdouble y; - GLdouble z; - GLdouble w; - x = (GLdouble)NUM2DBL(arg1); - y = (GLdouble)NUM2DBL(arg2); - z = (GLdouble)NUM2DBL(arg3); - w = (GLdouble)NUM2DBL(arg4); - glVertex4d(x,y,z,w); - return Qnil; -} - -static VALUE -gl_Vertex4f(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLfloat x; - GLfloat y; - GLfloat z; - GLfloat w; - x = (GLfloat)NUM2DBL(arg1); - y = (GLfloat)NUM2DBL(arg2); - z = (GLfloat)NUM2DBL(arg3); - w = (GLfloat)NUM2DBL(arg4); - glVertex4f(x,y,z,w); - return Qnil; -} - -static VALUE -gl_Vertex4i(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint x; - GLint y; - GLint z; - GLint w; - x = (GLint)NUM2INT(arg1); - y = (GLint)NUM2INT(arg2); - z = (GLint)NUM2INT(arg3); - w = (GLint)NUM2INT(arg4); - glVertex4i(x,y,z,w); - return Qnil; -} - -static VALUE -gl_Vertex4s(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLshort x; - GLshort y; - GLshort z; - GLshort w; - x = (GLshort)NUM2INT(arg1); - y = (GLshort)NUM2INT(arg2); - z = (GLshort)NUM2INT(arg3); - w = (GLshort)NUM2INT(arg4); - glVertex4s(x,y,z,w); - return Qnil; -} - -static VALUE -gl_ClipPlane(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum plane; - GLdouble equation[4]; - plane = (GLenum)NUM2INT(arg1); - Check_Type(arg2,T_ARRAY); - ary2cdbl(arg2, equation, 4); - glClipPlane(plane,equation); - return Qnil; -} - -static VALUE -gl_ColorMaterial(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum face; - GLenum mode; - face = (GLenum)NUM2INT(arg1); - mode = (GLenum)NUM2INT(arg2); - glColorMaterial(face,mode); - return Qnil; -} - -static VALUE -gl_CullFace(obj,arg1) -VALUE obj,arg1; -{ - GLenum mode; - mode = (GLenum)NUM2INT(arg1); - glCullFace(mode); - return Qnil; -} - -static VALUE -gl_Fogf(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLfloat param; - pname = (GLenum)NUM2INT(arg1); - param = (GLfloat)NUM2DBL(arg2); - glFogf(pname,param); - return Qnil; -} - -static VALUE -gl_Fogfv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLfloat params[4] = {0.0,0.0,0.0,0.0}; - pname = (GLenum)NUM2INT(arg1); - Check_Type(arg2,T_ARRAY); - ary2cflt(arg2,params,4); - glFogfv(pname,params); - return Qnil; -} - -static VALUE -gl_Fogi(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLint param; - pname = (GLenum)NUM2INT(arg1); - param = (GLint)NUM2INT(arg2); - glFogi(pname,param); - return Qnil; -} - -static VALUE -gl_Fogiv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLint params[4] = {0,0,0,0}; - pname = (GLenum)NUM2INT(arg1); - Check_Type(arg2,T_ARRAY); - ary2cint(arg2,params,4); - glFogiv(pname,params); - return Qnil; -} - -static VALUE -gl_FrontFace(obj,arg1) -VALUE obj,arg1; -{ - GLenum mode; - mode = (GLenum)NUM2INT(arg1); - glFrontFace(mode); - return Qnil; -} - -static VALUE -gl_Hint(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLenum mode; - target = (GLenum)NUM2UINT(arg1); - mode = (GLenum)NUM2UINT(arg2); - glHint(target,mode); - return Qnil; -} - -static VALUE -gl_Lightf(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum light; - GLenum pname; - GLfloat param; - light = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - param = (GLfloat)NUM2DBL(arg3); - glLightf(light,pname,param); - return Qnil; -} - -static VALUE -gl_Lightfv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum light; - GLenum pname; - GLfloat params[4] = {0.0,0.0,0.0,0.0}; - light = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cflt(arg3,params,4); - glLightfv(light,pname,params); - return Qnil; -} - -static VALUE -gl_Lighti(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum light; - GLenum pname; - GLint param; - light = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - param = (GLint)NUM2INT(arg3); - glLighti(light,pname,param); - return Qnil; -} - -static VALUE -gl_Lightiv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum light; - GLenum pname; - GLint params[4]={0,0,0,0}; - light = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cint(arg3,params,4); - glLightiv(light,pname,params); - return Qnil; -} - -static VALUE -gl_LightModelf(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLfloat param; - pname = (GLenum)NUM2INT(arg1); - param = (GLfloat)NUM2DBL(arg2); - glLightModelf(pname,param); - return Qnil; -} - -static VALUE -gl_LightModelfv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLfloat params[4] = {0.0,0.0,0.0,0.0}; - pname = (GLenum)NUM2INT(arg1); - Check_Type(arg2,T_ARRAY); - ary2cflt(arg2,params,4); - glLightModelfv(pname,params); - return Qnil; -} - -static VALUE -gl_LightModeli(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLint param; - pname = (GLenum)NUM2INT(arg1); - param = (GLint)NUM2INT(arg2); - glLightModeli(pname,param); - return Qnil; -} - -static VALUE -gl_LightModeliv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLint params[4] = {0,0,0,0}; - pname = (GLenum)NUM2INT(arg1); - Check_Type(arg2,T_ARRAY); - ary2cint(arg2,params,4); - glLightModeliv(pname,params); - return Qnil; -} - -static VALUE -gl_LineStipple(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLint factor; - GLushort pattern; - factor = (GLint)NUM2INT(arg1); - pattern = (GLushort)(NUM2INT(arg2) & 0xFFFF); - glLineStipple(factor,pattern); - return Qnil; -} - -static VALUE -gl_LineWidth(obj,arg1) -VALUE obj,arg1; -{ - GLfloat width; - width = (GLfloat)NUM2DBL(arg1); - glLineWidth(width); - return Qnil; -} - -static VALUE -gl_Materialf(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum face; - GLenum pname; - GLfloat param; - face = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - param = (GLfloat)NUM2DBL(arg3); - glMaterialf(face,pname,param); - return Qnil; -} - -static VALUE -gl_Materialfv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum face; - GLenum pname; - GLfloat params[4] = {0.0,0.0,0.0,0.0}; - face = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cflt(arg3,params,4); - glMaterialfv(face,pname,params); - return Qnil; -} - -static VALUE -gl_Materiali(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum face; - GLenum pname; - GLint param; - face = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - param = (GLint)NUM2INT(arg3); - glMateriali(face,pname,param); - return Qnil; -} - -static VALUE -gl_Materialiv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum face; - GLenum pname; - GLint params[4] = {0,0,0,0}; - face = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cint(arg3,params,4); - glMaterialiv(face,pname,params); - return Qnil; -} - -static VALUE -gl_PointSize(obj,arg1) -VALUE obj,arg1; -{ - GLfloat size; - size = (GLfloat)NUM2DBL(arg1); - glPointSize(size); - return Qnil; -} - -static VALUE -gl_PolygonMode(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum face; - GLenum mode; - face = (GLenum)NUM2INT(arg1); - mode = (GLenum)NUM2INT(arg2); - glPolygonMode(face,mode); - return Qnil; -} - -static VALUE -gl_PolygonStipple(obj,arg1) -VALUE obj,arg1; -{ - GLubyte mask[128]; - memset(mask, 0x0, sizeof(GLubyte)*128); - if (TYPE(arg1) == T_ARRAY) { - ary2cubyte(arg1,mask,128); - } - else if (TYPE(arg1) == T_STRING) { - if (RSTRING(arg1)->len < 128) - rb_raise(rb_eArgError, "string length:%d", RSTRING(arg1)->len); - memcpy(mask, RSTRING(arg1)->ptr, 128); - } - else - Check_Type(arg1,T_STRING); /* force exception */ - glPolygonStipple(mask); - return Qnil; -} - -static VALUE -gl_Scissor(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint x; - GLint y; - GLsizei width; - GLsizei height; - x = (GLint)NUM2INT(arg1); - y = (GLint)NUM2INT(arg2); - width = (GLsizei)NUM2UINT(arg3); - height = (GLsizei)NUM2UINT(arg4); - glScissor(x,y,width,height); - return Qnil; -} - -static VALUE -gl_ShadeModel(obj,arg1) -VALUE obj,arg1; -{ - GLenum mode; - mode = (GLenum)NUM2INT(arg1); - glShadeModel(mode); - return Qnil; -} - -static VALUE -gl_TexParameterf(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLfloat param; - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - param = (GLfloat)NUM2DBL(arg3); - glTexParameterf(target,pname,param); - return Qnil; -} - -static VALUE -gl_TexParameterfv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLfloat params[4] = {0.0,0.0,0.0,0.0}; - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cflt(arg3,params,4); - glTexParameterfv(target,pname,params); - return Qnil; -} - -static VALUE -gl_TexParameteri(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLint param; - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - param = (GLint)NUM2INT(arg3); - glTexParameteri(target,pname,param); - return Qnil; -} - -static VALUE -gl_TexParameteriv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLint params[4] = {0,0,0,0}; - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cint(arg3,params,4); - glTexParameteriv(target,pname,params); - return Qnil; -} - -/* FIXME: spatna funkce ? */ -static VALUE -gl_TexImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8; -{ - GLenum target; - GLint level; - GLint components; - GLsizei width; - GLint border; - GLenum format; - GLenum type; - const char *pixels; - int size; - int type_size; - int format_size; - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - components = (GLint)NUM2INT(arg3); - width = (GLsizei)NUM2UINT(arg4); - border = (GLint)NUM2INT(arg5); - format = (GLenum)NUM2INT(arg6); - type = (GLenum)NUM2INT(arg7); - type_size = gltype_size(type); - format_size = glformat_size(format); - - if (type_size == -1 || format_size == -1) - return Qnil; - if (type==GL_BITMAP) - size = format_size*(width/8); - else - size = type_size*format_size*width; - - if (target == GL_PROXY_TEXTURE_1D || NIL_P(arg8)) { /* proxy texture, no data read */ - pixels = NULL; - } else { - if (TYPE(arg8) == T_FIXNUM || TYPE(arg8) == T_BIGNUM) { /* arg8 is offset to unpack buffer */ - pixels = (const char *)NUM2UINT(arg8); - } else if (TYPE(arg8) == T_STRING) { /* image data */ - if (RSTRING(arg8)->len < size) - rb_raise(rb_eArgError, "string length:%d",RSTRING(arg8)->len); - pixels = RSTRING(arg8)->ptr; - } else { - Check_Type(arg8,T_STRING); /* force exception */ - return Qnil; - } - } - glTexImage1D(target,level,components,width,border,format,type,pixels); - return Qnil; -} - -static VALUE -gl_TexImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9; -{ - GLenum target; - GLint level; - GLint components; - GLsizei width; - GLsizei height; - GLint border; - GLenum format; - GLenum type; - const char *pixels; - int size; - int type_size; - int format_size; - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - components = (GLint)NUM2INT(arg3); - width = (GLsizei)NUM2UINT(arg4); - height = (GLsizei)NUM2UINT(arg5); - border = (GLint)NUM2INT(arg6); - format = (GLenum)NUM2INT(arg7); - type = (GLenum)NUM2INT(arg8); - type_size = gltype_size(type); - format_size = glformat_size(format); - - if (type_size == -1 || format_size == -1) - return Qnil; - if (type==GL_BITMAP) - size = format_size*((height*width)/8); - else - size = type_size*format_size*height*width; - - if (target == GL_PROXY_TEXTURE_2D || target == GL_PROXY_TEXTURE_CUBE_MAP || NIL_P(arg9)) { /* proxy texture, no data read */ - pixels = NULL; - } else { - if (TYPE(arg9) == T_FIXNUM || TYPE(arg9) == T_BIGNUM) { /* arg9 is offset to unpack buffer */ - pixels = (const char *)NUM2UINT(arg9); - } else if (TYPE(arg9) == T_STRING) { /* image data */ - if (RSTRING(arg9)->len < size) - rb_raise(rb_eArgError, "string length:%d",RSTRING(arg9)->len); - pixels = RSTRING(arg9)->ptr; - } else { - Check_Type(arg9,T_STRING); /* force exception */ - return Qnil; - } - } - glTexImage2D(target,level,components,width,height,border,format,type,pixels); - return Qnil; -} - -static VALUE -gl_TexEnvf(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLfloat param; - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - param = (GLfloat)NUM2DBL(arg3); - glTexEnvf(target,pname,param); - return Qnil; -} - -static VALUE -gl_TexEnvfv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLfloat params[4] = {0.0,0.0,0.0,0.0}; - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cflt(arg3,params,4); - glTexEnvfv(target,pname,params); - return Qnil; -} - -static VALUE -gl_TexEnvi(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLint param; - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - param = (GLint)NUM2INT(arg3); - glTexEnvi(target,pname,param); - return Qnil; -} - -static VALUE -gl_TexEnviv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLint params[4] = {0,0,0,0}; - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cint(arg3,params,4); - glTexEnviv(target,pname,params); - return Qnil; -} - -static VALUE -gl_TexGend(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum coord; - GLenum pname; - GLdouble param; - coord = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - param = (GLdouble)NUM2DBL(arg3); - glTexGend(coord,pname,param); - return Qnil; -} - -static VALUE -gl_TexGendv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum coord; - GLenum pname; - GLdouble params[4] = {0.0,0.0,0.0,0.0}; - coord = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cdbl(arg3,params,4); - glTexGendv(coord,pname,params); - return Qnil; -} - - -static VALUE -gl_TexGenf(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum coord; - GLenum pname; - GLfloat param; - coord = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - param = (GLfloat)NUM2DBL(arg3); - glTexGenf(coord,pname,param); - return Qnil; -} - -static VALUE -gl_TexGenfv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum coord; - GLenum pname; - GLfloat params[4] = {0.0,0.0,0.0,0.0}; - coord = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cflt(arg3,params,4); - glTexGenfv(coord,pname,params); - return Qnil; -} - -static VALUE -gl_TexGeni(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum coord; - GLenum pname; - GLint param; - coord = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - param = (GLint)NUM2INT(arg3); - glTexGeni(coord,pname,param); - return Qnil; -} - -static VALUE -gl_TexGeniv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum coord; - GLenum pname; - GLint params[4] = {0,0,0,0}; - coord = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cint(arg3,params,4); - glTexGeniv(coord,pname,params); - return Qnil; -} -static VALUE g_current_feed_buffer; -static VALUE -gl_FeedbackBuffer(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLsizei size; - GLenum type; - size = (GLsizei)NUM2UINT(arg1); - type = (GLenum)NUM2INT(arg2); - g_current_feed_buffer = allocate_buffer_with_string(sizeof(GLfloat)*size); - rb_str_freeze(g_current_feed_buffer); - glFeedbackBuffer(size, type, (GLfloat*)RSTRING(g_current_feed_buffer)->ptr); - return g_current_feed_buffer; -} - -static VALUE g_current_sel_buffer; -static VALUE -gl_SelectBuffer(obj,arg1) -VALUE obj,arg1; -{ - GLsizei size; - size = (GLsizei)NUM2UINT(arg1); - g_current_sel_buffer = allocate_buffer_with_string(sizeof(GLuint)*size); - rb_str_freeze(g_current_sel_buffer); - glSelectBuffer(size, (GLuint*)RSTRING(g_current_sel_buffer)->ptr); - return g_current_sel_buffer; -} - -static VALUE -gl_RenderMode(obj,arg1) -VALUE obj,arg1; -{ - GLenum mode; - GLint ret; - mode = (GLenum)NUM2INT(arg1); - ret = glRenderMode(mode); - return INT2NUM(ret); -} - -static VALUE -gl_InitNames(obj) -VALUE obj; -{ - glInitNames(); - return Qnil; -} - -static VALUE -gl_LoadName(obj,arg1) -VALUE obj,arg1; -{ - GLuint name; - name = (GLuint)NUM2UINT(arg1); - glLoadName(name); - return Qnil; -} - -static VALUE -gl_PassThrough(obj,arg1) -VALUE obj,arg1; -{ - GLfloat token; - token = (GLfloat)NUM2DBL(arg1); - glPassThrough(token); - return Qnil; -} - -static VALUE -gl_PopName(obj) -VALUE obj; -{ - glPopName(); - return Qnil; -} - -static VALUE -gl_PushName(obj,arg1) -VALUE obj,arg1; -{ - GLuint name; - name = (GLuint)NUM2UINT(arg1); - glPushName(name); - return Qnil; -} - -static VALUE -gl_DrawBuffer(obj,arg1) -VALUE obj,arg1; -{ - GLenum mode; - mode = (GLenum)NUM2INT(arg1); - glDrawBuffer(mode); - return Qnil; -} - -static VALUE -gl_Clear(obj,arg1) -VALUE obj,arg1; -{ - GLbitfield mask; - mask = (GLbitfield)NUM2UINT(arg1); - glClear(mask); - return Qnil; -} - -static VALUE -gl_ClearAccum(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLfloat red; - GLfloat green; - GLfloat blue; - GLfloat alpha; - red = (GLfloat)NUM2DBL(arg1); - green = (GLfloat)NUM2DBL(arg2); - blue = (GLfloat)NUM2DBL(arg3); - alpha = (GLfloat)NUM2DBL(arg4); - glClearAccum(red,green,blue,alpha); - return Qnil; -} - -static VALUE -gl_ClearIndex(obj,arg1) -VALUE obj,arg1; -{ - GLfloat c; - c = (GLfloat)NUM2DBL(arg1); - glClearIndex(c); - return Qnil; -} - -static VALUE -gl_ClearColor(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLclampf red; - GLclampf green; - GLclampf blue; - GLclampf alpha; - red = (GLclampf)NUM2DBL(arg1); - green = (GLclampf)NUM2DBL(arg2); - blue = (GLclampf)NUM2DBL(arg3); - alpha = (GLclampf)NUM2DBL(arg4); - glClearColor(red,green,blue,alpha); - return Qnil; -} - -static VALUE -gl_ClearStencil(obj,arg1) -VALUE obj,arg1; -{ - GLint s; - s = (GLint)NUM2INT(arg1); - glClearStencil(s); - return Qnil; -} - -static VALUE -gl_ClearDepth(obj,arg1) -VALUE obj,arg1; -{ - GLclampd depth; - depth = (GLclampd)NUM2DBL(arg1); - glClearDepth(depth); - return Qnil; -} - -static VALUE -gl_StencilMask(obj,arg1) -VALUE obj,arg1; -{ - GLuint mask; - mask = (GLuint)NUM2UINT(arg1); - glStencilMask(mask); - return Qnil; -} - -static VALUE -gl_ColorMask(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLboolean red; - GLboolean green; - GLboolean blue; - GLboolean alpha; - red = (GLboolean)NUM2INT(arg1); - green = (GLboolean)NUM2INT(arg2); - blue = (GLboolean)NUM2INT(arg3); - alpha = (GLboolean)NUM2INT(arg4); - glColorMask(red,green,blue,alpha); - return Qnil; -} - -static VALUE -gl_DepthMask(obj,arg1) -VALUE obj,arg1; -{ - GLboolean flag; - flag = (GLboolean)NUM2INT(arg1); - glDepthMask(flag); - return Qnil; -} - -static VALUE -gl_IndexMask(obj,arg1) -VALUE obj,arg1; -{ - GLuint mask; - mask = (GLuint)NUM2UINT(arg1); - glIndexMask(mask); - return Qnil; -} - -static VALUE -gl_Accum(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum op; - GLfloat value; - op = (GLenum)NUM2INT(arg1); - value = (GLfloat)NUM2DBL(arg2); - glAccum(op,value); - return Qnil; -} - -static VALUE -gl_Disable(obj,arg1) -VALUE obj,arg1; -{ - GLenum cap; - cap = (GLenum)NUM2INT(arg1); - glDisable(cap); - return Qnil; -} - -static VALUE -gl_Enable(obj,arg1) -VALUE obj,arg1; -{ - GLenum cap; - cap = (GLenum)NUM2INT(arg1); - glEnable(cap); - return Qnil; -} - -static VALUE -gl_Finish(obj) -VALUE obj; -{ - glFinish(); - return Qnil; -} - -static VALUE -gl_Flush(obj) -VALUE obj; -{ - glFlush(); - return Qnil; -} - -static VALUE -gl_PopAttrib(obj) -VALUE obj; -{ - glPopAttrib(); - return Qnil; -} - -static VALUE -gl_PushAttrib(obj,arg1) -VALUE obj,arg1; -{ - GLbitfield mask; - mask = (GLbitfield)NUM2UINT(arg1); - glPushAttrib(mask); - return Qnil; -} - -static VALUE -gl_Map1d(obj,arg1,arg2,arg3,arg4,arg5,arg6) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6; -{ - GLenum target; - GLdouble u1; - GLdouble u2; - GLint stride; - GLint order; - GLdouble *points; - - VALUE work_ary; - - target = (GLenum)NUM2INT(arg1); - u1 = (GLdouble)NUM2DBL(arg2); - u2 = (GLdouble)NUM2DBL(arg3); - stride = (GLint)NUM2INT(arg4); - order = (GLint)NUM2INT(arg5); - points = ALLOC_N(GLdouble, order*stride); - work_ary = rb_ary_new(); - mary2ary(arg6, work_ary); - ary2cdbl(work_ary, points, order*stride); - glMap1d(target, u1, u2, stride, order, points); - xfree(points); - return Qnil; -} - -static VALUE -gl_Map1f(obj,arg1,arg2,arg3,arg4,arg5,arg6) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6; -{ - GLenum target; - GLfloat u1; - GLfloat u2; - GLint stride; - GLint order; - GLfloat *points; - - VALUE work_ary; - - target = (GLenum)NUM2INT(arg1); - u1 = (GLfloat)NUM2DBL(arg2); - u2 = (GLfloat)NUM2DBL(arg3); - stride = (GLint)NUM2INT(arg4); - order = (GLint)NUM2INT(arg5); - points = ALLOC_N(GLfloat, order*stride); - work_ary = rb_ary_new(); - mary2ary(arg6, work_ary); - ary2cflt(work_ary, points, order*stride); - glMap1f(target, u1, u2, stride, order, points); - xfree(points); - return Qnil; -} - -static VALUE -gl_Map2d(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10; -{ - GLenum target; - GLdouble u1; - GLdouble u2; - GLint ustride; - GLint uorder; - GLdouble v1; - GLdouble v2; - GLint vstride; - GLint vorder; - GLdouble *points; - - VALUE work_ary; - - target = (GLenum)NUM2INT(arg1); - u1 = (GLdouble)NUM2INT(arg2); - u2 = (GLdouble)NUM2INT(arg3); - ustride = (GLint)NUM2INT(arg4); - uorder = (GLint)NUM2INT(arg5); - v1 = (GLdouble)NUM2INT(arg6); - v2 = (GLdouble)NUM2INT(arg7); - vstride = (GLint)NUM2INT(arg8); - vorder = (GLint)NUM2INT(arg9); - points = ALLOC_N(GLdouble, MAX(ustride*uorder, vstride*vorder)); - work_ary = rb_ary_new(); - mary2ary(arg10, work_ary); - ary2cdbl(arg10, points, MAX(ustride*uorder, vstride*vorder)); - glMap2d(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); - xfree(points); - return Qnil; -} - -static VALUE -gl_Map2f(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10; -{ - GLenum target; - GLfloat u1; - GLfloat u2; - GLint ustride; - GLint uorder; - GLfloat v1; - GLfloat v2; - GLint vstride; - GLint vorder; - GLfloat *points; - - VALUE work_ary; - - target = (GLenum)NUM2INT(arg1); - u1 = (GLfloat)NUM2INT(arg2); - u2 = (GLfloat)NUM2INT(arg3); - ustride = (GLint)NUM2INT(arg4); - uorder = (GLint)NUM2INT(arg5); - v1 = (GLfloat)NUM2INT(arg6); - v2 = (GLfloat)NUM2INT(arg7); - vstride = (GLint)NUM2INT(arg8); - vorder = (GLint)NUM2INT(arg9); - points = ALLOC_N(GLfloat, MAX(ustride*uorder, vstride*vorder)); - work_ary = rb_ary_new(); - mary2ary(arg10, work_ary); - ary2cflt(arg10, points, MAX(ustride*uorder, vstride*vorder)); - glMap2f(target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points); - xfree(points); - return Qnil; -} - -static VALUE -gl_MapGrid1d(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint un; - GLdouble u1; - GLdouble u2; - un = (GLint)NUM2INT(arg1); - u1 = (GLdouble)NUM2DBL(arg2); - u2 = (GLdouble)NUM2DBL(arg3); - glMapGrid1d(un,u1,u2); - return Qnil; -} - -static VALUE -gl_MapGrid1f(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint un; - GLfloat u1; - GLfloat u2; - un = (GLint)NUM2INT(arg1); - u1 = (GLfloat)NUM2DBL(arg2); - u2 = (GLfloat)NUM2DBL(arg3); - glMapGrid1f(un,u1,u2); - return Qnil; -} - -static VALUE -gl_MapGrid2d(obj,arg1,arg2,arg3,arg4,arg5,arg6) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6; -{ - GLint un; - GLdouble u1; - GLdouble u2; - GLint vn; - GLdouble v1; - GLdouble v2; - un = (GLint)NUM2INT(arg1); - u1 = (GLdouble)NUM2DBL(arg2); - u2 = (GLdouble)NUM2DBL(arg3); - vn = (GLint)NUM2INT(arg4); - v1 = (GLdouble)NUM2DBL(arg5); - v2 = (GLdouble)NUM2DBL(arg6); - glMapGrid2d(un,u1,u2,vn,v1,v2); - return Qnil; -} - -static VALUE -gl_MapGrid2f(obj,arg1,arg2,arg3,arg4,arg5,arg6) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6; -{ - GLint un; - GLfloat u1; - GLfloat u2; - GLint vn; - GLfloat v1; - GLfloat v2; - un = (GLint)NUM2INT(arg1); - u1 = (GLfloat)NUM2DBL(arg2); - u2 = (GLfloat)NUM2DBL(arg3); - vn = (GLint)NUM2INT(arg4); - v1 = (GLfloat)NUM2DBL(arg5); - v2 = (GLfloat)NUM2DBL(arg6); - glMapGrid2f(un,u1,u2,vn,v1,v2); - return Qnil; -} - -static VALUE -gl_EvalCoord1d(obj,arg1) -VALUE obj,arg1; -{ - GLdouble u; - u = (GLdouble)NUM2DBL(arg1); - glEvalCoord1d(u); - return Qnil; -} - -static VALUE -gl_EvalCoord1dv(obj,arg1) -VALUE obj,arg1; -{ - GLdouble params[1] = {0.0}; - Check_Type(arg1,T_ARRAY); - ary2cdbl(arg1,params,1); - glEvalCoord1dv(params); - return Qnil; -} - -static VALUE -gl_EvalCoord1f(obj,arg1) -VALUE obj,arg1; -{ - GLfloat u; - u = (GLfloat)NUM2DBL(arg1); - glEvalCoord1f(u); - return Qnil; -} - -static VALUE -gl_EvalCoord1fv(obj,arg1) -VALUE obj,arg1; -{ - GLfloat params[1] = {0.0}; - Check_Type(arg1,T_ARRAY); - ary2cflt(arg1,params,1); - glEvalCoord1fv(params); - return Qnil; -} - -static VALUE -gl_EvalCoord2d(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLdouble u; - GLdouble v; - u = (GLdouble)NUM2DBL(arg1); - v = (GLdouble)NUM2DBL(arg2); - glEvalCoord2d(u,v); - return Qnil; -} - -static VALUE -gl_EvalCoord2dv(obj,arg1) -VALUE obj,arg1; -{ - GLdouble params[2] = {0.0,0.0}; - Check_Type(arg1,T_ARRAY); - ary2cdbl(arg1,params,2); - glEvalCoord2dv(params); - return Qnil; -} - -static VALUE -gl_EvalCoord2f(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLfloat u; - GLfloat v; - u = (GLfloat)NUM2DBL(arg1); - v = (GLfloat)NUM2DBL(arg2); - glEvalCoord2f(u,v); - return Qnil; -} - -static VALUE -gl_EvalCoord2fv(obj,arg1) -VALUE obj,arg1; -{ - GLfloat params[2] = {0.0,0.0}; - Check_Type(arg1,T_ARRAY); - ary2cflt(arg1,params,2); - glEvalCoord2fv(params); - return Qnil; -} - -static VALUE -gl_EvalMesh1(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum mode; - GLint i1; - GLint i2; - mode = (GLenum)NUM2INT(arg1); - i1 = (GLint)NUM2INT(arg2); - i2 = (GLint)NUM2INT(arg3); - glEvalMesh1(mode,i1,i2); - return Qnil; -} - -static VALUE -gl_EvalPoint1(obj,arg1) -VALUE obj,arg1; -{ - GLint i; - i = (GLint)NUM2INT(arg1); - glEvalPoint1(i); - return Qnil; -} - -static VALUE -gl_EvalMesh2(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLenum mode; - GLint i1; - GLint i2; - GLint j1; - GLint j2; - mode = (GLenum)NUM2INT(arg1); - i1 = (GLint)NUM2INT(arg2); - i2 = (GLint)NUM2INT(arg3); - j1 = (GLint)NUM2INT(arg4); - j2 = (GLint)NUM2INT(arg5); - glEvalMesh2(mode,i1,i2,j1,j2); - return Qnil; -} - -static VALUE -gl_EvalPoint2(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLint i; - GLint j; - i = (GLint)NUM2INT(arg1); - j = (GLint)NUM2INT(arg2); - glEvalPoint2(i,j); - return Qnil; -} - -static VALUE -gl_AlphaFunc(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum func; - GLclampf ref; - func = (GLenum)NUM2INT(arg1); - ref = (GLclampf)NUM2DBL(arg2); - glAlphaFunc(func,ref); - return Qnil; -} - -static VALUE -gl_BlendFunc(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum sfactor; - GLenum dfactor; - sfactor = (GLenum)NUM2INT(arg1); - dfactor = (GLenum)NUM2INT(arg2); - glBlendFunc(sfactor,dfactor); - return Qnil; -} - -static VALUE -gl_LogicOp(obj,arg1) -VALUE obj,arg1; -{ - GLenum opcode; - opcode = (GLenum)NUM2INT(arg1); - glLogicOp(opcode); - return Qnil; -} - -static VALUE -gl_StencilFunc(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum func; - GLint ref; - GLuint mask; - func = (GLenum)NUM2INT(arg1); - ref = (GLint)NUM2INT(arg2); - mask = (GLuint)NUM2UINT(arg3); - glStencilFunc(func,ref,mask); - return Qnil; -} - -static VALUE -gl_StencilOp(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum fail; - GLenum zfail; - GLenum zpass; - fail = (GLenum)NUM2INT(arg1); - zfail = (GLenum)NUM2INT(arg2); - zpass = (GLenum)NUM2INT(arg3); - glStencilOp(fail,zfail,zpass); - return Qnil; -} - -static VALUE -gl_DepthFunc(obj,arg1) -VALUE obj,arg1; -{ - GLenum func; - func = (GLenum)NUM2INT(arg1); - glDepthFunc(func); - return Qnil; -} - -static VALUE -gl_PixelZoom(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLfloat xfactor; - GLfloat yfactor; - xfactor = (GLfloat)NUM2DBL(arg1); - yfactor = (GLfloat)NUM2DBL(arg2); - glPixelZoom(xfactor,yfactor); - return Qnil; -} - -static VALUE -gl_PixelTransferf(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLfloat param; - pname = (GLenum)NUM2INT(arg1); - param = (GLfloat)NUM2DBL(arg2); - glPixelTransferf(pname,param); - return Qnil; -} - -static VALUE -gl_PixelTransferi(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLint param; - pname = (GLenum)NUM2INT(arg1); - param = (GLint)NUM2INT(arg2); - glPixelTransferi(pname,param); - return Qnil; -} - -static VALUE -gl_PixelStoref(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLfloat param; - pname = (GLenum)NUM2INT(arg1); - param = (GLfloat)NUM2DBL(arg2); - glPixelStoref(pname,param); - return Qnil; -} - -static VALUE -gl_PixelStorei(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLint param; - pname = (GLenum)NUM2INT(arg1); - param = (GLint)NUM2INT(arg2); - glPixelStorei(pname,param); - return Qnil; -} - -static VALUE -gl_PixelMapfv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum map; - GLfloat *values; - GLsizei size; - map = (GLenum)NUM2INT(arg1); - Check_Type(arg2,T_ARRAY); - size = RARRAY(arg2)->len; - values = ALLOC_N(GLfloat,size); - ary2cflt(arg2,values,size); - glPixelMapfv(map,size,values); - xfree(values); - return Qnil; -} - -static VALUE -gl_PixelMapuiv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum map; - GLuint *values; - GLsizei size; - map = (GLenum)NUM2INT(arg1); - Check_Type(arg2,T_ARRAY); - size = RARRAY(arg2)->len; - values = ALLOC_N(GLuint,size); - ary2cuint(arg2,values,size); - glPixelMapuiv(map,size,values); - xfree(values); - return Qnil; -} - -static VALUE -gl_PixelMapusv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum map; - GLushort *values; - GLsizei size; - map = (GLenum)NUM2INT(arg1); - Check_Type(arg2,T_ARRAY); - size = RARRAY(arg2)->len; - values = ALLOC_N(GLushort,size); - ary2cushort(arg2,values,size); - glPixelMapusv(map,size,values); - xfree(values); - return Qnil; -} - -static VALUE -gl_ReadBuffer(obj,arg1) -VALUE obj,arg1; -{ - GLenum mode; - mode = (GLenum)NUM2INT(arg1); - glReadBuffer(mode); - return Qnil; -} - -static VALUE -gl_CopyPixels(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLint x; - GLint y; - GLsizei width; - GLsizei height; - GLenum type; - x = (GLint)NUM2INT(arg1); - y = (GLint)NUM2INT(arg2); - width = (GLsizei)NUM2UINT(arg3); - height = (GLsizei)NUM2UINT(arg4); - type = (GLenum)NUM2INT(arg5); - glCopyPixels(x,y,width,height,type); - return Qnil; -} - -static VALUE -gl_ReadPixels(obj,arg1,arg2,arg3,arg4,arg5,arg6) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6; -{ - GLint x; - GLint y; - GLsizei width; - GLsizei height; - int format; - int type; - VALUE pixels; - GLsizei type_size; - GLsizei format_size; - GLsizei size; - x = (GLint)NUM2INT(arg1); - y = (GLint)NUM2INT(arg2); - width = (GLsizei)NUM2UINT(arg3); - height = (GLsizei)NUM2UINT(arg4); - format = NUM2INT(arg5); - type = NUM2INT(arg6); - type_size = gltype_size(type); - format_size = glformat_size(format); - if (type_size == -1 || format_size == -1) - return Qnil; - - if (type==GL_BITMAP) - size = format_size*((width*height)/8); - else - size = width*height*format_size*type_size; - pixels = allocate_buffer_with_string(size); - FORCE_PIXEL_STORE_MODE - glReadPixels(x,y,width,height,format,type,(GLvoid*)RSTRING(pixels)->ptr); - RESTORE_PIXEL_STORE_MODE - return pixels; -} - -static VALUE -gl_DrawPixels(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLsizei width; - GLsizei height; - GLenum format; - GLenum type; - const char *pixels; - GLsizei size; - GLsizei type_size; - GLsizei format_size; - width = (GLsizei)NUM2UINT(arg1); - height = (GLsizei)NUM2UINT(arg2); - format = (GLenum)NUM2INT(arg3); - type = (GLenum)NUM2INT(arg4); - Check_Type(arg5,T_STRING); - type_size = gltype_size(type); - format_size = glformat_size(format); - if (type_size == -1 || format_size == -1) - rb_raise(rb_eArgError, "type/format mismatch"); - if (type==GL_BITMAP) - size = format_size*(width/8); - else - size = type_size*format_size*width*height; - if (RSTRING(arg5)->len < size) - rb_raise(rb_eArgError, "string length:%d", RSTRING(arg5)->len); - pixels = RSTRING(arg5)->ptr; - glDrawPixels(width,height,format,type,pixels); - return Qnil; -} - -static VALUE -gl_GetClipPlane(obj,arg1) -VALUE obj,arg1; -{ - GLenum plane; - GLdouble equation[4] = {0.0,0.0,0.0,0.0}; - VALUE retary; - int i; - plane = (GLenum)NUM2INT(arg1); - glGetClipPlane(plane,equation); - retary = rb_ary_new2(4); - for(i=0;i<4;i++) - rb_ary_push(retary, rb_float_new(equation[i])); - return retary; -} - -#define GLGET_FUNC(_name_,_type_,_conv_) \ -static VALUE \ -gl_Get##_name_##v(obj,arg1) \ -VALUE obj,arg1; \ -{ \ - GLenum pname; \ - int nitems; \ - VALUE ary, ary2; \ - int i,j; \ - _type_ items[32]; \ - pname = NUM2INT(arg1); \ - switch(pname) { \ - case GL_ACCUM_CLEAR_VALUE: \ - case GL_BLEND_COLOR: \ - case GL_COLOR_CLEAR_VALUE: \ - case GL_COLOR_WRITEMASK: \ - case GL_CURRENT_COLOR: \ - case GL_CURRENT_RASTER_COLOR: \ - case GL_CURRENT_RASTER_POSITION: \ - case GL_CURRENT_RASTER_SECONDARY_COLOR: \ - case GL_CURRENT_RASTER_TEXTURE_COORDS: \ - case GL_CURRENT_TEXTURE_COORDS: \ - case GL_FOG_COLOR: \ - case GL_LIGHT_MODEL_AMBIENT: \ - case GL_MAP2_GRID_DOMAIN: \ - case GL_CURRENT_SECONDARY_COLOR: \ - case GL_SCISSOR_BOX: \ - case GL_TEXTURE_ENV_COLOR: \ - case GL_VIEWPORT: \ - nitems = 4; \ - break; \ - case GL_CURRENT_NORMAL: \ - case GL_POINT_DISTANCE_ATTENUATION: \ - nitems = 3; \ - break; \ - case GL_DEPTH_RANGE: \ - case GL_LINE_WIDTH_RANGE: \ - case GL_MAP1_GRID_DOMAIN: \ - case GL_MAP2_GRID_SEGMENTS: \ - case GL_MAX_VIEWPORT_DIMS: \ - case GL_POINT_SIZE_RANGE: \ - case GL_POLYGON_MODE: \ - case GL_ALIASED_LINE_WIDTH_RANGE: \ - case GL_ALIASED_POINT_SIZE_RANGE: \ - nitems = 2; \ - break; \ - case GL_MODELVIEW_MATRIX: \ - case GL_PROJECTION_MATRIX: \ - case GL_TEXTURE_MATRIX: \ - glGet##_name_##v(pname, items); \ - ary = rb_ary_new2(4); \ - for (i = 0; i < 4; i++) { \ - ary2 = rb_ary_new2(4); \ - rb_ary_push(ary, ary2); \ - for (j = 0; j < 4; j++) \ - rb_ary_push(ary2, _conv_(items[i*4+j])); \ - } \ - return ary; \ - case GL_POLYGON_STIPPLE: \ - glGet##_name_##v(pname, items); \ - return rb_str_new((const char*)items, 32); \ - default: /* size=1 */ \ - glGet##_name_##v(pname, items); \ - return _conv_(items[0]); \ - } \ - glGet##_name_##v(pname, items); \ - ary = rb_ary_new2(nitems); \ - for (i = 0; i < nitems; i++) \ - rb_ary_push(ary, _conv_(items[i])); \ - return ary; \ -} - -GLGET_FUNC(Double,GLdouble,rb_float_new) -GLGET_FUNC(Float,GLfloat,rb_float_new) -GLGET_FUNC(Integer,GLint,INT2NUM) -GLGET_FUNC(Boolean,GLboolean,INT2NUM) - -#undef GLGET_FUNC - -static VALUE -gl_GetError(obj) -VALUE obj; -{ - GLenum ret; - ret = glGetError(); - return INT2NUM(ret); -} - -static VALUE -gl_GetLightfv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum light; - GLenum pname; - GLsizei size; - GLfloat params[4] = {0.0,0.0,0.0,0.0}; - VALUE retary; - int i; - light = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - switch(pname) { - case GL_AMBIENT: - case GL_DIFFUSE: - case GL_SPECULAR: - case GL_POSITION: - size = 4; - break; - case GL_SPOT_DIRECTION: - size = 3; - break; - case GL_CONSTANT_ATTENUATION: - case GL_LINEAR_ATTENUATION: - case GL_QUADRATIC_ATTENUATION: - case GL_SPOT_EXPONENT: - case GL_SPOT_CUTOFF: - size = 1; - break; - default: - rb_raise(rb_eArgError, "unknown pname:%d",pname); - break; /* not reached */ - } - glGetLightfv(light,pname,params); - retary = rb_ary_new2(size); - for(i=0;iptr); - RESTORE_PIXEL_STORE_MODE - return pixels; -} - - -static VALUE -gl_GetTexParameterfv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLenum pname; - GLfloat params[4] = {0.0,0.0,0.0,0.0}; - int size; - VALUE retary; - int i; - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - switch(pname) { - case GL_TEXTURE_BORDER_COLOR: - size = 4; - break; - default: - size = 1; - break; - } - glGetTexParameterfv(target,pname,params); - retary = rb_ary_new2(size); - for(i=0;iptr); \ - return Qnil; \ -} - -POINTER_FUNC(Vertex) -POINTER_FUNC(Color) -POINTER_FUNC(TexCoord) - -#undef POINTER_FUNC - -static VALUE -gl_DisableClientState(obj,arg1) -VALUE obj,arg1; -{ - GLenum cap; - cap = (GLenum)NUM2INT(arg1); - glDisableClientState(cap); - return Qnil; -} - -static VALUE -gl_DrawArrays(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum mode; - GLint first; - GLsizei count; - mode = (GLenum)NUM2INT(arg1); - first = (GLint)NUM2INT(arg2); - count = (GLsizei)NUM2UINT(arg3); - glDrawArrays(mode,first,count); - return Qnil; -} - -static VALUE -gl_DrawElements(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLenum mode; - GLsizei count; - GLenum type; - mode = (GLenum)NUM2INT(arg1); - count = (GLsizei)NUM2UINT(arg2); - type = (GLenum)NUM2INT(arg3); - Check_Type(arg4, T_STRING); - glDrawElements(mode, count, type, (const GLvoid*)RSTRING(arg4)->ptr); - return Qnil; -} - -static VALUE -gl_EdgeFlagPointer(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLsizei stride; - stride = (GLsizei)NUM2UINT(arg1); - Check_Type(arg2, T_STRING); - rb_str_freeze(arg2); - g_EdgeFlag_ptr = arg2; - glEdgeFlagPointer(stride, (const GLboolean*)RSTRING(arg2)->ptr); - return Qnil; -} - -static VALUE -gl_EnableClientState(obj,arg1) -VALUE obj,arg1; -{ - GLenum cap; - cap = (GLenum)NUM2INT(arg1); - glEnableClientState(cap); - return Qnil; -} - -static VALUE -gl_GetPointerv(obj,arg1) -VALUE obj,arg1; -{ - GLenum pname; - pname = (GLenum)NUM2INT(arg1); - switch (pname) { - case GL_VERTEX_ARRAY_POINTER: - return g_Vertex_ptr; - case GL_NORMAL_ARRAY_POINTER: - return g_Normal_ptr; - case GL_COLOR_ARRAY_POINTER: - return g_Color_ptr; - case GL_INDEX_ARRAY_POINTER: - return g_Index_ptr; - case GL_TEXTURE_COORD_ARRAY_POINTER: - return g_TexCoord_ptr; - case GL_EDGE_FLAG_ARRAY_POINTER: - return g_EdgeFlag_ptr; - case GL_FOG_COORD_ARRAY_POINTER: - return g_FogCoord_ptr; - case GL_SECONDARY_COLOR_ARRAY_POINTER: - return g_SecondaryColor_ptr; - case GL_FEEDBACK_BUFFER_POINTER: - return g_current_feed_buffer; - case GL_SELECTION_BUFFER_POINTER: - return g_current_sel_buffer; - default: - rb_raise(rb_eArgError, "Invalid pname %d",pname); - break; /* not reached */ - } - return Qnil; -} - -static VALUE -gl_IndexPointer(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum type; - GLsizei stride; - type = (GLenum)NUM2INT(arg1); - stride = (GLsizei)NUM2UINT(arg2); - Check_Type(arg3, T_STRING); - rb_str_freeze(arg3); - g_Index_ptr = arg3; - glIndexPointer(type, stride, (const GLvoid*)RSTRING(arg3)->ptr); - return Qnil; -} - -static VALUE -gl_InterleavedArrays(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum format; - GLsizei stride; - format = (GLenum)NUM2INT(arg1); - stride = (GLsizei)NUM2UINT(arg2); - Check_Type(arg3, T_STRING); - glInterleavedArrays(format, stride, (const GLvoid*)RSTRING(arg3)->ptr); - return Qnil; -} - -static VALUE -gl_NormalPointer(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum type; - GLsizei stride; - type = (GLenum)NUM2INT(arg1); - stride = (GLsizei)NUM2UINT(arg2); - Check_Type(arg3, T_STRING); - rb_str_freeze(arg3); - g_Normal_ptr = arg3; - glNormalPointer(type, stride, (const GLvoid*)RSTRING(arg3)->ptr); - return Qnil; -} - -static VALUE -gl_PolygonOffset(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLfloat factor; - GLfloat units; - factor = (GLfloat)NUM2DBL(arg1); - units = (GLfloat)NUM2DBL(arg2); - glPolygonOffset(factor,units); - return Qnil; -} - -static VALUE -gl_CopyTexImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7; -{ - GLenum target; - GLint level; - GLenum internalformat; - GLint x; - GLint y; - GLsizei width; - GLint border; - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - internalformat = (GLenum)NUM2INT(arg3); - x = (GLint)NUM2INT(arg4); - y = (GLint)NUM2INT(arg5); - width = (GLsizei)NUM2UINT(arg6); - border = (GLint)NUM2INT(arg7); - glCopyTexImage1D(target,level,internalformat,x,y,width,border); - return Qnil; -} - -static VALUE -gl_CopyTexImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8; -{ - GLenum target; - GLint level; - GLenum internalformat; - GLint x; - GLint y; - GLsizei width; - GLsizei height; - GLint border; - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - internalformat = (GLenum)NUM2INT(arg3); - x = (GLint)NUM2INT(arg4); - y = (GLint)NUM2INT(arg5); - width = (GLsizei)NUM2UINT(arg6); - height = (GLsizei)NUM2UINT(arg7); - border = (GLint)NUM2INT(arg8); - glCopyTexImage2D(target,level,internalformat,x,y,width,height,border); - return Qnil; -} - -static VALUE -gl_CopyTexSubImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6; -{ - GLenum target; - GLint level; - GLint xoffset; - GLint x; - GLint y; - GLsizei width; - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - xoffset = (GLint)NUM2INT(arg3); - x = (GLint)NUM2INT(arg4); - y = (GLint)NUM2INT(arg5); - width = (GLsizei)NUM2UINT(arg6); - glCopyTexSubImage1D(target,level,xoffset,x,y,width); - return Qnil; -} - -static VALUE -gl_CopyTexSubImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8; -{ - GLenum target; - GLint level; - GLint xoffset; - GLint yoffset; - GLint x; - GLint y; - GLsizei width; - GLsizei height; - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - xoffset = (GLint)NUM2INT(arg3); - yoffset = (GLint)NUM2INT(arg4); - x = (GLint)NUM2INT(arg5); - y = (GLint)NUM2INT(arg6); - width = (GLsizei)NUM2UINT(arg7); - height = (GLsizei)NUM2UINT(arg8); - glCopyTexSubImage2D(target,level,xoffset,yoffset,x,y,width,height); - return Qnil; -} - -static VALUE -gl_TexSubImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7; -{ - GLenum target; - GLint level; - GLint xoffset; - GLsizei width; - GLenum format; - GLenum type; - const char *pixels; - int size; - int type_size; - int format_size; - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - xoffset = (GLint)NUM2INT(arg3); - width = (GLsizei)NUM2UINT(arg4); - format = (GLenum)NUM2INT(arg5); - type = (GLenum)NUM2INT(arg6); - type_size = gltype_size(type); - format_size = glformat_size(format); - if (type_size == -1 || format_size == -1) - return Qnil; - - if (type==GL_BITMAP) - size = format_size*(width/8); - else - size = type_size*format_size*width; - - if (TYPE(arg7) == T_STRING) { - if (RSTRING(arg7)->len < size) - rb_raise(rb_eArgError, "string length:%d",RSTRING(arg7)->len); - pixels = RSTRING(arg7)->ptr; - } else if (TYPE(arg7) == T_FIXNUM || TYPE(arg7) == T_BIGNUM) { /* arg7 is offset to unpack buffer */ - pixels = (const char *)NUM2UINT(arg7); - } else { - Check_Type(arg7,T_STRING); /* force exception */ - return Qnil; - } - glTexSubImage1D(target,level,xoffset,width,format,type,pixels); - return Qnil; -} - -static VALUE -gl_TexSubImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9; -{ - GLenum target; - GLint level; - GLint xoffset; - GLint yoffset; - GLsizei width; - GLsizei height; - GLenum format; - GLenum type; - const char *pixels; - int size; - int type_size; - int format_size; - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - xoffset = (GLint)NUM2INT(arg3); - yoffset = (GLint)NUM2INT(arg4); - width = (GLsizei)NUM2UINT(arg5); - height = (GLsizei)NUM2UINT(arg6); - format = (GLenum)NUM2INT(arg7); - type = (GLenum)NUM2INT(arg8); - type_size = gltype_size(type); - format_size = glformat_size(format); - if (type_size == -1 || format_size == -1) - return Qnil; - if (type==GL_BITMAP) - size = format_size*((height*width)/8); - else - size = type_size*format_size*height*width; - if (TYPE(arg9) == T_STRING) { - if (RSTRING(arg9)->len < size) - rb_raise(rb_eArgError, "string length:%d",RSTRING(arg9)->len); - pixels = RSTRING(arg9)->ptr; - } else if (TYPE(arg9) == T_FIXNUM || TYPE(arg9) == T_BIGNUM) { /* arg9 is offset to unpack buffer */ - pixels = (const char *)NUM2UINT(arg9); - } else { - Check_Type(arg9,T_STRING); /* force exception */ - return Qnil; - } - glTexSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixels); - return Qnil; -} - -static VALUE -gl_AreTexturesResident(obj,arg1) -VALUE obj,arg1; -{ - GLuint *textures; - GLboolean *residences; - GLsizei size; - GLboolean r; - VALUE retary; - int i; - Check_Type(arg1,T_ARRAY); - size = RARRAY(arg1)->len; - textures = ALLOC_N(GLuint,size); - residences = ALLOC_N(GLboolean,size); - ary2cuint(arg1,textures,size); - r = glAreTexturesResident(size,textures,residences); - retary = rb_ary_new2(size); - if (r==GL_TRUE) { /* all are resident */ - for(i=0;ilen; - textures = ALLOC_N(GLuint,n); - ary2cuint(arg1,textures,n); - glDeleteTextures( n, textures); - xfree(textures); - return Qnil; -} - -static VALUE -gl_GenTextures(obj,arg1) -VALUE obj,arg1; -{ - GLsizei n; - GLuint *textures; - RArray *ret; - int i; - n = (GLsizei)NUM2UINT(arg1); - textures = ALLOC_N(GLuint, n); - glGenTextures(n, textures); - ret = RARRAY(rb_ary_new2(n)); - for (i = 0; i < n; i++) - rb_ary_push((VALUE)ret, INT2NUM(textures[i])); - xfree(textures); - return (VALUE)ret; -} - -static VALUE -gl_IsTexture(obj,arg1) -VALUE obj,arg1; -{ - GLuint texture; - GLboolean ret; - texture = (GLuint)NUM2UINT(arg1); - ret = glIsTexture(texture); - return INT2NUM(ret); -} - -static VALUE -gl_PrioritizeTextures(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint *textures; - GLclampf *priorities; - GLsizei size; - Check_Type(arg1,T_ARRAY); - Check_Type(arg2,T_ARRAY); - if ((size = RARRAY(arg1)->len) != RARRAY(arg2)->len) - rb_raise(rb_eArgError, "passed arrays must have the same length"); - textures = ALLOC_N(GLuint,size); - priorities = ALLOC_N(GLclampf,size); - ary2cuint(arg1,textures,size); - ary2cflt(arg2,priorities,size); - glPrioritizeTextures(size,textures,priorities); - xfree(textures); - xfree(priorities); - return Qnil; -} - -static VALUE -gl_Indexub(obj,arg1) -VALUE obj,arg1; -{ - GLubyte c; - c = (GLubyte)NUM2INT(arg1); - glIndexub(c); - return Qnil; -} - -static VALUE -gl_Indexubv(obj,arg1) -VALUE obj,arg1; -{ - GLubyte c[1] = {0}; - Check_Type(arg1,T_ARRAY); - ary2cubyte(arg1,c,1); - glIndexubv(c); - return Qnil; -} - -static VALUE -gl_PopClientAttrib(obj) -VALUE obj; -{ - glPopClientAttrib(); - return Qnil; -} - -static VALUE -gl_PushClientAttrib(obj,arg1) -VALUE obj,arg1; -{ - GLbitfield mask; - mask = (GLbitfield)NUM2UINT(arg1); - glPushClientAttrib(mask); - return Qnil; -} - -/* additional functions */ - -#define GLCOLOR_VFUNC(_type_) \ -static VALUE \ -gl_Color##_type_##v(argc,argv,obj) \ -int argc; \ -VALUE *argv; \ -VALUE obj; \ -{ \ - int num; \ - VALUE args[4]; \ - RArray *ary; \ - switch (num = rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \ - case 1: \ - if (TYPE(args[0]) == T_ARRAY) { \ - ary = RARRAY(args[0]); \ - switch (ary->len) { \ - case 3: \ - gl_Color3##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2]); \ - break; \ - case 4: \ - gl_Color4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "array length:%d", ary->len); \ - } \ - } \ - else \ - Check_Type(args[0],T_ARRAY); /* force exception */ \ - break; \ - case 3: \ - gl_Color3##_type_(obj,args[0], args[1], args[2]); \ - break; \ - case 4: \ - gl_Color4##_type_(obj,args[0], args[1], args[2], args[3]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "arg length:%d", num); \ - } \ - return Qnil; \ -} - -GLCOLOR_VFUNC(b) -GLCOLOR_VFUNC(d) -GLCOLOR_VFUNC(f) -GLCOLOR_VFUNC(i) -GLCOLOR_VFUNC(s) -GLCOLOR_VFUNC(ub) -GLCOLOR_VFUNC(ui) -GLCOLOR_VFUNC(us) -#undef GLCOLOR_VFUNC - -#define GLNORMAL_VFUNC(_type_) \ -static VALUE \ -gl_Normal##_type_##v(argc,argv,obj) \ -int argc; \ -VALUE *argv; \ -VALUE obj; \ -{ \ - int num; \ - VALUE args[3]; \ - RArray* ary; \ - switch (num = rb_scan_args(argc, argv, "12", &args[0], &args[1], &args[2])) { \ - case 1: \ - if (TYPE(args[0]) == T_ARRAY) { \ - ary = RARRAY(args[0]); \ - switch (ary->len) { \ - case 3: \ - gl_Normal3##_type_(obj,ary->ptr[0], ary->ptr[1],ary->ptr[2]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "array length:%d", ary->len); \ - } \ - } \ - else \ - Check_Type(args[0],T_ARRAY); /* force exception */ \ - break; \ - case 3: \ - gl_Normal3##_type_(obj,args[0], args[1], args[2]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "arg length:%d",num); \ - } \ - return Qnil; \ -} - -GLNORMAL_VFUNC(b) -GLNORMAL_VFUNC(d) -GLNORMAL_VFUNC(f) -GLNORMAL_VFUNC(i) -GLNORMAL_VFUNC(s) -#undef GLNORMAL_VFUNC - -#define GLRASTERPOS_VFUNC(_type_) \ -static VALUE \ -gl_RasterPos##_type_##v(argc,argv,obj) \ -int argc; \ -VALUE *argv; \ -VALUE obj; \ -{ \ - int num; \ - VALUE args[4]; \ - RArray *ary; \ - switch (num = rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \ - case 1: \ - if (TYPE(args[0]) == T_ARRAY) { \ - ary = RARRAY(args[0]); \ - switch (ary->len) { \ - case 2: \ - gl_RasterPos2##_type_(obj,ary->ptr[0],ary->ptr[1]); \ - break; \ - case 3: \ - gl_RasterPos3##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2]); \ - break; \ - case 4: \ - gl_RasterPos4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "array length:%d", num); \ - } \ - } \ - else \ - Check_Type(args[0],T_ARRAY); /* force exception */ \ - break; \ - case 2: \ - gl_RasterPos2##_type_(obj,args[0], args[1]); \ - break; \ - case 3: \ - gl_RasterPos3##_type_(obj,args[0], args[1], args[2]); \ - break; \ - case 4: \ - gl_RasterPos4##_type_(obj,args[0], args[1], args[2], args[3]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "too many arguments"); \ - } \ - return Qnil; \ -} - -GLRASTERPOS_VFUNC(d) -GLRASTERPOS_VFUNC(f) -GLRASTERPOS_VFUNC(i) -GLRASTERPOS_VFUNC(s) -#undef GLRASTERPOS_VFUNC - -#define GLRECT_VFUNC(_type_) \ -static VALUE \ -gl_Rect##_type_##v(argc,argv,obj) \ -int argc; \ -VALUE *argv; \ -VALUE obj; \ -{ \ - int num; \ - VALUE args[4]; \ - RArray *ary,*ary2; \ - switch (num = rb_scan_args(argc, argv, "22", &args[0], &args[1], &args[2], &args[3])) { \ - case 2: \ - if (TYPE(args[0]) == T_ARRAY && TYPE(args[1]) == T_ARRAY) { \ - ary = RARRAY(args[0]); \ - ary2 = RARRAY(args[1]); \ - switch (ary->len) { \ - case 2: \ - gl_Rect##_type_(obj,ary->ptr[0],ary->ptr[1],ary2->ptr[0],ary2->ptr[1]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "array length:%d", ary->len); \ - } \ - } \ - else \ - Check_Type(args[0],T_ARRAY); /* force exception */ \ - break; \ - case 4: \ - gl_Rect##_type_(obj,args[0], args[1], args[2], args[3]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "arg length:%d", num); \ - } \ - return Qnil; \ -} - -GLRECT_VFUNC(d) -GLRECT_VFUNC(f) -GLRECT_VFUNC(i) -GLRECT_VFUNC(s) -#undef GLRECT_VFUNC - -#define GLTEXCOORD_VFUNC(_type_) \ -static VALUE \ -gl_TexCoord##_type_##v(argc,argv,obj) \ -int argc; \ -VALUE *argv; \ -VALUE obj; \ -{ \ - int num; \ - VALUE args[4]; \ - RArray *ary; \ - switch (num = rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \ - case 1: \ - if (TYPE(args[0]) == T_ARRAY) { \ - ary = RARRAY(args[0]); \ - switch (ary->len) { \ - case 1: \ - gl_TexCoord1##_type_(obj,ary->ptr[0]); \ - break; \ - case 2: \ - gl_TexCoord2##_type_(obj,ary->ptr[0],ary->ptr[1]); \ - break; \ - case 3: \ - gl_TexCoord3##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2]); \ - break; \ - case 4: \ - gl_TexCoord4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "array length:%d", num); \ - } \ - } \ - else \ - gl_TexCoord1##_type_(obj,args[0]); \ - break; \ - case 2: \ - gl_TexCoord2##_type_(obj,args[0], args[1]); \ - break; \ - case 3: \ - gl_TexCoord3##_type_(obj,args[0], args[1], args[2]); \ - break; \ - case 4: \ - gl_TexCoord4##_type_(obj,args[0], args[1], args[2], args[3]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "too many arguments"); \ - break; \ - } \ - return Qnil; \ -} - -GLTEXCOORD_VFUNC(d) -GLTEXCOORD_VFUNC(f) -GLTEXCOORD_VFUNC(i) -GLTEXCOORD_VFUNC(s) -#undef GLTEXCOORD_VFUNC - -#define GLVERTEX_VFUNC(_type_) \ -static VALUE \ -gl_Vertex##_type_##v(argc,argv,obj) \ -int argc; \ -VALUE *argv; \ -VALUE obj; \ -{ \ - VALUE args[4]; \ - RArray *ary; \ - switch (rb_scan_args(argc, argv, "13", &args[0], &args[1], &args[2], &args[3])) { \ - case 1: \ - if (TYPE(args[0]) == T_ARRAY) { \ - ary = RARRAY(args[0]); \ - switch (ary->len) { \ - case 2: \ - gl_Vertex2##_type_(obj,ary->ptr[0],ary->ptr[1]); \ - break; \ - case 3: \ - gl_Vertex3##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2]); \ - break; \ - case 4: \ - gl_Vertex4##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \ - break; \ - default: \ - rb_raise(rb_eRuntimeError, "glVertex vertex num error!:%d", ary->len); \ - } \ - } \ - else \ - Check_Type(args[0],T_ARRAY); /* force exception */ \ - break; \ - case 2: \ - gl_Vertex2##_type_(obj,args[0], args[1]); \ - break; \ - case 3: \ - gl_Vertex3##_type_(obj,args[0], args[1], args[2]); \ - break; \ - case 4: \ - gl_Vertex4##_type_(obj,args[0], args[1], args[2], args[3]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "too many arguments"); \ - break; \ - } \ - return Qnil; \ -} - -GLVERTEX_VFUNC(d) -GLVERTEX_VFUNC(f) -GLVERTEX_VFUNC(i) -GLVERTEX_VFUNC(s) -#undef GLVERTEX_VFUNC - -/* */ - -static VALUE -gl_LightModel(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - if (TYPE(arg2) == T_ARRAY) - gl_LightModelfv(obj,arg1,arg2); - else - gl_LightModelf(obj,arg1,arg2); - - return Qnil; -} - -static VALUE -gl_Material(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - if (TYPE(arg3) == T_ARRAY) - gl_Materialfv(obj,arg1,arg2,arg3); - else - gl_Materialf(obj,arg1,arg2,arg3); - - return Qnil; -} - -static VALUE -gl_Fog(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - if (TYPE(arg2) == T_ARRAY) - gl_Fogfv(obj,arg1,arg2); - else - gl_Fogf(obj,arg1,arg2); - - return Qnil; -} - -static VALUE -gl_Light(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - if (TYPE(arg3) == T_ARRAY) - gl_Lightfv(obj,arg1,arg2,arg3); - else - gl_Lightf(obj,arg1,arg2,arg3); - - return Qnil; -} - -static VALUE -gl_TexParameter(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - if (TYPE(arg3) == T_ARRAY) - gl_TexParameterfv(obj,arg1,arg2,arg3); - else - gl_TexParameterf(obj,arg1,arg2,arg3); - - return Qnil; -} - -static VALUE -gl_TexEnv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - if (TYPE(arg3) == T_ARRAY) - gl_TexEnvfv(obj,arg1,arg2,arg3); - else - gl_TexEnvf(obj,arg1,arg2,arg3); - - return Qnil; -} - -static VALUE -gl_TexGen(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - if (TYPE(arg3) == T_ARRAY) - gl_TexGenfv(obj,arg1,arg2,arg3); - else - gl_TexGenf(obj,arg1,arg2,arg3); - - return Qnil; -} - -/* init */ -void gl_init_functions_1_0__1_1(VALUE module) -{ - g_FogCoord_ptr = 0; /* for use in gl-1.4.c */ - g_SecondaryColor_ptr = 0; /* for use in gl-1.4.c */ - - /* OpenGL 1.0 functions */ - rb_define_module_function(module, "glNewList", gl_NewList, 2); - rb_define_module_function(module, "glEndList", gl_EndList, 0); - rb_define_module_function(module, "glCallList", gl_CallList, 1); - rb_define_module_function(module, "glCallLists", gl_CallLists, 1); - rb_define_module_function(module, "glDeleteLists", gl_DeleteLists, 2); - rb_define_module_function(module, "glGenLists", gl_GenLists, 1); - rb_define_module_function(module, "glListBase", gl_ListBase, 1); - rb_define_module_function(module, "glBegin", gl_Begin, 1); - rb_define_module_function(module, "glBitmap", gl_Bitmap, 7); - rb_define_module_function(module, "glColor3b", gl_Color3b, 3); - rb_define_module_function(module, "glColor3d", gl_Color3d, 3); - rb_define_module_function(module, "glColor3f", gl_Color3f, 3); - rb_define_module_function(module, "glColor3i", gl_Color3i, 3); - rb_define_module_function(module, "glColor3s", gl_Color3s, 3); - rb_define_module_function(module, "glColor3ub", gl_Color3ub, 3); - rb_define_module_function(module, "glColor3ui", gl_Color3ui, 3); - rb_define_module_function(module, "glColor3us", gl_Color3us, 3); - rb_define_module_function(module, "glColor4b", gl_Color4b, 4); - rb_define_module_function(module, "glColor4d", gl_Color4d, 4); - rb_define_module_function(module, "glColor4f", gl_Color4f, 4); - rb_define_module_function(module, "glColor4i", gl_Color4i, 4); - rb_define_module_function(module, "glColor4s", gl_Color4s, 4); - rb_define_module_function(module, "glColor4ub", gl_Color4ub, 4); - rb_define_module_function(module, "glColor4ui", gl_Color4ui, 4); - rb_define_module_function(module, "glColor4us", gl_Color4us, 4); - rb_define_module_function(module, "glEdgeFlag", gl_EdgeFlag, 1); - rb_define_module_function(module, "glEdgeFlagv", gl_EdgeFlagv, 1); - rb_define_module_function(module, "glEnd", gl_End, 0); - rb_define_module_function(module, "glIndexd", gl_Indexd, 1); - rb_define_module_function(module, "glIndexdv", gl_Indexdv, 1); - rb_define_module_function(module, "glIndexf", gl_Indexf, 1); - rb_define_module_function(module, "glIndexfv", gl_Indexfv, 1); - rb_define_module_function(module, "glIndexi", gl_Indexi, 1); - rb_define_module_function(module, "glIndexiv", gl_Indexiv, 1); - rb_define_module_function(module, "glIndexs", gl_Indexs, 1); - rb_define_module_function(module, "glIndexsv", gl_Indexsv, 1); - rb_define_module_function(module, "glNormal3b", gl_Normal3b, 3); - rb_define_module_function(module, "glNormal3d", gl_Normal3d, 3); - rb_define_module_function(module, "glNormal3f", gl_Normal3f, 3); - rb_define_module_function(module, "glNormal3i", gl_Normal3i, 3); - rb_define_module_function(module, "glNormal3s", gl_Normal3s, 3); - rb_define_module_function(module, "glRasterPos2d", gl_RasterPos2d, 2); - rb_define_module_function(module, "glRasterPos2f", gl_RasterPos2f, 2); - rb_define_module_function(module, "glRasterPos2i", gl_RasterPos2i, 2); - rb_define_module_function(module, "glRasterPos2s", gl_RasterPos2s, 2); - rb_define_module_function(module, "glRasterPos3d", gl_RasterPos3d, 3); - rb_define_module_function(module, "glRasterPos3f", gl_RasterPos3f, 3); - rb_define_module_function(module, "glRasterPos3i", gl_RasterPos3i, 3); - rb_define_module_function(module, "glRasterPos3s", gl_RasterPos3s, 3); - rb_define_module_function(module, "glRasterPos4d", gl_RasterPos4d, 4); - rb_define_module_function(module, "glRasterPos4f", gl_RasterPos4f, 4); - rb_define_module_function(module, "glRasterPos4i", gl_RasterPos4i, 4); - rb_define_module_function(module, "glRasterPos4s", gl_RasterPos4s, 4); - rb_define_module_function(module, "glRectd", gl_Rectd, 4); - rb_define_module_function(module, "glRectf", gl_Rectf, 4); - rb_define_module_function(module, "glRecti", gl_Recti, 4); - rb_define_module_function(module, "glRects", gl_Rects, 4); - rb_define_module_function(module, "glTexCoord1d", gl_TexCoord1d, 1); - rb_define_module_function(module, "glTexCoord1f", gl_TexCoord1f, 1); - rb_define_module_function(module, "glTexCoord1i", gl_TexCoord1i, 1); - rb_define_module_function(module, "glTexCoord1s", gl_TexCoord1s, 1); - rb_define_module_function(module, "glTexCoord2d", gl_TexCoord2d, 2); - rb_define_module_function(module, "glTexCoord2f", gl_TexCoord2f, 2); - rb_define_module_function(module, "glTexCoord2i", gl_TexCoord2i, 2); - rb_define_module_function(module, "glTexCoord2s", gl_TexCoord2s, 2); - rb_define_module_function(module, "glTexCoord3d", gl_TexCoord3d, 3); - rb_define_module_function(module, "glTexCoord3f", gl_TexCoord3f, 3); - rb_define_module_function(module, "glTexCoord3i", gl_TexCoord3i, 3); - rb_define_module_function(module, "glTexCoord3s", gl_TexCoord3s, 3); - rb_define_module_function(module, "glTexCoord4d", gl_TexCoord4d, 4); - rb_define_module_function(module, "glTexCoord4f", gl_TexCoord4f, 4); - rb_define_module_function(module, "glTexCoord4i", gl_TexCoord4i, 4); - rb_define_module_function(module, "glTexCoord4s", gl_TexCoord4s, 4); - rb_define_module_function(module, "glVertex2d", gl_Vertex2d, 2); - rb_define_module_function(module, "glVertex2f", gl_Vertex2f, 2); - rb_define_module_function(module, "glVertex2i", gl_Vertex2i, 2); - rb_define_module_function(module, "glVertex2s", gl_Vertex2s, 2); - rb_define_module_function(module, "glVertex3d", gl_Vertex3d, 3); - rb_define_module_function(module, "glVertex3f", gl_Vertex3f, 3); - rb_define_module_function(module, "glVertex3i", gl_Vertex3i, 3); - rb_define_module_function(module, "glVertex3s", gl_Vertex3s, 3); - rb_define_module_function(module, "glVertex4d", gl_Vertex4d, 4); - rb_define_module_function(module, "glVertex4f", gl_Vertex4f, 4); - rb_define_module_function(module, "glVertex4i", gl_Vertex4i, 4); - rb_define_module_function(module, "glVertex4s", gl_Vertex4s, 4); - rb_define_module_function(module, "glClipPlane", gl_ClipPlane, 2); - rb_define_module_function(module, "glColorMaterial", gl_ColorMaterial, 2); - rb_define_module_function(module, "glCullFace", gl_CullFace, 1); - rb_define_module_function(module, "glFogf", gl_Fogf, 2); - rb_define_module_function(module, "glFogfv", gl_Fogfv, 2); - rb_define_module_function(module, "glFogi", gl_Fogi, 2); - rb_define_module_function(module, "glFogiv", gl_Fogiv, 2); - rb_define_module_function(module, "glFrontFace", gl_FrontFace, 1); - rb_define_module_function(module, "glHint", gl_Hint, 2); - rb_define_module_function(module, "glLightf", gl_Lightf, 3); - rb_define_module_function(module, "glLightfv", gl_Lightfv, 3); - rb_define_module_function(module, "glLighti", gl_Lighti, 3); - rb_define_module_function(module, "glLightiv", gl_Lightiv, 3); - rb_define_module_function(module, "glLightModelf", gl_LightModelf, 2); - rb_define_module_function(module, "glLightModelfv", gl_LightModelfv, 2); - rb_define_module_function(module, "glLightModeli", gl_LightModeli, 2); - rb_define_module_function(module, "glLightModeliv", gl_LightModeliv, 2); - rb_define_module_function(module, "glLineStipple", gl_LineStipple, 2); - rb_define_module_function(module, "glLineWidth", gl_LineWidth, 1); - rb_define_module_function(module, "glMaterialf", gl_Materialf, 3); - rb_define_module_function(module, "glMaterialfv", gl_Materialfv, 3); - rb_define_module_function(module, "glMateriali", gl_Materiali, 3); - rb_define_module_function(module, "glMaterialiv", gl_Materialiv, 3); - rb_define_module_function(module, "glPointSize", gl_PointSize, 1); - rb_define_module_function(module, "glPolygonMode", gl_PolygonMode, 2); - rb_define_module_function(module, "glPolygonStipple", gl_PolygonStipple, 1); - rb_define_module_function(module, "glScissor", gl_Scissor, 4); - rb_define_module_function(module, "glShadeModel", gl_ShadeModel, 1); - rb_define_module_function(module, "glTexParameterf", gl_TexParameterf, 3); - rb_define_module_function(module, "glTexParameterfv", gl_TexParameterfv, 3); - rb_define_module_function(module, "glTexParameteri", gl_TexParameteri, 3); - rb_define_module_function(module, "glTexParameteriv", gl_TexParameteriv, 3); - rb_define_module_function(module, "glTexImage1D", gl_TexImage1D, 8); - rb_define_module_function(module, "glTexImage2D", gl_TexImage2D, 9); - rb_define_module_function(module, "glTexEnvf", gl_TexEnvf, 3); - rb_define_module_function(module, "glTexEnvfv", gl_TexEnvfv, 3); - rb_define_module_function(module, "glTexEnvi", gl_TexEnvi, 3); - rb_define_module_function(module, "glTexEnviv", gl_TexEnviv, 3); - rb_define_module_function(module, "glTexGend", gl_TexGend, 3); - rb_define_module_function(module, "glTexGendv", gl_TexGendv, 3); - rb_define_module_function(module, "glTexGenf", gl_TexGenf, 3); - rb_define_module_function(module, "glTexGenfv", gl_TexGenfv, 3); - rb_define_module_function(module, "glTexGeni", gl_TexGeni, 3); - rb_define_module_function(module, "glTexGeniv", gl_TexGeniv, 3); - rb_define_module_function(module, "glFeedbackBuffer", gl_FeedbackBuffer, 2); - rb_define_module_function(module, "glSelectBuffer", gl_SelectBuffer, 1); - rb_define_module_function(module, "glRenderMode", gl_RenderMode, 1); - rb_define_module_function(module, "glInitNames", gl_InitNames, 0); - rb_define_module_function(module, "glLoadName", gl_LoadName, 1); - rb_define_module_function(module, "glPassThrough", gl_PassThrough, 1); - rb_define_module_function(module, "glPopName", gl_PopName, 0); - rb_define_module_function(module, "glPushName", gl_PushName, 1); - rb_define_module_function(module, "glDrawBuffer", gl_DrawBuffer, 1); - rb_define_module_function(module, "glClear", gl_Clear, 1); - rb_define_module_function(module, "glClearAccum", gl_ClearAccum, 4); - rb_define_module_function(module, "glClearIndex", gl_ClearIndex, 1); - rb_define_module_function(module, "glClearColor", gl_ClearColor, 4); - rb_define_module_function(module, "glClearStencil", gl_ClearStencil, 1); - rb_define_module_function(module, "glClearDepth", gl_ClearDepth, 1); - rb_define_module_function(module, "glStencilMask", gl_StencilMask, 1); - rb_define_module_function(module, "glColorMask", gl_ColorMask, 4); - rb_define_module_function(module, "glDepthMask", gl_DepthMask, 1); - rb_define_module_function(module, "glIndexMask", gl_IndexMask, 1); - rb_define_module_function(module, "glAccum", gl_Accum, 2); - rb_define_module_function(module, "glDisable", gl_Disable, 1); - rb_define_module_function(module, "glEnable", gl_Enable, 1); - rb_define_module_function(module, "glFinish", gl_Finish, 0); - rb_define_module_function(module, "glFlush", gl_Flush, 0); - rb_define_module_function(module, "glPopAttrib", gl_PopAttrib, 0); - rb_define_module_function(module, "glPushAttrib", gl_PushAttrib, 1); - rb_define_module_function(module, "glMap1d", gl_Map1d, 6); - rb_define_module_function(module, "glMap1f", gl_Map1f, 6); - rb_define_module_function(module, "glMap2d", gl_Map2d, 10); - rb_define_module_function(module, "glMap2f", gl_Map2f, 10); - rb_define_module_function(module, "glMapGrid1d", gl_MapGrid1d, 3); - rb_define_module_function(module, "glMapGrid1f", gl_MapGrid1f, 3); - rb_define_module_function(module, "glMapGrid2d", gl_MapGrid2d, 6); - rb_define_module_function(module, "glMapGrid2f", gl_MapGrid2f, 6); - rb_define_module_function(module, "glEvalCoord1d", gl_EvalCoord1d, 1); - rb_define_module_function(module, "glEvalCoord1dv", gl_EvalCoord1dv, 1); - rb_define_module_function(module, "glEvalCoord1f", gl_EvalCoord1f, 1); - rb_define_module_function(module, "glEvalCoord1fv", gl_EvalCoord1fv, 1); - rb_define_module_function(module, "glEvalCoord2d", gl_EvalCoord2d, 2); - rb_define_module_function(module, "glEvalCoord2dv", gl_EvalCoord2dv, 1); - rb_define_module_function(module, "glEvalCoord2f", gl_EvalCoord2f, 2); - rb_define_module_function(module, "glEvalCoord2fv", gl_EvalCoord2fv, 1); - rb_define_module_function(module, "glEvalMesh1", gl_EvalMesh1, 3); - rb_define_module_function(module, "glEvalPoint1", gl_EvalPoint1, 1); - rb_define_module_function(module, "glEvalMesh2", gl_EvalMesh2, 5); - rb_define_module_function(module, "glEvalPoint2", gl_EvalPoint2, 2); - rb_define_module_function(module, "glAlphaFunc", gl_AlphaFunc, 2); - rb_define_module_function(module, "glBlendFunc", gl_BlendFunc, 2); - rb_define_module_function(module, "glLogicOp", gl_LogicOp, 1); - rb_define_module_function(module, "glStencilFunc", gl_StencilFunc, 3); - rb_define_module_function(module, "glStencilOp", gl_StencilOp, 3); - rb_define_module_function(module, "glDepthFunc", gl_DepthFunc, 1); - rb_define_module_function(module, "glPixelZoom", gl_PixelZoom, 2); - rb_define_module_function(module, "glPixelTransferf", gl_PixelTransferf, 2); - rb_define_module_function(module, "glPixelTransferi", gl_PixelTransferi, 2); - rb_define_module_function(module, "glPixelStoref", gl_PixelStoref, 2); - rb_define_module_function(module, "glPixelStorei", gl_PixelStorei, 2); - rb_define_module_function(module, "glPixelMapfv", gl_PixelMapfv, 2); - rb_define_module_function(module, "glPixelMapuiv", gl_PixelMapuiv, 2); - rb_define_module_function(module, "glPixelMapusv", gl_PixelMapusv, 2); - rb_define_module_function(module, "glReadBuffer", gl_ReadBuffer, 1); - rb_define_module_function(module, "glCopyPixels", gl_CopyPixels, 5); - rb_define_module_function(module, "glReadPixels", gl_ReadPixels, 6); - rb_define_module_function(module, "glDrawPixels", gl_DrawPixels, 5); - rb_define_module_function(module, "glGetBooleanv", gl_GetBooleanv, 1); - rb_define_module_function(module, "glGetClipPlane", gl_GetClipPlane, 1); - rb_define_module_function(module, "glGetDoublev", gl_GetDoublev, 1); - rb_define_module_function(module, "glGetError", gl_GetError, 0); - rb_define_module_function(module, "glGetFloatv", gl_GetFloatv, 1); - rb_define_module_function(module, "glGetIntegerv", gl_GetIntegerv, 1); - rb_define_module_function(module, "glGetLightfv", gl_GetLightfv, 2); - rb_define_module_function(module, "glGetLightiv", gl_GetLightiv, 2); - rb_define_module_function(module, "glGetMapdv", gl_GetMapdv, 2); - rb_define_module_function(module, "glGetMapfv", gl_GetMapfv, 2); - rb_define_module_function(module, "glGetMapiv", gl_GetMapiv, 2); - rb_define_module_function(module, "glGetMaterialfv", gl_GetMaterialfv, 2); - rb_define_module_function(module, "glGetMaterialiv", gl_GetMaterialiv, 2); - rb_define_module_function(module, "glGetPixelMapfv", gl_GetPixelMapfv, 1); - rb_define_module_function(module, "glGetPixelMapuiv", gl_GetPixelMapuiv, 1); - rb_define_module_function(module, "glGetPixelMapusv", gl_GetPixelMapusv, 1); - rb_define_module_function(module, "glGetPolygonStipple", gl_GetPolygonStipple, 0); - rb_define_module_function(module, "glGetString", gl_GetString, 1); - rb_define_module_function(module, "glGetTexEnvfv", gl_GetTexEnvfv, 2); - rb_define_module_function(module, "glGetTexEnviv", gl_GetTexEnviv, 2); - rb_define_module_function(module, "glGetTexGendv", gl_GetTexGendv, 2); - rb_define_module_function(module, "glGetTexGenfv", gl_GetTexGenfv, 2); - rb_define_module_function(module, "glGetTexGeniv", gl_GetTexGeniv, 2); - rb_define_module_function(module, "glGetTexImage", gl_GetTexImage, 4); - rb_define_module_function(module, "glGetTexParameterfv", gl_GetTexParameterfv, 2); - rb_define_module_function(module, "glGetTexParameteriv", gl_GetTexParameteriv, 2); - rb_define_module_function(module, "glGetTexLevelParameterfv", gl_GetTexLevelParameterfv, 3); - rb_define_module_function(module, "glGetTexLevelParameteriv", gl_GetTexLevelParameteriv, 3); - rb_define_module_function(module, "glIsEnabled", gl_IsEnabled, 1); - rb_define_module_function(module, "glIsList", gl_IsList, 1); - rb_define_module_function(module, "glDepthRange", gl_DepthRange, 2); - rb_define_module_function(module, "glFrustum", gl_Frustum, 6); - rb_define_module_function(module, "glLoadIdentity", gl_LoadIdentity, 0); - rb_define_module_function(module, "glLoadMatrixf", gl_LoadMatrixf, 1); - rb_define_module_function(module, "glLoadMatrixd", gl_LoadMatrixd, 1); - rb_define_module_function(module, "glMatrixMode", gl_MatrixMode, 1); - rb_define_module_function(module, "glMultMatrixf", gl_MultMatrixf, 1); - rb_define_module_function(module, "glMultMatrixd", gl_MultMatrixd, 1); - rb_define_module_function(module, "glOrtho", gl_Ortho, 6); - rb_define_module_function(module, "glPopMatrix", gl_PopMatrix, 0); - rb_define_module_function(module, "glPushMatrix", gl_PushMatrix, 0); - rb_define_module_function(module, "glRotated", gl_Rotated, 4); - rb_define_module_function(module, "glRotatef", gl_Rotatef, 4); - rb_define_module_function(module, "glScaled", gl_Scaled, 3); - rb_define_module_function(module, "glScalef", gl_Scalef, 3); - rb_define_module_function(module, "glTranslated", gl_Translated, 3); - rb_define_module_function(module, "glTranslatef", gl_Translatef, 3); - rb_define_module_function(module, "glViewport", gl_Viewport, 4); - - /* OpenGL 1.1 functions */ - rb_define_module_function(module, "glArrayElement", gl_ArrayElement, 1); - rb_define_module_function(module, "glColorPointer", gl_ColorPointer, 4); - rb_define_module_function(module, "glDisableClientState", gl_DisableClientState, 1); - rb_define_module_function(module, "glDrawArrays", gl_DrawArrays, 3); - rb_define_module_function(module, "glDrawElements", gl_DrawElements, 4); - rb_define_module_function(module, "glEdgeFlagPointer", gl_EdgeFlagPointer, 2); - rb_define_module_function(module, "glEnableClientState", gl_EnableClientState, 1); - rb_define_module_function(module, "glGetPointerv", gl_GetPointerv, 1); - rb_define_module_function(module, "glIndexPointer", gl_IndexPointer, 3); - rb_define_module_function(module, "glInterleavedArrays", gl_InterleavedArrays, 3); - rb_define_module_function(module, "glNormalPointer", gl_NormalPointer, 3); - rb_define_module_function(module, "glTexCoordPointer", gl_TexCoordPointer, 4); - rb_define_module_function(module, "glVertexPointer", gl_VertexPointer, 4); - rb_define_module_function(module, "glPolygonOffset", gl_PolygonOffset, 2); - rb_define_module_function(module, "glCopyTexImage1D", gl_CopyTexImage1D, 7); - rb_define_module_function(module, "glCopyTexImage2D", gl_CopyTexImage2D, 8); - rb_define_module_function(module, "glCopyTexSubImage1D", gl_CopyTexSubImage1D, 6); - rb_define_module_function(module, "glCopyTexSubImage2D", gl_CopyTexSubImage2D, 8); - rb_define_module_function(module, "glTexSubImage1D", gl_TexSubImage1D, 7); - rb_define_module_function(module, "glTexSubImage2D", gl_TexSubImage2D, 9); - rb_define_module_function(module, "glAreTexturesResident", gl_AreTexturesResident, 1); - rb_define_module_function(module, "glBindTexture", gl_BindTexture, 2); - rb_define_module_function(module, "glDeleteTextures", gl_DeleteTextures, 1); - rb_define_module_function(module, "glGenTextures", gl_GenTextures, 1); - rb_define_module_function(module, "glIsTexture", gl_IsTexture, 1); - rb_define_module_function(module, "glPrioritizeTextures", gl_PrioritizeTextures, 2); - rb_define_module_function(module, "glIndexub", gl_Indexub, 1); - rb_define_module_function(module, "glIndexubv", gl_Indexubv, 1); - rb_define_module_function(module, "glPopClientAttrib", gl_PopClientAttrib, 0); - rb_define_module_function(module, "glPushClientAttrib", gl_PushClientAttrib, 1); - - /* additional functions */ - rb_define_module_function(module, "glColor", gl_Colordv, -1); - rb_define_module_function(module, "glColor3bv", gl_Colorbv, -1); - rb_define_module_function(module, "glColor3dv", gl_Colordv, -1); - rb_define_module_function(module, "glColor3fv", gl_Colorfv, -1); - rb_define_module_function(module, "glColor3iv", gl_Coloriv, -1); - rb_define_module_function(module, "glColor3sv", gl_Colorsv, -1); - rb_define_module_function(module, "glColor3ubv", gl_Colorubv, -1); - rb_define_module_function(module, "glColor3uiv", gl_Coloruiv, -1); - rb_define_module_function(module, "glColor3usv", gl_Colorusv, -1); - rb_define_module_function(module, "glColor4bv", gl_Colorbv, -1); - rb_define_module_function(module, "glColor4dv", gl_Colordv, -1); - rb_define_module_function(module, "glColor4fv", gl_Colorfv, -1); - rb_define_module_function(module, "glColor4iv", gl_Coloriv, -1); - rb_define_module_function(module, "glColor4sv", gl_Colorsv, -1); - rb_define_module_function(module, "glColor4ubv", gl_Colorubv, -1); - rb_define_module_function(module, "glColor4uiv", gl_Coloruiv, -1); - rb_define_module_function(module, "glColor4usv", gl_Colorusv, -1); - - rb_define_module_function(module, "glNormal", gl_Normaldv, -1); - rb_define_module_function(module, "glNormal3bv", gl_Normalbv, -1); - rb_define_module_function(module, "glNormal3dv", gl_Normaldv, -1); - rb_define_module_function(module, "glNormal3fv", gl_Normalfv, -1); - rb_define_module_function(module, "glNormal3iv", gl_Normaliv, -1); - rb_define_module_function(module, "glNormal3sv", gl_Normalsv, -1); - - rb_define_module_function(module, "glRasterPos", gl_RasterPosdv, -1); - rb_define_module_function(module, "glRasterPos2dv", gl_RasterPosdv, -1); - rb_define_module_function(module, "glRasterPos2fv", gl_RasterPosfv, -1); - rb_define_module_function(module, "glRasterPos2iv", gl_RasterPosiv, -1); - rb_define_module_function(module, "glRasterPos2sv", gl_RasterPossv, -1); - rb_define_module_function(module, "glRasterPos3dv", gl_RasterPosdv, -1); - rb_define_module_function(module, "glRasterPos3fv", gl_RasterPosfv, -1); - rb_define_module_function(module, "glRasterPos3iv", gl_RasterPosiv, -1); - rb_define_module_function(module, "glRasterPos3sv", gl_RasterPossv, -1); - rb_define_module_function(module, "glRasterPos4dv", gl_RasterPosdv, -1); - rb_define_module_function(module, "glRasterPos4fv", gl_RasterPosfv, -1); - rb_define_module_function(module, "glRasterPos4iv", gl_RasterPosiv, -1); - rb_define_module_function(module, "glRasterPos4sv", gl_RasterPossv, -1); - - rb_define_module_function(module, "glRect", gl_Rectdv, -1); - rb_define_module_function(module, "glRectdv", gl_Rectdv, -1); - rb_define_module_function(module, "glRectfv", gl_Rectfv, -1); - rb_define_module_function(module, "glRectiv", gl_Rectiv, -1); - rb_define_module_function(module, "glRectsv", gl_Rectsv, -1); - - rb_define_module_function(module, "glTexCoord", gl_TexCoorddv, -1); - rb_define_module_function(module, "glTexCoord1dv", gl_TexCoorddv, -1); - rb_define_module_function(module, "glTexCoord1fv", gl_TexCoordfv, -1); - rb_define_module_function(module, "glTexCoord1iv", gl_TexCoordiv, -1); - rb_define_module_function(module, "glTexCoord1sv", gl_TexCoordsv, -1); - rb_define_module_function(module, "glTexCoord2dv", gl_TexCoorddv, -1); - rb_define_module_function(module, "glTexCoord2fv", gl_TexCoordfv, -1); - rb_define_module_function(module, "glTexCoord2iv", gl_TexCoordiv, -1); - rb_define_module_function(module, "glTexCoord2sv", gl_TexCoordsv, -1); - rb_define_module_function(module, "glTexCoord3dv", gl_TexCoorddv, -1); - rb_define_module_function(module, "glTexCoord3fv", gl_TexCoordfv, -1); - rb_define_module_function(module, "glTexCoord3iv", gl_TexCoordiv, -1); - rb_define_module_function(module, "glTexCoord3sv", gl_TexCoordsv, -1); - rb_define_module_function(module, "glTexCoord4dv", gl_TexCoorddv, -1); - rb_define_module_function(module, "glTexCoord4fv", gl_TexCoordfv, -1); - rb_define_module_function(module, "glTexCoord4iv", gl_TexCoordiv, -1); - rb_define_module_function(module, "glTexCoord4sv", gl_TexCoordsv, -1); - - rb_define_module_function(module, "glVertex", gl_Vertexdv, -1); - rb_define_module_function(module, "glVertex2dv", gl_Vertexdv, -1); - rb_define_module_function(module, "glVertex2fv", gl_Vertexfv, -1); - rb_define_module_function(module, "glVertex2iv", gl_Vertexiv, -1); - rb_define_module_function(module, "glVertex2sv", gl_Vertexsv, -1); - rb_define_module_function(module, "glVertex3dv", gl_Vertexdv, -1); - rb_define_module_function(module, "glVertex3fv", gl_Vertexfv, -1); - rb_define_module_function(module, "glVertex3iv", gl_Vertexiv, -1); - rb_define_module_function(module, "glVertex3sv", gl_Vertexsv, -1); - rb_define_module_function(module, "glVertex4dv", gl_Vertexdv, -1); - rb_define_module_function(module, "glVertex4fv", gl_Vertexfv, -1); - rb_define_module_function(module, "glVertex4iv", gl_Vertexiv, -1); - rb_define_module_function(module, "glVertex4sv", gl_Vertexsv, -1); - - /* these simply calls normal or vector (*v) function depending on - if array or single value is passed to them */ - rb_define_module_function(module, "glLightModel", gl_LightModel, 2); - rb_define_module_function(module, "glMaterial", gl_Material, 3); - rb_define_module_function(module, "glFog", gl_Fog, 2); - rb_define_module_function(module, "glLight", gl_Light, 3); - rb_define_module_function(module, "glTexParameter", gl_TexParameter, 3); - rb_define_module_function(module, "glTexEnv", gl_TexEnv, 3); - rb_define_module_function(module, "glTexGen", gl_TexGen, 3); - - /* aliases */ - rb_define_module_function(module, "glMultMatrix", gl_MultMatrixd, 1); - rb_define_module_function(module, "glLoadMatrix", gl_LoadMatrixd, 1); - rb_define_module_function(module, "glRotate", gl_Rotated, 4); - rb_define_module_function(module, "glScale", gl_Scaled, 3); - rb_define_module_function(module, "glTranslate", gl_Translated, 3); - - rb_define_module_function(module, "glPixelStore", gl_PixelStoref, 2); - rb_define_module_function(module, "glPixelTransfer", gl_PixelTransferf, 2); - rb_define_module_function(module, "glIndex", gl_Indexi, 1); - rb_define_module_function(module, "glGetMaterial", gl_GetMaterialfv, 2); - rb_define_module_function(module, "glGetDouble", gl_GetDoublev, 1); - - rb_global_variable(&g_current_sel_buffer); - rb_global_variable(&g_current_feed_buffer); - rb_global_variable(&g_Vertex_ptr); - rb_global_variable(&g_Normal_ptr); - rb_global_variable(&g_Color_ptr); - rb_global_variable(&g_Index_ptr); - rb_global_variable(&g_TexCoord_ptr); - rb_global_variable(&g_EdgeFlag_ptr); - rb_global_variable(&g_FogCoord_ptr); - rb_global_variable(&g_SecondaryColor_ptr); -} diff --git a/ruby/RubyOpenGL/gl/gl-1.2.c b/ruby/RubyOpenGL/gl/gl-1.2.c deleted file mode 100644 index 40959526..00000000 --- a/ruby/RubyOpenGL/gl/gl-1.2.c +++ /dev/null @@ -1,1061 +0,0 @@ -/* - * Copyright (C) 1999 - 2005 Yoshi - * Copyright (C) 2006 John M. Gabriele - * Copyright (C) 2007 Jan Dvorak - * - * This program is distributed under the terms of the MIT license. - * See the included MIT-LICENSE file for the terms of this license. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifdef __APPLE__ -#include -#elif defined WIN32 -#include -#include -#else -#include -#endif -#include "../common/common.h" - -/* OpenGL 1.2 functions */ - -static void (APIENTRY * fptr_glBlendColor)(GLclampf,GLclampf,GLclampf,GLclampf); -static VALUE -gl_BlendColor(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLclampf red; - GLclampf green; - GLclampf blue; - GLclampf alpha; - LOAD_GL_FUNC(glBlendColor) - red = (GLclampf)NUM2DBL(arg1); - green = (GLclampf)NUM2DBL(arg2); - blue = (GLclampf)NUM2DBL(arg3); - alpha = (GLclampf)NUM2DBL(arg4); - fptr_glBlendColor(red,green,blue,alpha); - return Qnil; -} - -static void (APIENTRY * fptr_glBlendEquation)(GLenum); -static VALUE -gl_BlendEquation(obj,arg1) -VALUE obj,arg1; -{ - GLenum mode; - LOAD_GL_FUNC(glBlendEquation) - mode = (GLenum)NUM2INT(arg1); - fptr_glBlendEquation(mode); - return Qnil; -} - -static void (APIENTRY * fptr_glDrawRangeElements)(GLenum,GLuint,GLuint,GLsizei,GLenum,GLvoid*); -static VALUE -gl_DrawRangeElements(obj,arg1,arg2,arg3,arg4,arg5,arg6) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6; -{ - GLenum mode; - GLuint start; - GLuint end; - GLsizei count; - GLenum type; - LOAD_GL_FUNC(glDrawRangeElements) - mode = (GLenum)NUM2INT(arg1); - start = (GLuint)NUM2UINT(arg2); - end = (GLuint)NUM2UINT(arg3); - count = (GLsizei)NUM2UINT(arg4); - type = (GLenum)NUM2INT(arg5); - Check_Type(arg6, T_STRING); - fptr_glDrawRangeElements(mode, start, end, count, type, RSTRING(arg6)->ptr); - return Qnil; -} - -static void (APIENTRY * fptr_glColorTable)(GLenum,GLenum,GLsizei,GLenum,GLenum,GLvoid*); -static VALUE -gl_ColorTable(obj,arg1,arg2,arg3,arg4,arg5,arg6) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6; -{ - GLenum target; - GLenum internalformat; - GLsizei width; - GLenum format; - GLenum type; - GLsizei format_size; - GLsizei type_size; - GLsizei size; - LOAD_GL_FUNC(glColorTable) - target = (GLenum)NUM2INT(arg1); - internalformat = (GLenum)NUM2INT(arg2); - width = (GLsizei)NUM2UINT(arg3); - format = (GLenum)NUM2INT(arg4); - type = (GLenum)NUM2INT(arg5); - Check_Type(arg6,T_STRING); - format_size = glformat_size(format); - type_size = gltype_size(type); - if (type_size == -1 || format_size == -1) - rb_raise(rb_eTypeError, "type/format mismatch"); - size = format_size*type_size*width; - if (RSTRING(arg6)->len < size) - rb_raise(rb_eArgError, "string length:%d", RSTRING(arg6)->len); - fptr_glColorTable(target,internalformat,width,format,type,RSTRING(arg6)->ptr); - return Qnil; -} - -static void (APIENTRY * fptr_glColorTableParameterfv)(GLenum,GLenum,const GLfloat*); -static VALUE -gl_ColorTableParameterfv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLfloat params[4] = {0.0,0.0,0.0,0.0}; - LOAD_GL_FUNC(glColorTableParameterfv) - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cflt(arg3,params,4); - fptr_glColorTableParameterfv(target,pname,params); - return Qnil; -} - -static void (APIENTRY * fptr_glColorTableParameteriv)(GLenum,GLenum,const GLint*); -static VALUE -gl_ColorTableParameteriv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLint params[4] = {0,0,0,0}; - LOAD_GL_FUNC(glColorTableParameteriv) - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cint(arg3,params,4); - fptr_glColorTableParameteriv(target,pname,params); - return Qnil; -} - -static void (APIENTRY * fptr_glCopyColorTable)(GLenum,GLenum,GLint,GLint,GLsizei); -static VALUE -gl_CopyColorTable(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLenum target; - GLenum internalformat; - GLint x; - GLint y; - GLsizei width; - LOAD_GL_FUNC(glCopyColorTable) - target = (GLenum)NUM2INT(arg1); - internalformat = (GLenum)NUM2INT(arg2); - x = (GLenum)NUM2INT(arg3); - y = (GLenum)NUM2INT(arg4); - width = (GLenum)NUM2INT(arg5); - fptr_glCopyColorTable(target,internalformat,x,y,width); - return Qnil; -} - -static void (APIENTRY * fptr_glGetColorTableParameterfv)(GLenum,GLenum,GLfloat *); -static VALUE -gl_GetColorTableParameterfv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLenum pname; - GLfloat params[4] = {0.0,0.0,0.0,0.0}; - GLsizei size; - VALUE retary; - int i; - LOAD_GL_FUNC(glGetColorTableParameterfv) - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - switch (pname) { - case GL_COLOR_TABLE_SCALE: - case GL_COLOR_TABLE_BIAS: - size = 4; - break; - default: - size = 1; - break; - } - fptr_glGetColorTableParameterfv(target,pname,params); - retary = rb_ary_new2(size); - for(i=0;iptr); - RESTORE_PIXEL_STORE_MODE - return data; -} - -static void (APIENTRY * fptr_glColorSubTable)(GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid *data); -static VALUE -gl_ColorSubTable(obj,arg1,arg2,arg3,arg4,arg5,arg6) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6; -{ - GLenum target; - GLsizei start; - GLsizei count; - GLenum format; - GLenum type; - GLsizei format_size; - GLsizei type_size; - GLsizei size; - LOAD_GL_FUNC(glColorSubTable) - target = (GLenum)NUM2INT(arg1); - start = (GLsizei)NUM2UINT(arg2); - count = (GLsizei)NUM2UINT(arg3); - format = (GLenum)NUM2INT(arg4); - type = (GLenum)NUM2INT(arg5); - Check_Type(arg6,T_STRING); - format_size = glformat_size(format); - type_size = gltype_size(type); - if (type_size == -1 || format_size == -1) - rb_raise(rb_eTypeError, "type/format mismatch"); - size = format_size*type_size*count; - if (RSTRING(arg6)->len < size) - rb_raise(rb_eArgError, "string length:%d", RSTRING(arg6)->len); - fptr_glColorSubTable(target,start,count,format,type,RSTRING(arg6)->ptr); - return Qnil; -} - -static void (APIENTRY * fptr_glCopyColorSubTable)(GLenum,GLsizei,GLint,GLint,GLsizei); -static VALUE -gl_CopyColorSubTable(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLenum target; - GLsizei start; - GLint x; - GLint y; - GLsizei width; - LOAD_GL_FUNC(glCopyColorSubTable) - target = (GLenum)NUM2INT(arg1); - start = (GLsizei)NUM2UINT(arg2); - x = (GLint)NUM2INT(arg3); - y = (GLint)NUM2INT(arg4); - width = (GLsizei)NUM2UINT(arg5); - fptr_glCopyColorSubTable(target,start,x,y,width); - return Qnil; -} - -static void (APIENTRY * fptr_glConvolutionFilter1D)(GLenum,GLenum,GLsizei,GLenum,GLenum,const GLvoid *); -static VALUE -gl_ConvolutionFilter1D(obj,arg1,arg2,arg3,arg4,arg5,arg6) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6; -{ - GLenum target; - GLenum internalformat; - GLsizei width; - GLenum format; - GLenum type; - GLsizei format_size; - GLsizei type_size; - GLsizei size; - LOAD_GL_FUNC(glConvolutionFilter1D) - target = (GLenum)NUM2INT(arg1); - internalformat = (GLenum)NUM2INT(arg2); - width = (GLsizei)NUM2UINT(arg3); - format = (GLenum)NUM2INT(arg4); - type = (GLenum)NUM2INT(arg5); - Check_Type(arg6,T_STRING); - format_size = glformat_size(format); - type_size = gltype_size(type); - if (type_size == -1 || format_size == -1) - rb_raise(rb_eTypeError, "type/format mismatch"); - if (type==GL_BITMAP) - size = format_size*(width/8); - else - size = type_size*format_size*width; - if (RSTRING(arg6)->len < size) - rb_raise(rb_eArgError, "string length:%d", RSTRING(arg6)->len); - fptr_glConvolutionFilter1D(target,internalformat,width,format,type,RSTRING(arg6)->ptr); - return Qnil; -} - -static void (APIENTRY * fptr_glConvolutionFilter2D)(GLenum,GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid *); -static VALUE -gl_ConvolutionFilter2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7; -{ - GLenum target; - GLenum internalformat; - GLsizei width; - GLsizei height; - GLenum format; - GLenum type; - GLsizei format_size; - GLsizei type_size; - GLsizei size; - LOAD_GL_FUNC(glConvolutionFilter2D) - target = (GLenum)NUM2INT(arg1); - internalformat = (GLenum)NUM2INT(arg2); - width = (GLsizei)NUM2UINT(arg3); - height = (GLsizei)NUM2UINT(arg4); - format = (GLenum)NUM2INT(arg5); - type = (GLenum)NUM2INT(arg6); - Check_Type(arg7,T_STRING); - format_size = glformat_size(format); - type_size = gltype_size(type); - if (type_size == -1 || format_size == -1) - rb_raise(rb_eTypeError, "type/format mismatch"); - if (type==GL_BITMAP) - size = format_size*((width*height)/8); - else - size = type_size*format_size*width*height; - if (RSTRING(arg7)->len < size) - rb_raise(rb_eArgError, "string length:%d", RSTRING(arg7)->len); - fptr_glConvolutionFilter2D(target,internalformat,width,height,format,type,RSTRING(arg7)->ptr); - return Qnil; -} - -static void (APIENTRY * fptr_glConvolutionParameterf)(GLenum,GLenum,GLfloat); -static VALUE -gl_ConvolutionParameterf(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLfloat params; - LOAD_GL_FUNC(glConvolutionParameterf) - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - params = (GLfloat)NUM2INT(arg3); - fptr_glConvolutionParameterf(target,pname,params); - return Qnil; -} - -static void (APIENTRY * fptr_glConvolutionParameterfv)(GLenum,GLenum,const GLfloat *); -static VALUE -gl_ConvolutionParameterfv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLfloat params[4] = {0.0,0.0,0.0,0.0}; - LOAD_GL_FUNC(glConvolutionParameterfv) - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cflt(arg3,params,4); - fptr_glConvolutionParameterfv(target,pname,params); - return Qnil; -} - -static void (APIENTRY * fptr_glConvolutionParameteri)(GLenum,GLenum,GLint); -static VALUE -gl_ConvolutionParameteri(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLint params; - LOAD_GL_FUNC(glConvolutionParameteri) - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - params = (GLint)NUM2INT(arg3); - fptr_glConvolutionParameteri(target,pname,params); - return Qnil; -} - -static void (APIENTRY * fptr_glConvolutionParameteriv)(GLenum,GLenum,const GLint *); -static VALUE -gl_ConvolutionParameteriv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLint params[4] = {0,0,0,0}; - LOAD_GL_FUNC(glConvolutionParameteriv) - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary2cint(arg3,params,4); - fptr_glConvolutionParameteriv(target,pname,params); - return Qnil; -} - -static void (APIENTRY * fptr_glCopyConvolutionFilter1D)(GLenum,GLenum,GLint,GLint,GLsizei); -static VALUE -gl_CopyConvolutionFilter1D(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLenum target; - GLenum internalformat; - GLint x; - GLint y; - GLsizei width; - LOAD_GL_FUNC(glCopyConvolutionFilter1D) - target = (GLenum)NUM2INT(arg1); - internalformat = (GLenum)NUM2INT(arg2); - x = (GLint)NUM2INT(arg3); - y = (GLint)NUM2INT(arg4); - width = (GLsizei)NUM2UINT(arg5); - fptr_glCopyConvolutionFilter1D(target,internalformat,x,y,width); - return Qnil; -} - -static void (APIENTRY * fptr_glCopyConvolutionFilter2D)(GLenum,GLenum,GLint,GLint,GLsizei,GLsizei); -static VALUE -gl_CopyConvolutionFilter2D(obj,arg1,arg2,arg3,arg4,arg5,arg6) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6; -{ - GLenum target; - GLenum internalformat; - GLint x; - GLint y; - GLsizei width; - GLsizei height; - LOAD_GL_FUNC(glCopyConvolutionFilter2D) - target = (GLenum)NUM2INT(arg1); - internalformat = (GLenum)NUM2INT(arg2); - x = (GLint)NUM2INT(arg3); - y = (GLint)NUM2INT(arg4); - width = (GLsizei)NUM2UINT(arg5); - height = (GLsizei)NUM2UINT(arg6); - fptr_glCopyConvolutionFilter2D(target,internalformat,x,y,width,height); - return Qnil; -} - -static void (APIENTRY * fptr_glGetConvolutionParameterfv)(GLenum,GLenum,GLfloat *); -static VALUE -gl_GetConvolutionParameterfv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLenum pname; - GLfloat params[4] = {0.0,0.0,0.0,0.0}; - GLsizei size; - int i; - VALUE retary; - LOAD_GL_FUNC(glGetConvolutionParameterfv) - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - switch(pname) { - case GL_CONVOLUTION_BORDER_COLOR: - case GL_CONVOLUTION_FILTER_SCALE: - case GL_CONVOLUTION_FILTER_BIAS: - size = 4; - break; - default: - size = 1; - break; - } - fptr_glGetConvolutionParameterfv(target,pname,params); - retary = rb_ary_new2(size); - for(i=0;iptr); - RESTORE_PIXEL_STORE_MODE - return data; -} - -static void (APIENTRY * fptr_glGetSeparableFilter)(GLenum,GLenum,GLenum,GLvoid*,GLvoid*,GLvoid*); -static VALUE -gl_GetSeparableFilter(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum format; - GLenum type; - GLsizei format_size; - GLsizei type_size; - GLint size_row = 0; - GLint size_column = 0; - VALUE data_row; - VALUE data_column; - VALUE retary; - LOAD_GL_FUNC(glGetSeparableFilter) - LOAD_GL_FUNC(glGetConvolutionParameteriv) - target = (GLenum)NUM2INT(arg1); - format = (GLenum)NUM2INT(arg2); - type = (GLenum)NUM2INT(arg3); - format_size = glformat_size(format); - type_size = gltype_size(type); - if (type_size == -1 || format_size == -1) - rb_raise(rb_eTypeError, "type/format mismatch"); - fptr_glGetConvolutionParameteriv(target,GL_CONVOLUTION_WIDTH,&size_row); - fptr_glGetConvolutionParameteriv(target,GL_CONVOLUTION_HEIGHT,&size_column); - if (type==GL_BITMAP) { - size_row = (size_row/8)*format_size; - size_column = (size_column/8)*format_size; - } else { - size_row *= type_size*format_size; - size_column *= type_size*format_size; - } - data_row = allocate_buffer_with_string(size_row); - data_column = allocate_buffer_with_string(size_column); - FORCE_PIXEL_STORE_MODE - fptr_glGetSeparableFilter(target,format,type,(GLvoid*)RSTRING(data_row)->ptr,(GLvoid*)RSTRING(data_column)->ptr,0); - RESTORE_PIXEL_STORE_MODE - retary = rb_ary_new2(2); - rb_ary_push(retary, data_row); - rb_ary_push(retary, data_column); - return retary; -} - -static void (APIENTRY * fptr_glSeparableFilter2D)(GLenum,GLenum,GLsizei,GLsizei,GLenum,GLenum,const GLvoid *,const GLvoid *); -static VALUE -gl_SeparableFilter2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8; -{ - GLenum target; - GLenum internalformat; - GLsizei width; - GLsizei height; - GLenum format; - GLenum type; - GLsizei format_size; - GLsizei type_size; - GLsizei size_row; - GLsizei size_column; - LOAD_GL_FUNC(glSeparableFilter2D) - target = (GLenum)NUM2INT(arg1); - internalformat = (GLenum)NUM2INT(arg2); - width = (GLsizei)NUM2UINT(arg3); - height = (GLsizei)NUM2UINT(arg4); - format = (GLenum)NUM2INT(arg5); - type = (GLenum)NUM2INT(arg6); - Check_Type(arg7,T_STRING); - Check_Type(arg8,T_STRING); - format_size = glformat_size(format); - type_size = gltype_size(type); - if (type_size == -1 || format_size == -1) - rb_raise(rb_eTypeError, "type/format mismatch"); - if (type==GL_BITMAP) { - size_row = format_size*(width/8); - size_column = format_size*(height/8); - } else { - size_row = type_size*format_size*width; - size_column = type_size*format_size*height; - } - if (RSTRING(arg7)->len < size_row) - rb_raise(rb_eArgError, "string length:%d", RSTRING(arg7)->len); - if (RSTRING(arg8)->len < size_column) - rb_raise(rb_eArgError, "string length:%d", RSTRING(arg8)->len); - - fptr_glSeparableFilter2D(target,internalformat,width,height,format,type,RSTRING(arg7)->ptr,RSTRING(arg8)->ptr); - return Qnil; -} - -static void (APIENTRY * fptr_glGetHistogramParameterfv)(GLenum,GLenum,GLfloat *); -static VALUE -gl_GetHistogramParameterfv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLfloat params = 0.0; - VALUE retary; - LOAD_GL_FUNC(glGetHistogramParameterfv) - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - fptr_glGetHistogramParameterfv(target,pname,¶ms); - retary = rb_ary_new2(1); - rb_ary_push(retary, rb_float_new(params)); - return retary; -} - -static void (APIENTRY * fptr_glGetHistogramParameteriv)(GLenum,GLenum,GLint *); -static VALUE -gl_GetHistogramParameteriv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum pname; - GLint params = 0; - VALUE retary; - LOAD_GL_FUNC(glGetHistogramParameteriv) - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - fptr_glGetHistogramParameteriv(target,pname,¶ms); - retary = rb_ary_new2(1); - rb_ary_push(retary, INT2NUM(params)); - return retary; -} - -static void (APIENTRY * fptr_glGetHistogram)(GLenum,GLboolean,GLenum,GLenum,GLvoid*); -static VALUE -gl_GetHistogram(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLenum target; - GLboolean reset; - GLenum format; - GLenum type; - GLsizei format_size; - GLsizei type_size; - GLint size = 0; - VALUE data; - LOAD_GL_FUNC(glGetHistogram) - LOAD_GL_FUNC(glGetHistogramParameteriv) - target = (GLenum)NUM2INT(arg1); - reset = (GLboolean)NUM2INT(arg2); - format = (GLenum)NUM2INT(arg3); - type = (GLenum)NUM2INT(arg4); - format_size = glformat_size(format); - type_size = gltype_size(type); - if (type_size == -1 || format_size == -1) - rb_raise(rb_eTypeError, "type/format mismatch"); - fptr_glGetHistogramParameteriv(target,GL_HISTOGRAM_WIDTH,&size); - if (type==GL_BITMAP) - size = (size/8)*format_size; - else - size = size*type_size*format_size; - data = allocate_buffer_with_string(size); - FORCE_PIXEL_STORE_MODE - fptr_glGetHistogram(target,reset,format,type,(GLvoid*)RSTRING(data)->ptr); - RESTORE_PIXEL_STORE_MODE - return data; -} - -static void (APIENTRY * fptr_glGetMinmax)(GLenum,GLboolean,GLenum,GLenum,GLvoid *); -static VALUE -gl_GetMinmax(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLenum target; - GLboolean reset; - GLenum format; - GLenum type; - GLsizei format_size; - GLsizei type_size; - GLint size; - VALUE data; - LOAD_GL_FUNC(glGetMinmax) - target = (GLenum)NUM2INT(arg1); - reset = (GLboolean)NUM2INT(arg2); - format = (GLenum)NUM2INT(arg3); - type = (GLenum)NUM2INT(arg4); - format_size = glformat_size(format); - type_size = gltype_size(type); - if (type_size == -1 || format_size == -1) - rb_raise(rb_eTypeError, "type/format mismatch"); - if (type==GL_BITMAP) - size = format_size*(2/8); - else - size = type_size*format_size*2; - data = allocate_buffer_with_string(size); - FORCE_PIXEL_STORE_MODE - fptr_glGetMinmax(target,reset,format,type,(GLvoid*)RSTRING(data)->ptr); - RESTORE_PIXEL_STORE_MODE - return data; -} - -static void (APIENTRY * fptr_glGetMinmaxParameterfv)(GLenum,GLenum,GLfloat *); -static VALUE -gl_GetMinmaxParameterfv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLenum pname; - GLfloat params = 0.0; - VALUE retary; - LOAD_GL_FUNC(glGetMinmaxParameterfv) - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - fptr_glGetMinmaxParameterfv(target,pname,¶ms); - retary = rb_ary_new2(1); - rb_ary_push(retary, rb_float_new(params)); - return retary; -} - -static void (APIENTRY * fptr_glGetMinmaxParameteriv)(GLenum,GLenum,GLint *); -static VALUE -gl_GetMinmaxParameteriv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLenum pname; - GLint params = 0; - VALUE retary; - LOAD_GL_FUNC(glGetMinmaxParameteriv) - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - fptr_glGetMinmaxParameteriv(target,pname,¶ms); - retary = rb_ary_new2(1); - rb_ary_push(retary, INT2NUM(params)); - return retary; -} - -static void (APIENTRY * fptr_glHistogram)(GLenum,GLsizei,GLenum,GLboolean); -static VALUE -gl_Histogram(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLenum target; - GLsizei width; - GLenum internalformat; - GLboolean sink; - LOAD_GL_FUNC(glHistogram) - target = (GLenum)NUM2INT(arg1); - width = (GLsizei)NUM2UINT(arg2); - internalformat = (GLenum)NUM2INT(arg3); - sink = (GLboolean)NUM2INT(arg4); - fptr_glHistogram(target,width,internalformat,sink); - return Qnil; -} - -static void (APIENTRY * fptr_glMinmax)(GLenum,GLenum,GLboolean); -static VALUE -gl_Minmax(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLenum internalformat; - GLboolean sink; - LOAD_GL_FUNC(glMinmax) - target = (GLenum)NUM2INT(arg1); - internalformat = (GLenum)NUM2INT(arg2); - sink = (GLboolean)NUM2INT(arg3); - fptr_glMinmax(target,internalformat,sink); - return Qnil; -} - -static void (APIENTRY * fptr_glResetHistogram)(GLenum); -static VALUE -gl_ResetHistogram(obj,arg1) -VALUE obj,arg1; -{ - GLenum target; - LOAD_GL_FUNC(glResetHistogram) - target = (GLenum)NUM2INT(arg1); - fptr_glResetHistogram(target); - return Qnil; -} - -static void (APIENTRY * fptr_glResetMinmax)(GLenum); -static VALUE -gl_ResetMinmax(obj,arg1) -VALUE obj,arg1; -{ - GLenum target; - LOAD_GL_FUNC(glResetMinmax) - target = (GLenum)NUM2INT(arg1); - fptr_glResetMinmax(target); - return Qnil; -} - -static void (APIENTRY * fptr_glTexImage3D)(GLenum,GLint,GLint,GLsizei,GLsizei,GLsizei,GLint,GLenum,GLenum,const GLvoid*); -static VALUE -gl_TexImage3D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10; -{ - GLenum target; - GLint level; - GLint internalFormat; - GLsizei width; - GLsizei height; - GLsizei depth; - GLint border; - GLenum format; - GLenum type; - const char *pixels; - int size; - int type_size; - int format_size; - LOAD_GL_FUNC(glTexImage3D) - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - internalFormat = (GLint)NUM2INT(arg3); - width = (GLsizei)NUM2UINT(arg4); - height = (GLsizei)NUM2UINT(arg5); - depth = (GLsizei)NUM2UINT(arg6); - border = (GLint)NUM2INT(arg7); - format = (GLenum)NUM2INT(arg8); - type = (GLenum)NUM2INT(arg9); - Check_Type(arg10, T_STRING); - type_size = gltype_size(type); - format_size = glformat_size(format); - if (type_size == -1 || format_size == -1) - return Qnil; - if (type==GL_BITMAP) - size = format_size*((height*width*depth)/8); - else - size = type_size*format_size*height*width*depth; - - if (target == GL_PROXY_TEXTURE_3D || NIL_P(arg10)) { /* proxy texture, no data read */ - pixels = NULL; - } else { - if (TYPE(arg10) == T_FIXNUM || TYPE(arg10) == T_BIGNUM) { /* arg10 is offset to unpack buffer */ - pixels = (const char *)NUM2UINT(arg10); - } else if (TYPE(arg10) == T_STRING) { /* image data */ - if (RSTRING(arg10)->len < size) - rb_raise(rb_eArgError, "string length:%d",RSTRING(arg10)->len); - pixels = RSTRING(arg10)->ptr; - } else { - Check_Type(arg10,T_STRING); /* force exception */ - return Qnil; - } - } - fptr_glTexImage3D( target, level, internalFormat, width, height, - depth, border, format, type,pixels); - return Qnil; -} - -static void (APIENTRY * fptr_glTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLenum,const GLvoid*); -static VALUE -gl_TexSubImage3D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11) -VALUE arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11; -{ - GLenum target; - GLint level; - GLint xoffset; - GLint yoffset; - GLint zoffset; - GLsizei width; - GLsizei height; - GLsizei depth; - GLenum format; - GLenum type; - const char *pixels; - int size; - int type_size; - int format_size; - LOAD_GL_FUNC(glTexSubImage3D) - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - xoffset = (GLint)NUM2INT(arg3); - yoffset = (GLint)NUM2INT(arg4); - zoffset = (GLint)NUM2INT(arg5); - width = (GLsizei)NUM2UINT(arg6); - height = (GLsizei)NUM2UINT(arg7); - depth = (GLsizei)NUM2UINT(arg8); - format = (GLenum)NUM2INT(arg9); - type = (GLenum)NUM2INT(arg10); - Check_Type(arg11, T_STRING); - type_size = gltype_size(type); - format_size = glformat_size(format); - if (type_size == -1 || format_size == -1) - return Qnil; - if (type==GL_BITMAP) - size = format_size*((height*width*depth)/8); - else - size = type_size*format_size*height*width*depth; - - if (TYPE(arg11) == T_STRING) { - if (RSTRING(arg11)->len < size) - rb_raise(rb_eArgError, "string length:%d",RSTRING(arg11)->len); - pixels = RSTRING(arg11)->ptr; - } else if (TYPE(arg11) == T_FIXNUM || TYPE(arg11) == T_BIGNUM) { /* arg11 is offset to unpack buffer */ - pixels = (const char *)NUM2UINT(arg11); - } else { - Check_Type(arg11,T_STRING); /* force exception */ - return Qnil; - } - - fptr_glTexSubImage3D( target, level, xoffset, yoffset, zoffset, - width, height, depth, - format, type, pixels); - return Qnil; -} - -static void (APIENTRY * fptr_glCopyTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLint,GLint,GLsizei,GLsizei); -static VALUE -gl_CopyTexSubImage3D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9; -{ - GLenum target; - GLint level; - GLint xoffset; - GLint yoffset; - GLint zoffset; - GLint x; - GLint y; - GLsizei width; - GLsizei height; - LOAD_GL_FUNC(glCopyTexSubImage3D) - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - xoffset = (GLint)NUM2INT(arg3); - yoffset = (GLint)NUM2INT(arg4); - zoffset = (GLint)NUM2INT(arg5); - x = (GLint)NUM2INT(arg6); - y = (GLint)NUM2INT(arg7); - width = (GLsizei)NUM2UINT(arg8); - height = (GLsizei)NUM2UINT(arg9); - fptr_glCopyTexSubImage3D( target, level, - xoffset, yoffset, zoffset, - x, y, width, height ); - return Qnil; -} - -void gl_init_functions_1_2(VALUE module) -{ - rb_define_module_function(module, "glBlendColor", gl_BlendColor, 4); - rb_define_module_function(module, "glBlendEquation", gl_BlendEquation, 1); - rb_define_module_function(module, "glDrawRangeElements", gl_DrawRangeElements, 6); - rb_define_module_function(module, "glColorTable", gl_ColorTable, 6); - rb_define_module_function(module, "glColorTableParameterfv", gl_ColorTableParameterfv, 3); - rb_define_module_function(module, "glColorTableParameteriv", gl_ColorTableParameteriv, 3); - rb_define_module_function(module, "glCopyColorTable", gl_CopyColorTable, 5); - rb_define_module_function(module, "glGetColorTable", gl_GetColorTable, 3); - rb_define_module_function(module, "glGetColorTableParameterfv", gl_GetColorTableParameterfv, 2); - rb_define_module_function(module, "glGetColorTableParameteriv", gl_GetColorTableParameteriv, 2); - rb_define_module_function(module, "glColorSubTable", gl_ColorSubTable, 6); - rb_define_module_function(module, "glCopyColorSubTable", gl_CopyColorSubTable, 5); - rb_define_module_function(module, "glConvolutionFilter1D", gl_ConvolutionFilter1D, 6); - rb_define_module_function(module, "glConvolutionFilter2D", gl_ConvolutionFilter2D, 7); - rb_define_module_function(module, "glConvolutionParameterf", gl_ConvolutionParameterf, 3); - rb_define_module_function(module, "glConvolutionParameterfv", gl_ConvolutionParameterfv, 3); - rb_define_module_function(module, "glConvolutionParameteri", gl_ConvolutionParameteri, 3); - rb_define_module_function(module, "glConvolutionParameteriv", gl_ConvolutionParameteriv, 3); - rb_define_module_function(module, "glCopyConvolutionFilter1D", gl_CopyConvolutionFilter1D, 5); - rb_define_module_function(module, "glCopyConvolutionFilter2D", gl_CopyConvolutionFilter2D, 6); - rb_define_module_function(module, "glGetConvolutionFilter", gl_GetConvolutionFilter, 3); - rb_define_module_function(module, "glGetConvolutionParameterfv", gl_GetConvolutionParameterfv, 2); - rb_define_module_function(module, "glGetConvolutionParameteriv", gl_GetConvolutionParameteriv, 2); - rb_define_module_function(module, "glGetSeparableFilter", gl_GetSeparableFilter, 3); - rb_define_module_function(module, "glSeparableFilter2D", gl_SeparableFilter2D, 8); - rb_define_module_function(module, "glGetHistogram", gl_GetHistogram, 4); - rb_define_module_function(module, "glGetHistogramParameterfv", gl_GetHistogramParameterfv, 2); - rb_define_module_function(module, "glGetHistogramParameteriv", gl_GetHistogramParameteriv, 2); - rb_define_module_function(module, "glGetMinmax", gl_GetMinmax, 4); - rb_define_module_function(module, "glGetMinmaxParameterfv", gl_GetMinmaxParameterfv, 2); - rb_define_module_function(module, "glGetMinmaxParameteriv", gl_GetMinmaxParameteriv, 2); - rb_define_module_function(module, "glHistogram", gl_Histogram, 4); - rb_define_module_function(module, "glMinmax", gl_Minmax, 3); - rb_define_module_function(module, "glResetHistogram", gl_ResetHistogram, 1); - rb_define_module_function(module, "glResetMinmax", gl_ResetMinmax, 1); - rb_define_module_function(module, "glTexImage3D", gl_TexImage3D, 10); - rb_define_module_function(module, "glTexSubImage3D", gl_TexSubImage3D, 11); - rb_define_module_function(module, "glCopyTexSubImage3D", gl_CopyTexSubImage3D, 9); -} diff --git a/ruby/RubyOpenGL/gl/gl-1.3.c b/ruby/RubyOpenGL/gl/gl-1.3.c deleted file mode 100644 index 54398441..00000000 --- a/ruby/RubyOpenGL/gl/gl-1.3.c +++ /dev/null @@ -1,725 +0,0 @@ -/* - * Copyright (C) 2007 Jan Dvorak - * - * This program is distributed under the terms of the MIT license. - * See the included MIT-LICENSE file for the terms of this license. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifdef __APPLE__ -#include -#elif defined WIN32 -#include -#include -#else -#include -#endif -#include "../common/common.h" - -/* OpenGL 1.3 functions */ - -static void (APIENTRY * fptr_glActiveTexture)(GLenum); -static VALUE -gl_ActiveTexture(obj,arg1) -VALUE obj,arg1; -{ - GLenum texture; - LOAD_GL_FUNC(glActiveTexture) - texture = (GLenum)NUM2INT(arg1); - fptr_glActiveTexture(texture); - return Qnil; -} - -static void (APIENTRY * fptr_glClientActiveTexture)(GLenum); -static VALUE -gl_ClientActiveTexture(obj,arg1) -VALUE obj,arg1; -{ - GLenum texture; - LOAD_GL_FUNC(glClientActiveTexture) - texture = (GLenum)NUM2INT(arg1); - fptr_glClientActiveTexture(texture); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord1d)(GLenum,GLdouble); -static VALUE -gl_MultiTexCoord1d(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLdouble s; - LOAD_GL_FUNC(glMultiTexCoord1d) - target = (GLenum)NUM2INT(arg1); - s = (GLdouble)NUM2DBL(arg2); - fptr_glMultiTexCoord1d(target,s); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord1f)(GLenum,GLfloat); -static VALUE -gl_MultiTexCoord1f(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLfloat s; - LOAD_GL_FUNC(glMultiTexCoord1f) - target = (GLenum)NUM2INT(arg1); - s = (GLfloat)NUM2DBL(arg2); - fptr_glMultiTexCoord1f(target,s); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord1i)(GLenum,GLint); -static VALUE -gl_MultiTexCoord1i(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLint s; - LOAD_GL_FUNC(glMultiTexCoord1i) - target = (GLenum)NUM2INT(arg1); - s = (GLint)NUM2INT(arg2); - fptr_glMultiTexCoord1i(target,s); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord1s)(GLenum,GLshort); -static VALUE -gl_MultiTexCoord1s(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLshort s; - LOAD_GL_FUNC(glMultiTexCoord1s) - target = (GLenum)NUM2INT(arg1); - s = (GLshort)NUM2INT(arg2); - fptr_glMultiTexCoord1s(target,s); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord2d)(GLenum,GLdouble,GLdouble); -static VALUE -gl_MultiTexCoord2d(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLdouble s; - GLdouble t; - LOAD_GL_FUNC(glMultiTexCoord2d) - target = (GLenum)NUM2INT(arg1); - s = (GLdouble)NUM2DBL(arg2); - t = (GLdouble)NUM2DBL(arg3); - fptr_glMultiTexCoord2d(target,s,t); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord2f)(GLenum,GLfloat,GLfloat); -static VALUE -gl_MultiTexCoord2f(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLfloat s; - GLfloat t; - LOAD_GL_FUNC(glMultiTexCoord2f) - target = (GLenum)NUM2INT(arg1); - s = (GLfloat)NUM2DBL(arg2); - t = (GLfloat)NUM2DBL(arg3); - fptr_glMultiTexCoord2f(target,s,t); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord2i)(GLenum,GLint,GLint); -static VALUE -gl_MultiTexCoord2i(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLint s; - GLint t; - LOAD_GL_FUNC(glMultiTexCoord2i) - target = (GLenum)NUM2INT(arg1); - s = (GLint)NUM2INT(arg2); - t = (GLint)NUM2INT(arg3); - fptr_glMultiTexCoord2i(target,s,t); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord2s)(GLenum,GLshort,GLshort); -static VALUE -gl_MultiTexCoord2s(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLshort s; - GLshort t; - LOAD_GL_FUNC(glMultiTexCoord2s) - target = (GLenum)NUM2INT(arg1); - s = (GLshort)NUM2INT(arg2); - t = (GLshort)NUM2INT(arg3); - fptr_glMultiTexCoord2s(target,s,t); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord3d)(GLenum,GLdouble,GLdouble,GLdouble); -static VALUE -gl_MultiTexCoord3d(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLenum target; - GLdouble s; - GLdouble t; - GLdouble r; - LOAD_GL_FUNC(glMultiTexCoord3d) - target = (GLenum)NUM2INT(arg1); - s = (GLdouble)NUM2DBL(arg2); - t = (GLdouble)NUM2DBL(arg3); - r = (GLdouble)NUM2DBL(arg4); - fptr_glMultiTexCoord3d(target,s,t,r); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord3f)(GLenum,GLfloat,GLfloat,GLfloat); -static VALUE -gl_MultiTexCoord3f(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLenum target; - GLfloat s; - GLfloat t; - GLfloat r; - LOAD_GL_FUNC(glMultiTexCoord3f) - target = (GLenum)NUM2INT(arg1); - s = (GLfloat)NUM2DBL(arg2); - t = (GLfloat)NUM2DBL(arg3); - r = (GLfloat)NUM2DBL(arg4); - fptr_glMultiTexCoord3f(target,s,t,r); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord3i)(GLenum,GLint,GLint,GLint); -static VALUE -gl_MultiTexCoord3i(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLenum target; - GLint s; - GLint t; - GLint r; - LOAD_GL_FUNC(glMultiTexCoord3i) - target = (GLenum)NUM2INT(arg1); - s = (GLint)NUM2INT(arg2); - t = (GLint)NUM2INT(arg3); - r = (GLint)NUM2INT(arg4); - fptr_glMultiTexCoord3i(target,s,t,r); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord3s)(GLenum,GLshort,GLshort,GLshort); -static VALUE -gl_MultiTexCoord3s(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLenum target; - GLshort s; - GLshort t; - GLshort r; - LOAD_GL_FUNC(glMultiTexCoord3s) - target = (GLenum)NUM2INT(arg1); - s = (GLshort)NUM2INT(arg2); - t = (GLshort)NUM2INT(arg3); - r = (GLshort)NUM2INT(arg4); - fptr_glMultiTexCoord3s(target,s,t,r); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord4d)(GLenum,GLdouble,GLdouble,GLdouble,GLdouble); -static VALUE -gl_MultiTexCoord4d(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLenum target; - GLdouble s; - GLdouble t; - GLdouble r; - GLdouble q; - LOAD_GL_FUNC(glMultiTexCoord4d) - target = (GLenum)NUM2INT(arg1); - s = (GLdouble)NUM2DBL(arg2); - t = (GLdouble)NUM2DBL(arg3); - r = (GLdouble)NUM2DBL(arg4); - q = (GLdouble)NUM2DBL(arg5); - fptr_glMultiTexCoord4d(target,s,t,r,q); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord4f)(GLenum,GLfloat,GLfloat,GLfloat,GLfloat); -static VALUE -gl_MultiTexCoord4f(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLenum target; - GLfloat s; - GLfloat t; - GLfloat r; - GLfloat q; - LOAD_GL_FUNC(glMultiTexCoord4f) - target = (GLenum)NUM2INT(arg1); - s = (GLfloat)NUM2DBL(arg2); - t = (GLfloat)NUM2DBL(arg3); - r = (GLfloat)NUM2DBL(arg4); - q = (GLfloat)NUM2DBL(arg5); - fptr_glMultiTexCoord4f(target,s,t,r,q); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord4i)(GLenum,GLint,GLint,GLint,GLint); -static VALUE -gl_MultiTexCoord4i(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLenum target; - GLint s; - GLint t; - GLint r; - GLint q; - LOAD_GL_FUNC(glMultiTexCoord4i) - target = (GLenum)NUM2INT(arg1); - s = (GLint)NUM2INT(arg2); - t = (GLint)NUM2INT(arg3); - r = (GLint)NUM2INT(arg4); - q = (GLint)NUM2INT(arg5); - fptr_glMultiTexCoord4i(target,s,t,r,q); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiTexCoord4s)(GLenum,GLshort,GLshort,GLshort,GLshort); -static VALUE -gl_MultiTexCoord4s(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLenum target; - GLshort s; - GLshort t; - GLshort r; - GLshort q; - LOAD_GL_FUNC(glMultiTexCoord4s) - target = (GLenum)NUM2INT(arg1); - s = (GLshort)NUM2INT(arg2); - t = (GLshort)NUM2INT(arg3); - r = (GLshort)NUM2INT(arg4); - q = (GLshort)NUM2INT(arg5); - fptr_glMultiTexCoord4s(target,s,t,r,q); - return Qnil; -} - -#define GLMULTITEXCOORD_VFUNC(_type_) \ -static VALUE \ -gl_MultiTexCoord##_type_##v(argc,argv,obj) \ -int argc; \ -VALUE *argv; \ -VALUE obj; \ -{ \ - int num; \ - VALUE args[5]; \ - RArray *ary; \ - switch (num = rb_scan_args(argc, argv, "23", &args[0], &args[1], &args[2], &args[3],&args[4])) { \ - case 2: \ - if (TYPE(args[1]) == T_ARRAY) { \ - ary = RARRAY(args[1]); \ - switch (ary->len) { \ - case 1: \ - gl_MultiTexCoord1##_type_(obj,args[0],ary->ptr[0]); \ - break; \ - case 2: \ - gl_MultiTexCoord2##_type_(obj,args[0],ary->ptr[0],ary->ptr[1]); \ - break; \ - case 3: \ - gl_MultiTexCoord3##_type_(obj,args[0],ary->ptr[0],ary->ptr[1],ary->ptr[2]); \ - break; \ - case 4: \ - gl_MultiTexCoord4##_type_(obj,args[0],ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "array length:%d", num); \ - } \ - } \ - else { \ - gl_MultiTexCoord1##_type_(obj,args[0], args[1]); \ - break; \ - } \ - break; \ - case 3: \ - gl_MultiTexCoord2##_type_(obj,args[0], args[1], args[2]); \ - break; \ - case 4: \ - gl_MultiTexCoord3##_type_(obj,args[0], args[1], args[2], args[3]); \ - break; \ - case 5: \ - gl_MultiTexCoord4##_type_(obj,args[0], args[1], args[2], args[3], args[4]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "too many arguments"); \ - break; \ - } \ - return Qnil; \ -} - -GLMULTITEXCOORD_VFUNC(d) -GLMULTITEXCOORD_VFUNC(f) -GLMULTITEXCOORD_VFUNC(i) -GLMULTITEXCOORD_VFUNC(s) -#undef GLTEXCOORD_VFUNC - - -static void (APIENTRY * fptr_glLoadTransposeMatrixf)(const GLfloat[]); -static VALUE -gl_LoadTransposeMatrixf(obj,arg1) -VALUE obj,arg1; -{ - GLfloat m[4*4]; - LOAD_GL_FUNC(glLoadTransposeMatrixf) - ary2cmat4x4flt(arg1, m); - fptr_glLoadTransposeMatrixf(m); - return Qnil; -} - -static void (APIENTRY * fptr_glLoadTransposeMatrixd)(const GLdouble[]); -static VALUE -gl_LoadTransposeMatrixd(obj,arg1) -VALUE obj,arg1; -{ - GLdouble m[4*4]; - LOAD_GL_FUNC(glLoadTransposeMatrixd) - ary2cmat4x4dbl(arg1, m); - fptr_glLoadTransposeMatrixd(m); - return Qnil; -} - -static void (APIENTRY * fptr_glMultTransposeMatrixf)(const GLfloat[]); -static VALUE -gl_MultTransposeMatrixf(obj,arg1) -VALUE obj,arg1; -{ - GLfloat m[4*4]; - LOAD_GL_FUNC(glMultTransposeMatrixf) - ary2cmat4x4flt(arg1, m); - fptr_glMultTransposeMatrixf(m); - return Qnil; -} - -static void (APIENTRY * fptr_glMultTransposeMatrixd)(const GLdouble[]); -static VALUE -gl_MultTransposeMatrixd(obj,arg1) -VALUE obj,arg1; -{ - GLdouble m[4*4]; - LOAD_GL_FUNC(glMultTransposeMatrixd) - ary2cmat4x4dbl(arg1, m); - fptr_glMultTransposeMatrixd(m); - return Qnil; -} - -static void (APIENTRY * fptr_glSampleCoverage)(GLclampf,GLboolean); -static VALUE -gl_SampleCoverage(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLclampf value; - GLboolean invert; - LOAD_GL_FUNC(glSampleCoverage) - value = (GLclampf)NUM2DBL(arg1); - invert = (GLboolean)NUM2INT(arg2); - fptr_glSampleCoverage(value,invert); - return Qnil; -} - -static void (APIENTRY * fptr_glCompressedTexImage3D)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLsizei,GLint,GLsizei,GLvoid*); -static VALUE -gl_CompressedTexImage3D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9; -{ - GLenum target; - GLint level; - GLenum internalformat; - GLsizei width; - GLsizei height; - GLsizei depth; - GLint border; - GLsizei imagesize; - GLvoid *pixels; - LOAD_GL_FUNC(glCompressedTexImage3D) - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - internalformat = (GLenum)NUM2INT(arg3); - width = (GLsizei)NUM2UINT(arg4); - height = (GLsizei)NUM2UINT(arg5); - depth = (GLsizei)NUM2UINT(arg6); - border = (GLint)NUM2INT(arg7); - imagesize = (GLsizei)NUM2UINT(arg8); - if (TYPE(arg9) == T_STRING) { - if (RSTRING(arg9)->len < imagesize) - rb_raise(rb_eArgError, "string length:%d",RSTRING(arg9)->len); - pixels = RSTRING(arg9)->ptr; - } else if (NIL_P(arg9)) { - pixels = NULL; - } else { - Check_Type(arg9,T_STRING); /* force exception */ - return Qnil; - } - fptr_glCompressedTexImage3D(target,level,internalformat,width,height,depth,border,imagesize,pixels); - return Qnil; -} - -static void (APIENTRY * fptr_glCompressedTexImage2D)(GLenum,GLint,GLenum,GLsizei,GLsizei,GLint,GLsizei,GLvoid*); -static VALUE -gl_CompressedTexImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8; -{ - GLenum target; - GLint level; - GLenum internalformat; - GLsizei width; - GLsizei height; - GLint border; - GLsizei imagesize; - GLvoid *pixels; - LOAD_GL_FUNC(glCompressedTexImage2D) - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - internalformat = (GLenum)NUM2INT(arg3); - width = (GLsizei)NUM2UINT(arg4); - height = (GLsizei)NUM2UINT(arg5); - border = (GLint)NUM2INT(arg6); - imagesize = (GLsizei)NUM2UINT(arg7); - if (TYPE(arg8) == T_STRING) { - if (RSTRING(arg8)->len < imagesize) - rb_raise(rb_eArgError, "string length:%d",RSTRING(arg8)->len); - pixels = RSTRING(arg8)->ptr; - } else if (NIL_P(arg8)) { - pixels = NULL; - } else { - Check_Type(arg8,T_STRING); /* force exception */ - return Qnil; - } - fptr_glCompressedTexImage2D(target,level,internalformat,width,height,border,imagesize,pixels); - return Qnil; -} - -static void (APIENTRY * fptr_glCompressedTexImage1D)(GLenum,GLint,GLenum,GLsizei,GLint,GLsizei,GLvoid*); -static VALUE -gl_CompressedTexImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7; -{ - GLenum target; - GLint level; - GLenum internalformat; - GLsizei width; - GLint border; - GLsizei imagesize; - GLvoid *pixels; - LOAD_GL_FUNC(glCompressedTexImage1D) - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - internalformat = (GLenum)NUM2INT(arg3); - width = (GLsizei)NUM2UINT(arg4); - border = (GLint)NUM2INT(arg5); - imagesize = (GLsizei)NUM2UINT(arg6); - if (TYPE(arg7) == T_STRING) { - if (RSTRING(arg7)->len < imagesize) - rb_raise(rb_eArgError, "string length:%d",RSTRING(arg7)->len); - pixels = RSTRING(arg7)->ptr; - } else if (NIL_P(arg7)) { - pixels = NULL; - } else { - Check_Type(arg7,T_STRING); /* force exception */ - return Qnil; - } - fptr_glCompressedTexImage1D(target,level,internalformat,width,border,imagesize,pixels); - return Qnil; -} - -static void (APIENTRY * fptr_glCompressedTexSubImage3D)(GLenum,GLint,GLint,GLint,GLint,GLsizei,GLsizei,GLsizei,GLenum,GLsizei,GLvoid*); -static VALUE -gl_CompressedTexSubImage3D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11; -{ - GLenum target; - GLint level; - GLint xoffset; - GLint yoffset; - GLint zoffset; - GLsizei width; - GLsizei height; - GLsizei depth; - GLenum format; - GLsizei imagesize; - GLvoid *pixels; - LOAD_GL_FUNC(glCompressedTexSubImage3D) - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - xoffset = (GLint)NUM2INT(arg3); - yoffset = (GLint)NUM2INT(arg4); - zoffset = (GLint)NUM2INT(arg5); - width = (GLsizei)NUM2UINT(arg6); - height = (GLsizei)NUM2UINT(arg7); - depth = (GLsizei)NUM2UINT(arg8); - format = (GLenum)NUM2INT(arg9); - imagesize = (GLsizei)NUM2UINT(arg10); - if (TYPE(arg11) == T_STRING) { - if (RSTRING(arg11)->len < imagesize) - rb_raise(rb_eArgError, "string length:%d",RSTRING(arg11)->len); - pixels = RSTRING(arg11)->ptr; - } else { - Check_Type(arg11,T_STRING); /* force exception */ - return Qnil; - } - fptr_glCompressedTexSubImage3D(target,level,xoffset,yoffset,zoffset,width,height,depth,format,imagesize,pixels); - return Qnil; -} - -static void (APIENTRY * fptr_glCompressedTexSubImage2D)(GLenum,GLint,GLint,GLint,GLsizei,GLsizei,GLenum,GLsizei,GLvoid*); -static VALUE -gl_CompressedTexSubImage2D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9; -{ - GLenum target; - GLint level; - GLint xoffset; - GLint yoffset; - GLsizei width; - GLsizei height; - GLenum format; - GLsizei imagesize; - GLvoid *pixels; - LOAD_GL_FUNC(glCompressedTexSubImage2D) - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - xoffset = (GLint)NUM2INT(arg3); - yoffset = (GLint)NUM2INT(arg4); - width = (GLsizei)NUM2UINT(arg5); - height = (GLsizei)NUM2UINT(arg6); - format = (GLenum)NUM2INT(arg7); - imagesize = (GLsizei)NUM2UINT(arg8); - if (TYPE(arg9) == T_STRING) { - if (RSTRING(arg9)->len < imagesize) - rb_raise(rb_eArgError, "string length:%d",RSTRING(arg9)->len); - pixels = RSTRING(arg9)->ptr; - } else { - Check_Type(arg9,T_STRING); /* force exception */ - return Qnil; - } - fptr_glCompressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,imagesize,pixels); - return Qnil; -} - -static void (APIENTRY * fptr_glCompressedTexSubImage1D)(GLenum,GLint,GLint,GLsizei,GLenum,GLsizei,GLvoid*); -static VALUE -gl_CompressedTexSubImage1D(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7; -{ - GLenum target; - GLint level; - GLint xoffset; - GLsizei width; - GLenum format; - GLsizei imagesize; - GLvoid *pixels; - LOAD_GL_FUNC(glCompressedTexSubImage1D) - target = (GLenum)NUM2INT(arg1); - level = (GLint)NUM2INT(arg2); - xoffset = (GLint)NUM2INT(arg3); - width = (GLsizei)NUM2UINT(arg4); - format = (GLenum)NUM2INT(arg5); - imagesize = (GLsizei)NUM2UINT(arg6); - if (TYPE(arg7) == T_STRING) { - if (RSTRING(arg7)->len < imagesize) - rb_raise(rb_eArgError, "string length:%d",RSTRING(arg7)->len); - pixels = RSTRING(arg7)->ptr; - } else { - Check_Type(arg7,T_STRING); /* force exception */ - return Qnil; - } - fptr_glCompressedTexSubImage1D(target,level,xoffset,width,format,imagesize,pixels); - return Qnil; -} - -static void (APIENTRY * fptr_glGetCompressedTexImage)(GLenum,GLint,GLvoid*); -static VALUE -gl_GetCompressedTexImage(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLint lod; - GLsizei size = 0; - VALUE data; - LOAD_GL_FUNC(glGetCompressedTexImage) - target = (GLenum)NUM2INT(arg1); - lod = (GLenum)NUM2INT(arg2); - glGetTexLevelParameteriv(target,lod,GL_TEXTURE_COMPRESSED_IMAGE_SIZE,&size); /* 1.0 function */ - data = allocate_buffer_with_string(size); - fptr_glGetCompressedTexImage(target,lod,(GLvoid*)RSTRING(data)->ptr); - return data; -} - -void gl_init_functions_1_3(VALUE module) -{ - rb_define_module_function(module, "glActiveTexture", gl_ActiveTexture, 1); - rb_define_module_function(module, "glClientActiveTexture", gl_ClientActiveTexture, 1); - rb_define_module_function(module, "glMultiTexCoord1d", gl_MultiTexCoord1d, 2); - rb_define_module_function(module, "glMultiTexCoord1f", gl_MultiTexCoord1f, 2); - rb_define_module_function(module, "glMultiTexCoord1i", gl_MultiTexCoord1i, 2); - rb_define_module_function(module, "glMultiTexCoord1s", gl_MultiTexCoord1s, 2); - rb_define_module_function(module, "glMultiTexCoord2d", gl_MultiTexCoord2d, 3); - rb_define_module_function(module, "glMultiTexCoord2f", gl_MultiTexCoord2f, 3); - rb_define_module_function(module, "glMultiTexCoord2i", gl_MultiTexCoord2i, 3); - rb_define_module_function(module, "glMultiTexCoord2s", gl_MultiTexCoord2s, 3); - rb_define_module_function(module, "glMultiTexCoord3d", gl_MultiTexCoord3d, 4); - rb_define_module_function(module, "glMultiTexCoord3f", gl_MultiTexCoord3f, 4); - rb_define_module_function(module, "glMultiTexCoord3i", gl_MultiTexCoord3i, 4); - rb_define_module_function(module, "glMultiTexCoord3s", gl_MultiTexCoord3s, 4); - rb_define_module_function(module, "glMultiTexCoord4d", gl_MultiTexCoord4d, 5); - rb_define_module_function(module, "glMultiTexCoord4f", gl_MultiTexCoord4f, 5); - rb_define_module_function(module, "glMultiTexCoord4i", gl_MultiTexCoord4i, 5); - rb_define_module_function(module, "glMultiTexCoord4s", gl_MultiTexCoord4s, 5); - rb_define_module_function(module, "glLoadTransposeMatrixf", gl_LoadTransposeMatrixf, 1); - rb_define_module_function(module, "glLoadTransposeMatrixd", gl_LoadTransposeMatrixd, 1); - rb_define_module_function(module, "glMultTransposeMatrixf", gl_MultTransposeMatrixf, 1); - rb_define_module_function(module, "glMultTransposeMatrixd", gl_MultTransposeMatrixd, 1); - rb_define_module_function(module, "glSampleCoverage", gl_SampleCoverage, 2); - rb_define_module_function(module, "glCompressedTexImage3D", gl_CompressedTexImage3D, 9); - rb_define_module_function(module, "glCompressedTexImage2D", gl_CompressedTexImage2D, 8); - rb_define_module_function(module, "glCompressedTexImage1D", gl_CompressedTexImage1D, 7); - rb_define_module_function(module, "glCompressedTexSubImage3D", gl_CompressedTexSubImage3D, 11); - rb_define_module_function(module, "glCompressedTexSubImage2D", gl_CompressedTexSubImage2D, 9); - rb_define_module_function(module, "glCompressedTexSubImage1D", gl_CompressedTexSubImage1D, 7); - rb_define_module_function(module, "glGetCompressedTexImage", gl_GetCompressedTexImage, 2); - - /* Additional functions */ - - rb_define_module_function(module, "glMultiTexCoord", gl_MultiTexCoorddv, -1); - rb_define_module_function(module, "glMultiTexCoord1dv", gl_MultiTexCoorddv, -1); - rb_define_module_function(module, "glMultiTexCoord1fv", gl_MultiTexCoordfv, -1); - rb_define_module_function(module, "glMultiTexCoord1iv", gl_MultiTexCoordiv, -1); - rb_define_module_function(module, "glMultiTexCoord1sv", gl_MultiTexCoordsv, -1); - rb_define_module_function(module, "glMultiTexCoord2dv", gl_MultiTexCoorddv, -1); - rb_define_module_function(module, "glMultiTexCoord2fv", gl_MultiTexCoordfv, -1); - rb_define_module_function(module, "glMultiTexCoord2iv", gl_MultiTexCoordiv, -1); - rb_define_module_function(module, "glMultiTexCoord2sv", gl_MultiTexCoordsv, -1); - rb_define_module_function(module, "glMultiTexCoord3dv", gl_MultiTexCoorddv, -1); - rb_define_module_function(module, "glMultiTexCoord3fv", gl_MultiTexCoordfv, -1); - rb_define_module_function(module, "glMultiTexCoord3iv", gl_MultiTexCoordiv, -1); - rb_define_module_function(module, "glMultiTexCoord3sv", gl_MultiTexCoordsv, -1); - rb_define_module_function(module, "glMultiTexCoord4dv", gl_MultiTexCoorddv, -1); - rb_define_module_function(module, "glMultiTexCoord4fv", gl_MultiTexCoordfv, -1); - rb_define_module_function(module, "glMultiTexCoord4iv", gl_MultiTexCoordiv, -1); - rb_define_module_function(module, "glMultiTexCoord4sv", gl_MultiTexCoordsv, -1); -} diff --git a/ruby/RubyOpenGL/gl/gl-1.4.c b/ruby/RubyOpenGL/gl/gl-1.4.c deleted file mode 100644 index 4741a7c9..00000000 --- a/ruby/RubyOpenGL/gl/gl-1.4.c +++ /dev/null @@ -1,647 +0,0 @@ -/* - * Copyright (C) 2007 Jan Dvorak - * - * This program is distributed under the terms of the MIT license. - * See the included MIT-LICENSE file for the terms of this license. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifdef __APPLE__ -#include -#elif defined WIN32 -#include -#include -#else -#include -#endif -#include "../common/common.h" - -/* OpenGL 1.4 functions */ - -static void (APIENTRY * fptr_glBlendFuncSeparate)(GLenum,GLenum,GLenum,GLenum); -static VALUE -gl_BlendFuncSeparate(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLenum srcRGB; - GLenum dstRGB; - GLenum srcAlpha; - GLenum dstAlpha; - LOAD_GL_FUNC(glBlendFuncSeparate) - srcRGB = (GLenum)NUM2INT(arg1); - dstRGB = (GLenum)NUM2INT(arg2); - srcAlpha = (GLenum)NUM2INT(arg3); - dstAlpha = (GLenum)NUM2INT(arg4); - fptr_glBlendFuncSeparate(srcRGB,dstRGB,srcAlpha,dstAlpha); - return Qnil; -} - -static void (APIENTRY * fptr_glFogCoordf)(GLfloat); -static VALUE -gl_FogCoordf(obj,arg1) -VALUE obj,arg1; -{ - GLfloat coord; - LOAD_GL_FUNC(glFogCoordf) - coord=(GLfloat)NUM2DBL(arg1); - fptr_glFogCoordf(coord); - return Qnil; -} - -static void (APIENTRY * fptr_glFogCoordfv)(GLfloat *); -static VALUE -gl_FogCoordfv(obj,arg1) -VALUE obj,arg1; -{ - GLfloat coord; - LOAD_GL_FUNC(glFogCoordfv) - Check_Type(arg1,T_ARRAY); - ary2cflt(arg1,&coord,1); - fptr_glFogCoordfv(&coord); - return Qnil; -} - -static void (APIENTRY * fptr_glFogCoordd)(GLdouble); -static VALUE -gl_FogCoordd(obj,arg1) -VALUE obj,arg1; -{ - GLdouble coord; - LOAD_GL_FUNC(glFogCoordd) - coord=(GLdouble)NUM2DBL(arg1); - fptr_glFogCoordd(coord); - return Qnil; -} - -static void (APIENTRY * fptr_glFogCoorddv)(GLdouble *); -static VALUE -gl_FogCoorddv(obj,arg1) -VALUE obj,arg1; -{ - GLdouble coord; - LOAD_GL_FUNC(glFogCoorddv) - Check_Type(arg1,T_ARRAY); - ary2cdbl(arg1,&coord,1); - fptr_glFogCoorddv(&coord); - return Qnil; -} - -extern VALUE g_FogCoord_ptr; -static void (APIENTRY * fptr_glFogCoordPointer)(GLenum,GLsizei,const GLvoid *); -static VALUE -gl_FogCoordPointer(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum type; - GLsizei stride; - LOAD_GL_FUNC(glFogCoordPointer) - type = (GLenum)NUM2INT(arg1); - stride = (GLsizei)NUM2UINT(arg2); - Check_Type(arg3, T_STRING); - rb_str_freeze(arg3); - g_FogCoord_ptr = arg3; - fptr_glFogCoordPointer(type, stride, (const GLvoid*)RSTRING(arg3)->ptr); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiDrawArrays)(GLenum,GLint*,GLsizei*,GLsizei); -static VALUE -gl_MultiDrawArrays(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - /* TODO: check ary1,ary2 if len < primcount then raise */ - /* stringy ? */ - GLenum mode; - GLsizei primcount; - GLint *ary1; - GLsizei *ary2; - LOAD_GL_FUNC(glMultiDrawArrays) - mode = (GLenum)NUM2INT(arg1); - primcount = (GLsizei)NUM2UINT(arg4); - ary1 = ALLOC_N(GLint,primcount); - ary2 = ALLOC_N(GLsizei,primcount); - ary2cint(arg2,ary1,primcount); - ary2cint(arg3,ary2,primcount); - fptr_glMultiDrawArrays(mode,ary1,ary2,primcount); - xfree(ary1); - xfree(ary2); - return Qnil; -} - -static void (APIENTRY * fptr_glMultiDrawElements)(GLenum,const GLsizei *,GLenum,GLvoid **,GLsizei); -static VALUE -gl_MultiDrawElements(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum mode; - GLenum type; - GLsizei *counts; - GLvoid **indices; - GLint size; - RArray *ary; - int i; - LOAD_GL_FUNC(glMultiDrawElements) - mode = (GLenum)NUM2INT(arg1); - type = (GLenum)NUM2INT(arg2); - Check_Type(arg3,T_ARRAY); - ary = RARRAY(arg3); - size = ary->len; - counts = ALLOC_N(GLsizei,size); - indices = ALLOC_N(GLvoid*,size); - for (i=0;iptr[i])->ptr; - counts[i] = RSTRING(ary->ptr[i])->len; - } - fptr_glMultiDrawElements(mode,counts,type,indices,size); - xfree(counts); - xfree(indices); - return Qnil; -} - -static void (APIENTRY * fptr_glPointParameterf)(GLenum,GLfloat); -static VALUE -gl_PointParameterf(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLfloat param; - LOAD_GL_FUNC(glPointParameterf) - pname = (GLenum)NUM2INT(arg1); - param = (GLfloat)NUM2INT(arg2); - fptr_glPointParameterf(pname,param); - return Qnil; -} - -static void (APIENTRY * fptr_glPointParameterfv)(GLenum,GLfloat *); -static VALUE -gl_PointParameterfv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLfloat params[3] = {0.0,0.0,0.0}; - GLint size; - LOAD_GL_FUNC(glPointParameterfv) - pname = (GLenum)NUM2INT(arg1); - Check_Type(arg2,T_ARRAY); - if (pname==GL_POINT_DISTANCE_ATTENUATION) - size = 3; - else - size = 1; - ary2cflt(arg2,params,size); - fptr_glPointParameterfv(pname,params); - return Qnil; -} - -static void (APIENTRY * fptr_glPointParameteri)(GLenum,GLint); -static VALUE -gl_PointParameteri(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLint param; - LOAD_GL_FUNC(glPointParameteri) - pname = (GLenum)NUM2INT(arg1); - param = (GLint)NUM2INT(arg2); - fptr_glPointParameteri(pname,param); - return Qnil; -} - -static void (APIENTRY * fptr_glPointParameteriv)(GLenum,GLint *); -static VALUE -gl_PointParameteriv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum pname; - GLint params[3] = {0.0,0.0,0.0}; - GLint size; - LOAD_GL_FUNC(glPointParameteriv) - pname = (GLenum)NUM2INT(arg1); - Check_Type(arg2,T_ARRAY); - if (pname==GL_POINT_DISTANCE_ATTENUATION) - size = 3; - else - size = 1; - ary2cint(arg2,params,size); - fptr_glPointParameteriv(pname,params); - return Qnil; -} - -static void (APIENTRY * fptr_glSecondaryColor3b)(GLbyte,GLbyte,GLbyte); -static VALUE -gl_SecondaryColor3b(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLbyte red; - GLbyte green; - GLbyte blue; - LOAD_GL_FUNC(glSecondaryColor3b) - red = (GLbyte)NUM2INT(arg1); - green = (GLbyte)NUM2INT(arg2); - blue = (GLbyte)NUM2INT(arg3); - fptr_glSecondaryColor3b(red,green,blue); - return Qnil; -} - -static void (APIENTRY * fptr_glSecondaryColor3d)(GLdouble,GLdouble,GLdouble); -static VALUE -gl_SecondaryColor3d(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLdouble red; - GLdouble green; - GLdouble blue; - LOAD_GL_FUNC(glSecondaryColor3d) - red = (GLdouble)NUM2DBL(arg1); - green = (GLdouble)NUM2DBL(arg2); - blue = (GLdouble)NUM2DBL(arg3); - fptr_glSecondaryColor3d(red,green,blue); - return Qnil; -} - -static void (APIENTRY * fptr_glSecondaryColor3f)(GLfloat,GLfloat,GLfloat); -static VALUE -gl_SecondaryColor3f(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLfloat red; - GLfloat green; - GLfloat blue; - LOAD_GL_FUNC(glSecondaryColor3f) - red = (GLfloat)NUM2DBL(arg1); - green = (GLfloat)NUM2DBL(arg2); - blue = (GLfloat)NUM2DBL(arg3); - fptr_glSecondaryColor3f(red,green,blue); - return Qnil; -} - -static void (APIENTRY * fptr_glSecondaryColor3i)(GLint,GLint,GLint); -static VALUE -gl_SecondaryColor3i(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint red; - GLint green; - GLint blue; - LOAD_GL_FUNC(glSecondaryColor3i) - red = (GLint)NUM2INT(arg1); - green = (GLint)NUM2INT(arg2); - blue = (GLint)NUM2INT(arg3); - fptr_glSecondaryColor3i(red,green,blue); - return Qnil; -} - -static void (APIENTRY * fptr_glSecondaryColor3s)(GLshort,GLshort,GLshort); -static VALUE -gl_SecondaryColor3s(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLshort red; - GLshort green; - GLshort blue; - LOAD_GL_FUNC(glSecondaryColor3s) - red = (GLshort)NUM2INT(arg1); - green = (GLshort)NUM2INT(arg2); - blue = (GLshort)NUM2INT(arg3); - fptr_glSecondaryColor3s(red,green,blue); - return Qnil; -} - -static void (APIENTRY * fptr_glSecondaryColor3ub)(GLubyte,GLubyte,GLubyte); -static VALUE -gl_SecondaryColor3ub(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLubyte red; - GLubyte green; - GLubyte blue; - LOAD_GL_FUNC(glSecondaryColor3ub) - red = (GLubyte)NUM2INT(arg1); - green = (GLubyte)NUM2INT(arg2); - blue = (GLubyte)NUM2INT(arg3); - fptr_glSecondaryColor3ub(red,green,blue); - return Qnil; -} - -static void (APIENTRY * fptr_glSecondaryColor3ui)(GLuint,GLuint,GLuint); -static VALUE -gl_SecondaryColor3ui(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLuint red; - GLuint green; - GLuint blue; - LOAD_GL_FUNC(glSecondaryColor3ui) - red = (GLuint)NUM2UINT(arg1); - green = (GLuint)NUM2UINT(arg2); - blue = (GLuint)NUM2UINT(arg3); - fptr_glSecondaryColor3ui(red,green,blue); - return Qnil; -} - -static void (APIENTRY * fptr_glSecondaryColor3us)(GLushort,GLushort,GLushort); -static VALUE -gl_SecondaryColor3us(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLushort red; - GLushort green; - GLushort blue; - LOAD_GL_FUNC(glSecondaryColor3us) - red = (GLushort)NUM2INT(arg1); - green = (GLushort)NUM2INT(arg2); - blue = (GLushort)NUM2INT(arg3); - fptr_glSecondaryColor3us(red,green,blue); - return Qnil; -} - -#define GLSECONDARYCOLOR_VFUNC(_type_) \ -static VALUE \ -gl_SecondaryColor##_type_##v(argc,argv,obj) \ -int argc; \ -VALUE *argv; \ -VALUE obj; \ -{ \ - int num; \ - VALUE args[3]; \ - RArray *ary; \ - switch (num = rb_scan_args(argc, argv, "12", &args[0], &args[1], &args[2])) { \ - case 1: \ - if (TYPE(args[0]) == T_ARRAY) { \ - ary = RARRAY(args[0]); \ - switch (ary->len) { \ - case 3: \ - gl_SecondaryColor3##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "array length:%d", num); \ - } \ - } \ - else \ - rb_raise(rb_eArgError, "array length:%d", num); \ - break; \ - case 3: \ - gl_SecondaryColor3##_type_(obj,args[0], args[1], args[2]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "too many arguments"); \ - break; \ - } \ - return Qnil; \ -} - -GLSECONDARYCOLOR_VFUNC(b) -GLSECONDARYCOLOR_VFUNC(d) -GLSECONDARYCOLOR_VFUNC(f) -GLSECONDARYCOLOR_VFUNC(i) -GLSECONDARYCOLOR_VFUNC(s) -GLSECONDARYCOLOR_VFUNC(ui) -GLSECONDARYCOLOR_VFUNC(ub) -GLSECONDARYCOLOR_VFUNC(us) -#undef GLSECONDARYCOLOR_VFUNC - -extern VALUE g_SecondaryColor_ptr; -static void (APIENTRY * fptr_glSecondaryColorPointer)(GLint,GLenum,GLsizei,const GLvoid *); -static VALUE -gl_SecondaryColorPointer(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint size; - GLenum type; - GLsizei stride; - LOAD_GL_FUNC(glSecondaryColorPointer) - size = (GLint)NUM2INT(arg1); - type = (GLenum)NUM2INT(arg2); - stride = (GLsizei)NUM2UINT(arg3); - Check_Type(arg4, T_STRING); - rb_str_freeze(arg4); - g_SecondaryColor_ptr = arg4; - fptr_glSecondaryColorPointer(size,type, stride, (const GLvoid*)RSTRING(arg4)->ptr); - return Qnil; -} - -static void (APIENTRY * fptr_glWindowPos2d)(GLdouble,GLdouble); -static VALUE -gl_WindowPos2d(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLdouble x; - GLdouble y; - LOAD_GL_FUNC(glWindowPos2d) - x = (GLdouble)NUM2DBL(arg1); - y = (GLdouble)NUM2DBL(arg2); - fptr_glWindowPos2d(x,y); - return Qnil; -} - -static void (APIENTRY * fptr_glWindowPos2f)(GLfloat,GLfloat); -static VALUE -gl_WindowPos2f(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLfloat x; - GLfloat y; - LOAD_GL_FUNC(glWindowPos2f) - x = (GLfloat)NUM2DBL(arg1); - y = (GLfloat)NUM2DBL(arg2); - fptr_glWindowPos2f(x,y); - return Qnil; -} - -static void (APIENTRY * fptr_glWindowPos2i)(GLint,GLint); -static VALUE -gl_WindowPos2i(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLint x; - GLint y; - LOAD_GL_FUNC(glWindowPos2i) - x = (GLint)NUM2INT(arg1); - y = (GLint)NUM2INT(arg2); - fptr_glWindowPos2i(x,y); - return Qnil; -} - -static void (APIENTRY * fptr_glWindowPos2s)(GLshort,GLshort); -static VALUE -gl_WindowPos2s(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLshort x; - GLshort y; - LOAD_GL_FUNC(glWindowPos2s) - x = (GLshort)NUM2INT(arg1); - y = (GLshort)NUM2INT(arg2); - fptr_glWindowPos2s(x,y); - return Qnil; -} - -static void (APIENTRY * fptr_glWindowPos3d)(GLdouble,GLdouble,GLdouble); -static VALUE -gl_WindowPos3d(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLdouble x; - GLdouble y; - GLdouble z; - LOAD_GL_FUNC(glWindowPos3d) - x = (GLdouble)NUM2DBL(arg1); - y = (GLdouble)NUM2DBL(arg2); - z = (GLdouble)NUM2DBL(arg3); - fptr_glWindowPos3d(x,y,z); - return Qnil; -} - -static void (APIENTRY * fptr_glWindowPos3f)(GLfloat,GLfloat,GLfloat); -static VALUE -gl_WindowPos3f(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLfloat x; - GLfloat y; - GLfloat z; - LOAD_GL_FUNC(glWindowPos3f) - x = (GLfloat)NUM2DBL(arg1); - y = (GLfloat)NUM2DBL(arg2); - z = (GLfloat)NUM2DBL(arg3); - fptr_glWindowPos3f(x,y,z); - return Qnil; -} - -static void (APIENTRY * fptr_glWindowPos3i)(GLint,GLint,GLint); -static VALUE -gl_WindowPos3i(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint x; - GLint y; - GLint z; - LOAD_GL_FUNC(glWindowPos3i) - x = (GLint)NUM2INT(arg1); - y = (GLint)NUM2INT(arg2); - z = (GLint)NUM2INT(arg3); - fptr_glWindowPos3i(x,y,z); - return Qnil; -} - -static void (APIENTRY * fptr_glWindowPos3s)(GLshort,GLshort,GLshort); -static VALUE -gl_WindowPos3s(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLshort x; - GLshort y; - GLshort z; - LOAD_GL_FUNC(glWindowPos3s) - x = (GLshort)NUM2INT(arg1); - y = (GLshort)NUM2INT(arg2); - z = (GLshort)NUM2INT(arg3); - fptr_glWindowPos3s(x,y,z); - return Qnil; -} - -#define GLWINDOWPOS_VFUNC(_type_) \ -static VALUE \ -gl_WindowPos##_type_##v(argc,argv,obj) \ -int argc; \ -VALUE *argv; \ -VALUE obj; \ -{ \ - int num; \ - VALUE args[3]; \ - RArray *ary; \ - switch (num = rb_scan_args(argc, argv, "12", &args[0], &args[1], &args[2])) { \ - case 1: \ - if (TYPE(args[0]) == T_ARRAY) { \ - ary = RARRAY(args[0]); \ - switch (ary->len) { \ - case 2: \ - gl_WindowPos2##_type_(obj,ary->ptr[0],ary->ptr[1]); \ - break; \ - case 3: \ - gl_WindowPos3##_type_(obj,ary->ptr[0],ary->ptr[1],ary->ptr[2]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "array length:%d", num); \ - } \ - } \ - else \ - rb_raise(rb_eArgError, "array length:%d", num); \ - break; \ - case 2: \ - gl_WindowPos2##_type_(obj,args[0], args[1]); \ - break; \ - case 3: \ - gl_WindowPos3##_type_(obj,args[0], args[1], args[2]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "too many arguments"); \ - break; \ - } \ - return Qnil; \ -} - -GLWINDOWPOS_VFUNC(d) -GLWINDOWPOS_VFUNC(f) -GLWINDOWPOS_VFUNC(i) -GLWINDOWPOS_VFUNC(s) -#undef GLWINDOWPOS_VFUNC - - -void gl_init_functions_1_4(VALUE module) -{ - rb_define_module_function(module, "glBlendFuncSeparate", gl_BlendFuncSeparate, 4); - rb_define_module_function(module, "glFogCoordf", gl_FogCoordf, 1); - rb_define_module_function(module, "glFogCoordfv", gl_FogCoordfv, 1); - rb_define_module_function(module, "glFogCoordd", gl_FogCoordd, 1); - rb_define_module_function(module, "glFogCoorddv", gl_FogCoorddv, 1); - rb_define_module_function(module, "glFogCoordPointer", gl_FogCoordPointer, 3); - rb_define_module_function(module, "glMultiDrawArrays", gl_MultiDrawArrays, 4); - rb_define_module_function(module, "glMultiDrawElements", gl_MultiDrawElements, 3); - rb_define_module_function(module, "glPointParameterf", gl_PointParameterf, 2); - rb_define_module_function(module, "glPointParameterfv", gl_PointParameterfv, 2); - rb_define_module_function(module, "glPointParameteri", gl_PointParameteri, 2); - rb_define_module_function(module, "glPointParameteriv", gl_PointParameteriv, 2); - rb_define_module_function(module, "glSecondaryColor3b", gl_SecondaryColor3b, 3); - rb_define_module_function(module, "glSecondaryColor3d", gl_SecondaryColor3d, 3); - rb_define_module_function(module, "glSecondaryColor3f", gl_SecondaryColor3f, 3); - rb_define_module_function(module, "glSecondaryColor3i", gl_SecondaryColor3i, 3); - rb_define_module_function(module, "glSecondaryColor3s", gl_SecondaryColor3s, 3); - rb_define_module_function(module, "glSecondaryColor3ub", gl_SecondaryColor3ub, 3); - rb_define_module_function(module, "glSecondaryColor3ui", gl_SecondaryColor3ui, 3); - rb_define_module_function(module, "glSecondaryColor3us", gl_SecondaryColor3us, 3); - rb_define_module_function(module, "glSecondaryColorPointer", gl_SecondaryColorPointer, 4); - rb_define_module_function(module, "glWindowPos2d", gl_WindowPos2d, 2); - rb_define_module_function(module, "glWindowPos2f", gl_WindowPos2f, 2); - rb_define_module_function(module, "glWindowPos2i", gl_WindowPos2i, 2); - rb_define_module_function(module, "glWindowPos2s", gl_WindowPos2s, 2); - rb_define_module_function(module, "glWindowPos3d", gl_WindowPos3d, 3); - rb_define_module_function(module, "glWindowPos3f", gl_WindowPos3f, 3); - rb_define_module_function(module, "glWindowPos3i", gl_WindowPos3i, 3); - rb_define_module_function(module, "glWindowPos3s", gl_WindowPos3s, 3); - - /* Additional Functions */ - rb_define_module_function(module, "glSecondaryColor3bv", gl_SecondaryColorbv, -1); - rb_define_module_function(module, "glSecondaryColor3dv", gl_SecondaryColordv, -1); - rb_define_module_function(module, "glSecondaryColor3fv", gl_SecondaryColorfv, -1); - rb_define_module_function(module, "glSecondaryColor3iv", gl_SecondaryColoriv, -1); - rb_define_module_function(module, "glSecondaryColor3sv", gl_SecondaryColorsv, -1); - rb_define_module_function(module, "glSecondaryColor3ubv", gl_SecondaryColorubv, -1); - rb_define_module_function(module, "glSecondaryColor3uiv", gl_SecondaryColoruiv, -1); - rb_define_module_function(module, "glSecondaryColor3usv", gl_SecondaryColorusv, -1); - - rb_define_module_function(module, "glWindowPos2dv", gl_WindowPosdv, -1); - rb_define_module_function(module, "glWindowPos2fv", gl_WindowPosfv, -1); - rb_define_module_function(module, "glWindowPos2iv", gl_WindowPosiv, -1); - rb_define_module_function(module, "glWindowPos2sv", gl_WindowPossv, -1); - rb_define_module_function(module, "glWindowPos3dv", gl_WindowPosdv, -1); - rb_define_module_function(module, "glWindowPos3fv", gl_WindowPosfv, -1); - rb_define_module_function(module, "glWindowPos3iv", gl_WindowPosiv, -1); - rb_define_module_function(module, "glWindowPos3sv", gl_WindowPossv, -1); -} diff --git a/ruby/RubyOpenGL/gl/gl-1.5.c b/ruby/RubyOpenGL/gl/gl-1.5.c deleted file mode 100644 index 51025034..00000000 --- a/ruby/RubyOpenGL/gl/gl-1.5.c +++ /dev/null @@ -1,362 +0,0 @@ -/* - * Copyright (C) 2007 Jan Dvorak - * - * This program is distributed under the terms of the MIT license. - * See the included MIT-LICENSE file for the terms of this license. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifdef __APPLE__ -#include -#elif defined WIN32 -#include -#include -#else -#include -#endif -#include "../common/common.h" - -/* OpenGL 1.5 functions */ - -static void (APIENTRY * fptr_glGenQueries)(GLsizei,GLuint *); -static VALUE -gl_GenQueries(obj,arg1) -VALUE obj,arg1; -{ - GLsizei n; - GLuint *queries; - RArray *ret; - int i; - LOAD_GL_FUNC(glGenQueries) - n = (GLsizei)NUM2UINT(arg1); - queries = ALLOC_N(GLuint, n); - fptr_glGenQueries(n, queries); - ret = RARRAY(rb_ary_new2(n)); - for (i = 0; i < n; i++) - rb_ary_push((VALUE)ret, INT2NUM(queries[i])); - xfree(queries); - return (VALUE)ret; -} - -static void (APIENTRY * fptr_glDeleteQueries)(GLsizei,GLuint *); -static VALUE -gl_DeleteQueries(obj,arg1) -VALUE obj,arg1; -{ - GLsizei n; - GLuint *queries; - LOAD_GL_FUNC(glDeleteQueries) - Check_Type(arg1,T_ARRAY); - n = RARRAY(arg1)->len; - queries = ALLOC_N(GLuint,n); - ary2cuint(arg1,queries,n); - fptr_glDeleteQueries( n, queries); - xfree(queries); - return Qnil; -} - -static GLboolean (APIENTRY * fptr_glIsQuery)(GLuint); -static VALUE -gl_IsQuery(obj,arg1) -VALUE obj,arg1; -{ - GLuint query; - GLboolean ret; - LOAD_GL_FUNC(glIsQuery) - query = (GLuint)NUM2UINT(arg1); - ret = fptr_glIsQuery(query); - return INT2NUM(ret); -} - -static void (APIENTRY * fptr_glBeginQuery)(GLenum,GLuint); -static VALUE -gl_BeginQuery(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLuint id; - LOAD_GL_FUNC(glBeginQuery) - target = (GLenum)NUM2INT(arg1); - id = (GLuint)NUM2UINT(arg2); - fptr_glBeginQuery(target,id); - return Qnil; -} - -static void (APIENTRY * fptr_glEndQuery)(GLenum); -static VALUE -gl_EndQuery(obj,arg1) -VALUE obj,arg1; -{ - GLenum target; - LOAD_GL_FUNC(glEndQuery) - target = (GLenum)NUM2INT(arg1); - fptr_glEndQuery(target); - return Qnil; -} - -static void (APIENTRY * fptr_glGetQueryiv)(GLenum,GLenum,GLint *); -static VALUE -gl_GetQueryiv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLenum pname; - GLint params = 0; - VALUE retary; - LOAD_GL_FUNC(glGetQueryiv) - target = (GLenum)NUM2INT(arg1); - pname = (GLenum)NUM2INT(arg2); - fptr_glGetQueryiv(target,pname,¶ms); - retary = rb_ary_new2(1); - rb_ary_push(retary, INT2NUM(params)); - return retary; -} - -static void (APIENTRY * fptr_glGetQueryObjectiv)(GLuint,GLenum,GLint *); -static VALUE -gl_GetQueryObjectiv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint id; - GLenum pname; - GLint params = 0; - VALUE retary; - LOAD_GL_FUNC(glGetQueryObjectiv) - id = (GLuint)NUM2UINT(arg1); - pname = (GLenum)NUM2INT(arg2); - fptr_glGetQueryObjectiv(id,pname,¶ms); - retary = rb_ary_new2(1); - rb_ary_push(retary,INT2NUM(params)); - return retary; -} - -static void (APIENTRY * fptr_glGetQueryObjectuiv)(GLuint,GLenum,GLuint *); -static VALUE -gl_GetQueryObjectuiv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLuint id; - GLenum pname; - GLuint params = 0; - VALUE retary; - LOAD_GL_FUNC(glGetQueryObjectuiv) - id = (GLuint)NUM2UINT(arg1); - pname = (GLenum)NUM2INT(arg2); - fptr_glGetQueryObjectuiv(id,pname,¶ms); - retary = rb_ary_new2(1); - rb_ary_push(retary,INT2NUM(params)); - return retary; -} - -static void (APIENTRY * fptr_glBindBuffer)(GLenum,GLuint); -static VALUE -gl_BindBuffer(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLuint buffer; - LOAD_GL_FUNC(glBindBuffer) - target = (GLenum)NUM2INT(arg1); - buffer = (GLenum)NUM2INT(arg2); - fptr_glBindBuffer(target,buffer); - return Qnil; -} - -static void (APIENTRY * fptr_glDeleteBuffers)(GLsizei,GLuint *); -static VALUE -gl_DeleteBuffers(obj,arg1) -VALUE obj,arg1; -{ - GLsizei n; - GLuint *buffers; - LOAD_GL_FUNC(glDeleteBuffers) - Check_Type(arg1,T_ARRAY); - n = RARRAY(arg1)->len; - buffers = ALLOC_N(GLuint,n); - ary2cuint(arg1,buffers,n); - fptr_glDeleteBuffers(n, buffers); - xfree(buffers); - return Qnil; -} - -static void (APIENTRY * fptr_glGenBuffers)(GLsizei,GLuint *); -static VALUE -gl_GenBuffers(obj,arg1) -VALUE obj,arg1; -{ - GLsizei n; - GLuint *buffers; - RArray *ret; - int i; - LOAD_GL_FUNC(glGenBuffers) - n = (GLsizei)NUM2UINT(arg1); - buffers = ALLOC_N(GLuint, n); - fptr_glGenBuffers(n, buffers); - ret = RARRAY(rb_ary_new2(n)); - for (i = 0; i < n; i++) - rb_ary_push((VALUE)ret, INT2NUM(buffers[i])); - xfree(buffers); - return (VALUE)ret; -} - -static GLboolean (APIENTRY * fptr_glIsBuffer)(GLuint); -static VALUE -gl_IsBuffer(obj,arg1) -VALUE obj,arg1; -{ - GLuint buffer; - GLboolean ret; - LOAD_GL_FUNC(glIsBuffer) - buffer = (GLuint)NUM2UINT(arg1); - ret = fptr_glIsBuffer(buffer); - return INT2NUM(ret); -} - -static void (APIENTRY * fptr_glBufferData)(GLenum,GLsizeiptr,GLvoid *,GLenum); -static VALUE -gl_BufferData(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLenum target; - GLsizeiptr size; - GLenum usage; - LOAD_GL_FUNC(glBufferData) - target = (GLenum)NUM2INT(arg1); - size = (GLsizeiptr)NUM2INT(arg2); - usage = (GLenum)NUM2INT(arg4); - if (TYPE(arg3) == T_STRING) { - fptr_glBufferData(target,size,(GLvoid *)RSTRING(arg3)->ptr,usage); - } else if (NIL_P(arg3)) { - fptr_glBufferData(target,size,NULL,usage); - } else { - Check_Type(arg3,T_STRING); /* force exception */ - } - return Qnil; -} - -static void (APIENTRY * fptr_glBufferSubData)(GLenum,GLintptr,GLsizeiptr,GLvoid *); -static VALUE -gl_BufferSubData(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLenum target; - GLintptr offset; - GLsizeiptr size; - LOAD_GL_FUNC(glBufferSubData) - target = (GLenum)NUM2INT(arg1); - offset = (GLintptr)NUM2INT(arg2); - size = (GLsizeiptr)NUM2INT(arg3); - Check_Type(arg4,T_STRING); - fptr_glBufferSubData(target,offset,size,(GLvoid *)RSTRING(arg4)->ptr); - return Qnil; -} - -static void (APIENTRY * fptr_glGetBufferSubData)(GLenum,GLintptr,GLsizeiptr,GLvoid *); -static VALUE -gl_GetBufferSubData(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLenum target; - GLintptr offset; - GLsizeiptr size; - VALUE data; - LOAD_GL_FUNC(glGetBufferSubData) - target = (GLenum)NUM2INT(arg1); - offset = (GLintptr)NUM2INT(arg2); - size = (GLsizeiptr)NUM2INT(arg3); - data = allocate_buffer_with_string(size); - fptr_glGetBufferSubData(target,offset,size,(GLvoid *)RSTRING(data)->ptr); - return data; -} - -static void (APIENTRY * fptr_glGetBufferParameteriv)(GLenum,GLenum,GLint *); -static VALUE -gl_GetBufferParameteriv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLenum value; - GLint data = 0; - VALUE retary; - LOAD_GL_FUNC(glGetBufferParameteriv) - target = (GLenum)NUM2INT(arg1); - value = (GLenum)NUM2INT(arg2); - fptr_glGetBufferParameteriv(target,value,&data); - retary = rb_ary_new2(1); - rb_ary_push(retary,INT2NUM(data)); - return retary; -} - -static GLvoid * (APIENTRY * fptr_glMapBuffer)(GLenum,GLenum); -static VALUE -gl_MapBuffer(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum target; - GLenum access; - GLint size = 0; - VALUE data; - GLvoid *buffer_ptr; - LOAD_GL_FUNC(glMapBuffer) - LOAD_GL_FUNC(glGetBufferParameteriv) - target = (GLenum)NUM2INT(arg1); - access = (GLenum)NUM2INT(arg2); - fptr_glGetBufferParameteriv(target,GL_BUFFER_SIZE,&size); - buffer_ptr = fptr_glMapBuffer(target,access); - data = allocate_buffer_with_string(size); - memcpy(RSTRING(data)->ptr, buffer_ptr, size); - return data; -} - -static GLboolean (APIENTRY * fptr_glUnmapBuffer)(GLenum); -static VALUE -gl_UnmapBuffer(obj,arg1) -VALUE obj,arg1; -{ - GLenum target; - GLboolean ret; - LOAD_GL_FUNC(glUnmapBuffer) - target = (GLenum)NUM2INT(arg1); - ret = fptr_glUnmapBuffer(target); - return INT2NUM(ret); -} - -static void (APIENTRY * fptr_glGetBufferPointerv)(GLenum,GLenum,GLvoid **); -static VALUE -gl_GetBufferPointerv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - LOAD_GL_FUNC(glGetBufferPointerv) - /* not implemented */ - return Qnil; -} - -void gl_init_functions_1_5(VALUE module) -{ - rb_define_module_function(module, "glGenQueries", gl_GenQueries, 1); - rb_define_module_function(module, "glDeleteQueries", gl_DeleteQueries, 1); - rb_define_module_function(module, "glIsQuery", gl_IsQuery, 1); - rb_define_module_function(module, "glBeginQuery", gl_BeginQuery, 2); - rb_define_module_function(module, "glEndQuery", gl_EndQuery, 1); - rb_define_module_function(module, "glGetQueryiv", gl_GetQueryiv, 2); - rb_define_module_function(module, "glGetQueryObjectiv", gl_GetQueryObjectiv, 2); - rb_define_module_function(module, "glGetQueryObjectuiv", gl_GetQueryObjectuiv, 2); - rb_define_module_function(module, "glBindBuffer", gl_BindBuffer, 2); - rb_define_module_function(module, "glDeleteBuffers", gl_DeleteBuffers, 1); - rb_define_module_function(module, "glGenBuffers", gl_GenBuffers, 1); - rb_define_module_function(module, "glIsBuffer", gl_IsBuffer, 1); - rb_define_module_function(module, "glBufferData", gl_BufferData, 4); - rb_define_module_function(module, "glBufferSubData", gl_BufferSubData, 4); - rb_define_module_function(module, "glGetBufferSubData", gl_GetBufferSubData, 3); - rb_define_module_function(module, "glMapBuffer", gl_MapBuffer, 2); - rb_define_module_function(module, "glUnmapBuffer", gl_UnmapBuffer, 1); - rb_define_module_function(module, "glGetBufferParameteriv", gl_GetBufferParameteriv, 2); - rb_define_module_function(module, "glGetBufferPointerv", gl_GetBufferPointerv, 3); -} diff --git a/ruby/RubyOpenGL/gl/gl-2.0.c b/ruby/RubyOpenGL/gl/gl-2.0.c deleted file mode 100644 index 21c1336a..00000000 --- a/ruby/RubyOpenGL/gl/gl-2.0.c +++ /dev/null @@ -1,1632 +0,0 @@ -/* - * Copyright (C) 2007 Jan Dvorak - * - * This program is distributed under the terms of the MIT license. - * See the included MIT-LICENSE file for the terms of this license. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifdef __APPLE__ -#include -#elif defined WIN32 -#include -#include -#else -#include -#endif -#include "../common/common.h" - -static void (APIENTRY * fptr_glBlendEquationSeparate)(GLenum,GLenum); -static VALUE -gl_BlendEquationSeparate(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum modeRGB; - GLenum modeAlpha; - LOAD_GL_FUNC(glBlendEquationSeparate) - modeRGB = (GLenum)NUM2INT(arg1); - modeAlpha = (GLenum)NUM2INT(arg2); - fptr_glBlendEquationSeparate(modeRGB,modeAlpha); - return Qnil; -} - -static void (APIENTRY * fptr_glDrawBuffers)(GLsizei,GLenum *); -static VALUE -gl_DrawBuffers(obj,arg1) -VALUE obj,arg1; -{ - GLsizei size; - GLenum *buffers; - LOAD_GL_FUNC(glDrawBuffers) - Check_Type(arg1,T_ARRAY); - size = RARRAY(arg1)->len; - buffers = ALLOC_N(GLenum,size); - ary2cuint(arg1,buffers,size); - fptr_glDrawBuffers(size,buffers); - xfree(buffers); - return Qnil; -} - -static void (APIENTRY * fptr_glStencilOpSeparate)(GLenum,GLenum,GLenum,GLenum); -static VALUE -gl_StencilOpSeparate(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLenum face; - GLenum sfail; - GLenum dpfail; - GLenum dppass; - LOAD_GL_FUNC(glStencilOpSeparate) - face = (GLenum)NUM2INT(arg1); - sfail = (GLenum)NUM2INT(arg2); - dpfail = (GLenum)NUM2INT(arg3); - dppass = (GLenum)NUM2INT(arg4); - fptr_glStencilOpSeparate(face,sfail,dpfail,dppass); - return Qnil; -} - -static void (APIENTRY * fptr_glStencilFuncSeparate)(GLenum,GLenum,GLint,GLuint); -static VALUE -gl_StencilFuncSeparate(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLenum face; - GLenum func; - GLint ref; - GLuint mask; - LOAD_GL_FUNC(glStencilFuncSeparate) - face = (GLenum)NUM2INT(arg1); - func = (GLenum)NUM2INT(arg2); - ref = (GLint)NUM2INT(arg3); - mask = (GLuint)NUM2UINT(arg4); - fptr_glStencilFuncSeparate(face,func,ref,mask); - return Qnil; -} - -static void (APIENTRY * fptr_glStencilMaskSeparate)(GLenum face,GLuint mask); -static VALUE -gl_StencilMaskSeparate(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLenum face; - GLuint mask; - LOAD_GL_FUNC(glStencilMaskSeparate) - face = (GLenum)NUM2INT(arg1); - mask = (GLenum)NUM2INT(arg2); - fptr_glStencilMaskSeparate(face,mask); - return Qnil; -} - -static void (APIENTRY * fptr_glAttachShader)(GLuint,GLuint); -static VALUE -gl_AttachShader(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint program; - GLuint shader; - LOAD_GL_FUNC(glAttachShader) - program = (GLuint)NUM2UINT(arg1); - shader = (GLuint)NUM2UINT(arg2); - fptr_glAttachShader(program,shader); - return Qnil; -} - -static void (APIENTRY * fptr_glBindAttribLocation)(GLuint,GLuint,GLchar *); -static VALUE -gl_BindAttribLocation(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLuint program; - GLuint index; - LOAD_GL_FUNC(glBindAttribLocation) - program = (GLuint)NUM2UINT(arg1); - index = (GLuint)NUM2UINT(arg2); - Check_Type(arg3, T_STRING); - fptr_glBindAttribLocation(program,index,RSTRING(arg3)->ptr); - return Qnil; -} - -static void (APIENTRY * fptr_glCompileShader)(GLuint); -static VALUE -gl_CompileShader(obj,arg1) -VALUE obj,arg1; -{ - GLuint shader; - LOAD_GL_FUNC(glCompileShader) - shader = (GLuint)NUM2UINT(arg1); - fptr_glCompileShader(shader); - return Qnil; -} - -static GLuint (APIENTRY * fptr_glCreateProgram)(void); -static VALUE -gl_CreateProgram(obj) -VALUE obj; -{ - GLuint ret; - LOAD_GL_FUNC(glCreateProgram) - ret = fptr_glCreateProgram(); - return INT2NUM(ret); -} - -static GLuint (APIENTRY * fptr_glCreateShader)(GLenum); -static VALUE -gl_CreateShader(obj,arg1) -VALUE obj,arg1; -{ - GLenum shaderType; - GLuint ret; - LOAD_GL_FUNC(glCreateShader) - shaderType = (GLenum)NUM2INT(arg1); - ret = fptr_glCreateShader(shaderType); - return INT2NUM(ret); -} - -static void (APIENTRY * fptr_glDeleteProgram)(GLuint); -static VALUE -gl_DeleteProgram(obj,arg1) -VALUE obj,arg1; -{ - GLuint program; - LOAD_GL_FUNC(glDeleteProgram) - program = (GLuint)NUM2UINT(arg1); - fptr_glDeleteProgram(program); - return Qnil; -} - -static void (APIENTRY * fptr_glDeleteShader)(GLuint); -static VALUE -gl_DeleteShader(obj,arg1) -VALUE obj,arg1; -{ - GLuint shader; - LOAD_GL_FUNC(glDeleteShader) - shader = (GLuint)NUM2UINT(arg1); - fptr_glDeleteShader(shader); - return Qnil; -} - -static void (APIENTRY * fptr_glDetachShader)(GLuint,GLuint); -static VALUE -gl_DetachShader(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint program; - GLuint shader; - LOAD_GL_FUNC(glDetachShader) - program=(GLuint)NUM2UINT(arg1); - shader=(GLuint)NUM2UINT(arg2); - fptr_glDetachShader(program,shader); - return Qnil; -} - -static void (APIENTRY * fptr_glDisableVertexAttribArray)(GLuint); -static VALUE -gl_DisableVertexAttribArray(obj,arg1) -VALUE obj,arg1; -{ - GLuint index; - LOAD_GL_FUNC(glDisableVertexAttribArray) - index=(GLuint)NUM2UINT(arg1); - fptr_glDisableVertexAttribArray(index); - return Qnil; -} - -static void (APIENTRY * fptr_glEnableVertexAttribArray)(GLuint); -static VALUE -gl_EnableVertexAttribArray(obj,arg1) -VALUE obj,arg1; -{ - GLuint index; - LOAD_GL_FUNC(glEnableVertexAttribArray) - index=(GLuint)NUM2UINT(arg1); - fptr_glEnableVertexAttribArray(index); - return Qnil; -} - -static void (APIENTRY * fptr_glGetProgramiv)(GLuint,GLenum,GLint *); -static VALUE -gl_GetProgramiv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint program; - GLenum pname; - GLint params = 0; - LOAD_GL_FUNC(glGetProgramiv) - program = (GLuint)NUM2UINT(arg1); - pname = (GLenum)NUM2INT(arg2); - fptr_glGetProgramiv(program,pname,¶ms); - return INT2NUM(params); -} - -static void (APIENTRY * fptr_glGetActiveAttrib)(GLuint,GLuint,GLsizei,GLsizei *,GLint *,GLenum *,GLchar *); -static VALUE -gl_GetActiveAttrib(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint program; - GLuint index; - GLsizei max_size = 0; - GLsizei written = 0; - GLint attrib_size = 0; - GLenum attrib_type = 0; - VALUE buffer; - VALUE retary; - LOAD_GL_FUNC(glGetActiveAttrib) - LOAD_GL_FUNC(glGetProgramiv) - program = (GLuint)NUM2UINT(arg1); - index = (GLuint)NUM2UINT(arg2); - fptr_glGetProgramiv(program,GL_ACTIVE_ATTRIBUTE_MAX_LENGTH,&max_size); - if (max_size==0) - rb_raise(rb_eTypeError, "Can't determine maximum attribute name length"); - buffer = allocate_buffer_with_string(max_size-1); - fptr_glGetActiveAttrib(program,index,max_size,&written,&attrib_size,&attrib_type,RSTRING(buffer)->ptr); - retary = rb_ary_new2(3); - rb_ary_push(retary, INT2NUM(attrib_size)); - rb_ary_push(retary, INT2NUM(attrib_type)); - rb_ary_push(retary, buffer); - return retary; -} - -static void (APIENTRY * fptr_glGetActiveUniform)(GLuint,GLuint,GLsizei,GLsizei*,GLint*,GLenum*,GLchar*); -static VALUE -gl_GetActiveUniform(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7; -{ - GLuint program; - GLuint index; - GLsizei max_size = 0; - GLsizei written = 0; - GLint uniform_size = 0; - GLenum uniform_type = 0; - VALUE buffer; - VALUE retary; - LOAD_GL_FUNC(glGetActiveUniform) - LOAD_GL_FUNC(glGetProgramiv) - program = (GLuint)NUM2UINT(arg1); - index = (GLuint)NUM2UINT(arg2); - fptr_glGetProgramiv(program,GL_ACTIVE_UNIFORM_MAX_LENGTH,&max_size); - if (max_size==0) - rb_raise(rb_eTypeError, "Can't determine maximum uniform name length"); - buffer = allocate_buffer_with_string(max_size-1); - fptr_glGetActiveUniform(program,index,max_size,&written,&uniform_size,&uniform_type,RSTRING(buffer)->ptr); - retary = rb_ary_new2(3); - rb_ary_push(retary, INT2NUM(uniform_size)); - rb_ary_push(retary, INT2NUM(uniform_type)); - rb_ary_push(retary, buffer); - return retary; -} - -static void (APIENTRY * fptr_glGetAttachedShaders)(GLuint,GLsizei,GLsizei *,GLuint *); -static VALUE -gl_GetAttachedShaders(obj,arg1) -VALUE obj,arg1; -{ - GLuint program; - GLint shaders_num = 0; - GLuint *shaders; - VALUE retary; - GLsizei count = 0; - GLint i; - LOAD_GL_FUNC(glGetAttachedShaders) - LOAD_GL_FUNC(glGetProgramiv) - program = (GLuint)NUM2UINT(arg1); - fptr_glGetProgramiv(program,GL_ATTACHED_SHADERS,&shaders_num); - if (shaders_num<=0) - return Qnil; - shaders = ALLOC_N(GLuint,shaders_num); - fptr_glGetAttachedShaders(program,shaders_num,&count,shaders); - retary = rb_ary_new2(shaders_num); - for(i=0;iptr); - return INT2NUM(ret); -} - -static void (APIENTRY * fptr_glGetProgramInfoLog)(GLuint,GLsizei,GLsizei *,GLchar *); -static VALUE -gl_GetProgramInfoLog(obj,arg1) -VALUE obj,arg1; -{ - GLuint program; - GLint max_size = 0; - GLsizei ret_length = 0; - VALUE buffer; - LOAD_GL_FUNC(glGetProgramInfoLog) - LOAD_GL_FUNC(glGetProgramiv) - program = (GLuint)NUM2UINT(arg1); - fptr_glGetProgramiv(program,GL_INFO_LOG_LENGTH,&max_size); - if (max_size<=0) - return rb_str_new2(""); - buffer = allocate_buffer_with_string(max_size); - fptr_glGetProgramInfoLog(program,max_size,&ret_length,RSTRING(buffer)->ptr); - RSTRING(buffer)->len = ret_length; - return buffer; -} - -static void (APIENTRY * fptr_glGetShaderiv)(GLuint,GLenum,GLint *); -static VALUE -gl_GetShaderiv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint program; - GLenum pname; - GLint params = 0; - LOAD_GL_FUNC(glGetShaderiv) - program = (GLuint)NUM2UINT(arg1); - pname = (GLenum)NUM2INT(arg2); - fptr_glGetShaderiv(program,pname,¶ms); - return INT2NUM(params); -} - -static void (APIENTRY * fptr_glGetShaderInfoLog)(GLuint,GLsizei,GLsizei *,GLchar *); -static VALUE -gl_GetShaderInfoLog(obj,arg1) -VALUE obj,arg1; -{ - GLuint program; - GLint max_size = 0; - GLsizei ret_length = 0; - VALUE ret_buffer; - GLchar *buffer; - LOAD_GL_FUNC(glGetShaderInfoLog) - LOAD_GL_FUNC(glGetShaderiv) - program = (GLuint)NUM2UINT(arg1); - fptr_glGetShaderiv(program,GL_INFO_LOG_LENGTH,&max_size); - if (max_size<=0) - return rb_str_new2(""); - buffer = ALLOC_N(GLchar,max_size+1); - memset(buffer,0,sizeof(GLchar) * (max_size+1)); - fptr_glGetShaderInfoLog(program,max_size,&ret_length,buffer); - ret_buffer = rb_str_new(buffer, ret_length); - xfree(buffer); - return ret_buffer; -} - -static void (APIENTRY * fptr_glGetShaderSource)(GLuint,GLsizei,GLsizei *,GLchar *); -static VALUE -gl_GetShaderSource(obj,arg1) -VALUE obj,arg1; -{ - GLuint shader; - GLint max_size = 0; - GLsizei ret_length = 0; - VALUE buffer; - LOAD_GL_FUNC(glGetShaderSource) - LOAD_GL_FUNC(glGetShaderiv) - shader = (GLuint)NUM2UINT(arg1); - fptr_glGetShaderiv(shader,GL_SHADER_SOURCE_LENGTH,&max_size); - if (max_size==0) - rb_raise(rb_eTypeError, "Can't determine maximum shader source length"); - buffer = allocate_buffer_with_string(max_size-1); - fptr_glGetShaderSource(shader,max_size,&ret_length,RSTRING(buffer)->ptr); - return buffer; -} - -static GLint (APIENTRY * fptr_glGetUniformLocation)(GLuint,const GLchar*); -static VALUE -gl_GetUniformLocation(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint program; - GLint ret; - LOAD_GL_FUNC(glGetUniformLocation) - program=(GLuint)NUM2UINT(arg1); - Check_Type(arg2,T_STRING); - ret = fptr_glGetUniformLocation(program,RSTRING(arg2)->ptr); - return INT2NUM(ret); -} - - -#define GET_UNIFORM_SIZE \ - switch (uniform_type) { \ - case GL_FLOAT: \ - case GL_INT: \ - case GL_BOOL: \ - case GL_SAMPLER_1D: \ - case GL_SAMPLER_2D: \ - case GL_SAMPLER_3D: \ - case GL_SAMPLER_CUBE: \ - case GL_SAMPLER_1D_SHADOW: \ - case GL_SAMPLER_2D_SHADOW: \ - uniform_size = 1; \ - break; \ - case GL_FLOAT_VEC2: \ - case GL_INT_VEC2: \ - case GL_BOOL_VEC2: \ - uniform_size = 2; \ - break; \ - case GL_FLOAT_VEC3: \ - case GL_INT_VEC3: \ - case GL_BOOL_VEC3: \ - uniform_size = 3; \ - break; \ - case GL_FLOAT_VEC4: \ - case GL_INT_VEC4: \ - case GL_BOOL_VEC4: \ - case GL_FLOAT_MAT2: \ - uniform_size = 4; \ - break; \ - case GL_FLOAT_MAT2x3: \ - case GL_FLOAT_MAT3x2: \ - uniform_size = 6; \ - break; \ - case GL_FLOAT_MAT2x4: \ - case GL_FLOAT_MAT4x2: \ - uniform_size = 8; \ - break; \ - case GL_FLOAT_MAT3: \ - uniform_size = 9; \ - break; \ - case GL_FLOAT_MAT4x3: \ - case GL_FLOAT_MAT3x4: \ - uniform_size = 12; \ - break; \ - case GL_FLOAT_MAT4: \ - uniform_size = 16; \ - break; \ - default: \ - rb_raise(rb_eTypeError, "Unsupported type '%i'",uniform_type); \ - } - -static void (APIENTRY * fptr_glGetUniformfv)(GLuint,GLint,GLfloat *); -static VALUE -gl_GetUniformfv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint program; - GLint location; - GLfloat params[16]; - VALUE retary; - GLint i; - GLint unused = 0; - GLenum uniform_type = 0; - GLint uniform_size = 0; - - LOAD_GL_FUNC(glGetUniformfv) - LOAD_GL_FUNC(glGetActiveUniform) - program = (GLuint)NUM2UINT(arg1); - location = (GLint)NUM2INT(arg2); - - fptr_glGetActiveUniform(program,location,0,NULL,&unused,&uniform_type,NULL); - if (uniform_type==0) - rb_raise(rb_eTypeError, "Can't determine the uniform's type"); - - GET_UNIFORM_SIZE - - memset(params,0,16*sizeof(GLfloat)); - fptr_glGetUniformfv(program,location,params); - retary = rb_ary_new2(uniform_size); - for(i=0;i_MAX_VERTEX_ATTRIBS) - rb_raise(rb_eArgError, "Index too large, maximum allowed value '%i'",_MAX_VERTEX_ATTRIBS); - - return g_VertexAttrib_ptr[index]; -} - -static GLboolean (APIENTRY * fptr_glIsProgram)(GLuint); -static VALUE -gl_IsProgram(obj,arg1) -VALUE obj,arg1; -{ - GLuint program; - GLboolean ret; - LOAD_GL_FUNC(glIsProgram) - program = (GLuint)NUM2UINT(arg1); - ret = fptr_glIsProgram(program); - return INT2NUM(ret); -} - -static GLboolean (APIENTRY * fptr_glIsShader)(GLuint); -static VALUE -gl_IsShader(obj,arg1) -VALUE obj,arg1; -{ - GLuint program; - GLboolean ret; - LOAD_GL_FUNC(glIsShader) - program = (GLuint)NUM2UINT(arg1); - ret = fptr_glIsShader(program); - return INT2NUM(ret); -} - -static void (APIENTRY * fptr_glLinkProgram)(GLuint); -static VALUE -gl_LinkProgram(obj,arg1) -VALUE obj,arg1; -{ - GLuint program; - LOAD_GL_FUNC(glLinkProgram) - program = (GLuint)NUM2UINT(arg1); - fptr_glLinkProgram(program); - return Qnil; -} - -static void (APIENTRY * fptr_glShaderSource)(GLuint,GLsizei,GLchar**,GLint *); -static VALUE -gl_ShaderSource(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint shader; - GLint length; - GLchar *str; - LOAD_GL_FUNC(glShaderSource) - shader = (GLuint)NUM2UINT(arg1); - Check_Type(arg2,T_STRING); - str = RSTRING(arg2)->ptr; - length = RSTRING(arg2)->len; - fptr_glShaderSource(shader,1,&str,&length); - return Qnil; -} - -static void (APIENTRY * fptr_glUseProgram)(GLuint); -static VALUE -gl_UseProgram(obj,arg1) -VALUE obj,arg1; -{ - GLuint program; - LOAD_GL_FUNC(glUseProgram) - program = (GLuint)NUM2UINT(arg1); - fptr_glUseProgram(program); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform1f)(GLint,GLfloat); -static VALUE -gl_Uniform1f(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLint location; - GLfloat v0; - LOAD_GL_FUNC(glUniform1f) - location = (GLint)NUM2INT(arg1); - v0 = (GLfloat)NUM2DBL(arg2); - fptr_glUniform1f(location,v0); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform2f)(GLint,GLfloat,GLfloat); -static VALUE -gl_Uniform2f(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint location; - GLfloat v0; - GLfloat v1; - LOAD_GL_FUNC(glUniform2f) - location = (GLint)NUM2INT(arg1); - v0 = (GLfloat)NUM2DBL(arg2); - v1 = (GLfloat)NUM2DBL(arg3); - fptr_glUniform2f(location,v0,v1); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform3f)(GLint,GLfloat,GLfloat,GLfloat); -static VALUE -gl_Uniform3f(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint location; - GLfloat v0; - GLfloat v1; - GLfloat v2; - LOAD_GL_FUNC(glUniform3f) - location = (GLint)NUM2INT(arg1); - v0 = (GLfloat)NUM2DBL(arg2); - v1 = (GLfloat)NUM2DBL(arg3); - v2 = (GLfloat)NUM2DBL(arg4); - fptr_glUniform3f(location,v0,v1,v2); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform4f)(GLint,GLfloat,GLfloat,GLfloat,GLfloat); -static VALUE -gl_Uniform4f(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLint location; - GLfloat v0; - GLfloat v1; - GLfloat v2; - GLfloat v3; - LOAD_GL_FUNC(glUniform4f) - location = (GLint)NUM2INT(arg1); - v0 = (GLfloat)NUM2DBL(arg2); - v1 = (GLfloat)NUM2DBL(arg3); - v2 = (GLfloat)NUM2DBL(arg4); - v3 = (GLfloat)NUM2DBL(arg5); - fptr_glUniform4f(location,v0,v1,v2,v3); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform1i)(GLint,GLint); -static VALUE -gl_Uniform1i(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLint location; - GLint v0; - LOAD_GL_FUNC(glUniform1i) - location = (GLint)NUM2INT(arg1); - v0 = (GLint)NUM2INT(arg2); - fptr_glUniform1i(location,v0); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform2i)(GLint,GLint,GLint); -static VALUE -gl_Uniform2i(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint location; - GLint v0; - GLint v1; - LOAD_GL_FUNC(glUniform2i) - location = (GLint)NUM2INT(arg1); - v0 = (GLint)NUM2INT(arg2); - v1 = (GLint)NUM2INT(arg3); - fptr_glUniform2i(location,v0,v1); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform3i)(GLint,GLint,GLint,GLint); -static VALUE -gl_Uniform3i(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint location; - GLint v0; - GLint v1; - GLint v2; - LOAD_GL_FUNC(glUniform3i) - location = (GLint)NUM2INT(arg1); - v0 = (GLint)NUM2INT(arg2); - v1 = (GLint)NUM2INT(arg3); - v2 = (GLint)NUM2INT(arg4); - fptr_glUniform3i(location,v0,v1,v2); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform4i)(GLint,GLint,GLint,GLint,GLint); -static VALUE -gl_Uniform4i(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLint location; - GLint v0; - GLint v1; - GLint v2; - GLint v3; - LOAD_GL_FUNC(glUniform4i) - location = (GLint)NUM2INT(arg1); - v0 = (GLint)NUM2INT(arg2); - v1 = (GLint)NUM2INT(arg3); - v2 = (GLint)NUM2INT(arg4); - v3 = (GLint)NUM2INT(arg5); - fptr_glUniform4i(location,v0,v1,v2,v3); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform1fv)(GLint,GLsizei,GLfloat *); -static VALUE -gl_Uniform1fv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint location; - GLsizei count; - GLfloat *value; - LOAD_GL_FUNC(glUniform1fv) - location = (GLint)NUM2INT(arg1); - count = (GLsizei)NUM2UINT(arg2); - value = ALLOC_N(GLfloat,1*count); - ary2cflt(arg3,value,1*count); - fptr_glUniform1fv(location,count,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform2fv)(GLint,GLsizei,GLfloat *); -static VALUE -gl_Uniform2fv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint location; - GLsizei count; - GLfloat *value; - LOAD_GL_FUNC(glUniform2fv) - location = (GLint)NUM2INT(arg1); - count = (GLsizei)NUM2UINT(arg2); - value = ALLOC_N(GLfloat,2*count); - ary2cflt(arg3,value,2*count); - fptr_glUniform2fv(location,count,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform3fv)(GLint,GLsizei,GLfloat *); -static VALUE -gl_Uniform3fv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint location; - GLsizei count; - GLfloat *value; - LOAD_GL_FUNC(glUniform3fv) - location = (GLint)NUM2INT(arg1); - count = (GLsizei)NUM2UINT(arg2); - value = ALLOC_N(GLfloat,3*count); - ary2cflt(arg3,value,3*count); - fptr_glUniform3fv(location,count,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform4fv)(GLint,GLsizei,GLfloat *); -static VALUE -gl_Uniform4fv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint location; - GLsizei count; - GLfloat *value; - LOAD_GL_FUNC(glUniform4fv) - location = (GLint)NUM2INT(arg1); - count = (GLsizei)NUM2UINT(arg2); - value = ALLOC_N(GLfloat,4*count); - ary2cflt(arg3,value,4*count); - fptr_glUniform4fv(location,count,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform1iv)(GLint,GLsizei,GLint *); -static VALUE -gl_Uniform1iv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint location; - GLsizei count; - GLint *value; - LOAD_GL_FUNC(glUniform1iv) - location = (GLint)NUM2INT(arg1); - count = (GLsizei)NUM2UINT(arg2); - value = ALLOC_N(GLint,1*count); - ary2cint(arg3,value,1*count); - fptr_glUniform1iv(location,count,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform2iv)(GLint,GLsizei,GLint *); -static VALUE -gl_Uniform2iv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint location; - GLsizei count; - GLint *value; - LOAD_GL_FUNC(glUniform2iv) - location = (GLint)NUM2INT(arg1); - count = (GLsizei)NUM2UINT(arg2); - value = ALLOC_N(GLint,2*count); - ary2cint(arg3,value,2*count); - fptr_glUniform2iv(location,count,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform3iv)(GLint,GLsizei,GLint *); -static VALUE -gl_Uniform3iv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint location; - GLsizei count; - GLint *value; - LOAD_GL_FUNC(glUniform3iv) - location = (GLint)NUM2INT(arg1); - count = (GLsizei)NUM2UINT(arg2); - value = ALLOC_N(GLint,3*count); - ary2cint(arg3,value,3*count); - fptr_glUniform3iv(location,count,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniform4iv)(GLint,GLsizei,GLint *); -static VALUE -gl_Uniform4iv(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLint location; - GLsizei count; - GLint *value; - LOAD_GL_FUNC(glUniform4iv) - location = (GLint)NUM2INT(arg1); - count = (GLsizei)NUM2UINT(arg2); - value = ALLOC_N(GLint,4*count); - ary2cint(arg3,value,4*count); - fptr_glUniform4iv(location,count,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniformMatrix2fv)(GLint,GLsizei,GLboolean,GLfloat *); -static VALUE -gl_UniformMatrix2fv(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint location; - GLsizei count; - GLboolean transpose; - GLfloat *value; - LOAD_GL_FUNC(glUniformMatrix2fv) - location = (GLint)NUM2INT(arg1); - count = (GLint)NUM2INT(arg2); - transpose = (GLboolean)NUM2INT(arg3); - value = ALLOC_N(GLfloat, 2*2*count); - ary2cflt(arg4,value,2*2*count); - fptr_glUniformMatrix2fv(location,count,transpose,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniformMatrix3fv)(GLint,GLsizei,GLboolean,GLfloat *); -static VALUE -gl_UniformMatrix3fv(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint location; - GLsizei count; - GLboolean transpose; - GLfloat *value; - LOAD_GL_FUNC(glUniformMatrix3fv) - location = (GLint)NUM2INT(arg1); - count = (GLint)NUM2INT(arg2); - transpose = (GLboolean)NUM2INT(arg3); - value = ALLOC_N(GLfloat, 3*3*count); - ary2cflt(arg4,value,3*3*count); - fptr_glUniformMatrix3fv(location,count,transpose,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniformMatrix4fv)(GLint,GLsizei,GLboolean,GLfloat *); -static VALUE -gl_UniformMatrix4fv(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint location; - GLsizei count; - GLboolean transpose; - GLfloat *value; - LOAD_GL_FUNC(glUniformMatrix4fv) - location = (GLint)NUM2INT(arg1); - count = (GLint)NUM2INT(arg2); - transpose = (GLboolean)NUM2INT(arg3); - value = ALLOC_N(GLfloat, 4*4*count); - ary2cflt(arg4,value,4*4*count); - fptr_glUniformMatrix4fv(location,count,transpose,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glValidateProgram)(GLuint); -static VALUE -gl_ValidateProgram(obj,arg1) -VALUE obj,arg1; -{ - GLuint program; - LOAD_GL_FUNC(glValidateProgram) - program = (GLuint)NUM2UINT(arg1); - fptr_glValidateProgram(program); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib1d)(GLuint,GLdouble); -static VALUE -gl_VertexAttrib1d(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint index; - GLdouble v0; - LOAD_GL_FUNC(glVertexAttrib1d) - index = (GLuint)NUM2UINT(arg1); - v0 = (GLdouble)NUM2DBL(arg2); - fptr_glVertexAttrib1d(index,v0); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib1f)(GLuint,GLfloat); -static VALUE -gl_VertexAttrib1f(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint index; - GLfloat v0; - LOAD_GL_FUNC(glVertexAttrib1f) - index = (GLuint)NUM2UINT(arg1); - v0 = (GLfloat)NUM2DBL(arg2); - fptr_glVertexAttrib1f(index,v0); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib1s)(GLuint,GLshort); -static VALUE -gl_VertexAttrib1s(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint index; - GLshort v0; - LOAD_GL_FUNC(glVertexAttrib1s) - index = (GLuint)NUM2UINT(arg1); - v0 = (GLshort)NUM2INT(arg2); - fptr_glVertexAttrib1s(index,v0); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib2d)(GLuint,GLdouble,GLdouble); -static VALUE -gl_VertexAttrib2d(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLuint index; - GLdouble v0; - GLdouble v1; - LOAD_GL_FUNC(glVertexAttrib2d) - index = (GLuint)NUM2UINT(arg1); - v0 = (GLdouble)NUM2DBL(arg2); - v1 = (GLdouble)NUM2DBL(arg3); - fptr_glVertexAttrib2d(index,v0,v1); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib2f)(GLuint,GLfloat,GLfloat); -static VALUE -gl_VertexAttrib2f(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLuint index; - GLfloat v0; - GLfloat v1; - LOAD_GL_FUNC(glVertexAttrib2f) - index = (GLuint)NUM2UINT(arg1); - v0 = (GLfloat)NUM2DBL(arg2); - v1 = (GLfloat)NUM2DBL(arg3); - fptr_glVertexAttrib2f(index,v0,v1); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib2s)(GLuint,GLshort,GLshort); -static VALUE -gl_VertexAttrib2s(obj,arg1,arg2,arg3) -VALUE obj,arg1,arg2,arg3; -{ - GLuint index; - GLshort v0; - GLshort v1; - LOAD_GL_FUNC(glVertexAttrib2s) - index = (GLuint)NUM2UINT(arg1); - v0 = (GLshort)NUM2INT(arg2); - v1 = (GLshort)NUM2INT(arg3); - fptr_glVertexAttrib2s(index,v0,v1); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib3d)(GLuint,GLdouble,GLdouble,GLdouble); -static VALUE -gl_VertexAttrib3d(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLuint index; - GLdouble v0; - GLdouble v1; - GLdouble v2; - LOAD_GL_FUNC(glVertexAttrib3d) - index = (GLuint)NUM2UINT(arg1); - v0 = (GLdouble)NUM2DBL(arg2); - v1 = (GLdouble)NUM2DBL(arg3); - v2 = (GLdouble)NUM2DBL(arg4); - fptr_glVertexAttrib3d(index,v0,v1,v2); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib3f)(GLuint,GLfloat,GLfloat,GLfloat); -static VALUE -gl_VertexAttrib3f(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLuint index; - GLfloat v0; - GLfloat v1; - GLfloat v2; - LOAD_GL_FUNC(glVertexAttrib3f) - index = (GLuint)NUM2UINT(arg1); - v0 = (GLfloat)NUM2DBL(arg2); - v1 = (GLfloat)NUM2DBL(arg3); - v2 = (GLfloat)NUM2DBL(arg4); - fptr_glVertexAttrib3f(index,v0,v1,v2); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib3s)(GLuint,GLshort,GLshort,GLshort); -static VALUE -gl_VertexAttrib3s(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLuint index; - GLshort v0; - GLshort v1; - GLshort v2; - LOAD_GL_FUNC(glVertexAttrib3s) - index = (GLuint)NUM2UINT(arg1); - v0 = (GLshort)NUM2INT(arg2); - v1 = (GLshort)NUM2INT(arg3); - v2 = (GLshort)NUM2INT(arg4); - fptr_glVertexAttrib3s(index,v0,v1,v2); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4Nbv)(GLuint,GLbyte *); -static VALUE -gl_VertexAttrib4Nbv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint index; - GLbyte v[4]; - LOAD_GL_FUNC(glVertexAttrib4Nbv) - index = (GLuint)NUM2UINT(arg1); - ary2cbyte(arg2,v,4); - fptr_glVertexAttrib4Nbv(index,v); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4Niv)(GLuint,GLint *); -static VALUE -gl_VertexAttrib4Niv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint index; - GLint v[4]; - LOAD_GL_FUNC(glVertexAttrib4Niv) - index = (GLuint)NUM2UINT(arg1); - ary2cint(arg2,v,4); - fptr_glVertexAttrib4Niv(index,v); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4Nsv)(GLuint,GLshort *); -static VALUE -gl_VertexAttrib4Nsv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint index; - GLshort v[4]; - LOAD_GL_FUNC(glVertexAttrib4Nsv) - index = (GLuint)NUM2UINT(arg1); - ary2cshort(arg2,v,4); - fptr_glVertexAttrib4Nsv(index,v); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4Nub)(GLuint,GLubyte,GLubyte,GLubyte,GLubyte); -static VALUE -gl_VertexAttrib4Nub(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLuint index; - GLubyte v0; - GLubyte v1; - GLubyte v2; - GLubyte v3; - LOAD_GL_FUNC(glVertexAttrib4Nub) - index = (GLuint)NUM2UINT(arg1); - v0 = (GLubyte)NUM2INT(arg2); - v1 = (GLubyte)NUM2INT(arg3); - v2 = (GLubyte)NUM2INT(arg4); - v3 = (GLubyte)NUM2INT(arg5); - fptr_glVertexAttrib4Nub(index,v0,v1,v2,v3); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4Nubv)(GLuint,GLubyte *); -static VALUE -gl_VertexAttrib4Nubv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint index; - GLubyte v[4]; - LOAD_GL_FUNC(glVertexAttrib4Nubv) - index = (GLuint)NUM2UINT(arg1); - ary2cubyte(arg2,v,4); - fptr_glVertexAttrib4Nubv(index,v); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4Nuiv)(GLuint,GLuint *); -static VALUE -gl_VertexAttrib4Nuiv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint index; - GLuint v[4]; - LOAD_GL_FUNC(glVertexAttrib4Nuiv) - index = (GLuint)NUM2UINT(arg1); - ary2cuint(arg2,v,4); - fptr_glVertexAttrib4Nuiv(index,v); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4Nusv)(GLuint,GLushort *); -static VALUE -gl_VertexAttrib4Nusv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint index; - GLushort v[4]; - LOAD_GL_FUNC(glVertexAttrib4Nusv) - index = (GLuint)NUM2UINT(arg1); - ary2cushort(arg2,v,4); - fptr_glVertexAttrib4Nusv(index,v); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4bv)(GLuint,GLbyte *); -static VALUE -gl_VertexAttrib4bv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint index; - GLbyte v[4]; - LOAD_GL_FUNC(glVertexAttrib4bv) - index = (GLuint)NUM2UINT(arg1); - ary2cbyte(arg2,v,4); - fptr_glVertexAttrib4bv(index,v); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4d)(GLuint,GLdouble,GLdouble,GLdouble,GLdouble); -static VALUE -gl_VertexAttrib4d(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLuint index; - GLdouble v0; - GLdouble v1; - GLdouble v2; - GLdouble v3; - LOAD_GL_FUNC(glVertexAttrib4d) - index = (GLuint)NUM2UINT(arg1); - v0 = (GLdouble)NUM2DBL(arg2); - v1 = (GLdouble)NUM2DBL(arg3); - v2 = (GLdouble)NUM2DBL(arg4); - v3 = (GLdouble)NUM2DBL(arg5); - fptr_glVertexAttrib4d(index,v0,v1,v2,v3); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4f)(GLuint,GLfloat,GLfloat,GLfloat,GLfloat); -static VALUE -gl_VertexAttrib4f(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLuint index; - GLfloat v0; - GLfloat v1; - GLfloat v2; - GLfloat v3; - LOAD_GL_FUNC(glVertexAttrib4f) - index = (GLuint)NUM2UINT(arg1); - v0 = (GLfloat)NUM2DBL(arg2); - v1 = (GLfloat)NUM2DBL(arg3); - v2 = (GLfloat)NUM2DBL(arg4); - v3 = (GLfloat)NUM2DBL(arg5); - fptr_glVertexAttrib4f(index,v0,v1,v2,v3); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4iv)(GLuint,GLint *); -static VALUE -gl_VertexAttrib4iv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint index; - GLint v[4]; - LOAD_GL_FUNC(glVertexAttrib4iv) - index = (GLuint)NUM2UINT(arg1); - ary2cint(arg2,v,4); - fptr_glVertexAttrib4iv(index,v); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4s)(GLuint,GLshort,GLshort,GLshort,GLshort); -static VALUE -gl_VertexAttrib4s(obj,arg1,arg2,arg3,arg4,arg5) -VALUE obj,arg1,arg2,arg3,arg4,arg5; -{ - GLuint index; - GLshort v0; - GLshort v1; - GLshort v2; - GLshort v3; - LOAD_GL_FUNC(glVertexAttrib4s) - index = (GLuint)NUM2UINT(arg1); - v0 = (GLshort)NUM2INT(arg2); - v1 = (GLshort)NUM2INT(arg3); - v2 = (GLshort)NUM2INT(arg4); - v3 = (GLshort)NUM2INT(arg5); - fptr_glVertexAttrib4s(index,v0,v1,v2,v3); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4ubv)(GLuint,GLubyte *); -static VALUE -gl_VertexAttrib4ubv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint index; - GLubyte v[4]; - LOAD_GL_FUNC(glVertexAttrib4ubv) - index = (GLuint)NUM2UINT(arg1); - ary2cubyte(arg2,v,4); - fptr_glVertexAttrib4ubv(index,v); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4uiv)(GLuint,GLuint *); -static VALUE -gl_VertexAttrib4uiv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint index; - GLuint v[4]; - LOAD_GL_FUNC(glVertexAttrib4uiv) - index = (GLuint)NUM2UINT(arg1); - ary2cuint(arg2,v,4); - fptr_glVertexAttrib4uiv(index,v); - return Qnil; -} - -static void (APIENTRY * fptr_glVertexAttrib4usv)(GLuint,GLushort *); -static VALUE -gl_VertexAttrib4usv(obj,arg1,arg2) -VALUE obj,arg1,arg2; -{ - GLuint index; - GLushort v[4]; - LOAD_GL_FUNC(glVertexAttrib4usv) - index = (GLuint)NUM2UINT(arg1); - ary2cushort(arg2,v,4); - fptr_glVertexAttrib4usv(index,v); - return Qnil; -} - -#define GLVERTEXATTRIB_VFUNC(_type_) \ -static VALUE \ -gl_VertexAttrib##_type_##v(argc,argv,obj) \ -int argc; \ -VALUE *argv; \ -VALUE obj; \ -{ \ - VALUE args[5]; \ - RArray *ary; \ - switch (rb_scan_args(argc, argv, "23", &args[0], &args[1], &args[2], &args[3], &args[4])) { \ - case 2: \ - if (TYPE(args[1]) == T_ARRAY) { \ - ary = RARRAY(args[1]); \ - switch (ary->len) { \ - case 1: \ - gl_VertexAttrib1##_type_(obj,args[0],ary->ptr[0]); \ - break; \ - case 2: \ - gl_VertexAttrib2##_type_(obj,args[0],ary->ptr[0],ary->ptr[1]); \ - break; \ - case 3: \ - gl_VertexAttrib3##_type_(obj,args[0],ary->ptr[0],ary->ptr[1],ary->ptr[2]); \ - break; \ - case 4: \ - gl_VertexAttrib4##_type_(obj,args[0],ary->ptr[0],ary->ptr[1],ary->ptr[2],ary->ptr[3]); \ - break; \ - default: \ - rb_raise(rb_eRuntimeError, "glVertex vertex num error!:%d", ary->len); \ - } \ - } \ - else { \ - gl_VertexAttrib1##_type_(obj,args[0], args[1]); \ - break; \ - } \ - break; \ - case 3: \ - gl_VertexAttrib2##_type_(obj,args[0], args[1], args[2]); \ - break; \ - case 4: \ - gl_VertexAttrib3##_type_(obj,args[0], args[1], args[2], args[3]); \ - break; \ - case 5: \ - gl_VertexAttrib4##_type_(obj,args[0], args[1], args[2], args[3], args[4]); \ - break; \ - default: \ - rb_raise(rb_eArgError, "Argument number error!"); \ - break; \ - } \ - return Qnil; \ -} - -GLVERTEXATTRIB_VFUNC(d) -GLVERTEXATTRIB_VFUNC(f) -GLVERTEXATTRIB_VFUNC(s) - -#undef GLVERTEXATTRIB_VFUNC - -static void (APIENTRY * fptr_glVertexAttribPointer)(GLuint,GLint,GLenum,GLboolean,GLsizei,GLvoid *); -static VALUE -gl_VertexAttribPointer(obj,arg1,arg2,arg3,arg4,arg5,arg6) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6; -{ - GLuint index; - GLuint size; - GLenum type; - GLboolean normalized; - GLsizei stride; - LOAD_GL_FUNC(glVertexAttribPointer) - index = (GLuint)NUM2UINT(arg1); - size = (GLuint)NUM2UINT(arg2); - type = (GLenum)NUM2INT(arg3); - normalized = (GLboolean)NUM2INT(arg4); - stride = (GLsizei)NUM2UINT(arg5); - if (index>_MAX_VERTEX_ATTRIBS) - rb_raise(rb_eArgError, "Index too large, maximum allowed value '%i'",_MAX_VERTEX_ATTRIBS); - Check_Type(arg6, T_STRING); - rb_str_freeze(arg6); - g_VertexAttrib_ptr[index] = arg6; - fptr_glVertexAttribPointer(index,size,type,normalized,stride,(GLvoid *)RSTRING(arg6)->ptr); - return Qnil; -} - -void gl_init_functions_2_0(VALUE module) -{ - rb_define_module_function(module, "glBlendEquationSeparate", gl_BlendEquationSeparate, 2); - rb_define_module_function(module, "glDrawBuffers", gl_DrawBuffers, 1); - rb_define_module_function(module, "glStencilOpSeparate", gl_StencilOpSeparate, 4); - rb_define_module_function(module, "glStencilFuncSeparate", gl_StencilFuncSeparate, 4); - rb_define_module_function(module, "glStencilMaskSeparate", gl_StencilMaskSeparate, 2); - rb_define_module_function(module, "glAttachShader", gl_AttachShader, 2); - rb_define_module_function(module, "glBindAttribLocation", gl_BindAttribLocation, 3); - rb_define_module_function(module, "glCompileShader", gl_CompileShader, 1); - rb_define_module_function(module, "glCreateProgram", gl_CreateProgram, 0); - rb_define_module_function(module, "glCreateShader", gl_CreateShader, 1); - rb_define_module_function(module, "glDeleteProgram", gl_DeleteProgram, 1); - rb_define_module_function(module, "glDeleteShader", gl_DeleteShader, 1); - rb_define_module_function(module, "glDetachShader", gl_DetachShader, 2); - rb_define_module_function(module, "glDisableVertexAttribArray", gl_DisableVertexAttribArray, 1); - rb_define_module_function(module, "glEnableVertexAttribArray", gl_EnableVertexAttribArray, 1); - rb_define_module_function(module, "glGetActiveAttrib", gl_GetActiveAttrib, 2); - rb_define_module_function(module, "glGetActiveUniform", gl_GetActiveUniform, 2); - rb_define_module_function(module, "glGetAttachedShaders", gl_GetAttachedShaders, 1); - rb_define_module_function(module, "glGetAttribLocation", gl_GetAttribLocation, 2); - rb_define_module_function(module, "glGetProgramiv", gl_GetProgramiv, 2); - rb_define_module_function(module, "glGetProgramInfoLog", gl_GetProgramInfoLog, 1); - rb_define_module_function(module, "glGetShaderiv", gl_GetShaderiv, 2); - rb_define_module_function(module, "glGetShaderInfoLog", gl_GetShaderInfoLog, 1); - rb_define_module_function(module, "glGetShaderSource", gl_GetShaderSource, 1); - rb_define_module_function(module, "glGetUniformLocation", gl_GetUniformLocation, 2); - rb_define_module_function(module, "glGetUniformfv", gl_GetUniformfv, 2); - rb_define_module_function(module, "glGetUniformiv", gl_GetUniformiv, 2); - rb_define_module_function(module, "glGetVertexAttribdv", gl_GetVertexAttribdv, 2); - rb_define_module_function(module, "glGetVertexAttribfv", gl_GetVertexAttribfv, 2); - rb_define_module_function(module, "glGetVertexAttribiv", gl_GetVertexAttribiv, 2); - rb_define_module_function(module, "glGetVertexAttribPointerv", gl_GetVertexAttribPointerv, 1); - rb_define_module_function(module, "glIsProgram", gl_IsProgram, 1); - rb_define_module_function(module, "glIsShader", gl_IsShader, 1); - rb_define_module_function(module, "glLinkProgram", gl_LinkProgram, 1); - rb_define_module_function(module, "glShaderSource", gl_ShaderSource, 2); - rb_define_module_function(module, "glUseProgram", gl_UseProgram, 1); - rb_define_module_function(module, "glUniform1f", gl_Uniform1f, 2); - rb_define_module_function(module, "glUniform2f", gl_Uniform2f, 3); - rb_define_module_function(module, "glUniform3f", gl_Uniform3f, 4); - rb_define_module_function(module, "glUniform4f", gl_Uniform4f, 5); - rb_define_module_function(module, "glUniform1i", gl_Uniform1i, 2); - rb_define_module_function(module, "glUniform2i", gl_Uniform2i, 3); - rb_define_module_function(module, "glUniform3i", gl_Uniform3i, 4); - rb_define_module_function(module, "glUniform4i", gl_Uniform4i, 5); - rb_define_module_function(module, "glUniform1fv", gl_Uniform1fv, 3); - rb_define_module_function(module, "glUniform2fv", gl_Uniform2fv, 3); - rb_define_module_function(module, "glUniform3fv", gl_Uniform3fv, 3); - rb_define_module_function(module, "glUniform4fv", gl_Uniform4fv, 3); - rb_define_module_function(module, "glUniform1iv", gl_Uniform1iv, 3); - rb_define_module_function(module, "glUniform2iv", gl_Uniform2iv, 3); - rb_define_module_function(module, "glUniform3iv", gl_Uniform3iv, 3); - rb_define_module_function(module, "glUniform4iv", gl_Uniform4iv, 3); - rb_define_module_function(module, "glUniformMatrix2fv", gl_UniformMatrix2fv, 4); - rb_define_module_function(module, "glUniformMatrix3fv", gl_UniformMatrix3fv, 4); - rb_define_module_function(module, "glUniformMatrix4fv", gl_UniformMatrix4fv, 4); - rb_define_module_function(module, "glValidateProgram", gl_ValidateProgram, 1); - rb_define_module_function(module, "glVertexAttrib1d", gl_VertexAttrib1d, 2); - rb_define_module_function(module, "glVertexAttrib1f", gl_VertexAttrib1f, 2); - rb_define_module_function(module, "glVertexAttrib1s", gl_VertexAttrib1s, 2); - rb_define_module_function(module, "glVertexAttrib2d", gl_VertexAttrib2d, 3); - rb_define_module_function(module, "glVertexAttrib2f", gl_VertexAttrib2f, 3); - rb_define_module_function(module, "glVertexAttrib2s", gl_VertexAttrib2s, 3); - rb_define_module_function(module, "glVertexAttrib3d", gl_VertexAttrib3d, 4); - rb_define_module_function(module, "glVertexAttrib3f", gl_VertexAttrib3f, 4); - rb_define_module_function(module, "glVertexAttrib3s", gl_VertexAttrib3s, 4); - rb_define_module_function(module, "glVertexAttrib4Nbv", gl_VertexAttrib4Nbv, 2); - rb_define_module_function(module, "glVertexAttrib4Niv", gl_VertexAttrib4Niv, 2); - rb_define_module_function(module, "glVertexAttrib4Nsv", gl_VertexAttrib4Nsv, 2); - rb_define_module_function(module, "glVertexAttrib4Nub", gl_VertexAttrib4Nub, 5); - rb_define_module_function(module, "glVertexAttrib4Nubv", gl_VertexAttrib4Nubv, 2); - rb_define_module_function(module, "glVertexAttrib4Nuiv", gl_VertexAttrib4Nuiv, 2); - rb_define_module_function(module, "glVertexAttrib4Nusv", gl_VertexAttrib4Nusv, 2); - rb_define_module_function(module, "glVertexAttrib4bv", gl_VertexAttrib4bv, 2); - rb_define_module_function(module, "glVertexAttrib4d", gl_VertexAttrib4d, 5); - rb_define_module_function(module, "glVertexAttrib4f", gl_VertexAttrib4f, 5); - rb_define_module_function(module, "glVertexAttrib4iv", gl_VertexAttrib4iv, 2); - rb_define_module_function(module, "glVertexAttrib4s", gl_VertexAttrib4s, 5); - rb_define_module_function(module, "glVertexAttrib4ubv", gl_VertexAttrib4ubv, 2); - rb_define_module_function(module, "glVertexAttrib4uiv", gl_VertexAttrib4uiv, 2); - rb_define_module_function(module, "glVertexAttrib4usv", gl_VertexAttrib4usv, 2); - rb_define_module_function(module, "glVertexAttribPointer", gl_VertexAttribPointer, 6); - - /* Additional functions */ - rb_define_module_function(module, "glVertexAttrib1dv", gl_VertexAttribdv, -1); - rb_define_module_function(module, "glVertexAttrib1fv", gl_VertexAttribfv, -1); - rb_define_module_function(module, "glVertexAttrib1sv", gl_VertexAttribsv, -1); - rb_define_module_function(module, "glVertexAttrib2dv", gl_VertexAttribdv, -1); - rb_define_module_function(module, "glVertexAttrib2fv", gl_VertexAttribfv, -1); - rb_define_module_function(module, "glVertexAttrib2sv", gl_VertexAttribsv, -1); - rb_define_module_function(module, "glVertexAttrib3dv", gl_VertexAttribdv, -1); - rb_define_module_function(module, "glVertexAttrib3fv", gl_VertexAttribfv, -1); - rb_define_module_function(module, "glVertexAttrib3sv", gl_VertexAttribsv, -1); - rb_define_module_function(module, "glVertexAttrib4dv", gl_VertexAttribdv, -1); - rb_define_module_function(module, "glVertexAttrib4fv", gl_VertexAttribfv, -1); - rb_define_module_function(module, "glVertexAttrib4sv", gl_VertexAttribsv, -1); - - { - int i; - for (i=0;i<_MAX_VERTEX_ATTRIBS;i++) - rb_global_variable(&g_VertexAttrib_ptr[i]); - } -} diff --git a/ruby/RubyOpenGL/gl/gl-2.1.c b/ruby/RubyOpenGL/gl/gl-2.1.c deleted file mode 100644 index 787622af..00000000 --- a/ruby/RubyOpenGL/gl/gl-2.1.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (C) 2007 Jan Dvorak - * - * This program is distributed under the terms of the MIT license. - * See the included MIT-LICENSE file for the terms of this license. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifdef __APPLE__ -#include -#elif defined WIN32 -#include -#include -#else -#include -#endif -#include "../common/common.h" - -static void (APIENTRY * fptr_glUniformMatrix2x3fv)(GLint,GLsizei,GLboolean,GLfloat *); -static VALUE -gl_UniformMatrix2x3fv(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint location; - GLsizei count; - GLboolean transpose; - GLfloat *value; - LOAD_GL_FUNC(glUniformMatrix2x3fv) - location = (GLint)NUM2INT(arg1); - count = (GLint)NUM2INT(arg2); - transpose = (GLboolean)NUM2INT(arg3); - value = ALLOC_N(GLfloat, 2*3*count); - ary2cflt(arg4,value,2*3*count); - fptr_glUniformMatrix2x3fv(location,count,transpose,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniformMatrix3x2fv)(GLint,GLsizei,GLboolean,GLfloat *); -static VALUE -gl_UniformMatrix3x2fv(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint location; - GLsizei count; - GLboolean transpose; - GLfloat *value; - LOAD_GL_FUNC(glUniformMatrix3x2fv) - location = (GLint)NUM2INT(arg1); - count = (GLint)NUM2INT(arg2); - transpose = (GLboolean)NUM2INT(arg3); - value = ALLOC_N(GLfloat, 3*2*count); - ary2cflt(arg4,value,3*2*count); - fptr_glUniformMatrix3x2fv(location,count,transpose,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniformMatrix2x4fv)(GLint,GLsizei,GLboolean,GLfloat *); -static VALUE -gl_UniformMatrix2x4fv(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint location; - GLsizei count; - GLboolean transpose; - GLfloat *value; - LOAD_GL_FUNC(glUniformMatrix2x4fv) - location = (GLint)NUM2INT(arg1); - count = (GLint)NUM2INT(arg2); - transpose = (GLboolean)NUM2INT(arg3); - value = ALLOC_N(GLfloat, 2*4*count); - ary2cflt(arg4,value,2*4*count); - fptr_glUniformMatrix2x4fv(location,count,transpose,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniformMatrix4x2fv)(GLint,GLsizei,GLboolean,GLfloat *); -static VALUE -gl_UniformMatrix4x2fv(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint location; - GLsizei count; - GLboolean transpose; - GLfloat *value; - LOAD_GL_FUNC(glUniformMatrix4x2fv) - location = (GLint)NUM2INT(arg1); - count = (GLint)NUM2INT(arg2); - transpose = (GLboolean)NUM2INT(arg3); - value = ALLOC_N(GLfloat, 4*2*count); - ary2cflt(arg4,value,4*2*count); - fptr_glUniformMatrix4x2fv(location,count,transpose,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniformMatrix3x4fv)(GLint,GLsizei,GLboolean,GLfloat *); -static VALUE -gl_UniformMatrix3x4fv(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint location; - GLsizei count; - GLboolean transpose; - GLfloat *value; - LOAD_GL_FUNC(glUniformMatrix3x4fv) - location = (GLint)NUM2INT(arg1); - count = (GLint)NUM2INT(arg2); - transpose = (GLboolean)NUM2INT(arg3); - value = ALLOC_N(GLfloat, 3*4*count); - ary2cflt(arg4,value,3*4*count); - fptr_glUniformMatrix3x4fv(location,count,transpose,value); - xfree(value); - return Qnil; -} - -static void (APIENTRY * fptr_glUniformMatrix4x3fv)(GLint,GLsizei,GLboolean,GLfloat *); -static VALUE -gl_UniformMatrix4x3fv(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLint location; - GLsizei count; - GLboolean transpose; - GLfloat *value; - LOAD_GL_FUNC(glUniformMatrix4x3fv) - location = (GLint)NUM2INT(arg1); - count = (GLint)NUM2INT(arg2); - transpose = (GLboolean)NUM2INT(arg3); - value = ALLOC_N(GLfloat, 4*3*count); - ary2cflt(arg4,value,4*3*count); - fptr_glUniformMatrix4x3fv(location,count,transpose,value); - xfree(value); - return Qnil; -} - -void gl_init_functions_2_1(VALUE module) -{ - rb_define_module_function(module, "glUniformMatrix2x3fv", gl_UniformMatrix2x3fv, 4); - rb_define_module_function(module, "glUniformMatrix3x2fv", gl_UniformMatrix3x2fv, 4); - rb_define_module_function(module, "glUniformMatrix2x4fv", gl_UniformMatrix2x4fv, 4); - rb_define_module_function(module, "glUniformMatrix4x2fv", gl_UniformMatrix4x2fv, 4); - rb_define_module_function(module, "glUniformMatrix3x4fv", gl_UniformMatrix3x4fv, 4); - rb_define_module_function(module, "glUniformMatrix4x3fv", gl_UniformMatrix4x3fv, 4); -} diff --git a/ruby/RubyOpenGL/gl/gl-enums.c b/ruby/RubyOpenGL/gl/gl-enums.c deleted file mode 100644 index ff491237..00000000 --- a/ruby/RubyOpenGL/gl/gl-enums.c +++ /dev/null @@ -1,2904 +0,0 @@ -/* - * Copyright (C) 1999 - 2005 Yoshi - * Copyright (C) 2006 John M. Gabriele - * - * This program is distributed under the terms of the MIT license. - * See the included MIT-LICENSE file for the terms of this license. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifdef __APPLE__ -#include -#elif defined WIN32 -#include -#include -#else -#include -#endif -#include "../common/common.h" - -void gl_init_enums(VALUE module) -{ - rb_define_const(module, "GL_1PASS_EXT", INT2NUM(GL_1PASS_EXT)); - rb_define_const(module, "GL_1PASS_SGIS", INT2NUM(GL_1PASS_SGIS)); - rb_define_const(module, "GL_2_BYTES", INT2NUM(GL_2_BYTES)); - rb_define_const(module, "GL_2D", INT2NUM(GL_2D)); - rb_define_const(module, "GL_2PASS_0_EXT", INT2NUM(GL_2PASS_0_EXT)); - rb_define_const(module, "GL_2PASS_0_SGIS", INT2NUM(GL_2PASS_0_SGIS)); - rb_define_const(module, "GL_2PASS_1_EXT", INT2NUM(GL_2PASS_1_EXT)); - rb_define_const(module, "GL_2PASS_1_SGIS", INT2NUM(GL_2PASS_1_SGIS)); - rb_define_const(module, "GL_2X_BIT_ATI", INT2NUM(GL_2X_BIT_ATI)); - rb_define_const(module, "GL_3_BYTES", INT2NUM(GL_3_BYTES)); - rb_define_const(module, "GL_3D_COLOR", INT2NUM(GL_3D_COLOR)); - rb_define_const(module, "GL_3D_COLOR_TEXTURE", INT2NUM(GL_3D_COLOR_TEXTURE)); - rb_define_const(module, "GL_3D", INT2NUM(GL_3D)); - rb_define_const(module, "GL_422_AVERAGE_EXT", INT2NUM(GL_422_AVERAGE_EXT)); - rb_define_const(module, "GL_422_EXT", INT2NUM(GL_422_EXT)); - rb_define_const(module, "GL_422_REV_AVERAGE_EXT", INT2NUM(GL_422_REV_AVERAGE_EXT)); - rb_define_const(module, "GL_422_REV_EXT", INT2NUM(GL_422_REV_EXT)); - rb_define_const(module, "GL_4_BYTES", INT2NUM(GL_4_BYTES)); - rb_define_const(module, "GL_4D_COLOR_TEXTURE", INT2NUM(GL_4D_COLOR_TEXTURE)); - rb_define_const(module, "GL_4PASS_0_EXT", INT2NUM(GL_4PASS_0_EXT)); - rb_define_const(module, "GL_4PASS_0_SGIS", INT2NUM(GL_4PASS_0_SGIS)); - rb_define_const(module, "GL_4PASS_1_EXT", INT2NUM(GL_4PASS_1_EXT)); - rb_define_const(module, "GL_4PASS_1_SGIS", INT2NUM(GL_4PASS_1_SGIS)); - rb_define_const(module, "GL_4PASS_2_EXT", INT2NUM(GL_4PASS_2_EXT)); - rb_define_const(module, "GL_4PASS_2_SGIS", INT2NUM(GL_4PASS_2_SGIS)); - rb_define_const(module, "GL_4PASS_3_EXT", INT2NUM(GL_4PASS_3_EXT)); - rb_define_const(module, "GL_4PASS_3_SGIS", INT2NUM(GL_4PASS_3_SGIS)); - rb_define_const(module, "GL_4X_BIT_ATI", INT2NUM(GL_4X_BIT_ATI)); - rb_define_const(module, "GL_8X_BIT_ATI", INT2NUM(GL_8X_BIT_ATI)); - rb_define_const(module, "GL_ABGR_EXT", INT2NUM(GL_ABGR_EXT)); - rb_define_const(module, "GL_ACCUM_ALPHA_BITS", INT2NUM(GL_ACCUM_ALPHA_BITS)); - rb_define_const(module, "GL_ACCUM_BLUE_BITS", INT2NUM(GL_ACCUM_BLUE_BITS)); - rb_define_const(module, "GL_ACCUM_BUFFER_BIT", INT2NUM(GL_ACCUM_BUFFER_BIT)); - rb_define_const(module, "GL_ACCUM_CLEAR_VALUE", INT2NUM(GL_ACCUM_CLEAR_VALUE)); - rb_define_const(module, "GL_ACCUM_GREEN_BITS", INT2NUM(GL_ACCUM_GREEN_BITS)); - rb_define_const(module, "GL_ACCUM", INT2NUM(GL_ACCUM)); - rb_define_const(module, "GL_ACCUM_RED_BITS", INT2NUM(GL_ACCUM_RED_BITS)); - rb_define_const(module, "GL_ACTIVE_ATTRIBUTE_MAX_LENGTH", INT2NUM(GL_ACTIVE_ATTRIBUTE_MAX_LENGTH)); - rb_define_const(module, "GL_ACTIVE_ATTRIBUTES", INT2NUM(GL_ACTIVE_ATTRIBUTES)); - rb_define_const(module, "GL_ACTIVE_STENCIL_FACE_EXT", INT2NUM(GL_ACTIVE_STENCIL_FACE_EXT)); - rb_define_const(module, "GL_ACTIVE_TEXTURE_ARB", INT2NUM(GL_ACTIVE_TEXTURE_ARB)); - rb_define_const(module, "GL_ACTIVE_TEXTURE", INT2NUM(GL_ACTIVE_TEXTURE)); - rb_define_const(module, "GL_ACTIVE_UNIFORM_MAX_LENGTH", INT2NUM(GL_ACTIVE_UNIFORM_MAX_LENGTH)); - rb_define_const(module, "GL_ACTIVE_UNIFORMS", INT2NUM(GL_ACTIVE_UNIFORMS)); - rb_define_const(module, "GL_ACTIVE_VERTEX_UNITS_ARB", INT2NUM(GL_ACTIVE_VERTEX_UNITS_ARB)); - rb_define_const(module, "GL_ADD_ATI", INT2NUM(GL_ADD_ATI)); - rb_define_const(module, "GL_ADD", INT2NUM(GL_ADD)); - rb_define_const(module, "GL_ADD_SIGNED_ARB", INT2NUM(GL_ADD_SIGNED_ARB)); - rb_define_const(module, "GL_ADD_SIGNED_EXT", INT2NUM(GL_ADD_SIGNED_EXT)); - rb_define_const(module, "GL_ADD_SIGNED", INT2NUM(GL_ADD_SIGNED)); - rb_define_const(module, "GL_ALIASED_LINE_WIDTH_RANGE", INT2NUM(GL_ALIASED_LINE_WIDTH_RANGE)); - rb_define_const(module, "GL_ALIASED_POINT_SIZE_RANGE", INT2NUM(GL_ALIASED_POINT_SIZE_RANGE)); - rb_define_const(module, "GL_ALL_ATTRIB_BITS", INT2NUM(GL_ALL_ATTRIB_BITS)); - rb_define_const(module, "GL_ALL_COMPLETED_NV", INT2NUM(GL_ALL_COMPLETED_NV)); - rb_define_const(module, "GL_ALLOW_DRAW_FRG_HINT_PGI", INT2NUM(GL_ALLOW_DRAW_FRG_HINT_PGI)); - rb_define_const(module, "GL_ALLOW_DRAW_MEM_HINT_PGI", INT2NUM(GL_ALLOW_DRAW_MEM_HINT_PGI)); - rb_define_const(module, "GL_ALLOW_DRAW_OBJ_HINT_PGI", INT2NUM(GL_ALLOW_DRAW_OBJ_HINT_PGI)); - rb_define_const(module, "GL_ALLOW_DRAW_WIN_HINT_PGI", INT2NUM(GL_ALLOW_DRAW_WIN_HINT_PGI)); - rb_define_const(module, "GL_ALPHA12_EXT", INT2NUM(GL_ALPHA12_EXT)); - rb_define_const(module, "GL_ALPHA12", INT2NUM(GL_ALPHA12)); - rb_define_const(module, "GL_ALPHA16_EXT", INT2NUM(GL_ALPHA16_EXT)); - rb_define_const(module, "GL_ALPHA16F_ARB", INT2NUM(GL_ALPHA16F_ARB)); - rb_define_const(module, "GL_ALPHA16", INT2NUM(GL_ALPHA16)); - rb_define_const(module, "GL_ALPHA32F_ARB", INT2NUM(GL_ALPHA32F_ARB)); - rb_define_const(module, "GL_ALPHA4_EXT", INT2NUM(GL_ALPHA4_EXT)); - rb_define_const(module, "GL_ALPHA4", INT2NUM(GL_ALPHA4)); - rb_define_const(module, "GL_ALPHA8_EXT", INT2NUM(GL_ALPHA8_EXT)); - rb_define_const(module, "GL_ALPHA8", INT2NUM(GL_ALPHA8)); - rb_define_const(module, "GL_ALPHA_BIAS", INT2NUM(GL_ALPHA_BIAS)); - rb_define_const(module, "GL_ALPHA_BITS", INT2NUM(GL_ALPHA_BITS)); - rb_define_const(module, "GL_ALPHA_FLOAT16_ATI", INT2NUM(GL_ALPHA_FLOAT16_ATI)); - rb_define_const(module, "GL_ALPHA_FLOAT32_ATI", INT2NUM(GL_ALPHA_FLOAT32_ATI)); - rb_define_const(module, "GL_ALPHA", INT2NUM(GL_ALPHA)); - rb_define_const(module, "GL_ALPHA_MAX_CLAMP_INGR", INT2NUM(GL_ALPHA_MAX_CLAMP_INGR)); - rb_define_const(module, "GL_ALPHA_MAX_SGIX", INT2NUM(GL_ALPHA_MAX_SGIX)); - rb_define_const(module, "GL_ALPHA_MIN_CLAMP_INGR", INT2NUM(GL_ALPHA_MIN_CLAMP_INGR)); - rb_define_const(module, "GL_ALPHA_MIN_SGIX", INT2NUM(GL_ALPHA_MIN_SGIX)); - rb_define_const(module, "GL_ALPHA_SCALE", INT2NUM(GL_ALPHA_SCALE)); - rb_define_const(module, "GL_ALPHA_TEST_FUNC", INT2NUM(GL_ALPHA_TEST_FUNC)); - rb_define_const(module, "GL_ALPHA_TEST", INT2NUM(GL_ALPHA_TEST)); - rb_define_const(module, "GL_ALPHA_TEST_REF", INT2NUM(GL_ALPHA_TEST_REF)); - rb_define_const(module, "GL_ALWAYS_FAST_HINT_PGI", INT2NUM(GL_ALWAYS_FAST_HINT_PGI)); - rb_define_const(module, "GL_ALWAYS", INT2NUM(GL_ALWAYS)); - rb_define_const(module, "GL_ALWAYS_SOFT_HINT_PGI", INT2NUM(GL_ALWAYS_SOFT_HINT_PGI)); - rb_define_const(module, "GL_AMBIENT_AND_DIFFUSE", INT2NUM(GL_AMBIENT_AND_DIFFUSE)); - rb_define_const(module, "GL_AMBIENT", INT2NUM(GL_AMBIENT)); - rb_define_const(module, "GL_AND", INT2NUM(GL_AND)); - rb_define_const(module, "GL_AND_INVERTED", INT2NUM(GL_AND_INVERTED)); - rb_define_const(module, "GL_AND_REVERSE", INT2NUM(GL_AND_REVERSE)); - rb_define_const(module, "GL_ARB_imaging", INT2NUM(GL_ARB_imaging)); - rb_define_const(module, "GL_ARRAY_BUFFER_ARB", INT2NUM(GL_ARRAY_BUFFER_ARB)); - rb_define_const(module, "GL_ARRAY_BUFFER_BINDING_ARB", INT2NUM(GL_ARRAY_BUFFER_BINDING_ARB)); - rb_define_const(module, "GL_ARRAY_BUFFER_BINDING", INT2NUM(GL_ARRAY_BUFFER_BINDING)); - rb_define_const(module, "GL_ARRAY_BUFFER", INT2NUM(GL_ARRAY_BUFFER)); - rb_define_const(module, "GL_ARRAY_ELEMENT_LOCK_COUNT_EXT", INT2NUM(GL_ARRAY_ELEMENT_LOCK_COUNT_EXT)); - rb_define_const(module, "GL_ARRAY_ELEMENT_LOCK_FIRST_EXT", INT2NUM(GL_ARRAY_ELEMENT_LOCK_FIRST_EXT)); - rb_define_const(module, "GL_ARRAY_OBJECT_BUFFER_ATI", INT2NUM(GL_ARRAY_OBJECT_BUFFER_ATI)); - rb_define_const(module, "GL_ARRAY_OBJECT_OFFSET_ATI", INT2NUM(GL_ARRAY_OBJECT_OFFSET_ATI)); - rb_define_const(module, "GL_ASYNC_DRAW_PIXELS_SGIX", INT2NUM(GL_ASYNC_DRAW_PIXELS_SGIX)); - rb_define_const(module, "GL_ASYNC_HISTOGRAM_SGIX", INT2NUM(GL_ASYNC_HISTOGRAM_SGIX)); - rb_define_const(module, "GL_ASYNC_MARKER_SGIX", INT2NUM(GL_ASYNC_MARKER_SGIX)); - rb_define_const(module, "GL_ASYNC_READ_PIXELS_SGIX", INT2NUM(GL_ASYNC_READ_PIXELS_SGIX)); - rb_define_const(module, "GL_ASYNC_TEX_IMAGE_SGIX", INT2NUM(GL_ASYNC_TEX_IMAGE_SGIX)); - rb_define_const(module, "GL_ATTACHED_SHADERS", INT2NUM(GL_ATTACHED_SHADERS)); - rb_define_const(module, "GL_ATTENUATION_EXT", INT2NUM(GL_ATTENUATION_EXT)); - rb_define_const(module, "GL_ATTRIB_ARRAY_POINTER_NV", INT2NUM(GL_ATTRIB_ARRAY_POINTER_NV)); - rb_define_const(module, "GL_ATTRIB_ARRAY_SIZE_NV", INT2NUM(GL_ATTRIB_ARRAY_SIZE_NV)); - rb_define_const(module, "GL_ATTRIB_ARRAY_STRIDE_NV", INT2NUM(GL_ATTRIB_ARRAY_STRIDE_NV)); - rb_define_const(module, "GL_ATTRIB_ARRAY_TYPE_NV", INT2NUM(GL_ATTRIB_ARRAY_TYPE_NV)); - rb_define_const(module, "GL_ATTRIB_STACK_DEPTH", INT2NUM(GL_ATTRIB_STACK_DEPTH)); - rb_define_const(module, "GL_AUTO_NORMAL", INT2NUM(GL_AUTO_NORMAL)); - rb_define_const(module, "GL_AUX0", INT2NUM(GL_AUX0)); - rb_define_const(module, "GL_AUX1", INT2NUM(GL_AUX1)); - rb_define_const(module, "GL_AUX2", INT2NUM(GL_AUX2)); - rb_define_const(module, "GL_AUX3", INT2NUM(GL_AUX3)); - rb_define_const(module, "GL_AUX_BUFFERS", INT2NUM(GL_AUX_BUFFERS)); - rb_define_const(module, "GL_AVERAGE_EXT", INT2NUM(GL_AVERAGE_EXT)); - rb_define_const(module, "GL_AVERAGE_HP", INT2NUM(GL_AVERAGE_HP)); - rb_define_const(module, "GL_BACK", INT2NUM(GL_BACK)); - rb_define_const(module, "GL_BACK_LEFT", INT2NUM(GL_BACK_LEFT)); - rb_define_const(module, "GL_BACK_NORMALS_HINT_PGI", INT2NUM(GL_BACK_NORMALS_HINT_PGI)); - rb_define_const(module, "GL_BACK_RIGHT", INT2NUM(GL_BACK_RIGHT)); - rb_define_const(module, "GL_BGRA_EXT", INT2NUM(GL_BGRA_EXT)); - rb_define_const(module, "GL_BGRA", INT2NUM(GL_BGRA)); - rb_define_const(module, "GL_BGR_EXT", INT2NUM(GL_BGR_EXT)); - rb_define_const(module, "GL_BGR", INT2NUM(GL_BGR)); - rb_define_const(module, "GL_BIAS_BIT_ATI", INT2NUM(GL_BIAS_BIT_ATI)); - rb_define_const(module, "GL_BIAS_BY_NEGATIVE_ONE_HALF_NV", INT2NUM(GL_BIAS_BY_NEGATIVE_ONE_HALF_NV)); - rb_define_const(module, "GL_BINORMAL_ARRAY_EXT", INT2NUM(GL_BINORMAL_ARRAY_EXT)); - rb_define_const(module, "GL_BINORMAL_ARRAY_POINTER_EXT", INT2NUM(GL_BINORMAL_ARRAY_POINTER_EXT)); - rb_define_const(module, "GL_BINORMAL_ARRAY_STRIDE_EXT", INT2NUM(GL_BINORMAL_ARRAY_STRIDE_EXT)); - rb_define_const(module, "GL_BINORMAL_ARRAY_TYPE_EXT", INT2NUM(GL_BINORMAL_ARRAY_TYPE_EXT)); - rb_define_const(module, "GL_BITMAP", INT2NUM(GL_BITMAP)); - rb_define_const(module, "GL_BITMAP_TOKEN", INT2NUM(GL_BITMAP_TOKEN)); - rb_define_const(module, "GL_BLEND_COLOR_EXT", INT2NUM(GL_BLEND_COLOR_EXT)); - rb_define_const(module, "GL_BLEND_COLOR", INT2NUM(GL_BLEND_COLOR)); - rb_define_const(module, "GL_BLEND_DST_ALPHA_EXT", INT2NUM(GL_BLEND_DST_ALPHA_EXT)); - rb_define_const(module, "GL_BLEND_DST_ALPHA", INT2NUM(GL_BLEND_DST_ALPHA)); - rb_define_const(module, "GL_BLEND_DST", INT2NUM(GL_BLEND_DST)); - rb_define_const(module, "GL_BLEND_DST_RGB_EXT", INT2NUM(GL_BLEND_DST_RGB_EXT)); - rb_define_const(module, "GL_BLEND_DST_RGB", INT2NUM(GL_BLEND_DST_RGB)); - rb_define_const(module, "GL_BLEND_EQUATION_ALPHA_EXT", INT2NUM(GL_BLEND_EQUATION_ALPHA_EXT)); - rb_define_const(module, "GL_BLEND_EQUATION_ALPHA", INT2NUM(GL_BLEND_EQUATION_ALPHA)); - rb_define_const(module, "GL_BLEND_EQUATION_EXT", INT2NUM(GL_BLEND_EQUATION_EXT)); - rb_define_const(module, "GL_BLEND_EQUATION", INT2NUM(GL_BLEND_EQUATION)); - rb_define_const(module, "GL_BLEND_EQUATION_RGB_EXT", INT2NUM(GL_BLEND_EQUATION_RGB_EXT)); - rb_define_const(module, "GL_BLEND_EQUATION_RGB", INT2NUM(GL_BLEND_EQUATION_RGB)); - rb_define_const(module, "GL_BLEND", INT2NUM(GL_BLEND)); - rb_define_const(module, "GL_BLEND_SRC_ALPHA_EXT", INT2NUM(GL_BLEND_SRC_ALPHA_EXT)); - rb_define_const(module, "GL_BLEND_SRC_ALPHA", INT2NUM(GL_BLEND_SRC_ALPHA)); - rb_define_const(module, "GL_BLEND_SRC", INT2NUM(GL_BLEND_SRC)); - rb_define_const(module, "GL_BLEND_SRC_RGB_EXT", INT2NUM(GL_BLEND_SRC_RGB_EXT)); - rb_define_const(module, "GL_BLEND_SRC_RGB", INT2NUM(GL_BLEND_SRC_RGB)); - rb_define_const(module, "GL_BLUE_BIAS", INT2NUM(GL_BLUE_BIAS)); - rb_define_const(module, "GL_BLUE_BIT_ATI", INT2NUM(GL_BLUE_BIT_ATI)); - rb_define_const(module, "GL_BLUE_BITS", INT2NUM(GL_BLUE_BITS)); - rb_define_const(module, "GL_BLUE", INT2NUM(GL_BLUE)); - rb_define_const(module, "GL_BLUE_MAX_CLAMP_INGR", INT2NUM(GL_BLUE_MAX_CLAMP_INGR)); - rb_define_const(module, "GL_BLUE_MIN_CLAMP_INGR", INT2NUM(GL_BLUE_MIN_CLAMP_INGR)); - rb_define_const(module, "GL_BLUE_SCALE", INT2NUM(GL_BLUE_SCALE)); - rb_define_const(module, "GL_BOOL_ARB", INT2NUM(GL_BOOL_ARB)); - rb_define_const(module, "GL_BOOL", INT2NUM(GL_BOOL)); - rb_define_const(module, "GL_BOOL_VEC2_ARB", INT2NUM(GL_BOOL_VEC2_ARB)); - rb_define_const(module, "GL_BOOL_VEC2", INT2NUM(GL_BOOL_VEC2)); - rb_define_const(module, "GL_BOOL_VEC3_ARB", INT2NUM(GL_BOOL_VEC3_ARB)); - rb_define_const(module, "GL_BOOL_VEC3", INT2NUM(GL_BOOL_VEC3)); - rb_define_const(module, "GL_BOOL_VEC4_ARB", INT2NUM(GL_BOOL_VEC4_ARB)); - rb_define_const(module, "GL_BOOL_VEC4", INT2NUM(GL_BOOL_VEC4)); - rb_define_const(module, "GL_BUFFER_ACCESS_ARB", INT2NUM(GL_BUFFER_ACCESS_ARB)); - rb_define_const(module, "GL_BUFFER_ACCESS", INT2NUM(GL_BUFFER_ACCESS)); - rb_define_const(module, "GL_BUFFER_FLUSHING_UNMAP_APPLE", INT2NUM(GL_BUFFER_FLUSHING_UNMAP_APPLE)); - rb_define_const(module, "GL_BUFFER_MAPPED_ARB", INT2NUM(GL_BUFFER_MAPPED_ARB)); - rb_define_const(module, "GL_BUFFER_MAPPED", INT2NUM(GL_BUFFER_MAPPED)); - rb_define_const(module, "GL_BUFFER_MAP_POINTER_ARB", INT2NUM(GL_BUFFER_MAP_POINTER_ARB)); - rb_define_const(module, "GL_BUFFER_MAP_POINTER", INT2NUM(GL_BUFFER_MAP_POINTER)); - rb_define_const(module, "GL_BUFFER_SERIALIZED_MODIFY_APPLE", INT2NUM(GL_BUFFER_SERIALIZED_MODIFY_APPLE)); - rb_define_const(module, "GL_BUFFER_SIZE_ARB", INT2NUM(GL_BUFFER_SIZE_ARB)); - rb_define_const(module, "GL_BUFFER_SIZE", INT2NUM(GL_BUFFER_SIZE)); - rb_define_const(module, "GL_BUFFER_USAGE_ARB", INT2NUM(GL_BUFFER_USAGE_ARB)); - rb_define_const(module, "GL_BUFFER_USAGE", INT2NUM(GL_BUFFER_USAGE)); - rb_define_const(module, "GL_BUMP_ENVMAP_ATI", INT2NUM(GL_BUMP_ENVMAP_ATI)); - rb_define_const(module, "GL_BUMP_NUM_TEX_UNITS_ATI", INT2NUM(GL_BUMP_NUM_TEX_UNITS_ATI)); - rb_define_const(module, "GL_BUMP_ROT_MATRIX_ATI", INT2NUM(GL_BUMP_ROT_MATRIX_ATI)); - rb_define_const(module, "GL_BUMP_ROT_MATRIX_SIZE_ATI", INT2NUM(GL_BUMP_ROT_MATRIX_SIZE_ATI)); - rb_define_const(module, "GL_BUMP_TARGET_ATI", INT2NUM(GL_BUMP_TARGET_ATI)); - rb_define_const(module, "GL_BUMP_TEX_UNITS_ATI", INT2NUM(GL_BUMP_TEX_UNITS_ATI)); - rb_define_const(module, "GL_BYTE", INT2NUM(GL_BYTE)); - rb_define_const(module, "GL_C3F_V3F", INT2NUM(GL_C3F_V3F)); - rb_define_const(module, "GL_C4F_N3F_V3F", INT2NUM(GL_C4F_N3F_V3F)); - rb_define_const(module, "GL_C4UB_V2F", INT2NUM(GL_C4UB_V2F)); - rb_define_const(module, "GL_C4UB_V3F", INT2NUM(GL_C4UB_V3F)); - rb_define_const(module, "GL_CALLIGRAPHIC_FRAGMENT_SGIX", INT2NUM(GL_CALLIGRAPHIC_FRAGMENT_SGIX)); - rb_define_const(module, "GL_CCW", INT2NUM(GL_CCW)); - rb_define_const(module, "GL_CLAMP_FRAGMENT_COLOR_ARB", INT2NUM(GL_CLAMP_FRAGMENT_COLOR_ARB)); - rb_define_const(module, "GL_CLAMP", INT2NUM(GL_CLAMP)); - rb_define_const(module, "GL_CLAMP_READ_COLOR_ARB", INT2NUM(GL_CLAMP_READ_COLOR_ARB)); - rb_define_const(module, "GL_CLAMP_TO_BORDER_ARB", INT2NUM(GL_CLAMP_TO_BORDER_ARB)); - rb_define_const(module, "GL_CLAMP_TO_BORDER", INT2NUM(GL_CLAMP_TO_BORDER)); - rb_define_const(module, "GL_CLAMP_TO_BORDER_SGIS", INT2NUM(GL_CLAMP_TO_BORDER_SGIS)); - rb_define_const(module, "GL_CLAMP_TO_EDGE", INT2NUM(GL_CLAMP_TO_EDGE)); - rb_define_const(module, "GL_CLAMP_TO_EDGE_SGIS", INT2NUM(GL_CLAMP_TO_EDGE_SGIS)); - rb_define_const(module, "GL_CLAMP_VERTEX_COLOR_ARB", INT2NUM(GL_CLAMP_VERTEX_COLOR_ARB)); - rb_define_const(module, "GL_CLEAR", INT2NUM(GL_CLEAR)); - rb_define_const(module, "GL_CLIENT_ACTIVE_TEXTURE_ARB", INT2NUM(GL_CLIENT_ACTIVE_TEXTURE_ARB)); - rb_define_const(module, "GL_CLIENT_ACTIVE_TEXTURE", INT2NUM(GL_CLIENT_ACTIVE_TEXTURE)); - rb_define_const(module, "GL_CLIENT_ALL_ATTRIB_BITS", INT2NUM(GL_CLIENT_ALL_ATTRIB_BITS)); - rb_define_const(module, "GL_CLIENT_ATTRIB_STACK_DEPTH", INT2NUM(GL_CLIENT_ATTRIB_STACK_DEPTH)); - rb_define_const(module, "GL_CLIENT_PIXEL_STORE_BIT", INT2NUM(GL_CLIENT_PIXEL_STORE_BIT)); - rb_define_const(module, "GL_CLIENT_VERTEX_ARRAY_BIT", INT2NUM(GL_CLIENT_VERTEX_ARRAY_BIT)); - rb_define_const(module, "GL_CLIP_FAR_HINT_PGI", INT2NUM(GL_CLIP_FAR_HINT_PGI)); - rb_define_const(module, "GL_CLIP_NEAR_HINT_PGI", INT2NUM(GL_CLIP_NEAR_HINT_PGI)); - rb_define_const(module, "GL_CLIP_PLANE0", INT2NUM(GL_CLIP_PLANE0)); - rb_define_const(module, "GL_CLIP_PLANE1", INT2NUM(GL_CLIP_PLANE1)); - rb_define_const(module, "GL_CLIP_PLANE2", INT2NUM(GL_CLIP_PLANE2)); - rb_define_const(module, "GL_CLIP_PLANE3", INT2NUM(GL_CLIP_PLANE3)); - rb_define_const(module, "GL_CLIP_PLANE4", INT2NUM(GL_CLIP_PLANE4)); - rb_define_const(module, "GL_CLIP_PLANE5", INT2NUM(GL_CLIP_PLANE5)); - rb_define_const(module, "GL_CLIP_VOLUME_CLIPPING_HINT_EXT", INT2NUM(GL_CLIP_VOLUME_CLIPPING_HINT_EXT)); - rb_define_const(module, "GL_CMYKA_EXT", INT2NUM(GL_CMYKA_EXT)); - rb_define_const(module, "GL_CMYK_EXT", INT2NUM(GL_CMYK_EXT)); - rb_define_const(module, "GL_CND0_ATI", INT2NUM(GL_CND0_ATI)); - rb_define_const(module, "GL_CND_ATI", INT2NUM(GL_CND_ATI)); - rb_define_const(module, "GL_COEFF", INT2NUM(GL_COEFF)); - rb_define_const(module, "GL_COLOR3_BIT_PGI", INT2NUM(GL_COLOR3_BIT_PGI)); - rb_define_const(module, "GL_COLOR4_BIT_PGI", INT2NUM(GL_COLOR4_BIT_PGI)); - rb_define_const(module, "GL_COLOR_ALPHA_PAIRING_ATI", INT2NUM(GL_COLOR_ALPHA_PAIRING_ATI)); - rb_define_const(module, "GL_COLOR_ARRAY_BUFFER_BINDING_ARB", INT2NUM(GL_COLOR_ARRAY_BUFFER_BINDING_ARB)); - rb_define_const(module, "GL_COLOR_ARRAY_BUFFER_BINDING", INT2NUM(GL_COLOR_ARRAY_BUFFER_BINDING)); - rb_define_const(module, "GL_COLOR_ARRAY_COUNT_EXT", INT2NUM(GL_COLOR_ARRAY_COUNT_EXT)); - rb_define_const(module, "GL_COLOR_ARRAY_EXT", INT2NUM(GL_COLOR_ARRAY_EXT)); - rb_define_const(module, "GL_COLOR_ARRAY", INT2NUM(GL_COLOR_ARRAY)); - rb_define_const(module, "GL_COLOR_ARRAY_LIST_IBM", INT2NUM(GL_COLOR_ARRAY_LIST_IBM)); - rb_define_const(module, "GL_COLOR_ARRAY_LIST_STRIDE_IBM", INT2NUM(GL_COLOR_ARRAY_LIST_STRIDE_IBM)); - rb_define_const(module, "GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL", INT2NUM(GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL)); - rb_define_const(module, "GL_COLOR_ARRAY_POINTER_EXT", INT2NUM(GL_COLOR_ARRAY_POINTER_EXT)); - rb_define_const(module, "GL_COLOR_ARRAY_POINTER", INT2NUM(GL_COLOR_ARRAY_POINTER)); - rb_define_const(module, "GL_COLOR_ARRAY_SIZE_EXT", INT2NUM(GL_COLOR_ARRAY_SIZE_EXT)); - rb_define_const(module, "GL_COLOR_ARRAY_SIZE", INT2NUM(GL_COLOR_ARRAY_SIZE)); - rb_define_const(module, "GL_COLOR_ARRAY_STRIDE_EXT", INT2NUM(GL_COLOR_ARRAY_STRIDE_EXT)); - rb_define_const(module, "GL_COLOR_ARRAY_STRIDE", INT2NUM(GL_COLOR_ARRAY_STRIDE)); - rb_define_const(module, "GL_COLOR_ARRAY_TYPE_EXT", INT2NUM(GL_COLOR_ARRAY_TYPE_EXT)); - rb_define_const(module, "GL_COLOR_ARRAY_TYPE", INT2NUM(GL_COLOR_ARRAY_TYPE)); - rb_define_const(module, "GL_COLOR_ATTACHMENT0_EXT", INT2NUM(GL_COLOR_ATTACHMENT0_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT10_EXT", INT2NUM(GL_COLOR_ATTACHMENT10_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT11_EXT", INT2NUM(GL_COLOR_ATTACHMENT11_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT12_EXT", INT2NUM(GL_COLOR_ATTACHMENT12_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT13_EXT", INT2NUM(GL_COLOR_ATTACHMENT13_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT14_EXT", INT2NUM(GL_COLOR_ATTACHMENT14_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT15_EXT", INT2NUM(GL_COLOR_ATTACHMENT15_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT1_EXT", INT2NUM(GL_COLOR_ATTACHMENT1_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT2_EXT", INT2NUM(GL_COLOR_ATTACHMENT2_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT3_EXT", INT2NUM(GL_COLOR_ATTACHMENT3_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT4_EXT", INT2NUM(GL_COLOR_ATTACHMENT4_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT5_EXT", INT2NUM(GL_COLOR_ATTACHMENT5_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT6_EXT", INT2NUM(GL_COLOR_ATTACHMENT6_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT7_EXT", INT2NUM(GL_COLOR_ATTACHMENT7_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT8_EXT", INT2NUM(GL_COLOR_ATTACHMENT8_EXT)); - rb_define_const(module, "GL_COLOR_ATTACHMENT9_EXT", INT2NUM(GL_COLOR_ATTACHMENT9_EXT)); - rb_define_const(module, "GL_COLOR_BUFFER_BIT", INT2NUM(GL_COLOR_BUFFER_BIT)); - rb_define_const(module, "GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI", INT2NUM(GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI)); - rb_define_const(module, "GL_COLOR_CLEAR_VALUE", INT2NUM(GL_COLOR_CLEAR_VALUE)); - rb_define_const(module, "GL_COLOR_INDEX12_EXT", INT2NUM(GL_COLOR_INDEX12_EXT)); - rb_define_const(module, "GL_COLOR_INDEX16_EXT", INT2NUM(GL_COLOR_INDEX16_EXT)); - rb_define_const(module, "GL_COLOR_INDEX1_EXT", INT2NUM(GL_COLOR_INDEX1_EXT)); - rb_define_const(module, "GL_COLOR_INDEX2_EXT", INT2NUM(GL_COLOR_INDEX2_EXT)); - rb_define_const(module, "GL_COLOR_INDEX4_EXT", INT2NUM(GL_COLOR_INDEX4_EXT)); - rb_define_const(module, "GL_COLOR_INDEX8_EXT", INT2NUM(GL_COLOR_INDEX8_EXT)); - rb_define_const(module, "GL_COLOR_INDEXES", INT2NUM(GL_COLOR_INDEXES)); - rb_define_const(module, "GL_COLOR_INDEX", INT2NUM(GL_COLOR_INDEX)); - rb_define_const(module, "GL_COLOR", INT2NUM(GL_COLOR)); - rb_define_const(module, "GL_COLOR_LOGIC_OP", INT2NUM(GL_COLOR_LOGIC_OP)); - rb_define_const(module, "GL_COLOR_MATERIAL_FACE", INT2NUM(GL_COLOR_MATERIAL_FACE)); - rb_define_const(module, "GL_COLOR_MATERIAL", INT2NUM(GL_COLOR_MATERIAL)); - rb_define_const(module, "GL_COLOR_MATERIAL_PARAMETER", INT2NUM(GL_COLOR_MATERIAL_PARAMETER)); - rb_define_const(module, "GL_COLOR_MATRIX", INT2NUM(GL_COLOR_MATRIX)); - rb_define_const(module, "GL_COLOR_MATRIX_SGI", INT2NUM(GL_COLOR_MATRIX_SGI)); - rb_define_const(module, "GL_COLOR_MATRIX_STACK_DEPTH", INT2NUM(GL_COLOR_MATRIX_STACK_DEPTH)); - rb_define_const(module, "GL_COLOR_MATRIX_STACK_DEPTH_SGI", INT2NUM(GL_COLOR_MATRIX_STACK_DEPTH_SGI)); - rb_define_const(module, "GL_COLOR_SUM_ARB", INT2NUM(GL_COLOR_SUM_ARB)); - rb_define_const(module, "GL_COLOR_SUM_CLAMP_NV", INT2NUM(GL_COLOR_SUM_CLAMP_NV)); - rb_define_const(module, "GL_COLOR_SUM_EXT", INT2NUM(GL_COLOR_SUM_EXT)); - rb_define_const(module, "GL_COLOR_SUM", INT2NUM(GL_COLOR_SUM)); - rb_define_const(module, "GL_COLOR_TABLE_ALPHA_SIZE", INT2NUM(GL_COLOR_TABLE_ALPHA_SIZE)); - rb_define_const(module, "GL_COLOR_TABLE_ALPHA_SIZE_SGI", INT2NUM(GL_COLOR_TABLE_ALPHA_SIZE_SGI)); - rb_define_const(module, "GL_COLOR_TABLE_BIAS", INT2NUM(GL_COLOR_TABLE_BIAS)); - rb_define_const(module, "GL_COLOR_TABLE_BIAS_SGI", INT2NUM(GL_COLOR_TABLE_BIAS_SGI)); - rb_define_const(module, "GL_COLOR_TABLE_BLUE_SIZE", INT2NUM(GL_COLOR_TABLE_BLUE_SIZE)); - rb_define_const(module, "GL_COLOR_TABLE_BLUE_SIZE_SGI", INT2NUM(GL_COLOR_TABLE_BLUE_SIZE_SGI)); - rb_define_const(module, "GL_COLOR_TABLE_FORMAT", INT2NUM(GL_COLOR_TABLE_FORMAT)); - rb_define_const(module, "GL_COLOR_TABLE_FORMAT_SGI", INT2NUM(GL_COLOR_TABLE_FORMAT_SGI)); - rb_define_const(module, "GL_COLOR_TABLE_GREEN_SIZE", INT2NUM(GL_COLOR_TABLE_GREEN_SIZE)); - rb_define_const(module, "GL_COLOR_TABLE_GREEN_SIZE_SGI", INT2NUM(GL_COLOR_TABLE_GREEN_SIZE_SGI)); - rb_define_const(module, "GL_COLOR_TABLE", INT2NUM(GL_COLOR_TABLE)); - rb_define_const(module, "GL_COLOR_TABLE_INTENSITY_SIZE", INT2NUM(GL_COLOR_TABLE_INTENSITY_SIZE)); - rb_define_const(module, "GL_COLOR_TABLE_INTENSITY_SIZE_SGI", INT2NUM(GL_COLOR_TABLE_INTENSITY_SIZE_SGI)); - rb_define_const(module, "GL_COLOR_TABLE_LUMINANCE_SIZE", INT2NUM(GL_COLOR_TABLE_LUMINANCE_SIZE)); - rb_define_const(module, "GL_COLOR_TABLE_LUMINANCE_SIZE_SGI", INT2NUM(GL_COLOR_TABLE_LUMINANCE_SIZE_SGI)); - rb_define_const(module, "GL_COLOR_TABLE_RED_SIZE", INT2NUM(GL_COLOR_TABLE_RED_SIZE)); - rb_define_const(module, "GL_COLOR_TABLE_RED_SIZE_SGI", INT2NUM(GL_COLOR_TABLE_RED_SIZE_SGI)); - rb_define_const(module, "GL_COLOR_TABLE_SCALE", INT2NUM(GL_COLOR_TABLE_SCALE)); - rb_define_const(module, "GL_COLOR_TABLE_SCALE_SGI", INT2NUM(GL_COLOR_TABLE_SCALE_SGI)); - rb_define_const(module, "GL_COLOR_TABLE_SGI", INT2NUM(GL_COLOR_TABLE_SGI)); - rb_define_const(module, "GL_COLOR_TABLE_WIDTH", INT2NUM(GL_COLOR_TABLE_WIDTH)); - rb_define_const(module, "GL_COLOR_TABLE_WIDTH_SGI", INT2NUM(GL_COLOR_TABLE_WIDTH_SGI)); - rb_define_const(module, "GL_COLOR_WRITEMASK", INT2NUM(GL_COLOR_WRITEMASK)); - rb_define_const(module, "GL_COMBINE4_NV", INT2NUM(GL_COMBINE4_NV)); - rb_define_const(module, "GL_COMBINE_ALPHA_ARB", INT2NUM(GL_COMBINE_ALPHA_ARB)); - rb_define_const(module, "GL_COMBINE_ALPHA_EXT", INT2NUM(GL_COMBINE_ALPHA_EXT)); - rb_define_const(module, "GL_COMBINE_ALPHA", INT2NUM(GL_COMBINE_ALPHA)); - rb_define_const(module, "GL_COMBINE_ARB", INT2NUM(GL_COMBINE_ARB)); - rb_define_const(module, "GL_COMBINE_EXT", INT2NUM(GL_COMBINE_EXT)); - rb_define_const(module, "GL_COMBINE", INT2NUM(GL_COMBINE)); - rb_define_const(module, "GL_COMBINER0_NV", INT2NUM(GL_COMBINER0_NV)); - rb_define_const(module, "GL_COMBINER1_NV", INT2NUM(GL_COMBINER1_NV)); - rb_define_const(module, "GL_COMBINER2_NV", INT2NUM(GL_COMBINER2_NV)); - rb_define_const(module, "GL_COMBINER3_NV", INT2NUM(GL_COMBINER3_NV)); - rb_define_const(module, "GL_COMBINER4_NV", INT2NUM(GL_COMBINER4_NV)); - rb_define_const(module, "GL_COMBINER5_NV", INT2NUM(GL_COMBINER5_NV)); - rb_define_const(module, "GL_COMBINER6_NV", INT2NUM(GL_COMBINER6_NV)); - rb_define_const(module, "GL_COMBINER7_NV", INT2NUM(GL_COMBINER7_NV)); - rb_define_const(module, "GL_COMBINER_AB_DOT_PRODUCT_NV", INT2NUM(GL_COMBINER_AB_DOT_PRODUCT_NV)); - rb_define_const(module, "GL_COMBINER_AB_OUTPUT_NV", INT2NUM(GL_COMBINER_AB_OUTPUT_NV)); - rb_define_const(module, "GL_COMBINER_BIAS_NV", INT2NUM(GL_COMBINER_BIAS_NV)); - rb_define_const(module, "GL_COMBINER_CD_DOT_PRODUCT_NV", INT2NUM(GL_COMBINER_CD_DOT_PRODUCT_NV)); - rb_define_const(module, "GL_COMBINER_CD_OUTPUT_NV", INT2NUM(GL_COMBINER_CD_OUTPUT_NV)); - rb_define_const(module, "GL_COMBINER_COMPONENT_USAGE_NV", INT2NUM(GL_COMBINER_COMPONENT_USAGE_NV)); - rb_define_const(module, "GL_COMBINE_RGB_ARB", INT2NUM(GL_COMBINE_RGB_ARB)); - rb_define_const(module, "GL_COMBINE_RGB_EXT", INT2NUM(GL_COMBINE_RGB_EXT)); - rb_define_const(module, "GL_COMBINE_RGB", INT2NUM(GL_COMBINE_RGB)); - rb_define_const(module, "GL_COMBINER_INPUT_NV", INT2NUM(GL_COMBINER_INPUT_NV)); - rb_define_const(module, "GL_COMBINER_MAPPING_NV", INT2NUM(GL_COMBINER_MAPPING_NV)); - rb_define_const(module, "GL_COMBINER_MUX_SUM_NV", INT2NUM(GL_COMBINER_MUX_SUM_NV)); - rb_define_const(module, "GL_COMBINER_SCALE_NV", INT2NUM(GL_COMBINER_SCALE_NV)); - rb_define_const(module, "GL_COMBINER_SUM_OUTPUT_NV", INT2NUM(GL_COMBINER_SUM_OUTPUT_NV)); - rb_define_const(module, "GL_COMPARE_R_TO_TEXTURE", INT2NUM(GL_COMPARE_R_TO_TEXTURE)); - rb_define_const(module, "GL_COMP_BIT_ATI", INT2NUM(GL_COMP_BIT_ATI)); - rb_define_const(module, "GL_COMPILE_AND_EXECUTE", INT2NUM(GL_COMPILE_AND_EXECUTE)); - rb_define_const(module, "GL_COMPILE", INT2NUM(GL_COMPILE)); - rb_define_const(module, "GL_COMPILE_STATUS", INT2NUM(GL_COMPILE_STATUS)); - rb_define_const(module, "GL_COMPRESSED_ALPHA_ARB", INT2NUM(GL_COMPRESSED_ALPHA_ARB)); - rb_define_const(module, "GL_COMPRESSED_ALPHA", INT2NUM(GL_COMPRESSED_ALPHA)); - rb_define_const(module, "GL_COMPRESSED_INTENSITY_ARB", INT2NUM(GL_COMPRESSED_INTENSITY_ARB)); - rb_define_const(module, "GL_COMPRESSED_INTENSITY", INT2NUM(GL_COMPRESSED_INTENSITY)); - rb_define_const(module, "GL_COMPRESSED_LUMINANCE_ALPHA_ARB", INT2NUM(GL_COMPRESSED_LUMINANCE_ALPHA_ARB)); - rb_define_const(module, "GL_COMPRESSED_LUMINANCE_ALPHA", INT2NUM(GL_COMPRESSED_LUMINANCE_ALPHA)); - rb_define_const(module, "GL_COMPRESSED_LUMINANCE_ARB", INT2NUM(GL_COMPRESSED_LUMINANCE_ARB)); - rb_define_const(module, "GL_COMPRESSED_LUMINANCE", INT2NUM(GL_COMPRESSED_LUMINANCE)); - rb_define_const(module, "GL_COMPRESSED_RGBA_ARB", INT2NUM(GL_COMPRESSED_RGBA_ARB)); - rb_define_const(module, "GL_COMPRESSED_RGBA_FXT1_3DFX", INT2NUM(GL_COMPRESSED_RGBA_FXT1_3DFX)); - rb_define_const(module, "GL_COMPRESSED_RGBA", INT2NUM(GL_COMPRESSED_RGBA)); - rb_define_const(module, "GL_COMPRESSED_RGB_ARB", INT2NUM(GL_COMPRESSED_RGB_ARB)); - rb_define_const(module, "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT", INT2NUM(GL_COMPRESSED_RGBA_S3TC_DXT1_EXT)); - rb_define_const(module, "GL_COMPRESSED_RGBA_S3TC_DXT3_EXT", INT2NUM(GL_COMPRESSED_RGBA_S3TC_DXT3_EXT)); - rb_define_const(module, "GL_COMPRESSED_RGBA_S3TC_DXT5_EXT", INT2NUM(GL_COMPRESSED_RGBA_S3TC_DXT5_EXT)); - rb_define_const(module, "GL_COMPRESSED_RGB_FXT1_3DFX", INT2NUM(GL_COMPRESSED_RGB_FXT1_3DFX)); - rb_define_const(module, "GL_COMPRESSED_RGB", INT2NUM(GL_COMPRESSED_RGB)); - rb_define_const(module, "GL_COMPRESSED_RGB_S3TC_DXT1_EXT", INT2NUM(GL_COMPRESSED_RGB_S3TC_DXT1_EXT)); - rb_define_const(module, "GL_COMPRESSED_SLUMINANCE_ALPHA_EXT", INT2NUM(GL_COMPRESSED_SLUMINANCE_ALPHA_EXT)); - rb_define_const(module, "GL_COMPRESSED_SLUMINANCE_ALPHA", INT2NUM(GL_COMPRESSED_SLUMINANCE_ALPHA)); - rb_define_const(module, "GL_COMPRESSED_SLUMINANCE_EXT", INT2NUM(GL_COMPRESSED_SLUMINANCE_EXT)); - rb_define_const(module, "GL_COMPRESSED_SLUMINANCE", INT2NUM(GL_COMPRESSED_SLUMINANCE)); - rb_define_const(module, "GL_COMPRESSED_SRGB_ALPHA_EXT", INT2NUM(GL_COMPRESSED_SRGB_ALPHA_EXT)); - rb_define_const(module, "GL_COMPRESSED_SRGB_ALPHA", INT2NUM(GL_COMPRESSED_SRGB_ALPHA)); - rb_define_const(module, "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT", INT2NUM(GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT)); - rb_define_const(module, "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT", INT2NUM(GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT)); - rb_define_const(module, "GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT", INT2NUM(GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT)); - rb_define_const(module, "GL_COMPRESSED_SRGB_EXT", INT2NUM(GL_COMPRESSED_SRGB_EXT)); - rb_define_const(module, "GL_COMPRESSED_SRGB", INT2NUM(GL_COMPRESSED_SRGB)); - rb_define_const(module, "GL_COMPRESSED_SRGB_S3TC_DXT1_EXT", INT2NUM(GL_COMPRESSED_SRGB_S3TC_DXT1_EXT)); - rb_define_const(module, "GL_COMPRESSED_TEXTURE_FORMATS_ARB", INT2NUM(GL_COMPRESSED_TEXTURE_FORMATS_ARB)); - rb_define_const(module, "GL_COMPRESSED_TEXTURE_FORMATS", INT2NUM(GL_COMPRESSED_TEXTURE_FORMATS)); - rb_define_const(module, "GL_CON_0_ATI", INT2NUM(GL_CON_0_ATI)); - rb_define_const(module, "GL_CON_10_ATI", INT2NUM(GL_CON_10_ATI)); - rb_define_const(module, "GL_CON_11_ATI", INT2NUM(GL_CON_11_ATI)); - rb_define_const(module, "GL_CON_12_ATI", INT2NUM(GL_CON_12_ATI)); - rb_define_const(module, "GL_CON_13_ATI", INT2NUM(GL_CON_13_ATI)); - rb_define_const(module, "GL_CON_14_ATI", INT2NUM(GL_CON_14_ATI)); - rb_define_const(module, "GL_CON_15_ATI", INT2NUM(GL_CON_15_ATI)); - rb_define_const(module, "GL_CON_16_ATI", INT2NUM(GL_CON_16_ATI)); - rb_define_const(module, "GL_CON_17_ATI", INT2NUM(GL_CON_17_ATI)); - rb_define_const(module, "GL_CON_18_ATI", INT2NUM(GL_CON_18_ATI)); - rb_define_const(module, "GL_CON_19_ATI", INT2NUM(GL_CON_19_ATI)); - rb_define_const(module, "GL_CON_1_ATI", INT2NUM(GL_CON_1_ATI)); - rb_define_const(module, "GL_CON_20_ATI", INT2NUM(GL_CON_20_ATI)); - rb_define_const(module, "GL_CON_21_ATI", INT2NUM(GL_CON_21_ATI)); - rb_define_const(module, "GL_CON_22_ATI", INT2NUM(GL_CON_22_ATI)); - rb_define_const(module, "GL_CON_23_ATI", INT2NUM(GL_CON_23_ATI)); - rb_define_const(module, "GL_CON_24_ATI", INT2NUM(GL_CON_24_ATI)); - rb_define_const(module, "GL_CON_25_ATI", INT2NUM(GL_CON_25_ATI)); - rb_define_const(module, "GL_CON_26_ATI", INT2NUM(GL_CON_26_ATI)); - rb_define_const(module, "GL_CON_27_ATI", INT2NUM(GL_CON_27_ATI)); - rb_define_const(module, "GL_CON_28_ATI", INT2NUM(GL_CON_28_ATI)); - rb_define_const(module, "GL_CON_29_ATI", INT2NUM(GL_CON_29_ATI)); - rb_define_const(module, "GL_CON_2_ATI", INT2NUM(GL_CON_2_ATI)); - rb_define_const(module, "GL_CON_30_ATI", INT2NUM(GL_CON_30_ATI)); - rb_define_const(module, "GL_CON_31_ATI", INT2NUM(GL_CON_31_ATI)); - rb_define_const(module, "GL_CON_3_ATI", INT2NUM(GL_CON_3_ATI)); - rb_define_const(module, "GL_CON_4_ATI", INT2NUM(GL_CON_4_ATI)); - rb_define_const(module, "GL_CON_5_ATI", INT2NUM(GL_CON_5_ATI)); - rb_define_const(module, "GL_CON_6_ATI", INT2NUM(GL_CON_6_ATI)); - rb_define_const(module, "GL_CON_7_ATI", INT2NUM(GL_CON_7_ATI)); - rb_define_const(module, "GL_CON_8_ATI", INT2NUM(GL_CON_8_ATI)); - rb_define_const(module, "GL_CON_9_ATI", INT2NUM(GL_CON_9_ATI)); - rb_define_const(module, "GL_CONSERVE_MEMORY_HINT_PGI", INT2NUM(GL_CONSERVE_MEMORY_HINT_PGI)); - rb_define_const(module, "GL_CONSTANT_ALPHA_EXT", INT2NUM(GL_CONSTANT_ALPHA_EXT)); - rb_define_const(module, "GL_CONSTANT_ALPHA", INT2NUM(GL_CONSTANT_ALPHA)); - rb_define_const(module, "GL_CONSTANT_ARB", INT2NUM(GL_CONSTANT_ARB)); - rb_define_const(module, "GL_CONSTANT_ATTENUATION", INT2NUM(GL_CONSTANT_ATTENUATION)); - rb_define_const(module, "GL_CONSTANT_BORDER_HP", INT2NUM(GL_CONSTANT_BORDER_HP)); - rb_define_const(module, "GL_CONSTANT_BORDER", INT2NUM(GL_CONSTANT_BORDER)); - rb_define_const(module, "GL_CONSTANT_COLOR0_NV", INT2NUM(GL_CONSTANT_COLOR0_NV)); - rb_define_const(module, "GL_CONSTANT_COLOR1_NV", INT2NUM(GL_CONSTANT_COLOR1_NV)); - rb_define_const(module, "GL_CONSTANT_COLOR_EXT", INT2NUM(GL_CONSTANT_COLOR_EXT)); - rb_define_const(module, "GL_CONSTANT_COLOR", INT2NUM(GL_CONSTANT_COLOR)); - rb_define_const(module, "GL_CONSTANT_EXT", INT2NUM(GL_CONSTANT_EXT)); - rb_define_const(module, "GL_CONSTANT", INT2NUM(GL_CONSTANT)); - rb_define_const(module, "GL_CONST_EYE_NV", INT2NUM(GL_CONST_EYE_NV)); - rb_define_const(module, "GL_CONVOLUTION_1D_EXT", INT2NUM(GL_CONVOLUTION_1D_EXT)); - rb_define_const(module, "GL_CONVOLUTION_1D", INT2NUM(GL_CONVOLUTION_1D)); - rb_define_const(module, "GL_CONVOLUTION_2D_EXT", INT2NUM(GL_CONVOLUTION_2D_EXT)); - rb_define_const(module, "GL_CONVOLUTION_2D", INT2NUM(GL_CONVOLUTION_2D)); - rb_define_const(module, "GL_CONVOLUTION_BORDER_COLOR_HP", INT2NUM(GL_CONVOLUTION_BORDER_COLOR_HP)); - rb_define_const(module, "GL_CONVOLUTION_BORDER_COLOR", INT2NUM(GL_CONVOLUTION_BORDER_COLOR)); - rb_define_const(module, "GL_CONVOLUTION_BORDER_MODE_EXT", INT2NUM(GL_CONVOLUTION_BORDER_MODE_EXT)); - rb_define_const(module, "GL_CONVOLUTION_BORDER_MODE", INT2NUM(GL_CONVOLUTION_BORDER_MODE)); - rb_define_const(module, "GL_CONVOLUTION_FILTER_BIAS_EXT", INT2NUM(GL_CONVOLUTION_FILTER_BIAS_EXT)); - rb_define_const(module, "GL_CONVOLUTION_FILTER_BIAS", INT2NUM(GL_CONVOLUTION_FILTER_BIAS)); - rb_define_const(module, "GL_CONVOLUTION_FILTER_SCALE_EXT", INT2NUM(GL_CONVOLUTION_FILTER_SCALE_EXT)); - rb_define_const(module, "GL_CONVOLUTION_FILTER_SCALE", INT2NUM(GL_CONVOLUTION_FILTER_SCALE)); - rb_define_const(module, "GL_CONVOLUTION_FORMAT_EXT", INT2NUM(GL_CONVOLUTION_FORMAT_EXT)); - rb_define_const(module, "GL_CONVOLUTION_FORMAT", INT2NUM(GL_CONVOLUTION_FORMAT)); - rb_define_const(module, "GL_CONVOLUTION_HEIGHT_EXT", INT2NUM(GL_CONVOLUTION_HEIGHT_EXT)); - rb_define_const(module, "GL_CONVOLUTION_HEIGHT", INT2NUM(GL_CONVOLUTION_HEIGHT)); - rb_define_const(module, "GL_CONVOLUTION_HINT_SGIX", INT2NUM(GL_CONVOLUTION_HINT_SGIX)); - rb_define_const(module, "GL_CONVOLUTION_WIDTH_EXT", INT2NUM(GL_CONVOLUTION_WIDTH_EXT)); - rb_define_const(module, "GL_CONVOLUTION_WIDTH", INT2NUM(GL_CONVOLUTION_WIDTH)); - rb_define_const(module, "GL_COORD_REPLACE_ARB", INT2NUM(GL_COORD_REPLACE_ARB)); - rb_define_const(module, "GL_COORD_REPLACE", INT2NUM(GL_COORD_REPLACE)); - rb_define_const(module, "GL_COORD_REPLACE_NV", INT2NUM(GL_COORD_REPLACE_NV)); - rb_define_const(module, "GL_COPY", INT2NUM(GL_COPY)); - rb_define_const(module, "GL_COPY_INVERTED", INT2NUM(GL_COPY_INVERTED)); - rb_define_const(module, "GL_COPY_PIXEL_TOKEN", INT2NUM(GL_COPY_PIXEL_TOKEN)); - rb_define_const(module, "GL_CUBIC_EXT", INT2NUM(GL_CUBIC_EXT)); - rb_define_const(module, "GL_CUBIC_HP", INT2NUM(GL_CUBIC_HP)); - rb_define_const(module, "GL_CULL_FACE", INT2NUM(GL_CULL_FACE)); - rb_define_const(module, "GL_CULL_FACE_MODE", INT2NUM(GL_CULL_FACE_MODE)); - rb_define_const(module, "GL_CULL_FRAGMENT_NV", INT2NUM(GL_CULL_FRAGMENT_NV)); - rb_define_const(module, "GL_CULL_MODES_NV", INT2NUM(GL_CULL_MODES_NV)); - rb_define_const(module, "GL_CULL_VERTEX_EXT", INT2NUM(GL_CULL_VERTEX_EXT)); - rb_define_const(module, "GL_CULL_VERTEX_EYE_POSITION_EXT", INT2NUM(GL_CULL_VERTEX_EYE_POSITION_EXT)); - rb_define_const(module, "GL_CULL_VERTEX_IBM", INT2NUM(GL_CULL_VERTEX_IBM)); - rb_define_const(module, "GL_CULL_VERTEX_OBJECT_POSITION_EXT", INT2NUM(GL_CULL_VERTEX_OBJECT_POSITION_EXT)); - rb_define_const(module, "GL_CURRENT_ATTRIB_NV", INT2NUM(GL_CURRENT_ATTRIB_NV)); - rb_define_const(module, "GL_CURRENT_BINORMAL_EXT", INT2NUM(GL_CURRENT_BINORMAL_EXT)); - rb_define_const(module, "GL_CURRENT_BIT", INT2NUM(GL_CURRENT_BIT)); - rb_define_const(module, "GL_CURRENT_COLOR", INT2NUM(GL_CURRENT_COLOR)); - rb_define_const(module, "GL_CURRENT_FOG_COORDINATE_EXT", INT2NUM(GL_CURRENT_FOG_COORDINATE_EXT)); - rb_define_const(module, "GL_CURRENT_FOG_COORDINATE", INT2NUM(GL_CURRENT_FOG_COORDINATE)); - rb_define_const(module, "GL_CURRENT_FOG_COORD", INT2NUM(GL_CURRENT_FOG_COORD)); - rb_define_const(module, "GL_CURRENT_INDEX", INT2NUM(GL_CURRENT_INDEX)); - rb_define_const(module, "GL_CURRENT_MATRIX_ARB", INT2NUM(GL_CURRENT_MATRIX_ARB)); - rb_define_const(module, "GL_CURRENT_MATRIX_INDEX_ARB", INT2NUM(GL_CURRENT_MATRIX_INDEX_ARB)); - rb_define_const(module, "GL_CURRENT_MATRIX_NV", INT2NUM(GL_CURRENT_MATRIX_NV)); - rb_define_const(module, "GL_CURRENT_MATRIX_STACK_DEPTH_ARB", INT2NUM(GL_CURRENT_MATRIX_STACK_DEPTH_ARB)); - rb_define_const(module, "GL_CURRENT_MATRIX_STACK_DEPTH_NV", INT2NUM(GL_CURRENT_MATRIX_STACK_DEPTH_NV)); - rb_define_const(module, "GL_CURRENT_NORMAL", INT2NUM(GL_CURRENT_NORMAL)); - rb_define_const(module, "GL_CURRENT_OCCLUSION_QUERY_ID_NV", INT2NUM(GL_CURRENT_OCCLUSION_QUERY_ID_NV)); - rb_define_const(module, "GL_CURRENT_PALETTE_MATRIX_ARB", INT2NUM(GL_CURRENT_PALETTE_MATRIX_ARB)); - rb_define_const(module, "GL_CURRENT_PROGRAM", INT2NUM(GL_CURRENT_PROGRAM)); - rb_define_const(module, "GL_CURRENT_QUERY_ARB", INT2NUM(GL_CURRENT_QUERY_ARB)); - rb_define_const(module, "GL_CURRENT_QUERY", INT2NUM(GL_CURRENT_QUERY)); - rb_define_const(module, "GL_CURRENT_RASTER_COLOR", INT2NUM(GL_CURRENT_RASTER_COLOR)); - rb_define_const(module, "GL_CURRENT_RASTER_DISTANCE", INT2NUM(GL_CURRENT_RASTER_DISTANCE)); - rb_define_const(module, "GL_CURRENT_RASTER_INDEX", INT2NUM(GL_CURRENT_RASTER_INDEX)); - rb_define_const(module, "GL_CURRENT_RASTER_NORMAL_SGIX", INT2NUM(GL_CURRENT_RASTER_NORMAL_SGIX)); - rb_define_const(module, "GL_CURRENT_RASTER_POSITION", INT2NUM(GL_CURRENT_RASTER_POSITION)); - rb_define_const(module, "GL_CURRENT_RASTER_POSITION_VALID", INT2NUM(GL_CURRENT_RASTER_POSITION_VALID)); - rb_define_const(module, "GL_CURRENT_RASTER_SECONDARY_COLOR", INT2NUM(GL_CURRENT_RASTER_SECONDARY_COLOR)); - rb_define_const(module, "GL_CURRENT_RASTER_TEXTURE_COORDS", INT2NUM(GL_CURRENT_RASTER_TEXTURE_COORDS)); - rb_define_const(module, "GL_CURRENT_SECONDARY_COLOR_EXT", INT2NUM(GL_CURRENT_SECONDARY_COLOR_EXT)); - rb_define_const(module, "GL_CURRENT_SECONDARY_COLOR", INT2NUM(GL_CURRENT_SECONDARY_COLOR)); - rb_define_const(module, "GL_CURRENT_TANGENT_EXT", INT2NUM(GL_CURRENT_TANGENT_EXT)); - rb_define_const(module, "GL_CURRENT_TEXTURE_COORDS", INT2NUM(GL_CURRENT_TEXTURE_COORDS)); - rb_define_const(module, "GL_CURRENT_VERTEX_ATTRIB_ARB", INT2NUM(GL_CURRENT_VERTEX_ATTRIB_ARB)); - rb_define_const(module, "GL_CURRENT_VERTEX_ATTRIB", INT2NUM(GL_CURRENT_VERTEX_ATTRIB)); - rb_define_const(module, "GL_CURRENT_VERTEX_EXT", INT2NUM(GL_CURRENT_VERTEX_EXT)); - rb_define_const(module, "GL_CURRENT_VERTEX_WEIGHT_EXT", INT2NUM(GL_CURRENT_VERTEX_WEIGHT_EXT)); - rb_define_const(module, "GL_CURRENT_WEIGHT_ARB", INT2NUM(GL_CURRENT_WEIGHT_ARB)); - rb_define_const(module, "GL_CW", INT2NUM(GL_CW)); - rb_define_const(module, "GL_DECAL", INT2NUM(GL_DECAL)); - rb_define_const(module, "GL_DECR", INT2NUM(GL_DECR)); - rb_define_const(module, "GL_DECR_WRAP_EXT", INT2NUM(GL_DECR_WRAP_EXT)); - rb_define_const(module, "GL_DECR_WRAP", INT2NUM(GL_DECR_WRAP)); - rb_define_const(module, "GL_DEFORMATIONS_MASK_SGIX", INT2NUM(GL_DEFORMATIONS_MASK_SGIX)); - rb_define_const(module, "GL_DELETE_STATUS", INT2NUM(GL_DELETE_STATUS)); - rb_define_const(module, "GL_DEPENDENT_AR_TEXTURE_2D_NV", INT2NUM(GL_DEPENDENT_AR_TEXTURE_2D_NV)); - rb_define_const(module, "GL_DEPENDENT_GB_TEXTURE_2D_NV", INT2NUM(GL_DEPENDENT_GB_TEXTURE_2D_NV)); - rb_define_const(module, "GL_DEPENDENT_HILO_TEXTURE_2D_NV", INT2NUM(GL_DEPENDENT_HILO_TEXTURE_2D_NV)); - rb_define_const(module, "GL_DEPENDENT_RGB_TEXTURE_3D_NV", INT2NUM(GL_DEPENDENT_RGB_TEXTURE_3D_NV)); - rb_define_const(module, "GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV", INT2NUM(GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV)); - rb_define_const(module, "GL_DEPTH24_STENCIL8_EXT", INT2NUM(GL_DEPTH24_STENCIL8_EXT)); - rb_define_const(module, "GL_DEPTH_ATTACHMENT_EXT", INT2NUM(GL_DEPTH_ATTACHMENT_EXT)); - rb_define_const(module, "GL_DEPTH_BIAS", INT2NUM(GL_DEPTH_BIAS)); - rb_define_const(module, "GL_DEPTH_BITS", INT2NUM(GL_DEPTH_BITS)); - rb_define_const(module, "GL_DEPTH_BOUNDS_EXT", INT2NUM(GL_DEPTH_BOUNDS_EXT)); - rb_define_const(module, "GL_DEPTH_BOUNDS_TEST_EXT", INT2NUM(GL_DEPTH_BOUNDS_TEST_EXT)); - rb_define_const(module, "GL_DEPTH_BUFFER_BIT", INT2NUM(GL_DEPTH_BUFFER_BIT)); - rb_define_const(module, "GL_DEPTH_CLAMP_NV", INT2NUM(GL_DEPTH_CLAMP_NV)); - rb_define_const(module, "GL_DEPTH_CLEAR_VALUE", INT2NUM(GL_DEPTH_CLEAR_VALUE)); - rb_define_const(module, "GL_DEPTH_COMPONENT16_ARB", INT2NUM(GL_DEPTH_COMPONENT16_ARB)); - rb_define_const(module, "GL_DEPTH_COMPONENT16", INT2NUM(GL_DEPTH_COMPONENT16)); - rb_define_const(module, "GL_DEPTH_COMPONENT16_SGIX", INT2NUM(GL_DEPTH_COMPONENT16_SGIX)); - rb_define_const(module, "GL_DEPTH_COMPONENT24_ARB", INT2NUM(GL_DEPTH_COMPONENT24_ARB)); - rb_define_const(module, "GL_DEPTH_COMPONENT24", INT2NUM(GL_DEPTH_COMPONENT24)); - rb_define_const(module, "GL_DEPTH_COMPONENT24_SGIX", INT2NUM(GL_DEPTH_COMPONENT24_SGIX)); - rb_define_const(module, "GL_DEPTH_COMPONENT32_ARB", INT2NUM(GL_DEPTH_COMPONENT32_ARB)); - rb_define_const(module, "GL_DEPTH_COMPONENT32", INT2NUM(GL_DEPTH_COMPONENT32)); - rb_define_const(module, "GL_DEPTH_COMPONENT32_SGIX", INT2NUM(GL_DEPTH_COMPONENT32_SGIX)); - rb_define_const(module, "GL_DEPTH_COMPONENT", INT2NUM(GL_DEPTH_COMPONENT)); - rb_define_const(module, "GL_DEPTH_FUNC", INT2NUM(GL_DEPTH_FUNC)); - rb_define_const(module, "GL_DEPTH", INT2NUM(GL_DEPTH)); - rb_define_const(module, "GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX", INT2NUM(GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX)); - rb_define_const(module, "GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX", INT2NUM(GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX)); - rb_define_const(module, "GL_DEPTH_PASS_INSTRUMENT_SGIX", INT2NUM(GL_DEPTH_PASS_INSTRUMENT_SGIX)); - rb_define_const(module, "GL_DEPTH_RANGE", INT2NUM(GL_DEPTH_RANGE)); - rb_define_const(module, "GL_DEPTH_SCALE", INT2NUM(GL_DEPTH_SCALE)); - rb_define_const(module, "GL_DEPTH_STENCIL_EXT", INT2NUM(GL_DEPTH_STENCIL_EXT)); - rb_define_const(module, "GL_DEPTH_STENCIL_NV", INT2NUM(GL_DEPTH_STENCIL_NV)); - rb_define_const(module, "GL_DEPTH_STENCIL_TO_BGRA_NV", INT2NUM(GL_DEPTH_STENCIL_TO_BGRA_NV)); - rb_define_const(module, "GL_DEPTH_STENCIL_TO_RGBA_NV", INT2NUM(GL_DEPTH_STENCIL_TO_RGBA_NV)); - rb_define_const(module, "GL_DEPTH_TEST", INT2NUM(GL_DEPTH_TEST)); - rb_define_const(module, "GL_DEPTH_TEXTURE_MODE_ARB", INT2NUM(GL_DEPTH_TEXTURE_MODE_ARB)); - rb_define_const(module, "GL_DEPTH_TEXTURE_MODE", INT2NUM(GL_DEPTH_TEXTURE_MODE)); - rb_define_const(module, "GL_DEPTH_WRITEMASK", INT2NUM(GL_DEPTH_WRITEMASK)); - rb_define_const(module, "GL_DETAIL_TEXTURE_2D_BINDING_SGIS", INT2NUM(GL_DETAIL_TEXTURE_2D_BINDING_SGIS)); - rb_define_const(module, "GL_DETAIL_TEXTURE_2D_SGIS", INT2NUM(GL_DETAIL_TEXTURE_2D_SGIS)); - rb_define_const(module, "GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS", INT2NUM(GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS)); - rb_define_const(module, "GL_DETAIL_TEXTURE_LEVEL_SGIS", INT2NUM(GL_DETAIL_TEXTURE_LEVEL_SGIS)); - rb_define_const(module, "GL_DETAIL_TEXTURE_MODE_SGIS", INT2NUM(GL_DETAIL_TEXTURE_MODE_SGIS)); - rb_define_const(module, "GL_DIFFUSE", INT2NUM(GL_DIFFUSE)); - rb_define_const(module, "GL_DISCARD_ATI", INT2NUM(GL_DISCARD_ATI)); - rb_define_const(module, "GL_DISCARD_NV", INT2NUM(GL_DISCARD_NV)); - rb_define_const(module, "GL_DISTANCE_ATTENUATION_EXT", INT2NUM(GL_DISTANCE_ATTENUATION_EXT)); - rb_define_const(module, "GL_DISTANCE_ATTENUATION_SGIS", INT2NUM(GL_DISTANCE_ATTENUATION_SGIS)); - rb_define_const(module, "GL_DITHER", INT2NUM(GL_DITHER)); - rb_define_const(module, "GL_DOMAIN", INT2NUM(GL_DOMAIN)); - rb_define_const(module, "GL_DONT_CARE", INT2NUM(GL_DONT_CARE)); - rb_define_const(module, "GL_DOT2_ADD_ATI", INT2NUM(GL_DOT2_ADD_ATI)); - rb_define_const(module, "GL_DOT3_ATI", INT2NUM(GL_DOT3_ATI)); - rb_define_const(module, "GL_DOT3_RGBA_ARB", INT2NUM(GL_DOT3_RGBA_ARB)); - rb_define_const(module, "GL_DOT3_RGBA_EXT", INT2NUM(GL_DOT3_RGBA_EXT)); - rb_define_const(module, "GL_DOT3_RGBA", INT2NUM(GL_DOT3_RGBA)); - rb_define_const(module, "GL_DOT3_RGB_ARB", INT2NUM(GL_DOT3_RGB_ARB)); - rb_define_const(module, "GL_DOT3_RGB_EXT", INT2NUM(GL_DOT3_RGB_EXT)); - rb_define_const(module, "GL_DOT3_RGB", INT2NUM(GL_DOT3_RGB)); - rb_define_const(module, "GL_DOT4_ATI", INT2NUM(GL_DOT4_ATI)); - rb_define_const(module, "GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV", INT2NUM(GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV)); - rb_define_const(module, "GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV", INT2NUM(GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV)); - rb_define_const(module, "GL_DOT_PRODUCT_DEPTH_REPLACE_NV", INT2NUM(GL_DOT_PRODUCT_DEPTH_REPLACE_NV)); - rb_define_const(module, "GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV", INT2NUM(GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV)); - rb_define_const(module, "GL_DOT_PRODUCT_NV", INT2NUM(GL_DOT_PRODUCT_NV)); - rb_define_const(module, "GL_DOT_PRODUCT_PASS_THROUGH_NV", INT2NUM(GL_DOT_PRODUCT_PASS_THROUGH_NV)); - rb_define_const(module, "GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV", INT2NUM(GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV)); - rb_define_const(module, "GL_DOT_PRODUCT_TEXTURE_1D_NV", INT2NUM(GL_DOT_PRODUCT_TEXTURE_1D_NV)); - rb_define_const(module, "GL_DOT_PRODUCT_TEXTURE_2D_NV", INT2NUM(GL_DOT_PRODUCT_TEXTURE_2D_NV)); - rb_define_const(module, "GL_DOT_PRODUCT_TEXTURE_3D_NV", INT2NUM(GL_DOT_PRODUCT_TEXTURE_3D_NV)); - rb_define_const(module, "GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV", INT2NUM(GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV)); - rb_define_const(module, "GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV", INT2NUM(GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV)); - rb_define_const(module, "GL_DOUBLEBUFFER", INT2NUM(GL_DOUBLEBUFFER)); - rb_define_const(module, "GL_DOUBLE_EXT", INT2NUM(GL_DOUBLE_EXT)); - rb_define_const(module, "GL_DOUBLE", INT2NUM(GL_DOUBLE)); - rb_define_const(module, "GL_DRAW_BUFFER0_ARB", INT2NUM(GL_DRAW_BUFFER0_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER0_ATI", INT2NUM(GL_DRAW_BUFFER0_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER0", INT2NUM(GL_DRAW_BUFFER0)); - rb_define_const(module, "GL_DRAW_BUFFER10_ARB", INT2NUM(GL_DRAW_BUFFER10_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER10_ATI", INT2NUM(GL_DRAW_BUFFER10_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER10", INT2NUM(GL_DRAW_BUFFER10)); - rb_define_const(module, "GL_DRAW_BUFFER11_ARB", INT2NUM(GL_DRAW_BUFFER11_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER11_ATI", INT2NUM(GL_DRAW_BUFFER11_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER11", INT2NUM(GL_DRAW_BUFFER11)); - rb_define_const(module, "GL_DRAW_BUFFER12_ARB", INT2NUM(GL_DRAW_BUFFER12_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER12_ATI", INT2NUM(GL_DRAW_BUFFER12_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER12", INT2NUM(GL_DRAW_BUFFER12)); - rb_define_const(module, "GL_DRAW_BUFFER13_ARB", INT2NUM(GL_DRAW_BUFFER13_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER13_ATI", INT2NUM(GL_DRAW_BUFFER13_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER13", INT2NUM(GL_DRAW_BUFFER13)); - rb_define_const(module, "GL_DRAW_BUFFER14_ARB", INT2NUM(GL_DRAW_BUFFER14_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER14_ATI", INT2NUM(GL_DRAW_BUFFER14_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER14", INT2NUM(GL_DRAW_BUFFER14)); - rb_define_const(module, "GL_DRAW_BUFFER15_ARB", INT2NUM(GL_DRAW_BUFFER15_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER15_ATI", INT2NUM(GL_DRAW_BUFFER15_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER15", INT2NUM(GL_DRAW_BUFFER15)); - rb_define_const(module, "GL_DRAW_BUFFER1_ARB", INT2NUM(GL_DRAW_BUFFER1_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER1_ATI", INT2NUM(GL_DRAW_BUFFER1_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER1", INT2NUM(GL_DRAW_BUFFER1)); - rb_define_const(module, "GL_DRAW_BUFFER2_ARB", INT2NUM(GL_DRAW_BUFFER2_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER2_ATI", INT2NUM(GL_DRAW_BUFFER2_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER2", INT2NUM(GL_DRAW_BUFFER2)); - rb_define_const(module, "GL_DRAW_BUFFER3_ARB", INT2NUM(GL_DRAW_BUFFER3_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER3_ATI", INT2NUM(GL_DRAW_BUFFER3_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER3", INT2NUM(GL_DRAW_BUFFER3)); - rb_define_const(module, "GL_DRAW_BUFFER4_ARB", INT2NUM(GL_DRAW_BUFFER4_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER4_ATI", INT2NUM(GL_DRAW_BUFFER4_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER4", INT2NUM(GL_DRAW_BUFFER4)); - rb_define_const(module, "GL_DRAW_BUFFER5_ARB", INT2NUM(GL_DRAW_BUFFER5_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER5_ATI", INT2NUM(GL_DRAW_BUFFER5_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER5", INT2NUM(GL_DRAW_BUFFER5)); - rb_define_const(module, "GL_DRAW_BUFFER6_ARB", INT2NUM(GL_DRAW_BUFFER6_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER6_ATI", INT2NUM(GL_DRAW_BUFFER6_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER6", INT2NUM(GL_DRAW_BUFFER6)); - rb_define_const(module, "GL_DRAW_BUFFER7_ARB", INT2NUM(GL_DRAW_BUFFER7_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER7_ATI", INT2NUM(GL_DRAW_BUFFER7_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER7", INT2NUM(GL_DRAW_BUFFER7)); - rb_define_const(module, "GL_DRAW_BUFFER8_ARB", INT2NUM(GL_DRAW_BUFFER8_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER8_ATI", INT2NUM(GL_DRAW_BUFFER8_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER8", INT2NUM(GL_DRAW_BUFFER8)); - rb_define_const(module, "GL_DRAW_BUFFER9_ARB", INT2NUM(GL_DRAW_BUFFER9_ARB)); - rb_define_const(module, "GL_DRAW_BUFFER9_ATI", INT2NUM(GL_DRAW_BUFFER9_ATI)); - rb_define_const(module, "GL_DRAW_BUFFER9", INT2NUM(GL_DRAW_BUFFER9)); - rb_define_const(module, "GL_DRAW_BUFFER", INT2NUM(GL_DRAW_BUFFER)); - rb_define_const(module, "GL_DRAW_FRAMEBUFFER_BINDING_EXT", INT2NUM(GL_DRAW_FRAMEBUFFER_BINDING_EXT)); - rb_define_const(module, "GL_DRAW_FRAMEBUFFER_EXT", INT2NUM(GL_DRAW_FRAMEBUFFER_EXT)); - rb_define_const(module, "GL_DRAW_PIXELS_APPLE", INT2NUM(GL_DRAW_PIXELS_APPLE)); - rb_define_const(module, "GL_DRAW_PIXEL_TOKEN", INT2NUM(GL_DRAW_PIXEL_TOKEN)); - rb_define_const(module, "GL_DS_BIAS_NV", INT2NUM(GL_DS_BIAS_NV)); - rb_define_const(module, "GL_DSDT8_MAG8_INTENSITY8_NV", INT2NUM(GL_DSDT8_MAG8_INTENSITY8_NV)); - rb_define_const(module, "GL_DSDT8_MAG8_NV", INT2NUM(GL_DSDT8_MAG8_NV)); - rb_define_const(module, "GL_DSDT8_NV", INT2NUM(GL_DSDT8_NV)); - rb_define_const(module, "GL_DSDT_MAG_INTENSITY_NV", INT2NUM(GL_DSDT_MAG_INTENSITY_NV)); - rb_define_const(module, "GL_DSDT_MAG_NV", INT2NUM(GL_DSDT_MAG_NV)); - rb_define_const(module, "GL_DSDT_MAG_VIB_NV", INT2NUM(GL_DSDT_MAG_VIB_NV)); - rb_define_const(module, "GL_DSDT_NV", INT2NUM(GL_DSDT_NV)); - rb_define_const(module, "GL_DS_SCALE_NV", INT2NUM(GL_DS_SCALE_NV)); - rb_define_const(module, "GL_DST_ALPHA", INT2NUM(GL_DST_ALPHA)); - rb_define_const(module, "GL_DST_COLOR", INT2NUM(GL_DST_COLOR)); - rb_define_const(module, "GL_DT_BIAS_NV", INT2NUM(GL_DT_BIAS_NV)); - rb_define_const(module, "GL_DT_SCALE_NV", INT2NUM(GL_DT_SCALE_NV)); - rb_define_const(module, "GL_DU8DV8_ATI", INT2NUM(GL_DU8DV8_ATI)); - rb_define_const(module, "GL_DUAL_ALPHA12_SGIS", INT2NUM(GL_DUAL_ALPHA12_SGIS)); - rb_define_const(module, "GL_DUAL_ALPHA16_SGIS", INT2NUM(GL_DUAL_ALPHA16_SGIS)); - rb_define_const(module, "GL_DUAL_ALPHA4_SGIS", INT2NUM(GL_DUAL_ALPHA4_SGIS)); - rb_define_const(module, "GL_DUAL_ALPHA8_SGIS", INT2NUM(GL_DUAL_ALPHA8_SGIS)); - rb_define_const(module, "GL_DUAL_INTENSITY12_SGIS", INT2NUM(GL_DUAL_INTENSITY12_SGIS)); - rb_define_const(module, "GL_DUAL_INTENSITY16_SGIS", INT2NUM(GL_DUAL_INTENSITY16_SGIS)); - rb_define_const(module, "GL_DUAL_INTENSITY4_SGIS", INT2NUM(GL_DUAL_INTENSITY4_SGIS)); - rb_define_const(module, "GL_DUAL_INTENSITY8_SGIS", INT2NUM(GL_DUAL_INTENSITY8_SGIS)); - rb_define_const(module, "GL_DUAL_LUMINANCE12_SGIS", INT2NUM(GL_DUAL_LUMINANCE12_SGIS)); - rb_define_const(module, "GL_DUAL_LUMINANCE16_SGIS", INT2NUM(GL_DUAL_LUMINANCE16_SGIS)); - rb_define_const(module, "GL_DUAL_LUMINANCE4_SGIS", INT2NUM(GL_DUAL_LUMINANCE4_SGIS)); - rb_define_const(module, "GL_DUAL_LUMINANCE8_SGIS", INT2NUM(GL_DUAL_LUMINANCE8_SGIS)); - rb_define_const(module, "GL_DUAL_LUMINANCE_ALPHA4_SGIS", INT2NUM(GL_DUAL_LUMINANCE_ALPHA4_SGIS)); - rb_define_const(module, "GL_DUAL_LUMINANCE_ALPHA8_SGIS", INT2NUM(GL_DUAL_LUMINANCE_ALPHA8_SGIS)); - rb_define_const(module, "GL_DUAL_TEXTURE_SELECT_SGIS", INT2NUM(GL_DUAL_TEXTURE_SELECT_SGIS)); - rb_define_const(module, "GL_DUDV_ATI", INT2NUM(GL_DUDV_ATI)); - rb_define_const(module, "GL_DYNAMIC_ATI", INT2NUM(GL_DYNAMIC_ATI)); - rb_define_const(module, "GL_DYNAMIC_COPY_ARB", INT2NUM(GL_DYNAMIC_COPY_ARB)); - rb_define_const(module, "GL_DYNAMIC_COPY", INT2NUM(GL_DYNAMIC_COPY)); - rb_define_const(module, "GL_DYNAMIC_DRAW_ARB", INT2NUM(GL_DYNAMIC_DRAW_ARB)); - rb_define_const(module, "GL_DYNAMIC_DRAW", INT2NUM(GL_DYNAMIC_DRAW)); - rb_define_const(module, "GL_DYNAMIC_READ_ARB", INT2NUM(GL_DYNAMIC_READ_ARB)); - rb_define_const(module, "GL_DYNAMIC_READ", INT2NUM(GL_DYNAMIC_READ)); - rb_define_const(module, "GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB", INT2NUM(GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB)); - rb_define_const(module, "GL_EDGE_FLAG_ARRAY_BUFFER_BINDING", INT2NUM(GL_EDGE_FLAG_ARRAY_BUFFER_BINDING)); - rb_define_const(module, "GL_EDGE_FLAG_ARRAY_COUNT_EXT", INT2NUM(GL_EDGE_FLAG_ARRAY_COUNT_EXT)); - rb_define_const(module, "GL_EDGE_FLAG_ARRAY_EXT", INT2NUM(GL_EDGE_FLAG_ARRAY_EXT)); - rb_define_const(module, "GL_EDGE_FLAG_ARRAY", INT2NUM(GL_EDGE_FLAG_ARRAY)); - rb_define_const(module, "GL_EDGE_FLAG_ARRAY_LIST_IBM", INT2NUM(GL_EDGE_FLAG_ARRAY_LIST_IBM)); - rb_define_const(module, "GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM", INT2NUM(GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM)); - rb_define_const(module, "GL_EDGE_FLAG_ARRAY_POINTER_EXT", INT2NUM(GL_EDGE_FLAG_ARRAY_POINTER_EXT)); - rb_define_const(module, "GL_EDGE_FLAG_ARRAY_POINTER", INT2NUM(GL_EDGE_FLAG_ARRAY_POINTER)); - rb_define_const(module, "GL_EDGE_FLAG_ARRAY_STRIDE_EXT", INT2NUM(GL_EDGE_FLAG_ARRAY_STRIDE_EXT)); - rb_define_const(module, "GL_EDGE_FLAG_ARRAY_STRIDE", INT2NUM(GL_EDGE_FLAG_ARRAY_STRIDE)); - rb_define_const(module, "GL_EDGEFLAG_BIT_PGI", INT2NUM(GL_EDGEFLAG_BIT_PGI)); - rb_define_const(module, "GL_EDGE_FLAG", INT2NUM(GL_EDGE_FLAG)); - rb_define_const(module, "GL_EIGHTH_BIT_ATI", INT2NUM(GL_EIGHTH_BIT_ATI)); - rb_define_const(module, "GL_ELEMENT_ARRAY_APPLE", INT2NUM(GL_ELEMENT_ARRAY_APPLE)); - rb_define_const(module, "GL_ELEMENT_ARRAY_ATI", INT2NUM(GL_ELEMENT_ARRAY_ATI)); - rb_define_const(module, "GL_ELEMENT_ARRAY_BUFFER_ARB", INT2NUM(GL_ELEMENT_ARRAY_BUFFER_ARB)); - rb_define_const(module, "GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB", INT2NUM(GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB)); - rb_define_const(module, "GL_ELEMENT_ARRAY_BUFFER_BINDING", INT2NUM(GL_ELEMENT_ARRAY_BUFFER_BINDING)); - rb_define_const(module, "GL_ELEMENT_ARRAY_BUFFER", INT2NUM(GL_ELEMENT_ARRAY_BUFFER)); - rb_define_const(module, "GL_ELEMENT_ARRAY_POINTER_APPLE", INT2NUM(GL_ELEMENT_ARRAY_POINTER_APPLE)); - rb_define_const(module, "GL_ELEMENT_ARRAY_POINTER_ATI", INT2NUM(GL_ELEMENT_ARRAY_POINTER_ATI)); - rb_define_const(module, "GL_ELEMENT_ARRAY_TYPE_APPLE", INT2NUM(GL_ELEMENT_ARRAY_TYPE_APPLE)); - rb_define_const(module, "GL_ELEMENT_ARRAY_TYPE_ATI", INT2NUM(GL_ELEMENT_ARRAY_TYPE_ATI)); - rb_define_const(module, "GL_EMBOSS_CONSTANT_NV", INT2NUM(GL_EMBOSS_CONSTANT_NV)); - rb_define_const(module, "GL_EMBOSS_LIGHT_NV", INT2NUM(GL_EMBOSS_LIGHT_NV)); - rb_define_const(module, "GL_EMBOSS_MAP_NV", INT2NUM(GL_EMBOSS_MAP_NV)); - rb_define_const(module, "GL_EMISSION", INT2NUM(GL_EMISSION)); - rb_define_const(module, "GL_ENABLE_BIT", INT2NUM(GL_ENABLE_BIT)); - rb_define_const(module, "GL_EQUAL", INT2NUM(GL_EQUAL)); - rb_define_const(module, "GL_EQUIV", INT2NUM(GL_EQUIV)); - rb_define_const(module, "GL_E_TIMES_F_NV", INT2NUM(GL_E_TIMES_F_NV)); - rb_define_const(module, "GL_EVAL_2D_NV", INT2NUM(GL_EVAL_2D_NV)); - rb_define_const(module, "GL_EVAL_BIT", INT2NUM(GL_EVAL_BIT)); - rb_define_const(module, "GL_EVAL_FRACTIONAL_TESSELLATION_NV", INT2NUM(GL_EVAL_FRACTIONAL_TESSELLATION_NV)); - rb_define_const(module, "GL_EVAL_TRIANGULAR_2D_NV", INT2NUM(GL_EVAL_TRIANGULAR_2D_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB0_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB0_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB10_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB10_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB11_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB11_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB12_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB12_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB13_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB13_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB14_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB14_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB15_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB15_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB1_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB1_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB2_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB2_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB3_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB3_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB4_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB4_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB5_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB5_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB6_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB6_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB7_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB7_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB8_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB8_NV)); - rb_define_const(module, "GL_EVAL_VERTEX_ATTRIB9_NV", INT2NUM(GL_EVAL_VERTEX_ATTRIB9_NV)); - rb_define_const(module, "GL_EXP2", INT2NUM(GL_EXP2)); - rb_define_const(module, "GL_EXPAND_NEGATE_NV", INT2NUM(GL_EXPAND_NEGATE_NV)); - rb_define_const(module, "GL_EXPAND_NORMAL_NV", INT2NUM(GL_EXPAND_NORMAL_NV)); - rb_define_const(module, "GL_EXP", INT2NUM(GL_EXP)); - rb_define_const(module, "GL_EXT_abgr", INT2NUM(GL_EXT_abgr)); - rb_define_const(module, "GL_EXT_blend_color", INT2NUM(GL_EXT_blend_color)); - rb_define_const(module, "GL_EXT_blend_logic_op", INT2NUM(GL_EXT_blend_logic_op)); - rb_define_const(module, "GL_EXT_blend_minmax", INT2NUM(GL_EXT_blend_minmax)); - rb_define_const(module, "GL_EXT_blend_subtract", INT2NUM(GL_EXT_blend_subtract)); - rb_define_const(module, "GL_EXT_cmyka", INT2NUM(GL_EXT_cmyka)); - rb_define_const(module, "GL_EXT_convolution", INT2NUM(GL_EXT_convolution)); - rb_define_const(module, "GL_EXT_copy_texture", INT2NUM(GL_EXT_copy_texture)); - rb_define_const(module, "GL_EXTENSIONS", INT2NUM(GL_EXTENSIONS)); - rb_define_const(module, "GL_EXT_histogram", INT2NUM(GL_EXT_histogram)); - rb_define_const(module, "GL_EXT_packed_pixels", INT2NUM(GL_EXT_packed_pixels)); - rb_define_const(module, "GL_EXT_point_parameters", INT2NUM(GL_EXT_point_parameters)); - rb_define_const(module, "GL_EXT_polygon_offset", INT2NUM(GL_EXT_polygon_offset)); - rb_define_const(module, "GL_EXT_rescale_normal", INT2NUM(GL_EXT_rescale_normal)); - rb_define_const(module, "GL_EXT_shared_texture_palette", INT2NUM(GL_EXT_shared_texture_palette)); - rb_define_const(module, "GL_EXT_subtexture", INT2NUM(GL_EXT_subtexture)); - rb_define_const(module, "GL_EXT_texture3D", INT2NUM(GL_EXT_texture3D)); - rb_define_const(module, "GL_EXT_texture", INT2NUM(GL_EXT_texture)); - rb_define_const(module, "GL_EXT_texture_object", INT2NUM(GL_EXT_texture_object)); - rb_define_const(module, "GL_EXT_vertex_array", INT2NUM(GL_EXT_vertex_array)); - rb_define_const(module, "GL_EYE_DISTANCE_TO_LINE_SGIS", INT2NUM(GL_EYE_DISTANCE_TO_LINE_SGIS)); - rb_define_const(module, "GL_EYE_DISTANCE_TO_POINT_SGIS", INT2NUM(GL_EYE_DISTANCE_TO_POINT_SGIS)); - rb_define_const(module, "GL_EYE_LINEAR", INT2NUM(GL_EYE_LINEAR)); - rb_define_const(module, "GL_EYE_LINE_SGIS", INT2NUM(GL_EYE_LINE_SGIS)); - rb_define_const(module, "GL_EYE_PLANE_ABSOLUTE_NV", INT2NUM(GL_EYE_PLANE_ABSOLUTE_NV)); - rb_define_const(module, "GL_EYE_PLANE", INT2NUM(GL_EYE_PLANE)); - rb_define_const(module, "GL_EYE_POINT_SGIS", INT2NUM(GL_EYE_POINT_SGIS)); - rb_define_const(module, "GL_EYE_RADIAL_NV", INT2NUM(GL_EYE_RADIAL_NV)); - rb_define_const(module, "GL_FALSE", INT2NUM(GL_FALSE)); - rb_define_const(module, "GL_FASTEST", INT2NUM(GL_FASTEST)); - rb_define_const(module, "GL_FEEDBACK_BUFFER_POINTER", INT2NUM(GL_FEEDBACK_BUFFER_POINTER)); - rb_define_const(module, "GL_FEEDBACK_BUFFER_SIZE", INT2NUM(GL_FEEDBACK_BUFFER_SIZE)); - rb_define_const(module, "GL_FEEDBACK_BUFFER_TYPE", INT2NUM(GL_FEEDBACK_BUFFER_TYPE)); - rb_define_const(module, "GL_FEEDBACK", INT2NUM(GL_FEEDBACK)); - rb_define_const(module, "GL_FENCE_APPLE", INT2NUM(GL_FENCE_APPLE)); - rb_define_const(module, "GL_FENCE_CONDITION_NV", INT2NUM(GL_FENCE_CONDITION_NV)); - rb_define_const(module, "GL_FENCE_STATUS_NV", INT2NUM(GL_FENCE_STATUS_NV)); - rb_define_const(module, "GL_FILL", INT2NUM(GL_FILL)); - rb_define_const(module, "GL_FILTER4_SGIS", INT2NUM(GL_FILTER4_SGIS)); - rb_define_const(module, "GL_FIXED_ONLY_ARB", INT2NUM(GL_FIXED_ONLY_ARB)); - rb_define_const(module, "GL_FLAT", INT2NUM(GL_FLAT)); - rb_define_const(module, "GL_FLOAT_CLEAR_COLOR_VALUE_NV", INT2NUM(GL_FLOAT_CLEAR_COLOR_VALUE_NV)); - rb_define_const(module, "GL_FLOAT", INT2NUM(GL_FLOAT)); - rb_define_const(module, "GL_FLOAT_MAT2_ARB", INT2NUM(GL_FLOAT_MAT2_ARB)); - rb_define_const(module, "GL_FLOAT_MAT2", INT2NUM(GL_FLOAT_MAT2)); - rb_define_const(module, "GL_FLOAT_MAT2x3", INT2NUM(GL_FLOAT_MAT2x3)); - rb_define_const(module, "GL_FLOAT_MAT2x4", INT2NUM(GL_FLOAT_MAT2x4)); - rb_define_const(module, "GL_FLOAT_MAT3_ARB", INT2NUM(GL_FLOAT_MAT3_ARB)); - rb_define_const(module, "GL_FLOAT_MAT3", INT2NUM(GL_FLOAT_MAT3)); - rb_define_const(module, "GL_FLOAT_MAT3x2", INT2NUM(GL_FLOAT_MAT3x2)); - rb_define_const(module, "GL_FLOAT_MAT3x4", INT2NUM(GL_FLOAT_MAT3x4)); - rb_define_const(module, "GL_FLOAT_MAT4_ARB", INT2NUM(GL_FLOAT_MAT4_ARB)); - rb_define_const(module, "GL_FLOAT_MAT4", INT2NUM(GL_FLOAT_MAT4)); - rb_define_const(module, "GL_FLOAT_MAT4x2", INT2NUM(GL_FLOAT_MAT4x2)); - rb_define_const(module, "GL_FLOAT_MAT4x3", INT2NUM(GL_FLOAT_MAT4x3)); - rb_define_const(module, "GL_FLOAT_R16_NV", INT2NUM(GL_FLOAT_R16_NV)); - rb_define_const(module, "GL_FLOAT_R32_NV", INT2NUM(GL_FLOAT_R32_NV)); - rb_define_const(module, "GL_FLOAT_RG16_NV", INT2NUM(GL_FLOAT_RG16_NV)); - rb_define_const(module, "GL_FLOAT_RG32_NV", INT2NUM(GL_FLOAT_RG32_NV)); - rb_define_const(module, "GL_FLOAT_RGB16_NV", INT2NUM(GL_FLOAT_RGB16_NV)); - rb_define_const(module, "GL_FLOAT_RGB32_NV", INT2NUM(GL_FLOAT_RGB32_NV)); - rb_define_const(module, "GL_FLOAT_RGBA16_NV", INT2NUM(GL_FLOAT_RGBA16_NV)); - rb_define_const(module, "GL_FLOAT_RGBA32_NV", INT2NUM(GL_FLOAT_RGBA32_NV)); - rb_define_const(module, "GL_FLOAT_RGBA_MODE_NV", INT2NUM(GL_FLOAT_RGBA_MODE_NV)); - rb_define_const(module, "GL_FLOAT_RGBA_NV", INT2NUM(GL_FLOAT_RGBA_NV)); - rb_define_const(module, "GL_FLOAT_RGB_NV", INT2NUM(GL_FLOAT_RGB_NV)); - rb_define_const(module, "GL_FLOAT_RG_NV", INT2NUM(GL_FLOAT_RG_NV)); - rb_define_const(module, "GL_FLOAT_R_NV", INT2NUM(GL_FLOAT_R_NV)); - rb_define_const(module, "GL_FLOAT_VEC2_ARB", INT2NUM(GL_FLOAT_VEC2_ARB)); - rb_define_const(module, "GL_FLOAT_VEC2", INT2NUM(GL_FLOAT_VEC2)); - rb_define_const(module, "GL_FLOAT_VEC3_ARB", INT2NUM(GL_FLOAT_VEC3_ARB)); - rb_define_const(module, "GL_FLOAT_VEC3", INT2NUM(GL_FLOAT_VEC3)); - rb_define_const(module, "GL_FLOAT_VEC4_ARB", INT2NUM(GL_FLOAT_VEC4_ARB)); - rb_define_const(module, "GL_FLOAT_VEC4", INT2NUM(GL_FLOAT_VEC4)); - rb_define_const(module, "GL_FOG_BIT", INT2NUM(GL_FOG_BIT)); - rb_define_const(module, "GL_FOG_COLOR", INT2NUM(GL_FOG_COLOR)); - rb_define_const(module, "GL_FOG_COORD_ARRAY_BUFFER_BINDING", INT2NUM(GL_FOG_COORD_ARRAY_BUFFER_BINDING)); - rb_define_const(module, "GL_FOG_COORD_ARRAY", INT2NUM(GL_FOG_COORD_ARRAY)); - rb_define_const(module, "GL_FOG_COORD_ARRAY_POINTER", INT2NUM(GL_FOG_COORD_ARRAY_POINTER)); - rb_define_const(module, "GL_FOG_COORD_ARRAY_STRIDE", INT2NUM(GL_FOG_COORD_ARRAY_STRIDE)); - rb_define_const(module, "GL_FOG_COORD_ARRAY_TYPE", INT2NUM(GL_FOG_COORD_ARRAY_TYPE)); - rb_define_const(module, "GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB", INT2NUM(GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB)); - rb_define_const(module, "GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING", INT2NUM(GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING)); - rb_define_const(module, "GL_FOG_COORDINATE_ARRAY_EXT", INT2NUM(GL_FOG_COORDINATE_ARRAY_EXT)); - rb_define_const(module, "GL_FOG_COORDINATE_ARRAY", INT2NUM(GL_FOG_COORDINATE_ARRAY)); - rb_define_const(module, "GL_FOG_COORDINATE_ARRAY_LIST_IBM", INT2NUM(GL_FOG_COORDINATE_ARRAY_LIST_IBM)); - rb_define_const(module, "GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM", INT2NUM(GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM)); - rb_define_const(module, "GL_FOG_COORDINATE_ARRAY_POINTER_EXT", INT2NUM(GL_FOG_COORDINATE_ARRAY_POINTER_EXT)); - rb_define_const(module, "GL_FOG_COORDINATE_ARRAY_POINTER", INT2NUM(GL_FOG_COORDINATE_ARRAY_POINTER)); - rb_define_const(module, "GL_FOG_COORDINATE_ARRAY_STRIDE_EXT", INT2NUM(GL_FOG_COORDINATE_ARRAY_STRIDE_EXT)); - rb_define_const(module, "GL_FOG_COORDINATE_ARRAY_STRIDE", INT2NUM(GL_FOG_COORDINATE_ARRAY_STRIDE)); - rb_define_const(module, "GL_FOG_COORDINATE_ARRAY_TYPE_EXT", INT2NUM(GL_FOG_COORDINATE_ARRAY_TYPE_EXT)); - rb_define_const(module, "GL_FOG_COORDINATE_ARRAY_TYPE", INT2NUM(GL_FOG_COORDINATE_ARRAY_TYPE)); - rb_define_const(module, "GL_FOG_COORDINATE_EXT", INT2NUM(GL_FOG_COORDINATE_EXT)); - rb_define_const(module, "GL_FOG_COORDINATE", INT2NUM(GL_FOG_COORDINATE)); - rb_define_const(module, "GL_FOG_COORDINATE_SOURCE_EXT", INT2NUM(GL_FOG_COORDINATE_SOURCE_EXT)); - rb_define_const(module, "GL_FOG_COORDINATE_SOURCE", INT2NUM(GL_FOG_COORDINATE_SOURCE)); - rb_define_const(module, "GL_FOG_COORD", INT2NUM(GL_FOG_COORD)); - rb_define_const(module, "GL_FOG_COORD_SRC", INT2NUM(GL_FOG_COORD_SRC)); - rb_define_const(module, "GL_FOG_DENSITY", INT2NUM(GL_FOG_DENSITY)); - rb_define_const(module, "GL_FOG_DISTANCE_MODE_NV", INT2NUM(GL_FOG_DISTANCE_MODE_NV)); - rb_define_const(module, "GL_FOG_END", INT2NUM(GL_FOG_END)); - rb_define_const(module, "GL_FOG_FACTOR_TO_ALPHA_SGIX", INT2NUM(GL_FOG_FACTOR_TO_ALPHA_SGIX)); - rb_define_const(module, "GL_FOG_FUNC_POINTS_SGIS", INT2NUM(GL_FOG_FUNC_POINTS_SGIS)); - rb_define_const(module, "GL_FOG_FUNC_SGIS", INT2NUM(GL_FOG_FUNC_SGIS)); - rb_define_const(module, "GL_FOG_HINT", INT2NUM(GL_FOG_HINT)); - rb_define_const(module, "GL_FOG_INDEX", INT2NUM(GL_FOG_INDEX)); - rb_define_const(module, "GL_FOG", INT2NUM(GL_FOG)); - rb_define_const(module, "GL_FOG_MODE", INT2NUM(GL_FOG_MODE)); - rb_define_const(module, "GL_FOG_OFFSET_SGIX", INT2NUM(GL_FOG_OFFSET_SGIX)); - rb_define_const(module, "GL_FOG_OFFSET_VALUE_SGIX", INT2NUM(GL_FOG_OFFSET_VALUE_SGIX)); - rb_define_const(module, "GL_FOG_SCALE_SGIX", INT2NUM(GL_FOG_SCALE_SGIX)); - rb_define_const(module, "GL_FOG_SCALE_VALUE_SGIX", INT2NUM(GL_FOG_SCALE_VALUE_SGIX)); - rb_define_const(module, "GL_FOG_SPECULAR_TEXTURE_WIN", INT2NUM(GL_FOG_SPECULAR_TEXTURE_WIN)); - rb_define_const(module, "GL_FOG_START", INT2NUM(GL_FOG_START)); - rb_define_const(module, "GL_FORCE_BLUE_TO_ONE_NV", INT2NUM(GL_FORCE_BLUE_TO_ONE_NV)); - rb_define_const(module, "GL_FORMAT_SUBSAMPLE_24_24_OML", INT2NUM(GL_FORMAT_SUBSAMPLE_24_24_OML)); - rb_define_const(module, "GL_FORMAT_SUBSAMPLE_244_244_OML", INT2NUM(GL_FORMAT_SUBSAMPLE_244_244_OML)); - rb_define_const(module, "GL_FRAGMENT_COLOR_EXT", INT2NUM(GL_FRAGMENT_COLOR_EXT)); - rb_define_const(module, "GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX", INT2NUM(GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX)); - rb_define_const(module, "GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX", INT2NUM(GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX)); - rb_define_const(module, "GL_FRAGMENT_COLOR_MATERIAL_SGIX", INT2NUM(GL_FRAGMENT_COLOR_MATERIAL_SGIX)); - rb_define_const(module, "GL_FRAGMENT_DEPTH_EXT", INT2NUM(GL_FRAGMENT_DEPTH_EXT)); - rb_define_const(module, "GL_FRAGMENT_DEPTH", INT2NUM(GL_FRAGMENT_DEPTH)); - rb_define_const(module, "GL_FRAGMENT_LIGHT0_SGIX", INT2NUM(GL_FRAGMENT_LIGHT0_SGIX)); - rb_define_const(module, "GL_FRAGMENT_LIGHT1_SGIX", INT2NUM(GL_FRAGMENT_LIGHT1_SGIX)); - rb_define_const(module, "GL_FRAGMENT_LIGHT2_SGIX", INT2NUM(GL_FRAGMENT_LIGHT2_SGIX)); - rb_define_const(module, "GL_FRAGMENT_LIGHT3_SGIX", INT2NUM(GL_FRAGMENT_LIGHT3_SGIX)); - rb_define_const(module, "GL_FRAGMENT_LIGHT4_SGIX", INT2NUM(GL_FRAGMENT_LIGHT4_SGIX)); - rb_define_const(module, "GL_FRAGMENT_LIGHT5_SGIX", INT2NUM(GL_FRAGMENT_LIGHT5_SGIX)); - rb_define_const(module, "GL_FRAGMENT_LIGHT6_SGIX", INT2NUM(GL_FRAGMENT_LIGHT6_SGIX)); - rb_define_const(module, "GL_FRAGMENT_LIGHT7_SGIX", INT2NUM(GL_FRAGMENT_LIGHT7_SGIX)); - rb_define_const(module, "GL_FRAGMENT_LIGHTING_SGIX", INT2NUM(GL_FRAGMENT_LIGHTING_SGIX)); - rb_define_const(module, "GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX", INT2NUM(GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX)); - rb_define_const(module, "GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX", INT2NUM(GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX)); - rb_define_const(module, "GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX", INT2NUM(GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX)); - rb_define_const(module, "GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX", INT2NUM(GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX)); - rb_define_const(module, "GL_FRAGMENT_MATERIAL_EXT", INT2NUM(GL_FRAGMENT_MATERIAL_EXT)); - rb_define_const(module, "GL_FRAGMENT_NORMAL_EXT", INT2NUM(GL_FRAGMENT_NORMAL_EXT)); - rb_define_const(module, "GL_FRAGMENT_PROGRAM_ARB", INT2NUM(GL_FRAGMENT_PROGRAM_ARB)); - rb_define_const(module, "GL_FRAGMENT_PROGRAM_BINDING_NV", INT2NUM(GL_FRAGMENT_PROGRAM_BINDING_NV)); - rb_define_const(module, "GL_FRAGMENT_PROGRAM_NV", INT2NUM(GL_FRAGMENT_PROGRAM_NV)); - rb_define_const(module, "GL_FRAGMENT_SHADER_ARB", INT2NUM(GL_FRAGMENT_SHADER_ARB)); - rb_define_const(module, "GL_FRAGMENT_SHADER_ATI", INT2NUM(GL_FRAGMENT_SHADER_ATI)); - rb_define_const(module, "GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB", INT2NUM(GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB)); - rb_define_const(module, "GL_FRAGMENT_SHADER_DERIVATIVE_HINT", INT2NUM(GL_FRAGMENT_SHADER_DERIVATIVE_HINT)); - rb_define_const(module, "GL_FRAGMENT_SHADER", INT2NUM(GL_FRAGMENT_SHADER)); - rb_define_const(module, "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT", INT2NUM(GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT", INT2NUM(GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT", INT2NUM(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT", INT2NUM(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT", INT2NUM(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_BINDING_EXT", INT2NUM(GL_FRAMEBUFFER_BINDING_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_COMPLETE_EXT", INT2NUM(GL_FRAMEBUFFER_COMPLETE_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_EXT", INT2NUM(GL_FRAMEBUFFER_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT", INT2NUM(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT", INT2NUM(GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT", INT2NUM(GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT", INT2NUM(GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT", INT2NUM(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT", INT2NUM(GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT", INT2NUM(GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT)); - rb_define_const(module, "GL_FRAMEBUFFER_UNSUPPORTED_EXT", INT2NUM(GL_FRAMEBUFFER_UNSUPPORTED_EXT)); - rb_define_const(module, "GL_FRAMEZOOM_FACTOR_SGIX", INT2NUM(GL_FRAMEZOOM_FACTOR_SGIX)); - rb_define_const(module, "GL_FRAMEZOOM_SGIX", INT2NUM(GL_FRAMEZOOM_SGIX)); - rb_define_const(module, "GL_FRONT_AND_BACK", INT2NUM(GL_FRONT_AND_BACK)); - rb_define_const(module, "GL_FRONT_FACE", INT2NUM(GL_FRONT_FACE)); - rb_define_const(module, "GL_FRONT", INT2NUM(GL_FRONT)); - rb_define_const(module, "GL_FRONT_LEFT", INT2NUM(GL_FRONT_LEFT)); - rb_define_const(module, "GL_FRONT_RIGHT", INT2NUM(GL_FRONT_RIGHT)); - rb_define_const(module, "GL_FULL_RANGE_EXT", INT2NUM(GL_FULL_RANGE_EXT)); - rb_define_const(module, "GL_FULL_STIPPLE_HINT_PGI", INT2NUM(GL_FULL_STIPPLE_HINT_PGI)); - rb_define_const(module, "GL_FUNC_ADD_EXT", INT2NUM(GL_FUNC_ADD_EXT)); - rb_define_const(module, "GL_FUNC_ADD", INT2NUM(GL_FUNC_ADD)); - rb_define_const(module, "GL_FUNC_REVERSE_SUBTRACT_EXT", INT2NUM(GL_FUNC_REVERSE_SUBTRACT_EXT)); - rb_define_const(module, "GL_FUNC_REVERSE_SUBTRACT", INT2NUM(GL_FUNC_REVERSE_SUBTRACT)); - rb_define_const(module, "GL_FUNC_SUBTRACT_EXT", INT2NUM(GL_FUNC_SUBTRACT_EXT)); - rb_define_const(module, "GL_FUNC_SUBTRACT", INT2NUM(GL_FUNC_SUBTRACT)); - rb_define_const(module, "GL_GENERATE_MIPMAP_HINT", INT2NUM(GL_GENERATE_MIPMAP_HINT)); - rb_define_const(module, "GL_GENERATE_MIPMAP_HINT_SGIS", INT2NUM(GL_GENERATE_MIPMAP_HINT_SGIS)); - rb_define_const(module, "GL_GENERATE_MIPMAP", INT2NUM(GL_GENERATE_MIPMAP)); - rb_define_const(module, "GL_GENERATE_MIPMAP_SGIS", INT2NUM(GL_GENERATE_MIPMAP_SGIS)); - rb_define_const(module, "GL_GEOMETRY_DEFORMATION_BIT_SGIX", INT2NUM(GL_GEOMETRY_DEFORMATION_BIT_SGIX)); - rb_define_const(module, "GL_GEOMETRY_DEFORMATION_SGIX", INT2NUM(GL_GEOMETRY_DEFORMATION_SGIX)); - rb_define_const(module, "GL_GEQUAL", INT2NUM(GL_GEQUAL)); - rb_define_const(module, "GL_GLOBAL_ALPHA_FACTOR_SUN", INT2NUM(GL_GLOBAL_ALPHA_FACTOR_SUN)); - rb_define_const(module, "GL_GLOBAL_ALPHA_SUN", INT2NUM(GL_GLOBAL_ALPHA_SUN)); - rb_define_const(module, "GL_GREATER", INT2NUM(GL_GREATER)); - rb_define_const(module, "GL_GREEN_BIAS", INT2NUM(GL_GREEN_BIAS)); - rb_define_const(module, "GL_GREEN_BIT_ATI", INT2NUM(GL_GREEN_BIT_ATI)); - rb_define_const(module, "GL_GREEN_BITS", INT2NUM(GL_GREEN_BITS)); - rb_define_const(module, "GL_GREEN", INT2NUM(GL_GREEN)); - rb_define_const(module, "GL_GREEN_MAX_CLAMP_INGR", INT2NUM(GL_GREEN_MAX_CLAMP_INGR)); - rb_define_const(module, "GL_GREEN_MIN_CLAMP_INGR", INT2NUM(GL_GREEN_MIN_CLAMP_INGR)); - rb_define_const(module, "GL_GREEN_SCALE", INT2NUM(GL_GREEN_SCALE)); - rb_define_const(module, "GL_HALF_BIAS_NEGATE_NV", INT2NUM(GL_HALF_BIAS_NEGATE_NV)); - rb_define_const(module, "GL_HALF_BIAS_NORMAL_NV", INT2NUM(GL_HALF_BIAS_NORMAL_NV)); - rb_define_const(module, "GL_HALF_BIT_ATI", INT2NUM(GL_HALF_BIT_ATI)); - rb_define_const(module, "GL_HALF_FLOAT_ARB", INT2NUM(GL_HALF_FLOAT_ARB)); - rb_define_const(module, "GL_HALF_FLOAT_NV", INT2NUM(GL_HALF_FLOAT_NV)); - rb_define_const(module, "GL_HI_BIAS_NV", INT2NUM(GL_HI_BIAS_NV)); - rb_define_const(module, "GL_HILO16_NV", INT2NUM(GL_HILO16_NV)); - rb_define_const(module, "GL_HILO8_NV", INT2NUM(GL_HILO8_NV)); - rb_define_const(module, "GL_HILO_NV", INT2NUM(GL_HILO_NV)); - rb_define_const(module, "GL_HINT_BIT", INT2NUM(GL_HINT_BIT)); - rb_define_const(module, "GL_HI_SCALE_NV", INT2NUM(GL_HI_SCALE_NV)); - rb_define_const(module, "GL_HISTOGRAM_ALPHA_SIZE_EXT", INT2NUM(GL_HISTOGRAM_ALPHA_SIZE_EXT)); - rb_define_const(module, "GL_HISTOGRAM_ALPHA_SIZE", INT2NUM(GL_HISTOGRAM_ALPHA_SIZE)); - rb_define_const(module, "GL_HISTOGRAM_BLUE_SIZE_EXT", INT2NUM(GL_HISTOGRAM_BLUE_SIZE_EXT)); - rb_define_const(module, "GL_HISTOGRAM_BLUE_SIZE", INT2NUM(GL_HISTOGRAM_BLUE_SIZE)); - rb_define_const(module, "GL_HISTOGRAM_EXT", INT2NUM(GL_HISTOGRAM_EXT)); - rb_define_const(module, "GL_HISTOGRAM_FORMAT_EXT", INT2NUM(GL_HISTOGRAM_FORMAT_EXT)); - rb_define_const(module, "GL_HISTOGRAM_FORMAT", INT2NUM(GL_HISTOGRAM_FORMAT)); - rb_define_const(module, "GL_HISTOGRAM_GREEN_SIZE_EXT", INT2NUM(GL_HISTOGRAM_GREEN_SIZE_EXT)); - rb_define_const(module, "GL_HISTOGRAM_GREEN_SIZE", INT2NUM(GL_HISTOGRAM_GREEN_SIZE)); - rb_define_const(module, "GL_HISTOGRAM", INT2NUM(GL_HISTOGRAM)); - rb_define_const(module, "GL_HISTOGRAM_LUMINANCE_SIZE_EXT", INT2NUM(GL_HISTOGRAM_LUMINANCE_SIZE_EXT)); - rb_define_const(module, "GL_HISTOGRAM_LUMINANCE_SIZE", INT2NUM(GL_HISTOGRAM_LUMINANCE_SIZE)); - rb_define_const(module, "GL_HISTOGRAM_RED_SIZE_EXT", INT2NUM(GL_HISTOGRAM_RED_SIZE_EXT)); - rb_define_const(module, "GL_HISTOGRAM_RED_SIZE", INT2NUM(GL_HISTOGRAM_RED_SIZE)); - rb_define_const(module, "GL_HISTOGRAM_SINK_EXT", INT2NUM(GL_HISTOGRAM_SINK_EXT)); - rb_define_const(module, "GL_HISTOGRAM_SINK", INT2NUM(GL_HISTOGRAM_SINK)); - rb_define_const(module, "GL_HISTOGRAM_WIDTH_EXT", INT2NUM(GL_HISTOGRAM_WIDTH_EXT)); - rb_define_const(module, "GL_HISTOGRAM_WIDTH", INT2NUM(GL_HISTOGRAM_WIDTH)); - rb_define_const(module, "GL_IDENTITY_NV", INT2NUM(GL_IDENTITY_NV)); - rb_define_const(module, "GL_IGNORE_BORDER_HP", INT2NUM(GL_IGNORE_BORDER_HP)); - rb_define_const(module, "GL_IMAGE_CUBIC_WEIGHT_HP", INT2NUM(GL_IMAGE_CUBIC_WEIGHT_HP)); - rb_define_const(module, "GL_IMAGE_MAG_FILTER_HP", INT2NUM(GL_IMAGE_MAG_FILTER_HP)); - rb_define_const(module, "GL_IMAGE_MIN_FILTER_HP", INT2NUM(GL_IMAGE_MIN_FILTER_HP)); - rb_define_const(module, "GL_IMAGE_ROTATE_ANGLE_HP", INT2NUM(GL_IMAGE_ROTATE_ANGLE_HP)); - rb_define_const(module, "GL_IMAGE_ROTATE_ORIGIN_X_HP", INT2NUM(GL_IMAGE_ROTATE_ORIGIN_X_HP)); - rb_define_const(module, "GL_IMAGE_ROTATE_ORIGIN_Y_HP", INT2NUM(GL_IMAGE_ROTATE_ORIGIN_Y_HP)); - rb_define_const(module, "GL_IMAGE_SCALE_X_HP", INT2NUM(GL_IMAGE_SCALE_X_HP)); - rb_define_const(module, "GL_IMAGE_SCALE_Y_HP", INT2NUM(GL_IMAGE_SCALE_Y_HP)); - rb_define_const(module, "GL_IMAGE_TRANSFORM_2D_HP", INT2NUM(GL_IMAGE_TRANSFORM_2D_HP)); - rb_define_const(module, "GL_IMAGE_TRANSLATE_X_HP", INT2NUM(GL_IMAGE_TRANSLATE_X_HP)); - rb_define_const(module, "GL_IMAGE_TRANSLATE_Y_HP", INT2NUM(GL_IMAGE_TRANSLATE_Y_HP)); - rb_define_const(module, "GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES", INT2NUM(GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES)); - rb_define_const(module, "GL_IMPLEMENTATION_COLOR_READ_TYPE_OES", INT2NUM(GL_IMPLEMENTATION_COLOR_READ_TYPE_OES)); - rb_define_const(module, "GL_INCR", INT2NUM(GL_INCR)); - rb_define_const(module, "GL_INCR_WRAP_EXT", INT2NUM(GL_INCR_WRAP_EXT)); - rb_define_const(module, "GL_INCR_WRAP", INT2NUM(GL_INCR_WRAP)); - rb_define_const(module, "GL_INDEX_ARRAY_BUFFER_BINDING_ARB", INT2NUM(GL_INDEX_ARRAY_BUFFER_BINDING_ARB)); - rb_define_const(module, "GL_INDEX_ARRAY_BUFFER_BINDING", INT2NUM(GL_INDEX_ARRAY_BUFFER_BINDING)); - rb_define_const(module, "GL_INDEX_ARRAY_COUNT_EXT", INT2NUM(GL_INDEX_ARRAY_COUNT_EXT)); - rb_define_const(module, "GL_INDEX_ARRAY_EXT", INT2NUM(GL_INDEX_ARRAY_EXT)); - rb_define_const(module, "GL_INDEX_ARRAY", INT2NUM(GL_INDEX_ARRAY)); - rb_define_const(module, "GL_INDEX_ARRAY_LIST_IBM", INT2NUM(GL_INDEX_ARRAY_LIST_IBM)); - rb_define_const(module, "GL_INDEX_ARRAY_LIST_STRIDE_IBM", INT2NUM(GL_INDEX_ARRAY_LIST_STRIDE_IBM)); - rb_define_const(module, "GL_INDEX_ARRAY_POINTER_EXT", INT2NUM(GL_INDEX_ARRAY_POINTER_EXT)); - rb_define_const(module, "GL_INDEX_ARRAY_POINTER", INT2NUM(GL_INDEX_ARRAY_POINTER)); - rb_define_const(module, "GL_INDEX_ARRAY_STRIDE_EXT", INT2NUM(GL_INDEX_ARRAY_STRIDE_EXT)); - rb_define_const(module, "GL_INDEX_ARRAY_STRIDE", INT2NUM(GL_INDEX_ARRAY_STRIDE)); - rb_define_const(module, "GL_INDEX_ARRAY_TYPE_EXT", INT2NUM(GL_INDEX_ARRAY_TYPE_EXT)); - rb_define_const(module, "GL_INDEX_ARRAY_TYPE", INT2NUM(GL_INDEX_ARRAY_TYPE)); - rb_define_const(module, "GL_INDEX_BIT_PGI", INT2NUM(GL_INDEX_BIT_PGI)); - rb_define_const(module, "GL_INDEX_BITS", INT2NUM(GL_INDEX_BITS)); - rb_define_const(module, "GL_INDEX_CLEAR_VALUE", INT2NUM(GL_INDEX_CLEAR_VALUE)); - rb_define_const(module, "GL_INDEX_LOGIC_OP", INT2NUM(GL_INDEX_LOGIC_OP)); - rb_define_const(module, "GL_INDEX_MATERIAL_EXT", INT2NUM(GL_INDEX_MATERIAL_EXT)); - rb_define_const(module, "GL_INDEX_MATERIAL_FACE_EXT", INT2NUM(GL_INDEX_MATERIAL_FACE_EXT)); - rb_define_const(module, "GL_INDEX_MATERIAL_PARAMETER_EXT", INT2NUM(GL_INDEX_MATERIAL_PARAMETER_EXT)); - rb_define_const(module, "GL_INDEX_MODE", INT2NUM(GL_INDEX_MODE)); - rb_define_const(module, "GL_INDEX_OFFSET", INT2NUM(GL_INDEX_OFFSET)); - rb_define_const(module, "GL_INDEX_SHIFT", INT2NUM(GL_INDEX_SHIFT)); - rb_define_const(module, "GL_INDEX_TEST_EXT", INT2NUM(GL_INDEX_TEST_EXT)); - rb_define_const(module, "GL_INDEX_TEST_FUNC_EXT", INT2NUM(GL_INDEX_TEST_FUNC_EXT)); - rb_define_const(module, "GL_INDEX_TEST_REF_EXT", INT2NUM(GL_INDEX_TEST_REF_EXT)); - rb_define_const(module, "GL_INDEX_WRITEMASK", INT2NUM(GL_INDEX_WRITEMASK)); - rb_define_const(module, "GL_INFO_LOG_LENGTH", INT2NUM(GL_INFO_LOG_LENGTH)); - rb_define_const(module, "GL_INSTRUMENT_BUFFER_POINTER_SGIX", INT2NUM(GL_INSTRUMENT_BUFFER_POINTER_SGIX)); - rb_define_const(module, "GL_INSTRUMENT_MEASUREMENTS_SGIX", INT2NUM(GL_INSTRUMENT_MEASUREMENTS_SGIX)); - rb_define_const(module, "GL_INTENSITY12_EXT", INT2NUM(GL_INTENSITY12_EXT)); - rb_define_const(module, "GL_INTENSITY12", INT2NUM(GL_INTENSITY12)); - rb_define_const(module, "GL_INTENSITY16_EXT", INT2NUM(GL_INTENSITY16_EXT)); - rb_define_const(module, "GL_INTENSITY16F_ARB", INT2NUM(GL_INTENSITY16F_ARB)); - rb_define_const(module, "GL_INTENSITY16", INT2NUM(GL_INTENSITY16)); - rb_define_const(module, "GL_INTENSITY32F_ARB", INT2NUM(GL_INTENSITY32F_ARB)); - rb_define_const(module, "GL_INTENSITY4_EXT", INT2NUM(GL_INTENSITY4_EXT)); - rb_define_const(module, "GL_INTENSITY4", INT2NUM(GL_INTENSITY4)); - rb_define_const(module, "GL_INTENSITY8_EXT", INT2NUM(GL_INTENSITY8_EXT)); - rb_define_const(module, "GL_INTENSITY8", INT2NUM(GL_INTENSITY8)); - rb_define_const(module, "GL_INTENSITY_EXT", INT2NUM(GL_INTENSITY_EXT)); - rb_define_const(module, "GL_INTENSITY_FLOAT16_ATI", INT2NUM(GL_INTENSITY_FLOAT16_ATI)); - rb_define_const(module, "GL_INTENSITY_FLOAT32_ATI", INT2NUM(GL_INTENSITY_FLOAT32_ATI)); - rb_define_const(module, "GL_INTENSITY", INT2NUM(GL_INTENSITY)); - rb_define_const(module, "GL_INTERLACE_OML", INT2NUM(GL_INTERLACE_OML)); - rb_define_const(module, "GL_INTERLACE_READ_INGR", INT2NUM(GL_INTERLACE_READ_INGR)); - rb_define_const(module, "GL_INTERLACE_READ_OML", INT2NUM(GL_INTERLACE_READ_OML)); - rb_define_const(module, "GL_INTERLACE_SGIX", INT2NUM(GL_INTERLACE_SGIX)); - rb_define_const(module, "GL_INTERPOLATE_ARB", INT2NUM(GL_INTERPOLATE_ARB)); - rb_define_const(module, "GL_INTERPOLATE_EXT", INT2NUM(GL_INTERPOLATE_EXT)); - rb_define_const(module, "GL_INTERPOLATE", INT2NUM(GL_INTERPOLATE)); - rb_define_const(module, "GL_INT", INT2NUM(GL_INT)); - rb_define_const(module, "GL_INT_VEC2_ARB", INT2NUM(GL_INT_VEC2_ARB)); - rb_define_const(module, "GL_INT_VEC2", INT2NUM(GL_INT_VEC2)); - rb_define_const(module, "GL_INT_VEC3_ARB", INT2NUM(GL_INT_VEC3_ARB)); - rb_define_const(module, "GL_INT_VEC3", INT2NUM(GL_INT_VEC3)); - rb_define_const(module, "GL_INT_VEC4_ARB", INT2NUM(GL_INT_VEC4_ARB)); - rb_define_const(module, "GL_INT_VEC4", INT2NUM(GL_INT_VEC4)); - rb_define_const(module, "GL_INVALID_ENUM", INT2NUM(GL_INVALID_ENUM)); - rb_define_const(module, "GL_INVALID_FRAMEBUFFER_OPERATION_EXT", INT2NUM(GL_INVALID_FRAMEBUFFER_OPERATION_EXT)); - rb_define_const(module, "GL_INVALID_OPERATION", INT2NUM(GL_INVALID_OPERATION)); - rb_define_const(module, "GL_INVALID_VALUE", INT2NUM(GL_INVALID_VALUE)); - rb_define_const(module, "GL_INVARIANT_DATATYPE_EXT", INT2NUM(GL_INVARIANT_DATATYPE_EXT)); - rb_define_const(module, "GL_INVARIANT_EXT", INT2NUM(GL_INVARIANT_EXT)); - rb_define_const(module, "GL_INVARIANT_VALUE_EXT", INT2NUM(GL_INVARIANT_VALUE_EXT)); - rb_define_const(module, "GL_INVERSE_NV", INT2NUM(GL_INVERSE_NV)); - rb_define_const(module, "GL_INVERSE_TRANSPOSE_NV", INT2NUM(GL_INVERSE_TRANSPOSE_NV)); - rb_define_const(module, "GL_INVERTED_SCREEN_W_REND", INT2NUM(GL_INVERTED_SCREEN_W_REND)); - rb_define_const(module, "GL_INVERT", INT2NUM(GL_INVERT)); - rb_define_const(module, "GL_IR_INSTRUMENT1_SGIX", INT2NUM(GL_IR_INSTRUMENT1_SGIX)); - rb_define_const(module, "GL_IUI_N3F_V2F_EXT", INT2NUM(GL_IUI_N3F_V2F_EXT)); - rb_define_const(module, "GL_IUI_N3F_V3F_EXT", INT2NUM(GL_IUI_N3F_V3F_EXT)); - rb_define_const(module, "GL_IUI_V2F_EXT", INT2NUM(GL_IUI_V2F_EXT)); - rb_define_const(module, "GL_IUI_V3F_EXT", INT2NUM(GL_IUI_V3F_EXT)); - rb_define_const(module, "GL_KEEP", INT2NUM(GL_KEEP)); - rb_define_const(module, "GL_LEFT", INT2NUM(GL_LEFT)); - rb_define_const(module, "GL_LEQUAL", INT2NUM(GL_LEQUAL)); - rb_define_const(module, "GL_LERP_ATI", INT2NUM(GL_LERP_ATI)); - rb_define_const(module, "GL_LESS", INT2NUM(GL_LESS)); - rb_define_const(module, "GL_LIGHT0", INT2NUM(GL_LIGHT0)); - rb_define_const(module, "GL_LIGHT1", INT2NUM(GL_LIGHT1)); - rb_define_const(module, "GL_LIGHT2", INT2NUM(GL_LIGHT2)); - rb_define_const(module, "GL_LIGHT3", INT2NUM(GL_LIGHT3)); - rb_define_const(module, "GL_LIGHT4", INT2NUM(GL_LIGHT4)); - rb_define_const(module, "GL_LIGHT5", INT2NUM(GL_LIGHT5)); - rb_define_const(module, "GL_LIGHT6", INT2NUM(GL_LIGHT6)); - rb_define_const(module, "GL_LIGHT7", INT2NUM(GL_LIGHT7)); - rb_define_const(module, "GL_LIGHT_ENV_MODE_SGIX", INT2NUM(GL_LIGHT_ENV_MODE_SGIX)); - rb_define_const(module, "GL_LIGHTING_BIT", INT2NUM(GL_LIGHTING_BIT)); - rb_define_const(module, "GL_LIGHTING", INT2NUM(GL_LIGHTING)); - rb_define_const(module, "GL_LIGHT_MODEL_AMBIENT", INT2NUM(GL_LIGHT_MODEL_AMBIENT)); - rb_define_const(module, "GL_LIGHT_MODEL_COLOR_CONTROL_EXT", INT2NUM(GL_LIGHT_MODEL_COLOR_CONTROL_EXT)); - rb_define_const(module, "GL_LIGHT_MODEL_COLOR_CONTROL", INT2NUM(GL_LIGHT_MODEL_COLOR_CONTROL)); - rb_define_const(module, "GL_LIGHT_MODEL_LOCAL_VIEWER", INT2NUM(GL_LIGHT_MODEL_LOCAL_VIEWER)); - rb_define_const(module, "GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE", INT2NUM(GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE)); - rb_define_const(module, "GL_LIGHT_MODEL_TWO_SIDE", INT2NUM(GL_LIGHT_MODEL_TWO_SIDE)); - rb_define_const(module, "GL_LINEAR_ATTENUATION", INT2NUM(GL_LINEAR_ATTENUATION)); - rb_define_const(module, "GL_LINEAR_CLIPMAP_LINEAR_SGIX", INT2NUM(GL_LINEAR_CLIPMAP_LINEAR_SGIX)); - rb_define_const(module, "GL_LINEAR_CLIPMAP_NEAREST_SGIX", INT2NUM(GL_LINEAR_CLIPMAP_NEAREST_SGIX)); - rb_define_const(module, "GL_LINEAR_DETAIL_ALPHA_SGIS", INT2NUM(GL_LINEAR_DETAIL_ALPHA_SGIS)); - rb_define_const(module, "GL_LINEAR_DETAIL_COLOR_SGIS", INT2NUM(GL_LINEAR_DETAIL_COLOR_SGIS)); - rb_define_const(module, "GL_LINEAR_DETAIL_SGIS", INT2NUM(GL_LINEAR_DETAIL_SGIS)); - rb_define_const(module, "GL_LINEAR", INT2NUM(GL_LINEAR)); - rb_define_const(module, "GL_LINEAR_MIPMAP_LINEAR", INT2NUM(GL_LINEAR_MIPMAP_LINEAR)); - rb_define_const(module, "GL_LINEAR_MIPMAP_NEAREST", INT2NUM(GL_LINEAR_MIPMAP_NEAREST)); - rb_define_const(module, "GL_LINEAR_SHARPEN_ALPHA_SGIS", INT2NUM(GL_LINEAR_SHARPEN_ALPHA_SGIS)); - rb_define_const(module, "GL_LINEAR_SHARPEN_COLOR_SGIS", INT2NUM(GL_LINEAR_SHARPEN_COLOR_SGIS)); - rb_define_const(module, "GL_LINEAR_SHARPEN_SGIS", INT2NUM(GL_LINEAR_SHARPEN_SGIS)); - rb_define_const(module, "GL_LINE_BIT", INT2NUM(GL_LINE_BIT)); - rb_define_const(module, "GL_LINE", INT2NUM(GL_LINE)); - rb_define_const(module, "GL_LINE_LOOP", INT2NUM(GL_LINE_LOOP)); - rb_define_const(module, "GL_LINE_RESET_TOKEN", INT2NUM(GL_LINE_RESET_TOKEN)); - rb_define_const(module, "GL_LINES", INT2NUM(GL_LINES)); - rb_define_const(module, "GL_LINE_SMOOTH_HINT", INT2NUM(GL_LINE_SMOOTH_HINT)); - rb_define_const(module, "GL_LINE_SMOOTH", INT2NUM(GL_LINE_SMOOTH)); - rb_define_const(module, "GL_LINE_STIPPLE", INT2NUM(GL_LINE_STIPPLE)); - rb_define_const(module, "GL_LINE_STIPPLE_PATTERN", INT2NUM(GL_LINE_STIPPLE_PATTERN)); - rb_define_const(module, "GL_LINE_STIPPLE_REPEAT", INT2NUM(GL_LINE_STIPPLE_REPEAT)); - rb_define_const(module, "GL_LINE_STRIP", INT2NUM(GL_LINE_STRIP)); - rb_define_const(module, "GL_LINE_TOKEN", INT2NUM(GL_LINE_TOKEN)); - rb_define_const(module, "GL_LINE_WIDTH_GRANULARITY", INT2NUM(GL_LINE_WIDTH_GRANULARITY)); - rb_define_const(module, "GL_LINE_WIDTH", INT2NUM(GL_LINE_WIDTH)); - rb_define_const(module, "GL_LINE_WIDTH_RANGE", INT2NUM(GL_LINE_WIDTH_RANGE)); - rb_define_const(module, "GL_LINK_STATUS", INT2NUM(GL_LINK_STATUS)); - rb_define_const(module, "GL_LIST_BASE", INT2NUM(GL_LIST_BASE)); - rb_define_const(module, "GL_LIST_BIT", INT2NUM(GL_LIST_BIT)); - rb_define_const(module, "GL_LIST_INDEX", INT2NUM(GL_LIST_INDEX)); - rb_define_const(module, "GL_LIST_MODE", INT2NUM(GL_LIST_MODE)); - rb_define_const(module, "GL_LIST_PRIORITY_SGIX", INT2NUM(GL_LIST_PRIORITY_SGIX)); - rb_define_const(module, "GL_LOAD", INT2NUM(GL_LOAD)); - rb_define_const(module, "GL_LO_BIAS_NV", INT2NUM(GL_LO_BIAS_NV)); - rb_define_const(module, "GL_LOCAL_CONSTANT_DATATYPE_EXT", INT2NUM(GL_LOCAL_CONSTANT_DATATYPE_EXT)); - rb_define_const(module, "GL_LOCAL_CONSTANT_EXT", INT2NUM(GL_LOCAL_CONSTANT_EXT)); - rb_define_const(module, "GL_LOCAL_CONSTANT_VALUE_EXT", INT2NUM(GL_LOCAL_CONSTANT_VALUE_EXT)); - rb_define_const(module, "GL_LOCAL_EXT", INT2NUM(GL_LOCAL_EXT)); - rb_define_const(module, "GL_LOGIC_OP", INT2NUM(GL_LOGIC_OP)); - rb_define_const(module, "GL_LOGIC_OP_MODE", INT2NUM(GL_LOGIC_OP_MODE)); - rb_define_const(module, "GL_LO_SCALE_NV", INT2NUM(GL_LO_SCALE_NV)); - rb_define_const(module, "GL_LOWER_LEFT", INT2NUM(GL_LOWER_LEFT)); - rb_define_const(module, "GL_LUMINANCE12_ALPHA12_EXT", INT2NUM(GL_LUMINANCE12_ALPHA12_EXT)); - rb_define_const(module, "GL_LUMINANCE12_ALPHA12", INT2NUM(GL_LUMINANCE12_ALPHA12)); - rb_define_const(module, "GL_LUMINANCE12_ALPHA4_EXT", INT2NUM(GL_LUMINANCE12_ALPHA4_EXT)); - rb_define_const(module, "GL_LUMINANCE12_ALPHA4", INT2NUM(GL_LUMINANCE12_ALPHA4)); - rb_define_const(module, "GL_LUMINANCE12_EXT", INT2NUM(GL_LUMINANCE12_EXT)); - rb_define_const(module, "GL_LUMINANCE12", INT2NUM(GL_LUMINANCE12)); - rb_define_const(module, "GL_LUMINANCE16_ALPHA16_EXT", INT2NUM(GL_LUMINANCE16_ALPHA16_EXT)); - rb_define_const(module, "GL_LUMINANCE16_ALPHA16", INT2NUM(GL_LUMINANCE16_ALPHA16)); - rb_define_const(module, "GL_LUMINANCE16_EXT", INT2NUM(GL_LUMINANCE16_EXT)); - rb_define_const(module, "GL_LUMINANCE16F_ARB", INT2NUM(GL_LUMINANCE16F_ARB)); - rb_define_const(module, "GL_LUMINANCE16", INT2NUM(GL_LUMINANCE16)); - rb_define_const(module, "GL_LUMINANCE32F_ARB", INT2NUM(GL_LUMINANCE32F_ARB)); - rb_define_const(module, "GL_LUMINANCE4_ALPHA4_EXT", INT2NUM(GL_LUMINANCE4_ALPHA4_EXT)); - rb_define_const(module, "GL_LUMINANCE4_ALPHA4", INT2NUM(GL_LUMINANCE4_ALPHA4)); - rb_define_const(module, "GL_LUMINANCE4_EXT", INT2NUM(GL_LUMINANCE4_EXT)); - rb_define_const(module, "GL_LUMINANCE4", INT2NUM(GL_LUMINANCE4)); - rb_define_const(module, "GL_LUMINANCE6_ALPHA2_EXT", INT2NUM(GL_LUMINANCE6_ALPHA2_EXT)); - rb_define_const(module, "GL_LUMINANCE6_ALPHA2", INT2NUM(GL_LUMINANCE6_ALPHA2)); - rb_define_const(module, "GL_LUMINANCE8_ALPHA8_EXT", INT2NUM(GL_LUMINANCE8_ALPHA8_EXT)); - rb_define_const(module, "GL_LUMINANCE8_ALPHA8", INT2NUM(GL_LUMINANCE8_ALPHA8)); - rb_define_const(module, "GL_LUMINANCE8_EXT", INT2NUM(GL_LUMINANCE8_EXT)); - rb_define_const(module, "GL_LUMINANCE8", INT2NUM(GL_LUMINANCE8)); - rb_define_const(module, "GL_LUMINANCE_ALPHA16F_ARB", INT2NUM(GL_LUMINANCE_ALPHA16F_ARB)); - rb_define_const(module, "GL_LUMINANCE_ALPHA32F_ARB", INT2NUM(GL_LUMINANCE_ALPHA32F_ARB)); - rb_define_const(module, "GL_LUMINANCE_ALPHA_FLOAT16_ATI", INT2NUM(GL_LUMINANCE_ALPHA_FLOAT16_ATI)); - rb_define_const(module, "GL_LUMINANCE_ALPHA_FLOAT32_ATI", INT2NUM(GL_LUMINANCE_ALPHA_FLOAT32_ATI)); - rb_define_const(module, "GL_LUMINANCE_ALPHA", INT2NUM(GL_LUMINANCE_ALPHA)); - rb_define_const(module, "GL_LUMINANCE_FLOAT16_ATI", INT2NUM(GL_LUMINANCE_FLOAT16_ATI)); - rb_define_const(module, "GL_LUMINANCE_FLOAT32_ATI", INT2NUM(GL_LUMINANCE_FLOAT32_ATI)); - rb_define_const(module, "GL_LUMINANCE", INT2NUM(GL_LUMINANCE)); - rb_define_const(module, "GL_MAD_ATI", INT2NUM(GL_MAD_ATI)); - rb_define_const(module, "GL_MAGNITUDE_BIAS_NV", INT2NUM(GL_MAGNITUDE_BIAS_NV)); - rb_define_const(module, "GL_MAGNITUDE_SCALE_NV", INT2NUM(GL_MAGNITUDE_SCALE_NV)); - rb_define_const(module, "GL_MAP1_BINORMAL_EXT", INT2NUM(GL_MAP1_BINORMAL_EXT)); - rb_define_const(module, "GL_MAP1_COLOR_4", INT2NUM(GL_MAP1_COLOR_4)); - rb_define_const(module, "GL_MAP1_GRID_DOMAIN", INT2NUM(GL_MAP1_GRID_DOMAIN)); - rb_define_const(module, "GL_MAP1_GRID_SEGMENTS", INT2NUM(GL_MAP1_GRID_SEGMENTS)); - rb_define_const(module, "GL_MAP1_INDEX", INT2NUM(GL_MAP1_INDEX)); - rb_define_const(module, "GL_MAP1_NORMAL", INT2NUM(GL_MAP1_NORMAL)); - rb_define_const(module, "GL_MAP1_TANGENT_EXT", INT2NUM(GL_MAP1_TANGENT_EXT)); - rb_define_const(module, "GL_MAP1_TEXTURE_COORD_1", INT2NUM(GL_MAP1_TEXTURE_COORD_1)); - rb_define_const(module, "GL_MAP1_TEXTURE_COORD_2", INT2NUM(GL_MAP1_TEXTURE_COORD_2)); - rb_define_const(module, "GL_MAP1_TEXTURE_COORD_3", INT2NUM(GL_MAP1_TEXTURE_COORD_3)); - rb_define_const(module, "GL_MAP1_TEXTURE_COORD_4", INT2NUM(GL_MAP1_TEXTURE_COORD_4)); - rb_define_const(module, "GL_MAP1_VERTEX_3", INT2NUM(GL_MAP1_VERTEX_3)); - rb_define_const(module, "GL_MAP1_VERTEX_4", INT2NUM(GL_MAP1_VERTEX_4)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB0_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB0_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB10_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB10_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB11_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB11_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB12_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB12_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB13_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB13_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB14_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB14_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB1_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB1_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB15_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB15_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB2_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB2_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB3_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB3_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB4_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB4_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB5_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB5_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB6_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB6_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB7_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB7_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB8_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB8_4_NV)); - rb_define_const(module, "GL_MAP1_VERTEX_ATTRIB9_4_NV", INT2NUM(GL_MAP1_VERTEX_ATTRIB9_4_NV)); - rb_define_const(module, "GL_MAP2_BINORMAL_EXT", INT2NUM(GL_MAP2_BINORMAL_EXT)); - rb_define_const(module, "GL_MAP2_COLOR_4", INT2NUM(GL_MAP2_COLOR_4)); - rb_define_const(module, "GL_MAP2_GRID_DOMAIN", INT2NUM(GL_MAP2_GRID_DOMAIN)); - rb_define_const(module, "GL_MAP2_GRID_SEGMENTS", INT2NUM(GL_MAP2_GRID_SEGMENTS)); - rb_define_const(module, "GL_MAP2_INDEX", INT2NUM(GL_MAP2_INDEX)); - rb_define_const(module, "GL_MAP2_NORMAL", INT2NUM(GL_MAP2_NORMAL)); - rb_define_const(module, "GL_MAP2_TANGENT_EXT", INT2NUM(GL_MAP2_TANGENT_EXT)); - rb_define_const(module, "GL_MAP2_TEXTURE_COORD_1", INT2NUM(GL_MAP2_TEXTURE_COORD_1)); - rb_define_const(module, "GL_MAP2_TEXTURE_COORD_2", INT2NUM(GL_MAP2_TEXTURE_COORD_2)); - rb_define_const(module, "GL_MAP2_TEXTURE_COORD_3", INT2NUM(GL_MAP2_TEXTURE_COORD_3)); - rb_define_const(module, "GL_MAP2_TEXTURE_COORD_4", INT2NUM(GL_MAP2_TEXTURE_COORD_4)); - rb_define_const(module, "GL_MAP2_VERTEX_3", INT2NUM(GL_MAP2_VERTEX_3)); - rb_define_const(module, "GL_MAP2_VERTEX_4", INT2NUM(GL_MAP2_VERTEX_4)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB0_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB0_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB10_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB10_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB11_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB11_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB12_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB12_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB13_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB13_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB14_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB14_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB1_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB1_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB15_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB15_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB2_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB2_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB3_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB3_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB4_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB4_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB5_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB5_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB6_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB6_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB7_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB7_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB8_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB8_4_NV)); - rb_define_const(module, "GL_MAP2_VERTEX_ATTRIB9_4_NV", INT2NUM(GL_MAP2_VERTEX_ATTRIB9_4_NV)); - rb_define_const(module, "GL_MAP_ATTRIB_U_ORDER_NV", INT2NUM(GL_MAP_ATTRIB_U_ORDER_NV)); - rb_define_const(module, "GL_MAP_ATTRIB_V_ORDER_NV", INT2NUM(GL_MAP_ATTRIB_V_ORDER_NV)); - rb_define_const(module, "GL_MAP_COLOR", INT2NUM(GL_MAP_COLOR)); - rb_define_const(module, "GL_MAP_STENCIL", INT2NUM(GL_MAP_STENCIL)); - rb_define_const(module, "GL_MAP_TESSELLATION_NV", INT2NUM(GL_MAP_TESSELLATION_NV)); - rb_define_const(module, "GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI", INT2NUM(GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI)); - rb_define_const(module, "GL_MAT_AMBIENT_BIT_PGI", INT2NUM(GL_MAT_AMBIENT_BIT_PGI)); - rb_define_const(module, "GL_MAT_COLOR_INDEXES_BIT_PGI", INT2NUM(GL_MAT_COLOR_INDEXES_BIT_PGI)); - rb_define_const(module, "GL_MAT_DIFFUSE_BIT_PGI", INT2NUM(GL_MAT_DIFFUSE_BIT_PGI)); - rb_define_const(module, "GL_MAT_EMISSION_BIT_PGI", INT2NUM(GL_MAT_EMISSION_BIT_PGI)); - rb_define_const(module, "GL_MATERIAL_SIDE_HINT_PGI", INT2NUM(GL_MATERIAL_SIDE_HINT_PGI)); - rb_define_const(module, "GL_MATRIX0_ARB", INT2NUM(GL_MATRIX0_ARB)); - rb_define_const(module, "GL_MATRIX0_NV", INT2NUM(GL_MATRIX0_NV)); - rb_define_const(module, "GL_MATRIX10_ARB", INT2NUM(GL_MATRIX10_ARB)); - rb_define_const(module, "GL_MATRIX11_ARB", INT2NUM(GL_MATRIX11_ARB)); - rb_define_const(module, "GL_MATRIX12_ARB", INT2NUM(GL_MATRIX12_ARB)); - rb_define_const(module, "GL_MATRIX13_ARB", INT2NUM(GL_MATRIX13_ARB)); - rb_define_const(module, "GL_MATRIX14_ARB", INT2NUM(GL_MATRIX14_ARB)); - rb_define_const(module, "GL_MATRIX15_ARB", INT2NUM(GL_MATRIX15_ARB)); - rb_define_const(module, "GL_MATRIX16_ARB", INT2NUM(GL_MATRIX16_ARB)); - rb_define_const(module, "GL_MATRIX17_ARB", INT2NUM(GL_MATRIX17_ARB)); - rb_define_const(module, "GL_MATRIX18_ARB", INT2NUM(GL_MATRIX18_ARB)); - rb_define_const(module, "GL_MATRIX19_ARB", INT2NUM(GL_MATRIX19_ARB)); - rb_define_const(module, "GL_MATRIX1_ARB", INT2NUM(GL_MATRIX1_ARB)); - rb_define_const(module, "GL_MATRIX1_NV", INT2NUM(GL_MATRIX1_NV)); - rb_define_const(module, "GL_MATRIX20_ARB", INT2NUM(GL_MATRIX20_ARB)); - rb_define_const(module, "GL_MATRIX21_ARB", INT2NUM(GL_MATRIX21_ARB)); - rb_define_const(module, "GL_MATRIX22_ARB", INT2NUM(GL_MATRIX22_ARB)); - rb_define_const(module, "GL_MATRIX23_ARB", INT2NUM(GL_MATRIX23_ARB)); - rb_define_const(module, "GL_MATRIX24_ARB", INT2NUM(GL_MATRIX24_ARB)); - rb_define_const(module, "GL_MATRIX25_ARB", INT2NUM(GL_MATRIX25_ARB)); - rb_define_const(module, "GL_MATRIX26_ARB", INT2NUM(GL_MATRIX26_ARB)); - rb_define_const(module, "GL_MATRIX27_ARB", INT2NUM(GL_MATRIX27_ARB)); - rb_define_const(module, "GL_MATRIX28_ARB", INT2NUM(GL_MATRIX28_ARB)); - rb_define_const(module, "GL_MATRIX29_ARB", INT2NUM(GL_MATRIX29_ARB)); - rb_define_const(module, "GL_MATRIX2_ARB", INT2NUM(GL_MATRIX2_ARB)); - rb_define_const(module, "GL_MATRIX2_NV", INT2NUM(GL_MATRIX2_NV)); - rb_define_const(module, "GL_MATRIX30_ARB", INT2NUM(GL_MATRIX30_ARB)); - rb_define_const(module, "GL_MATRIX31_ARB", INT2NUM(GL_MATRIX31_ARB)); - rb_define_const(module, "GL_MATRIX3_ARB", INT2NUM(GL_MATRIX3_ARB)); - rb_define_const(module, "GL_MATRIX3_NV", INT2NUM(GL_MATRIX3_NV)); - rb_define_const(module, "GL_MATRIX4_ARB", INT2NUM(GL_MATRIX4_ARB)); - rb_define_const(module, "GL_MATRIX4_NV", INT2NUM(GL_MATRIX4_NV)); - rb_define_const(module, "GL_MATRIX5_ARB", INT2NUM(GL_MATRIX5_ARB)); - rb_define_const(module, "GL_MATRIX5_NV", INT2NUM(GL_MATRIX5_NV)); - rb_define_const(module, "GL_MATRIX6_ARB", INT2NUM(GL_MATRIX6_ARB)); - rb_define_const(module, "GL_MATRIX6_NV", INT2NUM(GL_MATRIX6_NV)); - rb_define_const(module, "GL_MATRIX7_ARB", INT2NUM(GL_MATRIX7_ARB)); - rb_define_const(module, "GL_MATRIX7_NV", INT2NUM(GL_MATRIX7_NV)); - rb_define_const(module, "GL_MATRIX8_ARB", INT2NUM(GL_MATRIX8_ARB)); - rb_define_const(module, "GL_MATRIX9_ARB", INT2NUM(GL_MATRIX9_ARB)); - rb_define_const(module, "GL_MATRIX_EXT", INT2NUM(GL_MATRIX_EXT)); - rb_define_const(module, "GL_MATRIX_INDEX_ARRAY_ARB", INT2NUM(GL_MATRIX_INDEX_ARRAY_ARB)); - rb_define_const(module, "GL_MATRIX_INDEX_ARRAY_POINTER_ARB", INT2NUM(GL_MATRIX_INDEX_ARRAY_POINTER_ARB)); - rb_define_const(module, "GL_MATRIX_INDEX_ARRAY_SIZE_ARB", INT2NUM(GL_MATRIX_INDEX_ARRAY_SIZE_ARB)); - rb_define_const(module, "GL_MATRIX_INDEX_ARRAY_STRIDE_ARB", INT2NUM(GL_MATRIX_INDEX_ARRAY_STRIDE_ARB)); - rb_define_const(module, "GL_MATRIX_INDEX_ARRAY_TYPE_ARB", INT2NUM(GL_MATRIX_INDEX_ARRAY_TYPE_ARB)); - rb_define_const(module, "GL_MATRIX_MODE", INT2NUM(GL_MATRIX_MODE)); - rb_define_const(module, "GL_MATRIX_PALETTE_ARB", INT2NUM(GL_MATRIX_PALETTE_ARB)); - rb_define_const(module, "GL_MAT_SHININESS_BIT_PGI", INT2NUM(GL_MAT_SHININESS_BIT_PGI)); - rb_define_const(module, "GL_MAT_SPECULAR_BIT_PGI", INT2NUM(GL_MAT_SPECULAR_BIT_PGI)); - rb_define_const(module, "GL_MAX_3D_TEXTURE_SIZE_EXT", INT2NUM(GL_MAX_3D_TEXTURE_SIZE_EXT)); - rb_define_const(module, "GL_MAX_3D_TEXTURE_SIZE", INT2NUM(GL_MAX_3D_TEXTURE_SIZE)); - rb_define_const(module, "GL_MAX_4D_TEXTURE_SIZE_SGIS", INT2NUM(GL_MAX_4D_TEXTURE_SIZE_SGIS)); - rb_define_const(module, "GL_MAX_ACTIVE_LIGHTS_SGIX", INT2NUM(GL_MAX_ACTIVE_LIGHTS_SGIX)); - rb_define_const(module, "GL_MAX_ASYNC_DRAW_PIXELS_SGIX", INT2NUM(GL_MAX_ASYNC_DRAW_PIXELS_SGIX)); - rb_define_const(module, "GL_MAX_ASYNC_HISTOGRAM_SGIX", INT2NUM(GL_MAX_ASYNC_HISTOGRAM_SGIX)); - rb_define_const(module, "GL_MAX_ASYNC_READ_PIXELS_SGIX", INT2NUM(GL_MAX_ASYNC_READ_PIXELS_SGIX)); - rb_define_const(module, "GL_MAX_ASYNC_TEX_IMAGE_SGIX", INT2NUM(GL_MAX_ASYNC_TEX_IMAGE_SGIX)); - rb_define_const(module, "GL_MAX_ATTRIB_STACK_DEPTH", INT2NUM(GL_MAX_ATTRIB_STACK_DEPTH)); - rb_define_const(module, "GL_MAX_CLIENT_ATTRIB_STACK_DEPTH", INT2NUM(GL_MAX_CLIENT_ATTRIB_STACK_DEPTH)); - rb_define_const(module, "GL_MAX_CLIPMAP_DEPTH_SGIX", INT2NUM(GL_MAX_CLIPMAP_DEPTH_SGIX)); - rb_define_const(module, "GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX", INT2NUM(GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX)); - rb_define_const(module, "GL_MAX_CLIP_PLANES", INT2NUM(GL_MAX_CLIP_PLANES)); - rb_define_const(module, "GL_MAX_COLOR_ATTACHMENTS_EXT", INT2NUM(GL_MAX_COLOR_ATTACHMENTS_EXT)); - rb_define_const(module, "GL_MAX_COLOR_MATRIX_STACK_DEPTH", INT2NUM(GL_MAX_COLOR_MATRIX_STACK_DEPTH)); - rb_define_const(module, "GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI", INT2NUM(GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI)); - rb_define_const(module, "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB", INT2NUM(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB)); - rb_define_const(module, "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS", INT2NUM(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS)); - rb_define_const(module, "GL_MAX_CONVOLUTION_HEIGHT_EXT", INT2NUM(GL_MAX_CONVOLUTION_HEIGHT_EXT)); - rb_define_const(module, "GL_MAX_CONVOLUTION_HEIGHT", INT2NUM(GL_MAX_CONVOLUTION_HEIGHT)); - rb_define_const(module, "GL_MAX_CONVOLUTION_WIDTH_EXT", INT2NUM(GL_MAX_CONVOLUTION_WIDTH_EXT)); - rb_define_const(module, "GL_MAX_CONVOLUTION_WIDTH", INT2NUM(GL_MAX_CONVOLUTION_WIDTH)); - rb_define_const(module, "GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB", INT2NUM(GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB)); - rb_define_const(module, "GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT", INT2NUM(GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT)); - rb_define_const(module, "GL_MAX_CUBE_MAP_TEXTURE_SIZE", INT2NUM(GL_MAX_CUBE_MAP_TEXTURE_SIZE)); - rb_define_const(module, "GL_MAX_DEFORMATION_ORDER_SGIX", INT2NUM(GL_MAX_DEFORMATION_ORDER_SGIX)); - rb_define_const(module, "GL_MAX_DRAW_BUFFERS_ARB", INT2NUM(GL_MAX_DRAW_BUFFERS_ARB)); - rb_define_const(module, "GL_MAX_DRAW_BUFFERS_ATI", INT2NUM(GL_MAX_DRAW_BUFFERS_ATI)); - rb_define_const(module, "GL_MAX_DRAW_BUFFERS", INT2NUM(GL_MAX_DRAW_BUFFERS)); - rb_define_const(module, "GL_MAX_ELEMENTS_INDICES_EXT", INT2NUM(GL_MAX_ELEMENTS_INDICES_EXT)); - rb_define_const(module, "GL_MAX_ELEMENTS_INDICES", INT2NUM(GL_MAX_ELEMENTS_INDICES)); - rb_define_const(module, "GL_MAX_ELEMENTS_VERTICES_EXT", INT2NUM(GL_MAX_ELEMENTS_VERTICES_EXT)); - rb_define_const(module, "GL_MAX_ELEMENTS_VERTICES", INT2NUM(GL_MAX_ELEMENTS_VERTICES)); - rb_define_const(module, "GL_MAX_EVAL_ORDER", INT2NUM(GL_MAX_EVAL_ORDER)); - rb_define_const(module, "GL_MAX_EXT", INT2NUM(GL_MAX_EXT)); - rb_define_const(module, "GL_MAX_FOG_FUNC_POINTS_SGIS", INT2NUM(GL_MAX_FOG_FUNC_POINTS_SGIS)); - rb_define_const(module, "GL_MAX_FRAGMENT_LIGHTS_SGIX", INT2NUM(GL_MAX_FRAGMENT_LIGHTS_SGIX)); - rb_define_const(module, "GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV", INT2NUM(GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV)); - rb_define_const(module, "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB", INT2NUM(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB)); - rb_define_const(module, "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS", INT2NUM(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS)); - rb_define_const(module, "GL_MAX_FRAMEZOOM_FACTOR_SGIX", INT2NUM(GL_MAX_FRAMEZOOM_FACTOR_SGIX)); - rb_define_const(module, "GL_MAX_GENERAL_COMBINERS_NV", INT2NUM(GL_MAX_GENERAL_COMBINERS_NV)); - rb_define_const(module, "GL_MAX", INT2NUM(GL_MAX)); - rb_define_const(module, "GL_MAX_LIGHTS", INT2NUM(GL_MAX_LIGHTS)); - rb_define_const(module, "GL_MAX_LIST_NESTING", INT2NUM(GL_MAX_LIST_NESTING)); - rb_define_const(module, "GL_MAX_MAP_TESSELLATION_NV", INT2NUM(GL_MAX_MAP_TESSELLATION_NV)); - rb_define_const(module, "GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB", INT2NUM(GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB)); - rb_define_const(module, "GL_MAX_MODELVIEW_STACK_DEPTH", INT2NUM(GL_MAX_MODELVIEW_STACK_DEPTH)); - rb_define_const(module, "GL_MAX_NAME_STACK_DEPTH", INT2NUM(GL_MAX_NAME_STACK_DEPTH)); - rb_define_const(module, "GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT", INT2NUM(GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT)); - rb_define_const(module, "GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT", INT2NUM(GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT)); - rb_define_const(module, "GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT", INT2NUM(GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT)); - rb_define_const(module, "GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT", INT2NUM(GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT)); - rb_define_const(module, "GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT", INT2NUM(GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT)); - rb_define_const(module, "GL_MAX_PALETTE_MATRICES_ARB", INT2NUM(GL_MAX_PALETTE_MATRICES_ARB)); - rb_define_const(module, "GL_MAX_PIXEL_MAP_TABLE", INT2NUM(GL_MAX_PIXEL_MAP_TABLE)); - rb_define_const(module, "GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT", INT2NUM(GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT)); - rb_define_const(module, "GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI", INT2NUM(GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI)); - rb_define_const(module, "GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB", INT2NUM(GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB", INT2NUM(GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_ATTRIBS_ARB", INT2NUM(GL_MAX_PROGRAM_ATTRIBS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_CALL_DEPTH_NV", INT2NUM(GL_MAX_PROGRAM_CALL_DEPTH_NV)); - rb_define_const(module, "GL_MAX_PROGRAM_ENV_PARAMETERS_ARB", INT2NUM(GL_MAX_PROGRAM_ENV_PARAMETERS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV", INT2NUM(GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV)); - rb_define_const(module, "GL_MAX_PROGRAM_IF_DEPTH_NV", INT2NUM(GL_MAX_PROGRAM_IF_DEPTH_NV)); - rb_define_const(module, "GL_MAX_PROGRAM_INSTRUCTIONS_ARB", INT2NUM(GL_MAX_PROGRAM_INSTRUCTIONS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB", INT2NUM(GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_LOOP_COUNT_NV", INT2NUM(GL_MAX_PROGRAM_LOOP_COUNT_NV)); - rb_define_const(module, "GL_MAX_PROGRAM_LOOP_DEPTH_NV", INT2NUM(GL_MAX_PROGRAM_LOOP_DEPTH_NV)); - rb_define_const(module, "GL_MAX_PROGRAM_MATRICES_ARB", INT2NUM(GL_MAX_PROGRAM_MATRICES_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB", INT2NUM(GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB", INT2NUM(GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB", INT2NUM(GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB", INT2NUM(GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB", INT2NUM(GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB", INT2NUM(GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB", INT2NUM(GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB", INT2NUM(GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB", INT2NUM(GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_PARAMETERS_ARB", INT2NUM(GL_MAX_PROGRAM_PARAMETERS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_TEMPORARIES_ARB", INT2NUM(GL_MAX_PROGRAM_TEMPORARIES_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB", INT2NUM(GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB)); - rb_define_const(module, "GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB", INT2NUM(GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB)); - rb_define_const(module, "GL_MAX_PROJECTION_STACK_DEPTH", INT2NUM(GL_MAX_PROJECTION_STACK_DEPTH)); - rb_define_const(module, "GL_MAX_RATIONAL_EVAL_ORDER_NV", INT2NUM(GL_MAX_RATIONAL_EVAL_ORDER_NV)); - rb_define_const(module, "GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB", INT2NUM(GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB)); - rb_define_const(module, "GL_MAX_RECTANGLE_TEXTURE_SIZE_NV", INT2NUM(GL_MAX_RECTANGLE_TEXTURE_SIZE_NV)); - rb_define_const(module, "GL_MAX_RENDERBUFFER_SIZE_EXT", INT2NUM(GL_MAX_RENDERBUFFER_SIZE_EXT)); - rb_define_const(module, "GL_MAX_SAMPLES_EXT", INT2NUM(GL_MAX_SAMPLES_EXT)); - rb_define_const(module, "GL_MAX_SHININESS_NV", INT2NUM(GL_MAX_SHININESS_NV)); - rb_define_const(module, "GL_MAX_SPOT_EXPONENT_NV", INT2NUM(GL_MAX_SPOT_EXPONENT_NV)); - rb_define_const(module, "GL_MAX_TEXTURE_COORDS_ARB", INT2NUM(GL_MAX_TEXTURE_COORDS_ARB)); - rb_define_const(module, "GL_MAX_TEXTURE_COORDS", INT2NUM(GL_MAX_TEXTURE_COORDS)); - rb_define_const(module, "GL_MAX_TEXTURE_COORDS_NV", INT2NUM(GL_MAX_TEXTURE_COORDS_NV)); - rb_define_const(module, "GL_MAX_TEXTURE_IMAGE_UNITS_ARB", INT2NUM(GL_MAX_TEXTURE_IMAGE_UNITS_ARB)); - rb_define_const(module, "GL_MAX_TEXTURE_IMAGE_UNITS", INT2NUM(GL_MAX_TEXTURE_IMAGE_UNITS)); - rb_define_const(module, "GL_MAX_TEXTURE_IMAGE_UNITS_NV", INT2NUM(GL_MAX_TEXTURE_IMAGE_UNITS_NV)); - rb_define_const(module, "GL_MAX_TEXTURE_LOD_BIAS_EXT", INT2NUM(GL_MAX_TEXTURE_LOD_BIAS_EXT)); - rb_define_const(module, "GL_MAX_TEXTURE_LOD_BIAS", INT2NUM(GL_MAX_TEXTURE_LOD_BIAS)); - rb_define_const(module, "GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT", INT2NUM(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT)); - rb_define_const(module, "GL_MAX_TEXTURE_SIZE", INT2NUM(GL_MAX_TEXTURE_SIZE)); - rb_define_const(module, "GL_MAX_TEXTURE_STACK_DEPTH", INT2NUM(GL_MAX_TEXTURE_STACK_DEPTH)); - rb_define_const(module, "GL_MAX_TEXTURE_UNITS_ARB", INT2NUM(GL_MAX_TEXTURE_UNITS_ARB)); - rb_define_const(module, "GL_MAX_TEXTURE_UNITS", INT2NUM(GL_MAX_TEXTURE_UNITS)); - rb_define_const(module, "GL_MAX_TRACK_MATRICES_NV", INT2NUM(GL_MAX_TRACK_MATRICES_NV)); - rb_define_const(module, "GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV", INT2NUM(GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV)); - rb_define_const(module, "GL_MAX_VARYING_FLOATS_ARB", INT2NUM(GL_MAX_VARYING_FLOATS_ARB)); - rb_define_const(module, "GL_MAX_VARYING_FLOATS", INT2NUM(GL_MAX_VARYING_FLOATS)); - rb_define_const(module, "GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV", INT2NUM(GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV)); - rb_define_const(module, "GL_MAX_VERTEX_ATTRIBS_ARB", INT2NUM(GL_MAX_VERTEX_ATTRIBS_ARB)); - rb_define_const(module, "GL_MAX_VERTEX_ATTRIBS", INT2NUM(GL_MAX_VERTEX_ATTRIBS)); - rb_define_const(module, "GL_MAX_VERTEX_HINT_PGI", INT2NUM(GL_MAX_VERTEX_HINT_PGI)); - rb_define_const(module, "GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT", INT2NUM(GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT)); - rb_define_const(module, "GL_MAX_VERTEX_SHADER_INVARIANTS_EXT", INT2NUM(GL_MAX_VERTEX_SHADER_INVARIANTS_EXT)); - rb_define_const(module, "GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT", INT2NUM(GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT)); - rb_define_const(module, "GL_MAX_VERTEX_SHADER_LOCALS_EXT", INT2NUM(GL_MAX_VERTEX_SHADER_LOCALS_EXT)); - rb_define_const(module, "GL_MAX_VERTEX_SHADER_VARIANTS_EXT", INT2NUM(GL_MAX_VERTEX_SHADER_VARIANTS_EXT)); - rb_define_const(module, "GL_MAX_VERTEX_STREAMS_ATI", INT2NUM(GL_MAX_VERTEX_STREAMS_ATI)); - rb_define_const(module, "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB", INT2NUM(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB)); - rb_define_const(module, "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS", INT2NUM(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS)); - rb_define_const(module, "GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB", INT2NUM(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB)); - rb_define_const(module, "GL_MAX_VERTEX_UNIFORM_COMPONENTS", INT2NUM(GL_MAX_VERTEX_UNIFORM_COMPONENTS)); - rb_define_const(module, "GL_MAX_VERTEX_UNITS_ARB", INT2NUM(GL_MAX_VERTEX_UNITS_ARB)); - rb_define_const(module, "GL_MAX_VIEWPORT_DIMS", INT2NUM(GL_MAX_VIEWPORT_DIMS)); - rb_define_const(module, "GL_MIN_EXT", INT2NUM(GL_MIN_EXT)); - rb_define_const(module, "GL_MIN", INT2NUM(GL_MIN)); - rb_define_const(module, "GL_MINMAX_EXT", INT2NUM(GL_MINMAX_EXT)); - rb_define_const(module, "GL_MINMAX_FORMAT_EXT", INT2NUM(GL_MINMAX_FORMAT_EXT)); - rb_define_const(module, "GL_MINMAX_FORMAT", INT2NUM(GL_MINMAX_FORMAT)); - rb_define_const(module, "GL_MINMAX", INT2NUM(GL_MINMAX)); - rb_define_const(module, "GL_MINMAX_SINK_EXT", INT2NUM(GL_MINMAX_SINK_EXT)); - rb_define_const(module, "GL_MINMAX_SINK", INT2NUM(GL_MINMAX_SINK)); - rb_define_const(module, "GL_MIRROR_CLAMP_ATI", INT2NUM(GL_MIRROR_CLAMP_ATI)); - rb_define_const(module, "GL_MIRROR_CLAMP_EXT", INT2NUM(GL_MIRROR_CLAMP_EXT)); - rb_define_const(module, "GL_MIRROR_CLAMP_TO_BORDER_EXT", INT2NUM(GL_MIRROR_CLAMP_TO_BORDER_EXT)); - rb_define_const(module, "GL_MIRROR_CLAMP_TO_EDGE_ATI", INT2NUM(GL_MIRROR_CLAMP_TO_EDGE_ATI)); - rb_define_const(module, "GL_MIRROR_CLAMP_TO_EDGE_EXT", INT2NUM(GL_MIRROR_CLAMP_TO_EDGE_EXT)); - rb_define_const(module, "GL_MIRRORED_REPEAT_ARB", INT2NUM(GL_MIRRORED_REPEAT_ARB)); - rb_define_const(module, "GL_MIRRORED_REPEAT_IBM", INT2NUM(GL_MIRRORED_REPEAT_IBM)); - rb_define_const(module, "GL_MIRRORED_REPEAT", INT2NUM(GL_MIRRORED_REPEAT)); - rb_define_const(module, "GL_MODELVIEW0_ARB", INT2NUM(GL_MODELVIEW0_ARB)); - rb_define_const(module, "GL_MODELVIEW0_EXT", INT2NUM(GL_MODELVIEW0_EXT)); - rb_define_const(module, "GL_MODELVIEW0_MATRIX_EXT", INT2NUM(GL_MODELVIEW0_MATRIX_EXT)); - rb_define_const(module, "GL_MODELVIEW0_STACK_DEPTH_EXT", INT2NUM(GL_MODELVIEW0_STACK_DEPTH_EXT)); - rb_define_const(module, "GL_MODELVIEW10_ARB", INT2NUM(GL_MODELVIEW10_ARB)); - rb_define_const(module, "GL_MODELVIEW11_ARB", INT2NUM(GL_MODELVIEW11_ARB)); - rb_define_const(module, "GL_MODELVIEW12_ARB", INT2NUM(GL_MODELVIEW12_ARB)); - rb_define_const(module, "GL_MODELVIEW13_ARB", INT2NUM(GL_MODELVIEW13_ARB)); - rb_define_const(module, "GL_MODELVIEW14_ARB", INT2NUM(GL_MODELVIEW14_ARB)); - rb_define_const(module, "GL_MODELVIEW15_ARB", INT2NUM(GL_MODELVIEW15_ARB)); - rb_define_const(module, "GL_MODELVIEW16_ARB", INT2NUM(GL_MODELVIEW16_ARB)); - rb_define_const(module, "GL_MODELVIEW17_ARB", INT2NUM(GL_MODELVIEW17_ARB)); - rb_define_const(module, "GL_MODELVIEW18_ARB", INT2NUM(GL_MODELVIEW18_ARB)); - rb_define_const(module, "GL_MODELVIEW19_ARB", INT2NUM(GL_MODELVIEW19_ARB)); - rb_define_const(module, "GL_MODELVIEW1_ARB", INT2NUM(GL_MODELVIEW1_ARB)); - rb_define_const(module, "GL_MODELVIEW1_EXT", INT2NUM(GL_MODELVIEW1_EXT)); - rb_define_const(module, "GL_MODELVIEW1_MATRIX_EXT", INT2NUM(GL_MODELVIEW1_MATRIX_EXT)); - rb_define_const(module, "GL_MODELVIEW1_STACK_DEPTH_EXT", INT2NUM(GL_MODELVIEW1_STACK_DEPTH_EXT)); - rb_define_const(module, "GL_MODELVIEW20_ARB", INT2NUM(GL_MODELVIEW20_ARB)); - rb_define_const(module, "GL_MODELVIEW21_ARB", INT2NUM(GL_MODELVIEW21_ARB)); - rb_define_const(module, "GL_MODELVIEW22_ARB", INT2NUM(GL_MODELVIEW22_ARB)); - rb_define_const(module, "GL_MODELVIEW23_ARB", INT2NUM(GL_MODELVIEW23_ARB)); - rb_define_const(module, "GL_MODELVIEW24_ARB", INT2NUM(GL_MODELVIEW24_ARB)); - rb_define_const(module, "GL_MODELVIEW25_ARB", INT2NUM(GL_MODELVIEW25_ARB)); - rb_define_const(module, "GL_MODELVIEW26_ARB", INT2NUM(GL_MODELVIEW26_ARB)); - rb_define_const(module, "GL_MODELVIEW27_ARB", INT2NUM(GL_MODELVIEW27_ARB)); - rb_define_const(module, "GL_MODELVIEW28_ARB", INT2NUM(GL_MODELVIEW28_ARB)); - rb_define_const(module, "GL_MODELVIEW29_ARB", INT2NUM(GL_MODELVIEW29_ARB)); - rb_define_const(module, "GL_MODELVIEW2_ARB", INT2NUM(GL_MODELVIEW2_ARB)); - rb_define_const(module, "GL_MODELVIEW30_ARB", INT2NUM(GL_MODELVIEW30_ARB)); - rb_define_const(module, "GL_MODELVIEW31_ARB", INT2NUM(GL_MODELVIEW31_ARB)); - rb_define_const(module, "GL_MODELVIEW3_ARB", INT2NUM(GL_MODELVIEW3_ARB)); - rb_define_const(module, "GL_MODELVIEW4_ARB", INT2NUM(GL_MODELVIEW4_ARB)); - rb_define_const(module, "GL_MODELVIEW5_ARB", INT2NUM(GL_MODELVIEW5_ARB)); - rb_define_const(module, "GL_MODELVIEW6_ARB", INT2NUM(GL_MODELVIEW6_ARB)); - rb_define_const(module, "GL_MODELVIEW7_ARB", INT2NUM(GL_MODELVIEW7_ARB)); - rb_define_const(module, "GL_MODELVIEW8_ARB", INT2NUM(GL_MODELVIEW8_ARB)); - rb_define_const(module, "GL_MODELVIEW9_ARB", INT2NUM(GL_MODELVIEW9_ARB)); - rb_define_const(module, "GL_MODELVIEW", INT2NUM(GL_MODELVIEW)); - rb_define_const(module, "GL_MODELVIEW_MATRIX", INT2NUM(GL_MODELVIEW_MATRIX)); - rb_define_const(module, "GL_MODELVIEW_PROJECTION_NV", INT2NUM(GL_MODELVIEW_PROJECTION_NV)); - rb_define_const(module, "GL_MODELVIEW_STACK_DEPTH", INT2NUM(GL_MODELVIEW_STACK_DEPTH)); - rb_define_const(module, "GL_MODULATE_ADD_ATI", INT2NUM(GL_MODULATE_ADD_ATI)); - rb_define_const(module, "GL_MODULATE", INT2NUM(GL_MODULATE)); - rb_define_const(module, "GL_MODULATE_SIGNED_ADD_ATI", INT2NUM(GL_MODULATE_SIGNED_ADD_ATI)); - rb_define_const(module, "GL_MODULATE_SUBTRACT_ATI", INT2NUM(GL_MODULATE_SUBTRACT_ATI)); - rb_define_const(module, "GL_MOV_ATI", INT2NUM(GL_MOV_ATI)); - rb_define_const(module, "GL_MUL_ATI", INT2NUM(GL_MUL_ATI)); - rb_define_const(module, "GL_MULT", INT2NUM(GL_MULT)); - rb_define_const(module, "GL_MULTISAMPLE_3DFX", INT2NUM(GL_MULTISAMPLE_3DFX)); - rb_define_const(module, "GL_MULTISAMPLE_ARB", INT2NUM(GL_MULTISAMPLE_ARB)); - rb_define_const(module, "GL_MULTISAMPLE_BIT_3DFX", INT2NUM(GL_MULTISAMPLE_BIT_3DFX)); - rb_define_const(module, "GL_MULTISAMPLE_BIT_ARB", INT2NUM(GL_MULTISAMPLE_BIT_ARB)); - rb_define_const(module, "GL_MULTISAMPLE_BIT_EXT", INT2NUM(GL_MULTISAMPLE_BIT_EXT)); - rb_define_const(module, "GL_MULTISAMPLE_BIT", INT2NUM(GL_MULTISAMPLE_BIT)); - rb_define_const(module, "GL_MULTISAMPLE_EXT", INT2NUM(GL_MULTISAMPLE_EXT)); - rb_define_const(module, "GL_MULTISAMPLE_FILTER_HINT_NV", INT2NUM(GL_MULTISAMPLE_FILTER_HINT_NV)); - rb_define_const(module, "GL_MULTISAMPLE", INT2NUM(GL_MULTISAMPLE)); - rb_define_const(module, "GL_MULTISAMPLE_SGIS", INT2NUM(GL_MULTISAMPLE_SGIS)); - rb_define_const(module, "GL_MVP_MATRIX_EXT", INT2NUM(GL_MVP_MATRIX_EXT)); - rb_define_const(module, "GL_N3F_V3F", INT2NUM(GL_N3F_V3F)); - rb_define_const(module, "GL_NAME_STACK_DEPTH", INT2NUM(GL_NAME_STACK_DEPTH)); - rb_define_const(module, "GL_NAND", INT2NUM(GL_NAND)); - rb_define_const(module, "GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI", INT2NUM(GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI)); - rb_define_const(module, "GL_NATIVE_GRAPHICS_END_HINT_PGI", INT2NUM(GL_NATIVE_GRAPHICS_END_HINT_PGI)); - rb_define_const(module, "GL_NATIVE_GRAPHICS_HANDLE_PGI", INT2NUM(GL_NATIVE_GRAPHICS_HANDLE_PGI)); - rb_define_const(module, "GL_NEAREST_CLIPMAP_LINEAR_SGIX", INT2NUM(GL_NEAREST_CLIPMAP_LINEAR_SGIX)); - rb_define_const(module, "GL_NEAREST_CLIPMAP_NEAREST_SGIX", INT2NUM(GL_NEAREST_CLIPMAP_NEAREST_SGIX)); - rb_define_const(module, "GL_NEAREST", INT2NUM(GL_NEAREST)); - rb_define_const(module, "GL_NEAREST_MIPMAP_LINEAR", INT2NUM(GL_NEAREST_MIPMAP_LINEAR)); - rb_define_const(module, "GL_NEAREST_MIPMAP_NEAREST", INT2NUM(GL_NEAREST_MIPMAP_NEAREST)); - rb_define_const(module, "GL_NEGATE_BIT_ATI", INT2NUM(GL_NEGATE_BIT_ATI)); - rb_define_const(module, "GL_NEGATIVE_ONE_EXT", INT2NUM(GL_NEGATIVE_ONE_EXT)); - rb_define_const(module, "GL_NEGATIVE_W_EXT", INT2NUM(GL_NEGATIVE_W_EXT)); - rb_define_const(module, "GL_NEGATIVE_X_EXT", INT2NUM(GL_NEGATIVE_X_EXT)); - rb_define_const(module, "GL_NEGATIVE_Y_EXT", INT2NUM(GL_NEGATIVE_Y_EXT)); - rb_define_const(module, "GL_NEGATIVE_Z_EXT", INT2NUM(GL_NEGATIVE_Z_EXT)); - rb_define_const(module, "GL_NEVER", INT2NUM(GL_NEVER)); - rb_define_const(module, "GL_NICEST", INT2NUM(GL_NICEST)); - rb_define_const(module, "GL_NO_ERROR", INT2NUM(GL_NO_ERROR)); - rb_define_const(module, "GL_NONE", INT2NUM(GL_NONE)); - rb_define_const(module, "GL_NOOP", INT2NUM(GL_NOOP)); - rb_define_const(module, "GL_NOR", INT2NUM(GL_NOR)); - rb_define_const(module, "GL_NORMAL_ARRAY_BUFFER_BINDING_ARB", INT2NUM(GL_NORMAL_ARRAY_BUFFER_BINDING_ARB)); - rb_define_const(module, "GL_NORMAL_ARRAY_BUFFER_BINDING", INT2NUM(GL_NORMAL_ARRAY_BUFFER_BINDING)); - rb_define_const(module, "GL_NORMAL_ARRAY_COUNT_EXT", INT2NUM(GL_NORMAL_ARRAY_COUNT_EXT)); - rb_define_const(module, "GL_NORMAL_ARRAY_EXT", INT2NUM(GL_NORMAL_ARRAY_EXT)); - rb_define_const(module, "GL_NORMAL_ARRAY", INT2NUM(GL_NORMAL_ARRAY)); - rb_define_const(module, "GL_NORMAL_ARRAY_LIST_IBM", INT2NUM(GL_NORMAL_ARRAY_LIST_IBM)); - rb_define_const(module, "GL_NORMAL_ARRAY_LIST_STRIDE_IBM", INT2NUM(GL_NORMAL_ARRAY_LIST_STRIDE_IBM)); - rb_define_const(module, "GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL", INT2NUM(GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL)); - rb_define_const(module, "GL_NORMAL_ARRAY_POINTER_EXT", INT2NUM(GL_NORMAL_ARRAY_POINTER_EXT)); - rb_define_const(module, "GL_NORMAL_ARRAY_POINTER", INT2NUM(GL_NORMAL_ARRAY_POINTER)); - rb_define_const(module, "GL_NORMAL_ARRAY_STRIDE_EXT", INT2NUM(GL_NORMAL_ARRAY_STRIDE_EXT)); - rb_define_const(module, "GL_NORMAL_ARRAY_STRIDE", INT2NUM(GL_NORMAL_ARRAY_STRIDE)); - rb_define_const(module, "GL_NORMAL_ARRAY_TYPE_EXT", INT2NUM(GL_NORMAL_ARRAY_TYPE_EXT)); - rb_define_const(module, "GL_NORMAL_ARRAY_TYPE", INT2NUM(GL_NORMAL_ARRAY_TYPE)); - rb_define_const(module, "GL_NORMAL_BIT_PGI", INT2NUM(GL_NORMAL_BIT_PGI)); - rb_define_const(module, "GL_NORMALIZED_RANGE_EXT", INT2NUM(GL_NORMALIZED_RANGE_EXT)); - rb_define_const(module, "GL_NORMALIZE", INT2NUM(GL_NORMALIZE)); - rb_define_const(module, "GL_NORMAL_MAP_ARB", INT2NUM(GL_NORMAL_MAP_ARB)); - rb_define_const(module, "GL_NORMAL_MAP_EXT", INT2NUM(GL_NORMAL_MAP_EXT)); - rb_define_const(module, "GL_NORMAL_MAP", INT2NUM(GL_NORMAL_MAP)); - rb_define_const(module, "GL_NORMAL_MAP_NV", INT2NUM(GL_NORMAL_MAP_NV)); - rb_define_const(module, "GL_NOTEQUAL", INT2NUM(GL_NOTEQUAL)); - rb_define_const(module, "GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB", INT2NUM(GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB)); - rb_define_const(module, "GL_NUM_COMPRESSED_TEXTURE_FORMATS", INT2NUM(GL_NUM_COMPRESSED_TEXTURE_FORMATS)); - rb_define_const(module, "GL_NUM_FRAGMENT_CONSTANTS_ATI", INT2NUM(GL_NUM_FRAGMENT_CONSTANTS_ATI)); - rb_define_const(module, "GL_NUM_FRAGMENT_REGISTERS_ATI", INT2NUM(GL_NUM_FRAGMENT_REGISTERS_ATI)); - rb_define_const(module, "GL_NUM_GENERAL_COMBINERS_NV", INT2NUM(GL_NUM_GENERAL_COMBINERS_NV)); - rb_define_const(module, "GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI", INT2NUM(GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI)); - rb_define_const(module, "GL_NUM_INSTRUCTIONS_PER_PASS_ATI", INT2NUM(GL_NUM_INSTRUCTIONS_PER_PASS_ATI)); - rb_define_const(module, "GL_NUM_INSTRUCTIONS_TOTAL_ATI", INT2NUM(GL_NUM_INSTRUCTIONS_TOTAL_ATI)); - rb_define_const(module, "GL_NUM_LOOPBACK_COMPONENTS_ATI", INT2NUM(GL_NUM_LOOPBACK_COMPONENTS_ATI)); - rb_define_const(module, "GL_NUM_PASSES_ATI", INT2NUM(GL_NUM_PASSES_ATI)); - rb_define_const(module, "GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB", INT2NUM(GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB)); - rb_define_const(module, "GL_OBJECT_ACTIVE_ATTRIBUTES_ARB", INT2NUM(GL_OBJECT_ACTIVE_ATTRIBUTES_ARB)); - rb_define_const(module, "GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB", INT2NUM(GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB)); - rb_define_const(module, "GL_OBJECT_ACTIVE_UNIFORMS_ARB", INT2NUM(GL_OBJECT_ACTIVE_UNIFORMS_ARB)); - rb_define_const(module, "GL_OBJECT_ATTACHED_OBJECTS_ARB", INT2NUM(GL_OBJECT_ATTACHED_OBJECTS_ARB)); - rb_define_const(module, "GL_OBJECT_BUFFER_SIZE_ATI", INT2NUM(GL_OBJECT_BUFFER_SIZE_ATI)); - rb_define_const(module, "GL_OBJECT_BUFFER_USAGE_ATI", INT2NUM(GL_OBJECT_BUFFER_USAGE_ATI)); - rb_define_const(module, "GL_OBJECT_COMPILE_STATUS_ARB", INT2NUM(GL_OBJECT_COMPILE_STATUS_ARB)); - rb_define_const(module, "GL_OBJECT_DELETE_STATUS_ARB", INT2NUM(GL_OBJECT_DELETE_STATUS_ARB)); - rb_define_const(module, "GL_OBJECT_DISTANCE_TO_LINE_SGIS", INT2NUM(GL_OBJECT_DISTANCE_TO_LINE_SGIS)); - rb_define_const(module, "GL_OBJECT_DISTANCE_TO_POINT_SGIS", INT2NUM(GL_OBJECT_DISTANCE_TO_POINT_SGIS)); - rb_define_const(module, "GL_OBJECT_INFO_LOG_LENGTH_ARB", INT2NUM(GL_OBJECT_INFO_LOG_LENGTH_ARB)); - rb_define_const(module, "GL_OBJECT_LINEAR", INT2NUM(GL_OBJECT_LINEAR)); - rb_define_const(module, "GL_OBJECT_LINE_SGIS", INT2NUM(GL_OBJECT_LINE_SGIS)); - rb_define_const(module, "GL_OBJECT_LINK_STATUS_ARB", INT2NUM(GL_OBJECT_LINK_STATUS_ARB)); - rb_define_const(module, "GL_OBJECT_PLANE", INT2NUM(GL_OBJECT_PLANE)); - rb_define_const(module, "GL_OBJECT_POINT_SGIS", INT2NUM(GL_OBJECT_POINT_SGIS)); - rb_define_const(module, "GL_OBJECT_SHADER_SOURCE_LENGTH_ARB", INT2NUM(GL_OBJECT_SHADER_SOURCE_LENGTH_ARB)); - rb_define_const(module, "GL_OBJECT_SUBTYPE_ARB", INT2NUM(GL_OBJECT_SUBTYPE_ARB)); - rb_define_const(module, "GL_OBJECT_TYPE_ARB", INT2NUM(GL_OBJECT_TYPE_ARB)); - rb_define_const(module, "GL_OBJECT_VALIDATE_STATUS_ARB", INT2NUM(GL_OBJECT_VALIDATE_STATUS_ARB)); - rb_define_const(module, "GL_OCCLUSION_TEST_HP", INT2NUM(GL_OCCLUSION_TEST_HP)); - rb_define_const(module, "GL_OCCLUSION_TEST_RESULT_HP", INT2NUM(GL_OCCLUSION_TEST_RESULT_HP)); - rb_define_const(module, "GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV", INT2NUM(GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV)); - rb_define_const(module, "GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV", INT2NUM(GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV)); - rb_define_const(module, "GL_OFFSET_HILO_TEXTURE_2D_NV", INT2NUM(GL_OFFSET_HILO_TEXTURE_2D_NV)); - rb_define_const(module, "GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV", INT2NUM(GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV)); - rb_define_const(module, "GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV", INT2NUM(GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV)); - rb_define_const(module, "GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV", INT2NUM(GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV)); - rb_define_const(module, "GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV", INT2NUM(GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV)); - rb_define_const(module, "GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV", INT2NUM(GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV)); - rb_define_const(module, "GL_OFFSET_TEXTURE_2D_BIAS_NV", INT2NUM(GL_OFFSET_TEXTURE_2D_BIAS_NV)); - rb_define_const(module, "GL_OFFSET_TEXTURE_2D_MATRIX_NV", INT2NUM(GL_OFFSET_TEXTURE_2D_MATRIX_NV)); - rb_define_const(module, "GL_OFFSET_TEXTURE_2D_NV", INT2NUM(GL_OFFSET_TEXTURE_2D_NV)); - rb_define_const(module, "GL_OFFSET_TEXTURE_2D_SCALE_NV", INT2NUM(GL_OFFSET_TEXTURE_2D_SCALE_NV)); - rb_define_const(module, "GL_OFFSET_TEXTURE_BIAS_NV", INT2NUM(GL_OFFSET_TEXTURE_BIAS_NV)); - rb_define_const(module, "GL_OFFSET_TEXTURE_MATRIX_NV", INT2NUM(GL_OFFSET_TEXTURE_MATRIX_NV)); - rb_define_const(module, "GL_OFFSET_TEXTURE_RECTANGLE_NV", INT2NUM(GL_OFFSET_TEXTURE_RECTANGLE_NV)); - rb_define_const(module, "GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV", INT2NUM(GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV)); - rb_define_const(module, "GL_OFFSET_TEXTURE_SCALE_NV", INT2NUM(GL_OFFSET_TEXTURE_SCALE_NV)); - rb_define_const(module, "GL_ONE_EXT", INT2NUM(GL_ONE_EXT)); - rb_define_const(module, "GL_ONE", INT2NUM(GL_ONE)); - rb_define_const(module, "GL_ONE_MINUS_CONSTANT_ALPHA_EXT", INT2NUM(GL_ONE_MINUS_CONSTANT_ALPHA_EXT)); - rb_define_const(module, "GL_ONE_MINUS_CONSTANT_ALPHA", INT2NUM(GL_ONE_MINUS_CONSTANT_ALPHA)); - rb_define_const(module, "GL_ONE_MINUS_CONSTANT_COLOR_EXT", INT2NUM(GL_ONE_MINUS_CONSTANT_COLOR_EXT)); - rb_define_const(module, "GL_ONE_MINUS_CONSTANT_COLOR", INT2NUM(GL_ONE_MINUS_CONSTANT_COLOR)); - rb_define_const(module, "GL_ONE_MINUS_DST_ALPHA", INT2NUM(GL_ONE_MINUS_DST_ALPHA)); - rb_define_const(module, "GL_ONE_MINUS_DST_COLOR", INT2NUM(GL_ONE_MINUS_DST_COLOR)); - rb_define_const(module, "GL_ONE_MINUS_SRC_ALPHA", INT2NUM(GL_ONE_MINUS_SRC_ALPHA)); - rb_define_const(module, "GL_ONE_MINUS_SRC_COLOR", INT2NUM(GL_ONE_MINUS_SRC_COLOR)); - rb_define_const(module, "GL_OP_ADD_EXT", INT2NUM(GL_OP_ADD_EXT)); - rb_define_const(module, "GL_OP_CLAMP_EXT", INT2NUM(GL_OP_CLAMP_EXT)); - rb_define_const(module, "GL_OP_CROSS_PRODUCT_EXT", INT2NUM(GL_OP_CROSS_PRODUCT_EXT)); - rb_define_const(module, "GL_OP_DOT3_EXT", INT2NUM(GL_OP_DOT3_EXT)); - rb_define_const(module, "GL_OP_DOT4_EXT", INT2NUM(GL_OP_DOT4_EXT)); - rb_define_const(module, "GL_OPERAND0_ALPHA_ARB", INT2NUM(GL_OPERAND0_ALPHA_ARB)); - rb_define_const(module, "GL_OPERAND0_ALPHA_EXT", INT2NUM(GL_OPERAND0_ALPHA_EXT)); - rb_define_const(module, "GL_OPERAND0_ALPHA", INT2NUM(GL_OPERAND0_ALPHA)); - rb_define_const(module, "GL_OPERAND0_RGB_ARB", INT2NUM(GL_OPERAND0_RGB_ARB)); - rb_define_const(module, "GL_OPERAND0_RGB_EXT", INT2NUM(GL_OPERAND0_RGB_EXT)); - rb_define_const(module, "GL_OPERAND0_RGB", INT2NUM(GL_OPERAND0_RGB)); - rb_define_const(module, "GL_OPERAND1_ALPHA_ARB", INT2NUM(GL_OPERAND1_ALPHA_ARB)); - rb_define_const(module, "GL_OPERAND1_ALPHA_EXT", INT2NUM(GL_OPERAND1_ALPHA_EXT)); - rb_define_const(module, "GL_OPERAND1_ALPHA", INT2NUM(GL_OPERAND1_ALPHA)); - rb_define_const(module, "GL_OPERAND1_RGB_ARB", INT2NUM(GL_OPERAND1_RGB_ARB)); - rb_define_const(module, "GL_OPERAND1_RGB_EXT", INT2NUM(GL_OPERAND1_RGB_EXT)); - rb_define_const(module, "GL_OPERAND1_RGB", INT2NUM(GL_OPERAND1_RGB)); - rb_define_const(module, "GL_OPERAND2_ALPHA_ARB", INT2NUM(GL_OPERAND2_ALPHA_ARB)); - rb_define_const(module, "GL_OPERAND2_ALPHA_EXT", INT2NUM(GL_OPERAND2_ALPHA_EXT)); - rb_define_const(module, "GL_OPERAND2_ALPHA", INT2NUM(GL_OPERAND2_ALPHA)); - rb_define_const(module, "GL_OPERAND2_RGB_ARB", INT2NUM(GL_OPERAND2_RGB_ARB)); - rb_define_const(module, "GL_OPERAND2_RGB_EXT", INT2NUM(GL_OPERAND2_RGB_EXT)); - rb_define_const(module, "GL_OPERAND2_RGB", INT2NUM(GL_OPERAND2_RGB)); - rb_define_const(module, "GL_OPERAND3_ALPHA_NV", INT2NUM(GL_OPERAND3_ALPHA_NV)); - rb_define_const(module, "GL_OPERAND3_RGB_NV", INT2NUM(GL_OPERAND3_RGB_NV)); - rb_define_const(module, "GL_OP_EXP_BASE_2_EXT", INT2NUM(GL_OP_EXP_BASE_2_EXT)); - rb_define_const(module, "GL_OP_FLOOR_EXT", INT2NUM(GL_OP_FLOOR_EXT)); - rb_define_const(module, "GL_OP_FRAC_EXT", INT2NUM(GL_OP_FRAC_EXT)); - rb_define_const(module, "GL_OP_INDEX_EXT", INT2NUM(GL_OP_INDEX_EXT)); - rb_define_const(module, "GL_OP_LOG_BASE_2_EXT", INT2NUM(GL_OP_LOG_BASE_2_EXT)); - rb_define_const(module, "GL_OP_MADD_EXT", INT2NUM(GL_OP_MADD_EXT)); - rb_define_const(module, "GL_OP_MAX_EXT", INT2NUM(GL_OP_MAX_EXT)); - rb_define_const(module, "GL_OP_MIN_EXT", INT2NUM(GL_OP_MIN_EXT)); - rb_define_const(module, "GL_OP_MOV_EXT", INT2NUM(GL_OP_MOV_EXT)); - rb_define_const(module, "GL_OP_MUL_EXT", INT2NUM(GL_OP_MUL_EXT)); - rb_define_const(module, "GL_OP_MULTIPLY_MATRIX_EXT", INT2NUM(GL_OP_MULTIPLY_MATRIX_EXT)); - rb_define_const(module, "GL_OP_NEGATE_EXT", INT2NUM(GL_OP_NEGATE_EXT)); - rb_define_const(module, "GL_OP_POWER_EXT", INT2NUM(GL_OP_POWER_EXT)); - rb_define_const(module, "GL_OP_RECIP_EXT", INT2NUM(GL_OP_RECIP_EXT)); - rb_define_const(module, "GL_OP_RECIP_SQRT_EXT", INT2NUM(GL_OP_RECIP_SQRT_EXT)); - rb_define_const(module, "GL_OP_ROUND_EXT", INT2NUM(GL_OP_ROUND_EXT)); - rb_define_const(module, "GL_OP_SET_GE_EXT", INT2NUM(GL_OP_SET_GE_EXT)); - rb_define_const(module, "GL_OP_SET_LT_EXT", INT2NUM(GL_OP_SET_LT_EXT)); - rb_define_const(module, "GL_OP_SUB_EXT", INT2NUM(GL_OP_SUB_EXT)); - rb_define_const(module, "GL_ORDER", INT2NUM(GL_ORDER)); - rb_define_const(module, "GL_OR", INT2NUM(GL_OR)); - rb_define_const(module, "GL_OR_INVERTED", INT2NUM(GL_OR_INVERTED)); - rb_define_const(module, "GL_OR_REVERSE", INT2NUM(GL_OR_REVERSE)); - rb_define_const(module, "GL_OUT_OF_MEMORY", INT2NUM(GL_OUT_OF_MEMORY)); - rb_define_const(module, "GL_OUTPUT_COLOR0_EXT", INT2NUM(GL_OUTPUT_COLOR0_EXT)); - rb_define_const(module, "GL_OUTPUT_COLOR1_EXT", INT2NUM(GL_OUTPUT_COLOR1_EXT)); - rb_define_const(module, "GL_OUTPUT_FOG_EXT", INT2NUM(GL_OUTPUT_FOG_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD0_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD0_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD10_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD10_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD11_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD11_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD12_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD12_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD13_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD13_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD14_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD14_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD15_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD15_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD16_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD16_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD17_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD17_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD18_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD18_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD19_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD19_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD1_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD1_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD20_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD20_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD21_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD21_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD22_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD22_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD23_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD23_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD24_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD24_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD25_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD25_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD26_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD26_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD27_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD27_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD28_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD28_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD29_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD29_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD2_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD2_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD30_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD30_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD31_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD31_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD3_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD3_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD4_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD4_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD5_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD5_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD6_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD6_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD7_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD7_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD8_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD8_EXT)); - rb_define_const(module, "GL_OUTPUT_TEXTURE_COORD9_EXT", INT2NUM(GL_OUTPUT_TEXTURE_COORD9_EXT)); - rb_define_const(module, "GL_OUTPUT_VERTEX_EXT", INT2NUM(GL_OUTPUT_VERTEX_EXT)); - rb_define_const(module, "GL_PACK_ALIGNMENT", INT2NUM(GL_PACK_ALIGNMENT)); - rb_define_const(module, "GL_PACK_CMYK_HINT_EXT", INT2NUM(GL_PACK_CMYK_HINT_EXT)); - rb_define_const(module, "GL_PACK_IMAGE_DEPTH_SGIS", INT2NUM(GL_PACK_IMAGE_DEPTH_SGIS)); - rb_define_const(module, "GL_PACK_IMAGE_HEIGHT_EXT", INT2NUM(GL_PACK_IMAGE_HEIGHT_EXT)); - rb_define_const(module, "GL_PACK_IMAGE_HEIGHT", INT2NUM(GL_PACK_IMAGE_HEIGHT)); - rb_define_const(module, "GL_PACK_INVERT_MESA", INT2NUM(GL_PACK_INVERT_MESA)); - rb_define_const(module, "GL_PACK_LSB_FIRST", INT2NUM(GL_PACK_LSB_FIRST)); - rb_define_const(module, "GL_PACK_RESAMPLE_OML", INT2NUM(GL_PACK_RESAMPLE_OML)); - rb_define_const(module, "GL_PACK_RESAMPLE_SGIX", INT2NUM(GL_PACK_RESAMPLE_SGIX)); - rb_define_const(module, "GL_PACK_ROW_LENGTH", INT2NUM(GL_PACK_ROW_LENGTH)); - rb_define_const(module, "GL_PACK_SKIP_IMAGES_EXT", INT2NUM(GL_PACK_SKIP_IMAGES_EXT)); - rb_define_const(module, "GL_PACK_SKIP_IMAGES", INT2NUM(GL_PACK_SKIP_IMAGES)); - rb_define_const(module, "GL_PACK_SKIP_PIXELS", INT2NUM(GL_PACK_SKIP_PIXELS)); - rb_define_const(module, "GL_PACK_SKIP_ROWS", INT2NUM(GL_PACK_SKIP_ROWS)); - rb_define_const(module, "GL_PACK_SKIP_VOLUMES_SGIS", INT2NUM(GL_PACK_SKIP_VOLUMES_SGIS)); - rb_define_const(module, "GL_PACK_SUBSAMPLE_RATE_SGIX", INT2NUM(GL_PACK_SUBSAMPLE_RATE_SGIX)); - rb_define_const(module, "GL_PACK_SWAP_BYTES", INT2NUM(GL_PACK_SWAP_BYTES)); - rb_define_const(module, "GL_PARALLEL_ARRAYS_INTEL", INT2NUM(GL_PARALLEL_ARRAYS_INTEL)); - rb_define_const(module, "GL_PASS_THROUGH_NV", INT2NUM(GL_PASS_THROUGH_NV)); - rb_define_const(module, "GL_PASS_THROUGH_TOKEN", INT2NUM(GL_PASS_THROUGH_TOKEN)); - rb_define_const(module, "GL_PERSPECTIVE_CORRECTION_HINT", INT2NUM(GL_PERSPECTIVE_CORRECTION_HINT)); - rb_define_const(module, "GL_PER_STAGE_CONSTANTS_NV", INT2NUM(GL_PER_STAGE_CONSTANTS_NV)); - rb_define_const(module, "GL_PERTURB_EXT", INT2NUM(GL_PERTURB_EXT)); - rb_define_const(module, "GL_PHONG_HINT_WIN", INT2NUM(GL_PHONG_HINT_WIN)); - rb_define_const(module, "GL_PHONG_WIN", INT2NUM(GL_PHONG_WIN)); - rb_define_const(module, "GL_PIXEL_COUNT_AVAILABLE_NV", INT2NUM(GL_PIXEL_COUNT_AVAILABLE_NV)); - rb_define_const(module, "GL_PIXEL_COUNTER_BITS_NV", INT2NUM(GL_PIXEL_COUNTER_BITS_NV)); - rb_define_const(module, "GL_PIXEL_COUNT_NV", INT2NUM(GL_PIXEL_COUNT_NV)); - rb_define_const(module, "GL_PIXEL_CUBIC_WEIGHT_EXT", INT2NUM(GL_PIXEL_CUBIC_WEIGHT_EXT)); - rb_define_const(module, "GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS", INT2NUM(GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS)); - rb_define_const(module, "GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS", INT2NUM(GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS)); - rb_define_const(module, "GL_PIXEL_GROUP_COLOR_SGIS", INT2NUM(GL_PIXEL_GROUP_COLOR_SGIS)); - rb_define_const(module, "GL_PIXEL_MAG_FILTER_EXT", INT2NUM(GL_PIXEL_MAG_FILTER_EXT)); - rb_define_const(module, "GL_PIXEL_MAP_A_TO_A", INT2NUM(GL_PIXEL_MAP_A_TO_A)); - rb_define_const(module, "GL_PIXEL_MAP_A_TO_A_SIZE", INT2NUM(GL_PIXEL_MAP_A_TO_A_SIZE)); - rb_define_const(module, "GL_PIXEL_MAP_B_TO_B", INT2NUM(GL_PIXEL_MAP_B_TO_B)); - rb_define_const(module, "GL_PIXEL_MAP_B_TO_B_SIZE", INT2NUM(GL_PIXEL_MAP_B_TO_B_SIZE)); - rb_define_const(module, "GL_PIXEL_MAP_G_TO_G", INT2NUM(GL_PIXEL_MAP_G_TO_G)); - rb_define_const(module, "GL_PIXEL_MAP_G_TO_G_SIZE", INT2NUM(GL_PIXEL_MAP_G_TO_G_SIZE)); - rb_define_const(module, "GL_PIXEL_MAP_I_TO_A", INT2NUM(GL_PIXEL_MAP_I_TO_A)); - rb_define_const(module, "GL_PIXEL_MAP_I_TO_A_SIZE", INT2NUM(GL_PIXEL_MAP_I_TO_A_SIZE)); - rb_define_const(module, "GL_PIXEL_MAP_I_TO_B", INT2NUM(GL_PIXEL_MAP_I_TO_B)); - rb_define_const(module, "GL_PIXEL_MAP_I_TO_B_SIZE", INT2NUM(GL_PIXEL_MAP_I_TO_B_SIZE)); - rb_define_const(module, "GL_PIXEL_MAP_I_TO_G", INT2NUM(GL_PIXEL_MAP_I_TO_G)); - rb_define_const(module, "GL_PIXEL_MAP_I_TO_G_SIZE", INT2NUM(GL_PIXEL_MAP_I_TO_G_SIZE)); - rb_define_const(module, "GL_PIXEL_MAP_I_TO_I", INT2NUM(GL_PIXEL_MAP_I_TO_I)); - rb_define_const(module, "GL_PIXEL_MAP_I_TO_I_SIZE", INT2NUM(GL_PIXEL_MAP_I_TO_I_SIZE)); - rb_define_const(module, "GL_PIXEL_MAP_I_TO_R", INT2NUM(GL_PIXEL_MAP_I_TO_R)); - rb_define_const(module, "GL_PIXEL_MAP_I_TO_R_SIZE", INT2NUM(GL_PIXEL_MAP_I_TO_R_SIZE)); - rb_define_const(module, "GL_PIXEL_MAP_R_TO_R", INT2NUM(GL_PIXEL_MAP_R_TO_R)); - rb_define_const(module, "GL_PIXEL_MAP_R_TO_R_SIZE", INT2NUM(GL_PIXEL_MAP_R_TO_R_SIZE)); - rb_define_const(module, "GL_PIXEL_MAP_S_TO_S", INT2NUM(GL_PIXEL_MAP_S_TO_S)); - rb_define_const(module, "GL_PIXEL_MAP_S_TO_S_SIZE", INT2NUM(GL_PIXEL_MAP_S_TO_S_SIZE)); - rb_define_const(module, "GL_PIXEL_MIN_FILTER_EXT", INT2NUM(GL_PIXEL_MIN_FILTER_EXT)); - rb_define_const(module, "GL_PIXEL_MODE_BIT", INT2NUM(GL_PIXEL_MODE_BIT)); - rb_define_const(module, "GL_PIXEL_PACK_BUFFER_ARB", INT2NUM(GL_PIXEL_PACK_BUFFER_ARB)); - rb_define_const(module, "GL_PIXEL_PACK_BUFFER_BINDING_ARB", INT2NUM(GL_PIXEL_PACK_BUFFER_BINDING_ARB)); - rb_define_const(module, "GL_PIXEL_PACK_BUFFER_BINDING_EXT", INT2NUM(GL_PIXEL_PACK_BUFFER_BINDING_EXT)); - rb_define_const(module, "GL_PIXEL_PACK_BUFFER_BINDING", INT2NUM(GL_PIXEL_PACK_BUFFER_BINDING)); - rb_define_const(module, "GL_PIXEL_PACK_BUFFER_EXT", INT2NUM(GL_PIXEL_PACK_BUFFER_EXT)); - rb_define_const(module, "GL_PIXEL_PACK_BUFFER", INT2NUM(GL_PIXEL_PACK_BUFFER)); - rb_define_const(module, "GL_PIXEL_SUBSAMPLE_2424_SGIX", INT2NUM(GL_PIXEL_SUBSAMPLE_2424_SGIX)); - rb_define_const(module, "GL_PIXEL_SUBSAMPLE_4242_SGIX", INT2NUM(GL_PIXEL_SUBSAMPLE_4242_SGIX)); - rb_define_const(module, "GL_PIXEL_SUBSAMPLE_4444_SGIX", INT2NUM(GL_PIXEL_SUBSAMPLE_4444_SGIX)); - rb_define_const(module, "GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX", INT2NUM(GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX)); - rb_define_const(module, "GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX", INT2NUM(GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX)); - rb_define_const(module, "GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX", INT2NUM(GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX)); - rb_define_const(module, "GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX", INT2NUM(GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX)); - rb_define_const(module, "GL_PIXEL_TEX_GEN_MODE_SGIX", INT2NUM(GL_PIXEL_TEX_GEN_MODE_SGIX)); - rb_define_const(module, "GL_PIXEL_TEX_GEN_Q_CEILING_SGIX", INT2NUM(GL_PIXEL_TEX_GEN_Q_CEILING_SGIX)); - rb_define_const(module, "GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX", INT2NUM(GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX)); - rb_define_const(module, "GL_PIXEL_TEX_GEN_Q_ROUND_SGIX", INT2NUM(GL_PIXEL_TEX_GEN_Q_ROUND_SGIX)); - rb_define_const(module, "GL_PIXEL_TEX_GEN_SGIX", INT2NUM(GL_PIXEL_TEX_GEN_SGIX)); - rb_define_const(module, "GL_PIXEL_TEXTURE_SGIS", INT2NUM(GL_PIXEL_TEXTURE_SGIS)); - rb_define_const(module, "GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX", INT2NUM(GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX)); - rb_define_const(module, "GL_PIXEL_TILE_CACHE_INCREMENT_SGIX", INT2NUM(GL_PIXEL_TILE_CACHE_INCREMENT_SGIX)); - rb_define_const(module, "GL_PIXEL_TILE_CACHE_SIZE_SGIX", INT2NUM(GL_PIXEL_TILE_CACHE_SIZE_SGIX)); - rb_define_const(module, "GL_PIXEL_TILE_GRID_DEPTH_SGIX", INT2NUM(GL_PIXEL_TILE_GRID_DEPTH_SGIX)); - rb_define_const(module, "GL_PIXEL_TILE_GRID_HEIGHT_SGIX", INT2NUM(GL_PIXEL_TILE_GRID_HEIGHT_SGIX)); - rb_define_const(module, "GL_PIXEL_TILE_GRID_WIDTH_SGIX", INT2NUM(GL_PIXEL_TILE_GRID_WIDTH_SGIX)); - rb_define_const(module, "GL_PIXEL_TILE_HEIGHT_SGIX", INT2NUM(GL_PIXEL_TILE_HEIGHT_SGIX)); - rb_define_const(module, "GL_PIXEL_TILE_WIDTH_SGIX", INT2NUM(GL_PIXEL_TILE_WIDTH_SGIX)); - rb_define_const(module, "GL_PIXEL_TRANSFORM_2D_EXT", INT2NUM(GL_PIXEL_TRANSFORM_2D_EXT)); - rb_define_const(module, "GL_PIXEL_TRANSFORM_2D_MATRIX_EXT", INT2NUM(GL_PIXEL_TRANSFORM_2D_MATRIX_EXT)); - rb_define_const(module, "GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT", INT2NUM(GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT)); - rb_define_const(module, "GL_PIXEL_UNPACK_BUFFER_ARB", INT2NUM(GL_PIXEL_UNPACK_BUFFER_ARB)); - rb_define_const(module, "GL_PIXEL_UNPACK_BUFFER_BINDING_ARB", INT2NUM(GL_PIXEL_UNPACK_BUFFER_BINDING_ARB)); - rb_define_const(module, "GL_PIXEL_UNPACK_BUFFER_BINDING_EXT", INT2NUM(GL_PIXEL_UNPACK_BUFFER_BINDING_EXT)); - rb_define_const(module, "GL_PIXEL_UNPACK_BUFFER_BINDING", INT2NUM(GL_PIXEL_UNPACK_BUFFER_BINDING)); - rb_define_const(module, "GL_PIXEL_UNPACK_BUFFER_EXT", INT2NUM(GL_PIXEL_UNPACK_BUFFER_EXT)); - rb_define_const(module, "GL_PIXEL_UNPACK_BUFFER", INT2NUM(GL_PIXEL_UNPACK_BUFFER)); - rb_define_const(module, "GL_PN_TRIANGLES_ATI", INT2NUM(GL_PN_TRIANGLES_ATI)); - rb_define_const(module, "GL_PN_TRIANGLES_NORMAL_MODE_ATI", INT2NUM(GL_PN_TRIANGLES_NORMAL_MODE_ATI)); - rb_define_const(module, "GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI", INT2NUM(GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI)); - rb_define_const(module, "GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI", INT2NUM(GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI)); - rb_define_const(module, "GL_PN_TRIANGLES_POINT_MODE_ATI", INT2NUM(GL_PN_TRIANGLES_POINT_MODE_ATI)); - rb_define_const(module, "GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI", INT2NUM(GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI)); - rb_define_const(module, "GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI", INT2NUM(GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI)); - rb_define_const(module, "GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI", INT2NUM(GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI)); - rb_define_const(module, "GL_POINT_BIT", INT2NUM(GL_POINT_BIT)); - rb_define_const(module, "GL_POINT_DISTANCE_ATTENUATION_ARB", INT2NUM(GL_POINT_DISTANCE_ATTENUATION_ARB)); - rb_define_const(module, "GL_POINT_DISTANCE_ATTENUATION", INT2NUM(GL_POINT_DISTANCE_ATTENUATION)); - rb_define_const(module, "GL_POINT_FADE_THRESHOLD_SIZE_ARB", INT2NUM(GL_POINT_FADE_THRESHOLD_SIZE_ARB)); - rb_define_const(module, "GL_POINT_FADE_THRESHOLD_SIZE_EXT", INT2NUM(GL_POINT_FADE_THRESHOLD_SIZE_EXT)); - rb_define_const(module, "GL_POINT_FADE_THRESHOLD_SIZE", INT2NUM(GL_POINT_FADE_THRESHOLD_SIZE)); - rb_define_const(module, "GL_POINT_FADE_THRESHOLD_SIZE_SGIS", INT2NUM(GL_POINT_FADE_THRESHOLD_SIZE_SGIS)); - rb_define_const(module, "GL_POINT", INT2NUM(GL_POINT)); - rb_define_const(module, "GL_POINTS", INT2NUM(GL_POINTS)); - rb_define_const(module, "GL_POINT_SIZE_GRANULARITY", INT2NUM(GL_POINT_SIZE_GRANULARITY)); - rb_define_const(module, "GL_POINT_SIZE", INT2NUM(GL_POINT_SIZE)); - rb_define_const(module, "GL_POINT_SIZE_MAX_ARB", INT2NUM(GL_POINT_SIZE_MAX_ARB)); - rb_define_const(module, "GL_POINT_SIZE_MAX_EXT", INT2NUM(GL_POINT_SIZE_MAX_EXT)); - rb_define_const(module, "GL_POINT_SIZE_MAX", INT2NUM(GL_POINT_SIZE_MAX)); - rb_define_const(module, "GL_POINT_SIZE_MAX_SGIS", INT2NUM(GL_POINT_SIZE_MAX_SGIS)); - rb_define_const(module, "GL_POINT_SIZE_MIN_ARB", INT2NUM(GL_POINT_SIZE_MIN_ARB)); - rb_define_const(module, "GL_POINT_SIZE_MIN_EXT", INT2NUM(GL_POINT_SIZE_MIN_EXT)); - rb_define_const(module, "GL_POINT_SIZE_MIN", INT2NUM(GL_POINT_SIZE_MIN)); - rb_define_const(module, "GL_POINT_SIZE_MIN_SGIS", INT2NUM(GL_POINT_SIZE_MIN_SGIS)); - rb_define_const(module, "GL_POINT_SIZE_RANGE", INT2NUM(GL_POINT_SIZE_RANGE)); - rb_define_const(module, "GL_POINT_SMOOTH_HINT", INT2NUM(GL_POINT_SMOOTH_HINT)); - rb_define_const(module, "GL_POINT_SMOOTH", INT2NUM(GL_POINT_SMOOTH)); - rb_define_const(module, "GL_POINT_SPRITE_ARB", INT2NUM(GL_POINT_SPRITE_ARB)); - rb_define_const(module, "GL_POINT_SPRITE_COORD_ORIGIN", INT2NUM(GL_POINT_SPRITE_COORD_ORIGIN)); - rb_define_const(module, "GL_POINT_SPRITE", INT2NUM(GL_POINT_SPRITE)); - rb_define_const(module, "GL_POINT_SPRITE_NV", INT2NUM(GL_POINT_SPRITE_NV)); - rb_define_const(module, "GL_POINT_SPRITE_R_MODE_NV", INT2NUM(GL_POINT_SPRITE_R_MODE_NV)); - rb_define_const(module, "GL_POINT_TOKEN", INT2NUM(GL_POINT_TOKEN)); - rb_define_const(module, "GL_POLYGON_BIT", INT2NUM(GL_POLYGON_BIT)); - rb_define_const(module, "GL_POLYGON", INT2NUM(GL_POLYGON)); - rb_define_const(module, "GL_POLYGON_MODE", INT2NUM(GL_POLYGON_MODE)); - rb_define_const(module, "GL_POLYGON_OFFSET_BIAS_EXT", INT2NUM(GL_POLYGON_OFFSET_BIAS_EXT)); - rb_define_const(module, "GL_POLYGON_OFFSET_EXT", INT2NUM(GL_POLYGON_OFFSET_EXT)); - rb_define_const(module, "GL_POLYGON_OFFSET_FACTOR_EXT", INT2NUM(GL_POLYGON_OFFSET_FACTOR_EXT)); - rb_define_const(module, "GL_POLYGON_OFFSET_FACTOR", INT2NUM(GL_POLYGON_OFFSET_FACTOR)); - rb_define_const(module, "GL_POLYGON_OFFSET_FILL", INT2NUM(GL_POLYGON_OFFSET_FILL)); - rb_define_const(module, "GL_POLYGON_OFFSET_LINE", INT2NUM(GL_POLYGON_OFFSET_LINE)); - rb_define_const(module, "GL_POLYGON_OFFSET_POINT", INT2NUM(GL_POLYGON_OFFSET_POINT)); - rb_define_const(module, "GL_POLYGON_OFFSET_UNITS", INT2NUM(GL_POLYGON_OFFSET_UNITS)); - rb_define_const(module, "GL_POLYGON_SMOOTH_HINT", INT2NUM(GL_POLYGON_SMOOTH_HINT)); - rb_define_const(module, "GL_POLYGON_SMOOTH", INT2NUM(GL_POLYGON_SMOOTH)); - rb_define_const(module, "GL_POLYGON_STIPPLE_BIT", INT2NUM(GL_POLYGON_STIPPLE_BIT)); - rb_define_const(module, "GL_POLYGON_STIPPLE", INT2NUM(GL_POLYGON_STIPPLE)); - rb_define_const(module, "GL_POLYGON_TOKEN", INT2NUM(GL_POLYGON_TOKEN)); - rb_define_const(module, "GL_POSITION", INT2NUM(GL_POSITION)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_ALPHA_BIAS", INT2NUM(GL_POST_COLOR_MATRIX_ALPHA_BIAS)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI", INT2NUM(GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_ALPHA_SCALE", INT2NUM(GL_POST_COLOR_MATRIX_ALPHA_SCALE)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI", INT2NUM(GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_BLUE_BIAS", INT2NUM(GL_POST_COLOR_MATRIX_BLUE_BIAS)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI", INT2NUM(GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_BLUE_SCALE", INT2NUM(GL_POST_COLOR_MATRIX_BLUE_SCALE)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI", INT2NUM(GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_COLOR_TABLE", INT2NUM(GL_POST_COLOR_MATRIX_COLOR_TABLE)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI", INT2NUM(GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_GREEN_BIAS", INT2NUM(GL_POST_COLOR_MATRIX_GREEN_BIAS)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI", INT2NUM(GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_GREEN_SCALE", INT2NUM(GL_POST_COLOR_MATRIX_GREEN_SCALE)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI", INT2NUM(GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_RED_BIAS", INT2NUM(GL_POST_COLOR_MATRIX_RED_BIAS)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_RED_BIAS_SGI", INT2NUM(GL_POST_COLOR_MATRIX_RED_BIAS_SGI)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_RED_SCALE", INT2NUM(GL_POST_COLOR_MATRIX_RED_SCALE)); - rb_define_const(module, "GL_POST_COLOR_MATRIX_RED_SCALE_SGI", INT2NUM(GL_POST_COLOR_MATRIX_RED_SCALE_SGI)); - rb_define_const(module, "GL_POST_CONVOLUTION_ALPHA_BIAS_EXT", INT2NUM(GL_POST_CONVOLUTION_ALPHA_BIAS_EXT)); - rb_define_const(module, "GL_POST_CONVOLUTION_ALPHA_BIAS", INT2NUM(GL_POST_CONVOLUTION_ALPHA_BIAS)); - rb_define_const(module, "GL_POST_CONVOLUTION_ALPHA_SCALE_EXT", INT2NUM(GL_POST_CONVOLUTION_ALPHA_SCALE_EXT)); - rb_define_const(module, "GL_POST_CONVOLUTION_ALPHA_SCALE", INT2NUM(GL_POST_CONVOLUTION_ALPHA_SCALE)); - rb_define_const(module, "GL_POST_CONVOLUTION_BLUE_BIAS_EXT", INT2NUM(GL_POST_CONVOLUTION_BLUE_BIAS_EXT)); - rb_define_const(module, "GL_POST_CONVOLUTION_BLUE_BIAS", INT2NUM(GL_POST_CONVOLUTION_BLUE_BIAS)); - rb_define_const(module, "GL_POST_CONVOLUTION_BLUE_SCALE_EXT", INT2NUM(GL_POST_CONVOLUTION_BLUE_SCALE_EXT)); - rb_define_const(module, "GL_POST_CONVOLUTION_BLUE_SCALE", INT2NUM(GL_POST_CONVOLUTION_BLUE_SCALE)); - rb_define_const(module, "GL_POST_CONVOLUTION_COLOR_TABLE", INT2NUM(GL_POST_CONVOLUTION_COLOR_TABLE)); - rb_define_const(module, "GL_POST_CONVOLUTION_COLOR_TABLE_SGI", INT2NUM(GL_POST_CONVOLUTION_COLOR_TABLE_SGI)); - rb_define_const(module, "GL_POST_CONVOLUTION_GREEN_BIAS_EXT", INT2NUM(GL_POST_CONVOLUTION_GREEN_BIAS_EXT)); - rb_define_const(module, "GL_POST_CONVOLUTION_GREEN_BIAS", INT2NUM(GL_POST_CONVOLUTION_GREEN_BIAS)); - rb_define_const(module, "GL_POST_CONVOLUTION_GREEN_SCALE_EXT", INT2NUM(GL_POST_CONVOLUTION_GREEN_SCALE_EXT)); - rb_define_const(module, "GL_POST_CONVOLUTION_GREEN_SCALE", INT2NUM(GL_POST_CONVOLUTION_GREEN_SCALE)); - rb_define_const(module, "GL_POST_CONVOLUTION_RED_BIAS_EXT", INT2NUM(GL_POST_CONVOLUTION_RED_BIAS_EXT)); - rb_define_const(module, "GL_POST_CONVOLUTION_RED_BIAS", INT2NUM(GL_POST_CONVOLUTION_RED_BIAS)); - rb_define_const(module, "GL_POST_CONVOLUTION_RED_SCALE_EXT", INT2NUM(GL_POST_CONVOLUTION_RED_SCALE_EXT)); - rb_define_const(module, "GL_POST_CONVOLUTION_RED_SCALE", INT2NUM(GL_POST_CONVOLUTION_RED_SCALE)); - rb_define_const(module, "GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP", INT2NUM(GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP)); - rb_define_const(module, "GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX", INT2NUM(GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX)); - rb_define_const(module, "GL_POST_TEXTURE_FILTER_BIAS_SGIX", INT2NUM(GL_POST_TEXTURE_FILTER_BIAS_SGIX)); - rb_define_const(module, "GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX", INT2NUM(GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX)); - rb_define_const(module, "GL_POST_TEXTURE_FILTER_SCALE_SGIX", INT2NUM(GL_POST_TEXTURE_FILTER_SCALE_SGIX)); - rb_define_const(module, "GL_PREFER_DOUBLEBUFFER_HINT_PGI", INT2NUM(GL_PREFER_DOUBLEBUFFER_HINT_PGI)); - rb_define_const(module, "GL_PRESERVE_ATI", INT2NUM(GL_PRESERVE_ATI)); - rb_define_const(module, "GL_PREVIOUS_ARB", INT2NUM(GL_PREVIOUS_ARB)); - rb_define_const(module, "GL_PREVIOUS_EXT", INT2NUM(GL_PREVIOUS_EXT)); - rb_define_const(module, "GL_PREVIOUS", INT2NUM(GL_PREVIOUS)); - rb_define_const(module, "GL_PREVIOUS_TEXTURE_INPUT_NV", INT2NUM(GL_PREVIOUS_TEXTURE_INPUT_NV)); - rb_define_const(module, "GL_PRIMARY_COLOR_ARB", INT2NUM(GL_PRIMARY_COLOR_ARB)); - rb_define_const(module, "GL_PRIMARY_COLOR_EXT", INT2NUM(GL_PRIMARY_COLOR_EXT)); - rb_define_const(module, "GL_PRIMARY_COLOR", INT2NUM(GL_PRIMARY_COLOR)); - rb_define_const(module, "GL_PRIMARY_COLOR_NV", INT2NUM(GL_PRIMARY_COLOR_NV)); - rb_define_const(module, "GL_PRIMITIVE_RESTART_INDEX_NV", INT2NUM(GL_PRIMITIVE_RESTART_INDEX_NV)); - rb_define_const(module, "GL_PRIMITIVE_RESTART_NV", INT2NUM(GL_PRIMITIVE_RESTART_NV)); - rb_define_const(module, "GL_PROGRAM_ADDRESS_REGISTERS_ARB", INT2NUM(GL_PROGRAM_ADDRESS_REGISTERS_ARB)); - rb_define_const(module, "GL_PROGRAM_ALU_INSTRUCTIONS_ARB", INT2NUM(GL_PROGRAM_ALU_INSTRUCTIONS_ARB)); - rb_define_const(module, "GL_PROGRAM_ATTRIBS_ARB", INT2NUM(GL_PROGRAM_ATTRIBS_ARB)); - rb_define_const(module, "GL_PROGRAM_BINDING_ARB", INT2NUM(GL_PROGRAM_BINDING_ARB)); - rb_define_const(module, "GL_PROGRAM_ERROR_POSITION_ARB", INT2NUM(GL_PROGRAM_ERROR_POSITION_ARB)); - rb_define_const(module, "GL_PROGRAM_ERROR_POSITION_NV", INT2NUM(GL_PROGRAM_ERROR_POSITION_NV)); - rb_define_const(module, "GL_PROGRAM_ERROR_STRING_ARB", INT2NUM(GL_PROGRAM_ERROR_STRING_ARB)); - rb_define_const(module, "GL_PROGRAM_ERROR_STRING_NV", INT2NUM(GL_PROGRAM_ERROR_STRING_NV)); - rb_define_const(module, "GL_PROGRAM_FORMAT_ARB", INT2NUM(GL_PROGRAM_FORMAT_ARB)); - rb_define_const(module, "GL_PROGRAM_FORMAT_ASCII_ARB", INT2NUM(GL_PROGRAM_FORMAT_ASCII_ARB)); - rb_define_const(module, "GL_PROGRAM_INSTRUCTIONS_ARB", INT2NUM(GL_PROGRAM_INSTRUCTIONS_ARB)); - rb_define_const(module, "GL_PROGRAM_LENGTH_ARB", INT2NUM(GL_PROGRAM_LENGTH_ARB)); - rb_define_const(module, "GL_PROGRAM_LENGTH_NV", INT2NUM(GL_PROGRAM_LENGTH_NV)); - rb_define_const(module, "GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB", INT2NUM(GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB)); - rb_define_const(module, "GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB", INT2NUM(GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB)); - rb_define_const(module, "GL_PROGRAM_NATIVE_ATTRIBS_ARB", INT2NUM(GL_PROGRAM_NATIVE_ATTRIBS_ARB)); - rb_define_const(module, "GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB", INT2NUM(GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB)); - rb_define_const(module, "GL_PROGRAM_NATIVE_PARAMETERS_ARB", INT2NUM(GL_PROGRAM_NATIVE_PARAMETERS_ARB)); - rb_define_const(module, "GL_PROGRAM_NATIVE_TEMPORARIES_ARB", INT2NUM(GL_PROGRAM_NATIVE_TEMPORARIES_ARB)); - rb_define_const(module, "GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB", INT2NUM(GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB)); - rb_define_const(module, "GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB", INT2NUM(GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB)); - rb_define_const(module, "GL_PROGRAM_OBJECT_ARB", INT2NUM(GL_PROGRAM_OBJECT_ARB)); - rb_define_const(module, "GL_PROGRAM_PARAMETER_NV", INT2NUM(GL_PROGRAM_PARAMETER_NV)); - rb_define_const(module, "GL_PROGRAM_PARAMETERS_ARB", INT2NUM(GL_PROGRAM_PARAMETERS_ARB)); - rb_define_const(module, "GL_PROGRAM_RESIDENT_NV", INT2NUM(GL_PROGRAM_RESIDENT_NV)); - rb_define_const(module, "GL_PROGRAM_STRING_ARB", INT2NUM(GL_PROGRAM_STRING_ARB)); - rb_define_const(module, "GL_PROGRAM_STRING_NV", INT2NUM(GL_PROGRAM_STRING_NV)); - rb_define_const(module, "GL_PROGRAM_TARGET_NV", INT2NUM(GL_PROGRAM_TARGET_NV)); - rb_define_const(module, "GL_PROGRAM_TEMPORARIES_ARB", INT2NUM(GL_PROGRAM_TEMPORARIES_ARB)); - rb_define_const(module, "GL_PROGRAM_TEX_INDIRECTIONS_ARB", INT2NUM(GL_PROGRAM_TEX_INDIRECTIONS_ARB)); - rb_define_const(module, "GL_PROGRAM_TEX_INSTRUCTIONS_ARB", INT2NUM(GL_PROGRAM_TEX_INSTRUCTIONS_ARB)); - rb_define_const(module, "GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB", INT2NUM(GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB)); - rb_define_const(module, "GL_PROJECTION", INT2NUM(GL_PROJECTION)); - rb_define_const(module, "GL_PROJECTION_MATRIX", INT2NUM(GL_PROJECTION_MATRIX)); - rb_define_const(module, "GL_PROJECTION_STACK_DEPTH", INT2NUM(GL_PROJECTION_STACK_DEPTH)); - rb_define_const(module, "GL_PROXY_COLOR_TABLE", INT2NUM(GL_PROXY_COLOR_TABLE)); - rb_define_const(module, "GL_PROXY_COLOR_TABLE_SGI", INT2NUM(GL_PROXY_COLOR_TABLE_SGI)); - rb_define_const(module, "GL_PROXY_HISTOGRAM_EXT", INT2NUM(GL_PROXY_HISTOGRAM_EXT)); - rb_define_const(module, "GL_PROXY_HISTOGRAM", INT2NUM(GL_PROXY_HISTOGRAM)); - rb_define_const(module, "GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE", INT2NUM(GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE)); - rb_define_const(module, "GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI", INT2NUM(GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI)); - rb_define_const(module, "GL_PROXY_POST_CONVOLUTION_COLOR_TABLE", INT2NUM(GL_PROXY_POST_CONVOLUTION_COLOR_TABLE)); - rb_define_const(module, "GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI", INT2NUM(GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI)); - rb_define_const(module, "GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP", INT2NUM(GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP)); - rb_define_const(module, "GL_PROXY_TEXTURE_1D_EXT", INT2NUM(GL_PROXY_TEXTURE_1D_EXT)); - rb_define_const(module, "GL_PROXY_TEXTURE_1D", INT2NUM(GL_PROXY_TEXTURE_1D)); - rb_define_const(module, "GL_PROXY_TEXTURE_1D_STACK_MESAX", INT2NUM(GL_PROXY_TEXTURE_1D_STACK_MESAX)); - rb_define_const(module, "GL_PROXY_TEXTURE_2D_EXT", INT2NUM(GL_PROXY_TEXTURE_2D_EXT)); - rb_define_const(module, "GL_PROXY_TEXTURE_2D", INT2NUM(GL_PROXY_TEXTURE_2D)); - rb_define_const(module, "GL_PROXY_TEXTURE_2D_STACK_MESAX", INT2NUM(GL_PROXY_TEXTURE_2D_STACK_MESAX)); - rb_define_const(module, "GL_PROXY_TEXTURE_3D_EXT", INT2NUM(GL_PROXY_TEXTURE_3D_EXT)); - rb_define_const(module, "GL_PROXY_TEXTURE_3D", INT2NUM(GL_PROXY_TEXTURE_3D)); - rb_define_const(module, "GL_PROXY_TEXTURE_4D_SGIS", INT2NUM(GL_PROXY_TEXTURE_4D_SGIS)); - rb_define_const(module, "GL_PROXY_TEXTURE_COLOR_TABLE_SGI", INT2NUM(GL_PROXY_TEXTURE_COLOR_TABLE_SGI)); - rb_define_const(module, "GL_PROXY_TEXTURE_CUBE_MAP_ARB", INT2NUM(GL_PROXY_TEXTURE_CUBE_MAP_ARB)); - rb_define_const(module, "GL_PROXY_TEXTURE_CUBE_MAP_EXT", INT2NUM(GL_PROXY_TEXTURE_CUBE_MAP_EXT)); - rb_define_const(module, "GL_PROXY_TEXTURE_CUBE_MAP", INT2NUM(GL_PROXY_TEXTURE_CUBE_MAP)); - rb_define_const(module, "GL_PROXY_TEXTURE_RECTANGLE_ARB", INT2NUM(GL_PROXY_TEXTURE_RECTANGLE_ARB)); - rb_define_const(module, "GL_PROXY_TEXTURE_RECTANGLE_NV", INT2NUM(GL_PROXY_TEXTURE_RECTANGLE_NV)); - rb_define_const(module, "GL_Q", INT2NUM(GL_Q)); - rb_define_const(module, "GL_QUAD_ALPHA4_SGIS", INT2NUM(GL_QUAD_ALPHA4_SGIS)); - rb_define_const(module, "GL_QUAD_ALPHA8_SGIS", INT2NUM(GL_QUAD_ALPHA8_SGIS)); - rb_define_const(module, "GL_QUAD_INTENSITY4_SGIS", INT2NUM(GL_QUAD_INTENSITY4_SGIS)); - rb_define_const(module, "GL_QUAD_INTENSITY8_SGIS", INT2NUM(GL_QUAD_INTENSITY8_SGIS)); - rb_define_const(module, "GL_QUAD_LUMINANCE4_SGIS", INT2NUM(GL_QUAD_LUMINANCE4_SGIS)); - rb_define_const(module, "GL_QUAD_LUMINANCE8_SGIS", INT2NUM(GL_QUAD_LUMINANCE8_SGIS)); - rb_define_const(module, "GL_QUAD_MESH_SUN", INT2NUM(GL_QUAD_MESH_SUN)); - rb_define_const(module, "GL_QUADRATIC_ATTENUATION", INT2NUM(GL_QUADRATIC_ATTENUATION)); - rb_define_const(module, "GL_QUADS", INT2NUM(GL_QUADS)); - rb_define_const(module, "GL_QUAD_STRIP", INT2NUM(GL_QUAD_STRIP)); - rb_define_const(module, "GL_QUAD_TEXTURE_SELECT_SGIS", INT2NUM(GL_QUAD_TEXTURE_SELECT_SGIS)); - rb_define_const(module, "GL_QUARTER_BIT_ATI", INT2NUM(GL_QUARTER_BIT_ATI)); - rb_define_const(module, "GL_QUERY_COUNTER_BITS_ARB", INT2NUM(GL_QUERY_COUNTER_BITS_ARB)); - rb_define_const(module, "GL_QUERY_COUNTER_BITS", INT2NUM(GL_QUERY_COUNTER_BITS)); - rb_define_const(module, "GL_QUERY_RESULT_ARB", INT2NUM(GL_QUERY_RESULT_ARB)); - rb_define_const(module, "GL_QUERY_RESULT_AVAILABLE_ARB", INT2NUM(GL_QUERY_RESULT_AVAILABLE_ARB)); - rb_define_const(module, "GL_QUERY_RESULT_AVAILABLE", INT2NUM(GL_QUERY_RESULT_AVAILABLE)); - rb_define_const(module, "GL_QUERY_RESULT", INT2NUM(GL_QUERY_RESULT)); - rb_define_const(module, "GL_R1UI_C3F_V3F_SUN", INT2NUM(GL_R1UI_C3F_V3F_SUN)); - rb_define_const(module, "GL_R1UI_C4F_N3F_V3F_SUN", INT2NUM(GL_R1UI_C4F_N3F_V3F_SUN)); - rb_define_const(module, "GL_R1UI_C4UB_V3F_SUN", INT2NUM(GL_R1UI_C4UB_V3F_SUN)); - rb_define_const(module, "GL_R1UI_N3F_V3F_SUN", INT2NUM(GL_R1UI_N3F_V3F_SUN)); - rb_define_const(module, "GL_R1UI_T2F_C4F_N3F_V3F_SUN", INT2NUM(GL_R1UI_T2F_C4F_N3F_V3F_SUN)); - rb_define_const(module, "GL_R1UI_T2F_N3F_V3F_SUN", INT2NUM(GL_R1UI_T2F_N3F_V3F_SUN)); - rb_define_const(module, "GL_R1UI_T2F_V3F_SUN", INT2NUM(GL_R1UI_T2F_V3F_SUN)); - rb_define_const(module, "GL_R1UI_V3F_SUN", INT2NUM(GL_R1UI_V3F_SUN)); - rb_define_const(module, "GL_R3_G3_B2", INT2NUM(GL_R3_G3_B2)); - rb_define_const(module, "GL_RASTER_POSITION_UNCLIPPED_IBM", INT2NUM(GL_RASTER_POSITION_UNCLIPPED_IBM)); - rb_define_const(module, "GL_READ_BUFFER", INT2NUM(GL_READ_BUFFER)); - rb_define_const(module, "GL_READ_FRAMEBUFFER_BINDING_EXT", INT2NUM(GL_READ_FRAMEBUFFER_BINDING_EXT)); - rb_define_const(module, "GL_READ_FRAMEBUFFER_EXT", INT2NUM(GL_READ_FRAMEBUFFER_EXT)); - rb_define_const(module, "GL_READ_ONLY_ARB", INT2NUM(GL_READ_ONLY_ARB)); - rb_define_const(module, "GL_READ_ONLY", INT2NUM(GL_READ_ONLY)); - rb_define_const(module, "GL_READ_PIXEL_DATA_RANGE_LENGTH_NV", INT2NUM(GL_READ_PIXEL_DATA_RANGE_LENGTH_NV)); - rb_define_const(module, "GL_READ_PIXEL_DATA_RANGE_NV", INT2NUM(GL_READ_PIXEL_DATA_RANGE_NV)); - rb_define_const(module, "GL_READ_PIXEL_DATA_RANGE_POINTER_NV", INT2NUM(GL_READ_PIXEL_DATA_RANGE_POINTER_NV)); - rb_define_const(module, "GL_READ_WRITE_ARB", INT2NUM(GL_READ_WRITE_ARB)); - rb_define_const(module, "GL_READ_WRITE", INT2NUM(GL_READ_WRITE)); - rb_define_const(module, "GL_RECLAIM_MEMORY_HINT_PGI", INT2NUM(GL_RECLAIM_MEMORY_HINT_PGI)); - rb_define_const(module, "GL_RED_BIAS", INT2NUM(GL_RED_BIAS)); - rb_define_const(module, "GL_RED_BIT_ATI", INT2NUM(GL_RED_BIT_ATI)); - rb_define_const(module, "GL_RED_BITS", INT2NUM(GL_RED_BITS)); - rb_define_const(module, "GL_RED", INT2NUM(GL_RED)); - rb_define_const(module, "GL_RED_MAX_CLAMP_INGR", INT2NUM(GL_RED_MAX_CLAMP_INGR)); - rb_define_const(module, "GL_RED_MIN_CLAMP_INGR", INT2NUM(GL_RED_MIN_CLAMP_INGR)); - rb_define_const(module, "GL_RED_SCALE", INT2NUM(GL_RED_SCALE)); - rb_define_const(module, "GL_REDUCE_EXT", INT2NUM(GL_REDUCE_EXT)); - rb_define_const(module, "GL_REDUCE", INT2NUM(GL_REDUCE)); - rb_define_const(module, "GL_REFERENCE_PLANE_EQUATION_SGIX", INT2NUM(GL_REFERENCE_PLANE_EQUATION_SGIX)); - rb_define_const(module, "GL_REFERENCE_PLANE_SGIX", INT2NUM(GL_REFERENCE_PLANE_SGIX)); - rb_define_const(module, "GL_REFLECTION_MAP_ARB", INT2NUM(GL_REFLECTION_MAP_ARB)); - rb_define_const(module, "GL_REFLECTION_MAP_EXT", INT2NUM(GL_REFLECTION_MAP_EXT)); - rb_define_const(module, "GL_REFLECTION_MAP", INT2NUM(GL_REFLECTION_MAP)); - rb_define_const(module, "GL_REFLECTION_MAP_NV", INT2NUM(GL_REFLECTION_MAP_NV)); - rb_define_const(module, "GL_REG_0_ATI", INT2NUM(GL_REG_0_ATI)); - rb_define_const(module, "GL_REG_10_ATI", INT2NUM(GL_REG_10_ATI)); - rb_define_const(module, "GL_REG_11_ATI", INT2NUM(GL_REG_11_ATI)); - rb_define_const(module, "GL_REG_12_ATI", INT2NUM(GL_REG_12_ATI)); - rb_define_const(module, "GL_REG_13_ATI", INT2NUM(GL_REG_13_ATI)); - rb_define_const(module, "GL_REG_14_ATI", INT2NUM(GL_REG_14_ATI)); - rb_define_const(module, "GL_REG_15_ATI", INT2NUM(GL_REG_15_ATI)); - rb_define_const(module, "GL_REG_16_ATI", INT2NUM(GL_REG_16_ATI)); - rb_define_const(module, "GL_REG_17_ATI", INT2NUM(GL_REG_17_ATI)); - rb_define_const(module, "GL_REG_18_ATI", INT2NUM(GL_REG_18_ATI)); - rb_define_const(module, "GL_REG_19_ATI", INT2NUM(GL_REG_19_ATI)); - rb_define_const(module, "GL_REG_1_ATI", INT2NUM(GL_REG_1_ATI)); - rb_define_const(module, "GL_REG_20_ATI", INT2NUM(GL_REG_20_ATI)); - rb_define_const(module, "GL_REG_21_ATI", INT2NUM(GL_REG_21_ATI)); - rb_define_const(module, "GL_REG_22_ATI", INT2NUM(GL_REG_22_ATI)); - rb_define_const(module, "GL_REG_23_ATI", INT2NUM(GL_REG_23_ATI)); - rb_define_const(module, "GL_REG_24_ATI", INT2NUM(GL_REG_24_ATI)); - rb_define_const(module, "GL_REG_25_ATI", INT2NUM(GL_REG_25_ATI)); - rb_define_const(module, "GL_REG_26_ATI", INT2NUM(GL_REG_26_ATI)); - rb_define_const(module, "GL_REG_27_ATI", INT2NUM(GL_REG_27_ATI)); - rb_define_const(module, "GL_REG_28_ATI", INT2NUM(GL_REG_28_ATI)); - rb_define_const(module, "GL_REG_29_ATI", INT2NUM(GL_REG_29_ATI)); - rb_define_const(module, "GL_REG_2_ATI", INT2NUM(GL_REG_2_ATI)); - rb_define_const(module, "GL_REG_30_ATI", INT2NUM(GL_REG_30_ATI)); - rb_define_const(module, "GL_REG_31_ATI", INT2NUM(GL_REG_31_ATI)); - rb_define_const(module, "GL_REG_3_ATI", INT2NUM(GL_REG_3_ATI)); - rb_define_const(module, "GL_REG_4_ATI", INT2NUM(GL_REG_4_ATI)); - rb_define_const(module, "GL_REG_5_ATI", INT2NUM(GL_REG_5_ATI)); - rb_define_const(module, "GL_REG_6_ATI", INT2NUM(GL_REG_6_ATI)); - rb_define_const(module, "GL_REG_7_ATI", INT2NUM(GL_REG_7_ATI)); - rb_define_const(module, "GL_REG_8_ATI", INT2NUM(GL_REG_8_ATI)); - rb_define_const(module, "GL_REG_9_ATI", INT2NUM(GL_REG_9_ATI)); - rb_define_const(module, "GL_REGISTER_COMBINERS_NV", INT2NUM(GL_REGISTER_COMBINERS_NV)); - rb_define_const(module, "GL_RENDERBUFFER_ALPHA_SIZE_EXT", INT2NUM(GL_RENDERBUFFER_ALPHA_SIZE_EXT)); - rb_define_const(module, "GL_RENDERBUFFER_BINDING_EXT", INT2NUM(GL_RENDERBUFFER_BINDING_EXT)); - rb_define_const(module, "GL_RENDERBUFFER_BLUE_SIZE_EXT", INT2NUM(GL_RENDERBUFFER_BLUE_SIZE_EXT)); - rb_define_const(module, "GL_RENDERBUFFER_DEPTH_SIZE_EXT", INT2NUM(GL_RENDERBUFFER_DEPTH_SIZE_EXT)); - rb_define_const(module, "GL_RENDERBUFFER_EXT", INT2NUM(GL_RENDERBUFFER_EXT)); - rb_define_const(module, "GL_RENDERBUFFER_GREEN_SIZE_EXT", INT2NUM(GL_RENDERBUFFER_GREEN_SIZE_EXT)); - rb_define_const(module, "GL_RENDERBUFFER_HEIGHT_EXT", INT2NUM(GL_RENDERBUFFER_HEIGHT_EXT)); - rb_define_const(module, "GL_RENDERBUFFER_INTERNAL_FORMAT_EXT", INT2NUM(GL_RENDERBUFFER_INTERNAL_FORMAT_EXT)); - rb_define_const(module, "GL_RENDERBUFFER_RED_SIZE_EXT", INT2NUM(GL_RENDERBUFFER_RED_SIZE_EXT)); - rb_define_const(module, "GL_RENDERBUFFER_SAMPLES_EXT", INT2NUM(GL_RENDERBUFFER_SAMPLES_EXT)); - rb_define_const(module, "GL_RENDERBUFFER_STENCIL_SIZE_EXT", INT2NUM(GL_RENDERBUFFER_STENCIL_SIZE_EXT)); - rb_define_const(module, "GL_RENDERBUFFER_WIDTH_EXT", INT2NUM(GL_RENDERBUFFER_WIDTH_EXT)); - rb_define_const(module, "GL_RENDERER", INT2NUM(GL_RENDERER)); - rb_define_const(module, "GL_RENDER", INT2NUM(GL_RENDER)); - rb_define_const(module, "GL_RENDER_MODE", INT2NUM(GL_RENDER_MODE)); - rb_define_const(module, "GL_REPEAT", INT2NUM(GL_REPEAT)); - rb_define_const(module, "GL_REPLACE_EXT", INT2NUM(GL_REPLACE_EXT)); - rb_define_const(module, "GL_REPLACE", INT2NUM(GL_REPLACE)); - rb_define_const(module, "GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN", INT2NUM(GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN)); - rb_define_const(module, "GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN", INT2NUM(GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN)); - rb_define_const(module, "GL_REPLACEMENT_CODE_ARRAY_SUN", INT2NUM(GL_REPLACEMENT_CODE_ARRAY_SUN)); - rb_define_const(module, "GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN", INT2NUM(GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN)); - rb_define_const(module, "GL_REPLACEMENT_CODE_SUN", INT2NUM(GL_REPLACEMENT_CODE_SUN)); - rb_define_const(module, "GL_REPLACE_MIDDLE_SUN", INT2NUM(GL_REPLACE_MIDDLE_SUN)); - rb_define_const(module, "GL_REPLACE_OLDEST_SUN", INT2NUM(GL_REPLACE_OLDEST_SUN)); - rb_define_const(module, "GL_REPLICATE_BORDER_HP", INT2NUM(GL_REPLICATE_BORDER_HP)); - rb_define_const(module, "GL_REPLICATE_BORDER", INT2NUM(GL_REPLICATE_BORDER)); - rb_define_const(module, "GL_RESAMPLE_AVERAGE_OML", INT2NUM(GL_RESAMPLE_AVERAGE_OML)); - rb_define_const(module, "GL_RESAMPLE_DECIMATE_OML", INT2NUM(GL_RESAMPLE_DECIMATE_OML)); - rb_define_const(module, "GL_RESAMPLE_DECIMATE_SGIX", INT2NUM(GL_RESAMPLE_DECIMATE_SGIX)); - rb_define_const(module, "GL_RESAMPLE_REPLICATE_OML", INT2NUM(GL_RESAMPLE_REPLICATE_OML)); - rb_define_const(module, "GL_RESAMPLE_REPLICATE_SGIX", INT2NUM(GL_RESAMPLE_REPLICATE_SGIX)); - rb_define_const(module, "GL_RESAMPLE_ZERO_FILL_OML", INT2NUM(GL_RESAMPLE_ZERO_FILL_OML)); - rb_define_const(module, "GL_RESAMPLE_ZERO_FILL_SGIX", INT2NUM(GL_RESAMPLE_ZERO_FILL_SGIX)); - rb_define_const(module, "GL_RESCALE_NORMAL_EXT", INT2NUM(GL_RESCALE_NORMAL_EXT)); - rb_define_const(module, "GL_RESCALE_NORMAL", INT2NUM(GL_RESCALE_NORMAL)); - rb_define_const(module, "GL_RESTART_SUN", INT2NUM(GL_RESTART_SUN)); - rb_define_const(module, "GL_RETURN", INT2NUM(GL_RETURN)); - rb_define_const(module, "GL_RGB10_A2_EXT", INT2NUM(GL_RGB10_A2_EXT)); - rb_define_const(module, "GL_RGB10_A2", INT2NUM(GL_RGB10_A2)); - rb_define_const(module, "GL_RGB10_EXT", INT2NUM(GL_RGB10_EXT)); - rb_define_const(module, "GL_RGB10", INT2NUM(GL_RGB10)); - rb_define_const(module, "GL_RGB12_EXT", INT2NUM(GL_RGB12_EXT)); - rb_define_const(module, "GL_RGB12", INT2NUM(GL_RGB12)); - rb_define_const(module, "GL_RGB16_EXT", INT2NUM(GL_RGB16_EXT)); - rb_define_const(module, "GL_RGB16F_ARB", INT2NUM(GL_RGB16F_ARB)); - rb_define_const(module, "GL_RGB16", INT2NUM(GL_RGB16)); - rb_define_const(module, "GL_RGB2_EXT", INT2NUM(GL_RGB2_EXT)); - rb_define_const(module, "GL_RGB32F_ARB", INT2NUM(GL_RGB32F_ARB)); - rb_define_const(module, "GL_RGB4_EXT", INT2NUM(GL_RGB4_EXT)); - rb_define_const(module, "GL_RGB4", INT2NUM(GL_RGB4)); - rb_define_const(module, "GL_RGB4_S3TC", INT2NUM(GL_RGB4_S3TC)); - rb_define_const(module, "GL_RGB5_A1_EXT", INT2NUM(GL_RGB5_A1_EXT)); - rb_define_const(module, "GL_RGB5_A1", INT2NUM(GL_RGB5_A1)); - rb_define_const(module, "GL_RGB5_EXT", INT2NUM(GL_RGB5_EXT)); - rb_define_const(module, "GL_RGB5", INT2NUM(GL_RGB5)); - rb_define_const(module, "GL_RGB8_EXT", INT2NUM(GL_RGB8_EXT)); - rb_define_const(module, "GL_RGB8", INT2NUM(GL_RGB8)); - rb_define_const(module, "GL_RGBA12_EXT", INT2NUM(GL_RGBA12_EXT)); - rb_define_const(module, "GL_RGBA12", INT2NUM(GL_RGBA12)); - rb_define_const(module, "GL_RGBA16_EXT", INT2NUM(GL_RGBA16_EXT)); - rb_define_const(module, "GL_RGBA16F_ARB", INT2NUM(GL_RGBA16F_ARB)); - rb_define_const(module, "GL_RGBA16", INT2NUM(GL_RGBA16)); - rb_define_const(module, "GL_RGBA2_EXT", INT2NUM(GL_RGBA2_EXT)); - rb_define_const(module, "GL_RGBA2", INT2NUM(GL_RGBA2)); - rb_define_const(module, "GL_RGBA32F_ARB", INT2NUM(GL_RGBA32F_ARB)); - rb_define_const(module, "GL_RGBA4_EXT", INT2NUM(GL_RGBA4_EXT)); - rb_define_const(module, "GL_RGBA4", INT2NUM(GL_RGBA4)); - rb_define_const(module, "GL_RGBA4_S3TC", INT2NUM(GL_RGBA4_S3TC)); - rb_define_const(module, "GL_RGBA8_EXT", INT2NUM(GL_RGBA8_EXT)); - rb_define_const(module, "GL_RGBA8", INT2NUM(GL_RGBA8)); - rb_define_const(module, "GL_RGBA_FLOAT16_ATI", INT2NUM(GL_RGBA_FLOAT16_ATI)); - rb_define_const(module, "GL_RGBA_FLOAT32_ATI", INT2NUM(GL_RGBA_FLOAT32_ATI)); - rb_define_const(module, "GL_RGBA_FLOAT_MODE_ARB", INT2NUM(GL_RGBA_FLOAT_MODE_ARB)); - rb_define_const(module, "GL_RGBA", INT2NUM(GL_RGBA)); - rb_define_const(module, "GL_RGBA_MODE", INT2NUM(GL_RGBA_MODE)); - rb_define_const(module, "GL_RGBA_S3TC", INT2NUM(GL_RGBA_S3TC)); - rb_define_const(module, "GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV", INT2NUM(GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV)); - rb_define_const(module, "GL_RGB_FLOAT16_ATI", INT2NUM(GL_RGB_FLOAT16_ATI)); - rb_define_const(module, "GL_RGB_FLOAT32_ATI", INT2NUM(GL_RGB_FLOAT32_ATI)); - rb_define_const(module, "GL_RGB", INT2NUM(GL_RGB)); - rb_define_const(module, "GL_RGB_S3TC", INT2NUM(GL_RGB_S3TC)); - rb_define_const(module, "GL_RGB_SCALE_ARB", INT2NUM(GL_RGB_SCALE_ARB)); - rb_define_const(module, "GL_RGB_SCALE_EXT", INT2NUM(GL_RGB_SCALE_EXT)); - rb_define_const(module, "GL_RGB_SCALE", INT2NUM(GL_RGB_SCALE)); - rb_define_const(module, "GL_RIGHT", INT2NUM(GL_RIGHT)); - rb_define_const(module, "GL_R", INT2NUM(GL_R)); - rb_define_const(module, "GL_SAMPLE_ALPHA_TO_COVERAGE_ARB", INT2NUM(GL_SAMPLE_ALPHA_TO_COVERAGE_ARB)); - rb_define_const(module, "GL_SAMPLE_ALPHA_TO_COVERAGE", INT2NUM(GL_SAMPLE_ALPHA_TO_COVERAGE)); - rb_define_const(module, "GL_SAMPLE_ALPHA_TO_MASK_EXT", INT2NUM(GL_SAMPLE_ALPHA_TO_MASK_EXT)); - rb_define_const(module, "GL_SAMPLE_ALPHA_TO_MASK_SGIS", INT2NUM(GL_SAMPLE_ALPHA_TO_MASK_SGIS)); - rb_define_const(module, "GL_SAMPLE_ALPHA_TO_ONE_ARB", INT2NUM(GL_SAMPLE_ALPHA_TO_ONE_ARB)); - rb_define_const(module, "GL_SAMPLE_ALPHA_TO_ONE_EXT", INT2NUM(GL_SAMPLE_ALPHA_TO_ONE_EXT)); - rb_define_const(module, "GL_SAMPLE_ALPHA_TO_ONE", INT2NUM(GL_SAMPLE_ALPHA_TO_ONE)); - rb_define_const(module, "GL_SAMPLE_ALPHA_TO_ONE_SGIS", INT2NUM(GL_SAMPLE_ALPHA_TO_ONE_SGIS)); - rb_define_const(module, "GL_SAMPLE_BUFFERS_3DFX", INT2NUM(GL_SAMPLE_BUFFERS_3DFX)); - rb_define_const(module, "GL_SAMPLE_BUFFERS_ARB", INT2NUM(GL_SAMPLE_BUFFERS_ARB)); - rb_define_const(module, "GL_SAMPLE_BUFFERS_EXT", INT2NUM(GL_SAMPLE_BUFFERS_EXT)); - rb_define_const(module, "GL_SAMPLE_BUFFERS", INT2NUM(GL_SAMPLE_BUFFERS)); - rb_define_const(module, "GL_SAMPLE_BUFFERS_SGIS", INT2NUM(GL_SAMPLE_BUFFERS_SGIS)); - rb_define_const(module, "GL_SAMPLE_COVERAGE_ARB", INT2NUM(GL_SAMPLE_COVERAGE_ARB)); - rb_define_const(module, "GL_SAMPLE_COVERAGE", INT2NUM(GL_SAMPLE_COVERAGE)); - rb_define_const(module, "GL_SAMPLE_COVERAGE_INVERT_ARB", INT2NUM(GL_SAMPLE_COVERAGE_INVERT_ARB)); - rb_define_const(module, "GL_SAMPLE_COVERAGE_INVERT", INT2NUM(GL_SAMPLE_COVERAGE_INVERT)); - rb_define_const(module, "GL_SAMPLE_COVERAGE_VALUE_ARB", INT2NUM(GL_SAMPLE_COVERAGE_VALUE_ARB)); - rb_define_const(module, "GL_SAMPLE_COVERAGE_VALUE", INT2NUM(GL_SAMPLE_COVERAGE_VALUE)); - rb_define_const(module, "GL_SAMPLE_MASK_EXT", INT2NUM(GL_SAMPLE_MASK_EXT)); - rb_define_const(module, "GL_SAMPLE_MASK_INVERT_EXT", INT2NUM(GL_SAMPLE_MASK_INVERT_EXT)); - rb_define_const(module, "GL_SAMPLE_MASK_INVERT_SGIS", INT2NUM(GL_SAMPLE_MASK_INVERT_SGIS)); - rb_define_const(module, "GL_SAMPLE_MASK_SGIS", INT2NUM(GL_SAMPLE_MASK_SGIS)); - rb_define_const(module, "GL_SAMPLE_MASK_VALUE_EXT", INT2NUM(GL_SAMPLE_MASK_VALUE_EXT)); - rb_define_const(module, "GL_SAMPLE_MASK_VALUE_SGIS", INT2NUM(GL_SAMPLE_MASK_VALUE_SGIS)); - rb_define_const(module, "GL_SAMPLE_PATTERN_EXT", INT2NUM(GL_SAMPLE_PATTERN_EXT)); - rb_define_const(module, "GL_SAMPLE_PATTERN_SGIS", INT2NUM(GL_SAMPLE_PATTERN_SGIS)); - rb_define_const(module, "GL_SAMPLER_1D_ARB", INT2NUM(GL_SAMPLER_1D_ARB)); - rb_define_const(module, "GL_SAMPLER_1D", INT2NUM(GL_SAMPLER_1D)); - rb_define_const(module, "GL_SAMPLER_1D_SHADOW_ARB", INT2NUM(GL_SAMPLER_1D_SHADOW_ARB)); - rb_define_const(module, "GL_SAMPLER_1D_SHADOW", INT2NUM(GL_SAMPLER_1D_SHADOW)); - rb_define_const(module, "GL_SAMPLER_2D_ARB", INT2NUM(GL_SAMPLER_2D_ARB)); - rb_define_const(module, "GL_SAMPLER_2D", INT2NUM(GL_SAMPLER_2D)); - rb_define_const(module, "GL_SAMPLER_2D_RECT_ARB", INT2NUM(GL_SAMPLER_2D_RECT_ARB)); - rb_define_const(module, "GL_SAMPLER_2D_RECT_SHADOW_ARB", INT2NUM(GL_SAMPLER_2D_RECT_SHADOW_ARB)); - rb_define_const(module, "GL_SAMPLER_2D_SHADOW_ARB", INT2NUM(GL_SAMPLER_2D_SHADOW_ARB)); - rb_define_const(module, "GL_SAMPLER_2D_SHADOW", INT2NUM(GL_SAMPLER_2D_SHADOW)); - rb_define_const(module, "GL_SAMPLER_3D_ARB", INT2NUM(GL_SAMPLER_3D_ARB)); - rb_define_const(module, "GL_SAMPLER_3D", INT2NUM(GL_SAMPLER_3D)); - rb_define_const(module, "GL_SAMPLER_CUBE_ARB", INT2NUM(GL_SAMPLER_CUBE_ARB)); - rb_define_const(module, "GL_SAMPLER_CUBE", INT2NUM(GL_SAMPLER_CUBE)); - rb_define_const(module, "GL_SAMPLES_3DFX", INT2NUM(GL_SAMPLES_3DFX)); - rb_define_const(module, "GL_SAMPLES_ARB", INT2NUM(GL_SAMPLES_ARB)); - rb_define_const(module, "GL_SAMPLES_EXT", INT2NUM(GL_SAMPLES_EXT)); - rb_define_const(module, "GL_SAMPLES", INT2NUM(GL_SAMPLES)); - rb_define_const(module, "GL_SAMPLES_PASSED_ARB", INT2NUM(GL_SAMPLES_PASSED_ARB)); - rb_define_const(module, "GL_SAMPLES_PASSED", INT2NUM(GL_SAMPLES_PASSED)); - rb_define_const(module, "GL_SAMPLES_SGIS", INT2NUM(GL_SAMPLES_SGIS)); - rb_define_const(module, "GL_SATURATE_BIT_ATI", INT2NUM(GL_SATURATE_BIT_ATI)); - rb_define_const(module, "GL_SCALAR_EXT", INT2NUM(GL_SCALAR_EXT)); - rb_define_const(module, "GL_SCALEBIAS_HINT_SGIX", INT2NUM(GL_SCALEBIAS_HINT_SGIX)); - rb_define_const(module, "GL_SCALE_BY_FOUR_NV", INT2NUM(GL_SCALE_BY_FOUR_NV)); - rb_define_const(module, "GL_SCALE_BY_ONE_HALF_NV", INT2NUM(GL_SCALE_BY_ONE_HALF_NV)); - rb_define_const(module, "GL_SCALE_BY_TWO_NV", INT2NUM(GL_SCALE_BY_TWO_NV)); - rb_define_const(module, "GL_SCISSOR_BIT", INT2NUM(GL_SCISSOR_BIT)); - rb_define_const(module, "GL_SCISSOR_BOX", INT2NUM(GL_SCISSOR_BOX)); - rb_define_const(module, "GL_SCISSOR_TEST", INT2NUM(GL_SCISSOR_TEST)); - rb_define_const(module, "GL_SCREEN_COORDINATES_REND", INT2NUM(GL_SCREEN_COORDINATES_REND)); - rb_define_const(module, "GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB", INT2NUM(GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB)); - rb_define_const(module, "GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING", INT2NUM(GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING)); - rb_define_const(module, "GL_SECONDARY_COLOR_ARRAY_EXT", INT2NUM(GL_SECONDARY_COLOR_ARRAY_EXT)); - rb_define_const(module, "GL_SECONDARY_COLOR_ARRAY", INT2NUM(GL_SECONDARY_COLOR_ARRAY)); - rb_define_const(module, "GL_SECONDARY_COLOR_ARRAY_LIST_IBM", INT2NUM(GL_SECONDARY_COLOR_ARRAY_LIST_IBM)); - rb_define_const(module, "GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM", INT2NUM(GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM)); - rb_define_const(module, "GL_SECONDARY_COLOR_ARRAY_POINTER_EXT", INT2NUM(GL_SECONDARY_COLOR_ARRAY_POINTER_EXT)); - rb_define_const(module, "GL_SECONDARY_COLOR_ARRAY_POINTER", INT2NUM(GL_SECONDARY_COLOR_ARRAY_POINTER)); - rb_define_const(module, "GL_SECONDARY_COLOR_ARRAY_SIZE_EXT", INT2NUM(GL_SECONDARY_COLOR_ARRAY_SIZE_EXT)); - rb_define_const(module, "GL_SECONDARY_COLOR_ARRAY_SIZE", INT2NUM(GL_SECONDARY_COLOR_ARRAY_SIZE)); - rb_define_const(module, "GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT", INT2NUM(GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT)); - rb_define_const(module, "GL_SECONDARY_COLOR_ARRAY_STRIDE", INT2NUM(GL_SECONDARY_COLOR_ARRAY_STRIDE)); - rb_define_const(module, "GL_SECONDARY_COLOR_ARRAY_TYPE_EXT", INT2NUM(GL_SECONDARY_COLOR_ARRAY_TYPE_EXT)); - rb_define_const(module, "GL_SECONDARY_COLOR_ARRAY_TYPE", INT2NUM(GL_SECONDARY_COLOR_ARRAY_TYPE)); - rb_define_const(module, "GL_SECONDARY_COLOR_NV", INT2NUM(GL_SECONDARY_COLOR_NV)); - rb_define_const(module, "GL_SECONDARY_INTERPOLATOR_ATI", INT2NUM(GL_SECONDARY_INTERPOLATOR_ATI)); - rb_define_const(module, "GL_SELECT", INT2NUM(GL_SELECT)); - rb_define_const(module, "GL_SELECTION_BUFFER_POINTER", INT2NUM(GL_SELECTION_BUFFER_POINTER)); - rb_define_const(module, "GL_SELECTION_BUFFER_SIZE", INT2NUM(GL_SELECTION_BUFFER_SIZE)); - rb_define_const(module, "GL_SEPARABLE_2D_EXT", INT2NUM(GL_SEPARABLE_2D_EXT)); - rb_define_const(module, "GL_SEPARABLE_2D", INT2NUM(GL_SEPARABLE_2D)); - rb_define_const(module, "GL_SEPARATE_SPECULAR_COLOR_EXT", INT2NUM(GL_SEPARATE_SPECULAR_COLOR_EXT)); - rb_define_const(module, "GL_SEPARATE_SPECULAR_COLOR", INT2NUM(GL_SEPARATE_SPECULAR_COLOR)); - rb_define_const(module, "GL_SET", INT2NUM(GL_SET)); - rb_define_const(module, "GL_SGI_color_matrix", INT2NUM(GL_SGI_color_matrix)); - rb_define_const(module, "GL_SGI_color_table", INT2NUM(GL_SGI_color_table)); - rb_define_const(module, "GL_SGIS_detail_texture", INT2NUM(GL_SGIS_detail_texture)); - rb_define_const(module, "GL_SGIS_fog_function", INT2NUM(GL_SGIS_fog_function)); - rb_define_const(module, "GL_SGIS_generate_mipmap", INT2NUM(GL_SGIS_generate_mipmap)); - rb_define_const(module, "GL_SGIS_multisample", INT2NUM(GL_SGIS_multisample)); - rb_define_const(module, "GL_SGIS_pixel_texture", INT2NUM(GL_SGIS_pixel_texture)); - rb_define_const(module, "GL_SGIS_point_line_texgen", INT2NUM(GL_SGIS_point_line_texgen)); - rb_define_const(module, "GL_SGIS_point_parameters", INT2NUM(GL_SGIS_point_parameters)); - rb_define_const(module, "GL_SGIS_sharpen_texture", INT2NUM(GL_SGIS_sharpen_texture)); - rb_define_const(module, "GL_SGIS_texture4D", INT2NUM(GL_SGIS_texture4D)); - rb_define_const(module, "GL_SGIS_texture_border_clamp", INT2NUM(GL_SGIS_texture_border_clamp)); - rb_define_const(module, "GL_SGIS_texture_edge_clamp", INT2NUM(GL_SGIS_texture_edge_clamp)); - rb_define_const(module, "GL_SGIS_texture_filter4", INT2NUM(GL_SGIS_texture_filter4)); - rb_define_const(module, "GL_SGIS_texture_lod", INT2NUM(GL_SGIS_texture_lod)); - rb_define_const(module, "GL_SGIS_texture_select", INT2NUM(GL_SGIS_texture_select)); - rb_define_const(module, "GL_SGI_texture_color_table", INT2NUM(GL_SGI_texture_color_table)); - rb_define_const(module, "GL_SGIX_async_histogram", INT2NUM(GL_SGIX_async_histogram)); - rb_define_const(module, "GL_SGIX_async", INT2NUM(GL_SGIX_async)); - rb_define_const(module, "GL_SGIX_async_pixel", INT2NUM(GL_SGIX_async_pixel)); - rb_define_const(module, "GL_SGIX_blend_alpha_minmax", INT2NUM(GL_SGIX_blend_alpha_minmax)); - rb_define_const(module, "GL_SGIX_calligraphic_fragment", INT2NUM(GL_SGIX_calligraphic_fragment)); - rb_define_const(module, "GL_SGIX_clipmap", INT2NUM(GL_SGIX_clipmap)); - rb_define_const(module, "GL_SGIX_convolution_accuracy", INT2NUM(GL_SGIX_convolution_accuracy)); - rb_define_const(module, "GL_SGIX_depth_texture", INT2NUM(GL_SGIX_depth_texture)); - rb_define_const(module, "GL_SGIX_flush_raster", INT2NUM(GL_SGIX_flush_raster)); - rb_define_const(module, "GL_SGIX_fog_offset", INT2NUM(GL_SGIX_fog_offset)); - rb_define_const(module, "GL_SGIX_fragment_lighting", INT2NUM(GL_SGIX_fragment_lighting)); - rb_define_const(module, "GL_SGIX_framezoom", INT2NUM(GL_SGIX_framezoom)); - rb_define_const(module, "GL_SGIX_icc_texture", INT2NUM(GL_SGIX_icc_texture)); - rb_define_const(module, "GL_SGIX_impact_pixel_texture", INT2NUM(GL_SGIX_impact_pixel_texture)); - rb_define_const(module, "GL_SGIX_instruments", INT2NUM(GL_SGIX_instruments)); - rb_define_const(module, "GL_SGIX_interlace", INT2NUM(GL_SGIX_interlace)); - rb_define_const(module, "GL_SGIX_ir_instrument1", INT2NUM(GL_SGIX_ir_instrument1)); - rb_define_const(module, "GL_SGIX_list_priority", INT2NUM(GL_SGIX_list_priority)); - rb_define_const(module, "GL_SGIX_pixel_texture", INT2NUM(GL_SGIX_pixel_texture)); - rb_define_const(module, "GL_SGIX_pixel_tiles", INT2NUM(GL_SGIX_pixel_tiles)); - rb_define_const(module, "GL_SGIX_polynomial_ffd", INT2NUM(GL_SGIX_polynomial_ffd)); - rb_define_const(module, "GL_SGIX_reference_plane", INT2NUM(GL_SGIX_reference_plane)); - rb_define_const(module, "GL_SGIX_resample", INT2NUM(GL_SGIX_resample)); - rb_define_const(module, "GL_SGIX_scalebias_hint", INT2NUM(GL_SGIX_scalebias_hint)); - rb_define_const(module, "GL_SGIX_shadow_ambient", INT2NUM(GL_SGIX_shadow_ambient)); - rb_define_const(module, "GL_SGIX_shadow", INT2NUM(GL_SGIX_shadow)); - rb_define_const(module, "GL_SGIX_sprite", INT2NUM(GL_SGIX_sprite)); - rb_define_const(module, "GL_SGIX_subsample", INT2NUM(GL_SGIX_subsample)); - rb_define_const(module, "GL_SGIX_tag_sample_buffer", INT2NUM(GL_SGIX_tag_sample_buffer)); - rb_define_const(module, "GL_SGIX_texture_add_env", INT2NUM(GL_SGIX_texture_add_env)); - rb_define_const(module, "GL_SGIX_texture_coordinate_clamp", INT2NUM(GL_SGIX_texture_coordinate_clamp)); - rb_define_const(module, "GL_SGIX_texture_lod_bias", INT2NUM(GL_SGIX_texture_lod_bias)); - rb_define_const(module, "GL_SGIX_texture_multi_buffer", INT2NUM(GL_SGIX_texture_multi_buffer)); - rb_define_const(module, "GL_SGIX_texture_scale_bias", INT2NUM(GL_SGIX_texture_scale_bias)); - rb_define_const(module, "GL_SGIX_vertex_preclip", INT2NUM(GL_SGIX_vertex_preclip)); - rb_define_const(module, "GL_SGIX_ycrcb", INT2NUM(GL_SGIX_ycrcb)); - rb_define_const(module, "GL_SHADE_MODEL", INT2NUM(GL_SHADE_MODEL)); - rb_define_const(module, "GL_SHADER_CONSISTENT_NV", INT2NUM(GL_SHADER_CONSISTENT_NV)); - rb_define_const(module, "GL_SHADER_OBJECT_ARB", INT2NUM(GL_SHADER_OBJECT_ARB)); - rb_define_const(module, "GL_SHADER_OPERATION_NV", INT2NUM(GL_SHADER_OPERATION_NV)); - rb_define_const(module, "GL_SHADER_SOURCE_LENGTH", INT2NUM(GL_SHADER_SOURCE_LENGTH)); - rb_define_const(module, "GL_SHADER_TYPE", INT2NUM(GL_SHADER_TYPE)); - rb_define_const(module, "GL_SHADING_LANGUAGE_VERSION_ARB", INT2NUM(GL_SHADING_LANGUAGE_VERSION_ARB)); - rb_define_const(module, "GL_SHADING_LANGUAGE_VERSION", INT2NUM(GL_SHADING_LANGUAGE_VERSION)); - rb_define_const(module, "GL_SHADOW_AMBIENT_SGIX", INT2NUM(GL_SHADOW_AMBIENT_SGIX)); - rb_define_const(module, "GL_SHADOW_ATTENUATION_EXT", INT2NUM(GL_SHADOW_ATTENUATION_EXT)); - rb_define_const(module, "GL_SHARED_TEXTURE_PALETTE_EXT", INT2NUM(GL_SHARED_TEXTURE_PALETTE_EXT)); - rb_define_const(module, "GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS", INT2NUM(GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS)); - rb_define_const(module, "GL_SHININESS", INT2NUM(GL_SHININESS)); - rb_define_const(module, "GL_SHORT", INT2NUM(GL_SHORT)); - rb_define_const(module, "GL_SIGNED_ALPHA8_NV", INT2NUM(GL_SIGNED_ALPHA8_NV)); - rb_define_const(module, "GL_SIGNED_ALPHA_NV", INT2NUM(GL_SIGNED_ALPHA_NV)); - rb_define_const(module, "GL_SIGNED_HILO16_NV", INT2NUM(GL_SIGNED_HILO16_NV)); - rb_define_const(module, "GL_SIGNED_HILO8_NV", INT2NUM(GL_SIGNED_HILO8_NV)); - rb_define_const(module, "GL_SIGNED_HILO_NV", INT2NUM(GL_SIGNED_HILO_NV)); - rb_define_const(module, "GL_SIGNED_IDENTITY_NV", INT2NUM(GL_SIGNED_IDENTITY_NV)); - rb_define_const(module, "GL_SIGNED_INTENSITY8_NV", INT2NUM(GL_SIGNED_INTENSITY8_NV)); - rb_define_const(module, "GL_SIGNED_INTENSITY_NV", INT2NUM(GL_SIGNED_INTENSITY_NV)); - rb_define_const(module, "GL_SIGNED_LUMINANCE8_ALPHA8_NV", INT2NUM(GL_SIGNED_LUMINANCE8_ALPHA8_NV)); - rb_define_const(module, "GL_SIGNED_LUMINANCE8_NV", INT2NUM(GL_SIGNED_LUMINANCE8_NV)); - rb_define_const(module, "GL_SIGNED_LUMINANCE_ALPHA_NV", INT2NUM(GL_SIGNED_LUMINANCE_ALPHA_NV)); - rb_define_const(module, "GL_SIGNED_LUMINANCE_NV", INT2NUM(GL_SIGNED_LUMINANCE_NV)); - rb_define_const(module, "GL_SIGNED_NEGATE_NV", INT2NUM(GL_SIGNED_NEGATE_NV)); - rb_define_const(module, "GL_SIGNED_RGB8_NV", INT2NUM(GL_SIGNED_RGB8_NV)); - rb_define_const(module, "GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV", INT2NUM(GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV)); - rb_define_const(module, "GL_SIGNED_RGBA8_NV", INT2NUM(GL_SIGNED_RGBA8_NV)); - rb_define_const(module, "GL_SIGNED_RGBA_NV", INT2NUM(GL_SIGNED_RGBA_NV)); - rb_define_const(module, "GL_SIGNED_RGB_NV", INT2NUM(GL_SIGNED_RGB_NV)); - rb_define_const(module, "GL_SIGNED_RGB_UNSIGNED_ALPHA_NV", INT2NUM(GL_SIGNED_RGB_UNSIGNED_ALPHA_NV)); - rb_define_const(module, "GL_SINGLE_COLOR_EXT", INT2NUM(GL_SINGLE_COLOR_EXT)); - rb_define_const(module, "GL_SINGLE_COLOR", INT2NUM(GL_SINGLE_COLOR)); - rb_define_const(module, "GL_S", INT2NUM(GL_S)); - rb_define_const(module, "GL_SLICE_ACCUM_SUN", INT2NUM(GL_SLICE_ACCUM_SUN)); - rb_define_const(module, "GL_SLUMINANCE8_ALPHA8_EXT", INT2NUM(GL_SLUMINANCE8_ALPHA8_EXT)); - rb_define_const(module, "GL_SLUMINANCE8_ALPHA8", INT2NUM(GL_SLUMINANCE8_ALPHA8)); - rb_define_const(module, "GL_SLUMINANCE8_EXT", INT2NUM(GL_SLUMINANCE8_EXT)); - rb_define_const(module, "GL_SLUMINANCE8", INT2NUM(GL_SLUMINANCE8)); - rb_define_const(module, "GL_SLUMINANCE_ALPHA_EXT", INT2NUM(GL_SLUMINANCE_ALPHA_EXT)); - rb_define_const(module, "GL_SLUMINANCE_ALPHA", INT2NUM(GL_SLUMINANCE_ALPHA)); - rb_define_const(module, "GL_SLUMINANCE_EXT", INT2NUM(GL_SLUMINANCE_EXT)); - rb_define_const(module, "GL_SLUMINANCE", INT2NUM(GL_SLUMINANCE)); - rb_define_const(module, "GL_SMOOTH", INT2NUM(GL_SMOOTH)); - rb_define_const(module, "GL_SMOOTH_LINE_WIDTH_GRANULARITY", INT2NUM(GL_SMOOTH_LINE_WIDTH_GRANULARITY)); - rb_define_const(module, "GL_SMOOTH_LINE_WIDTH_RANGE", INT2NUM(GL_SMOOTH_LINE_WIDTH_RANGE)); - rb_define_const(module, "GL_SMOOTH_POINT_SIZE_GRANULARITY", INT2NUM(GL_SMOOTH_POINT_SIZE_GRANULARITY)); - rb_define_const(module, "GL_SMOOTH_POINT_SIZE_RANGE", INT2NUM(GL_SMOOTH_POINT_SIZE_RANGE)); - rb_define_const(module, "GL_SOURCE0_ALPHA_ARB", INT2NUM(GL_SOURCE0_ALPHA_ARB)); - rb_define_const(module, "GL_SOURCE0_ALPHA_EXT", INT2NUM(GL_SOURCE0_ALPHA_EXT)); - rb_define_const(module, "GL_SOURCE0_ALPHA", INT2NUM(GL_SOURCE0_ALPHA)); - rb_define_const(module, "GL_SOURCE0_RGB_ARB", INT2NUM(GL_SOURCE0_RGB_ARB)); - rb_define_const(module, "GL_SOURCE0_RGB_EXT", INT2NUM(GL_SOURCE0_RGB_EXT)); - rb_define_const(module, "GL_SOURCE0_RGB", INT2NUM(GL_SOURCE0_RGB)); - rb_define_const(module, "GL_SOURCE1_ALPHA_ARB", INT2NUM(GL_SOURCE1_ALPHA_ARB)); - rb_define_const(module, "GL_SOURCE1_ALPHA_EXT", INT2NUM(GL_SOURCE1_ALPHA_EXT)); - rb_define_const(module, "GL_SOURCE1_ALPHA", INT2NUM(GL_SOURCE1_ALPHA)); - rb_define_const(module, "GL_SOURCE1_RGB_ARB", INT2NUM(GL_SOURCE1_RGB_ARB)); - rb_define_const(module, "GL_SOURCE1_RGB_EXT", INT2NUM(GL_SOURCE1_RGB_EXT)); - rb_define_const(module, "GL_SOURCE1_RGB", INT2NUM(GL_SOURCE1_RGB)); - rb_define_const(module, "GL_SOURCE2_ALPHA_ARB", INT2NUM(GL_SOURCE2_ALPHA_ARB)); - rb_define_const(module, "GL_SOURCE2_ALPHA_EXT", INT2NUM(GL_SOURCE2_ALPHA_EXT)); - rb_define_const(module, "GL_SOURCE2_ALPHA", INT2NUM(GL_SOURCE2_ALPHA)); - rb_define_const(module, "GL_SOURCE2_RGB_ARB", INT2NUM(GL_SOURCE2_RGB_ARB)); - rb_define_const(module, "GL_SOURCE2_RGB_EXT", INT2NUM(GL_SOURCE2_RGB_EXT)); - rb_define_const(module, "GL_SOURCE2_RGB", INT2NUM(GL_SOURCE2_RGB)); - rb_define_const(module, "GL_SOURCE3_ALPHA_NV", INT2NUM(GL_SOURCE3_ALPHA_NV)); - rb_define_const(module, "GL_SOURCE3_RGB_NV", INT2NUM(GL_SOURCE3_RGB_NV)); - rb_define_const(module, "GL_SPARE0_NV", INT2NUM(GL_SPARE0_NV)); - rb_define_const(module, "GL_SPARE0_PLUS_SECONDARY_COLOR_NV", INT2NUM(GL_SPARE0_PLUS_SECONDARY_COLOR_NV)); - rb_define_const(module, "GL_SPARE1_NV", INT2NUM(GL_SPARE1_NV)); - rb_define_const(module, "GL_SPECULAR", INT2NUM(GL_SPECULAR)); - rb_define_const(module, "GL_SPHERE_MAP", INT2NUM(GL_SPHERE_MAP)); - rb_define_const(module, "GL_SPOT_CUTOFF", INT2NUM(GL_SPOT_CUTOFF)); - rb_define_const(module, "GL_SPOT_DIRECTION", INT2NUM(GL_SPOT_DIRECTION)); - rb_define_const(module, "GL_SPOT_EXPONENT", INT2NUM(GL_SPOT_EXPONENT)); - rb_define_const(module, "GL_SPRITE_AXIAL_SGIX", INT2NUM(GL_SPRITE_AXIAL_SGIX)); - rb_define_const(module, "GL_SPRITE_AXIS_SGIX", INT2NUM(GL_SPRITE_AXIS_SGIX)); - rb_define_const(module, "GL_SPRITE_EYE_ALIGNED_SGIX", INT2NUM(GL_SPRITE_EYE_ALIGNED_SGIX)); - rb_define_const(module, "GL_SPRITE_MODE_SGIX", INT2NUM(GL_SPRITE_MODE_SGIX)); - rb_define_const(module, "GL_SPRITE_OBJECT_ALIGNED_SGIX", INT2NUM(GL_SPRITE_OBJECT_ALIGNED_SGIX)); - rb_define_const(module, "GL_SPRITE_SGIX", INT2NUM(GL_SPRITE_SGIX)); - rb_define_const(module, "GL_SPRITE_TRANSLATION_SGIX", INT2NUM(GL_SPRITE_TRANSLATION_SGIX)); - rb_define_const(module, "GL_SRC0_ALPHA", INT2NUM(GL_SRC0_ALPHA)); - rb_define_const(module, "GL_SRC0_RGB", INT2NUM(GL_SRC0_RGB)); - rb_define_const(module, "GL_SRC1_ALPHA", INT2NUM(GL_SRC1_ALPHA)); - rb_define_const(module, "GL_SRC1_RGB", INT2NUM(GL_SRC1_RGB)); - rb_define_const(module, "GL_SRC2_ALPHA", INT2NUM(GL_SRC2_ALPHA)); - rb_define_const(module, "GL_SRC2_RGB", INT2NUM(GL_SRC2_RGB)); - rb_define_const(module, "GL_SRC_ALPHA", INT2NUM(GL_SRC_ALPHA)); - rb_define_const(module, "GL_SRC_ALPHA_SATURATE", INT2NUM(GL_SRC_ALPHA_SATURATE)); - rb_define_const(module, "GL_SRC_COLOR", INT2NUM(GL_SRC_COLOR)); - rb_define_const(module, "GL_SRGB8_ALPHA8_EXT", INT2NUM(GL_SRGB8_ALPHA8_EXT)); - rb_define_const(module, "GL_SRGB8_ALPHA8", INT2NUM(GL_SRGB8_ALPHA8)); - rb_define_const(module, "GL_SRGB8_EXT", INT2NUM(GL_SRGB8_EXT)); - rb_define_const(module, "GL_SRGB8", INT2NUM(GL_SRGB8)); - rb_define_const(module, "GL_SRGB_ALPHA_EXT", INT2NUM(GL_SRGB_ALPHA_EXT)); - rb_define_const(module, "GL_SRGB_ALPHA", INT2NUM(GL_SRGB_ALPHA)); - rb_define_const(module, "GL_SRGB_EXT", INT2NUM(GL_SRGB_EXT)); - rb_define_const(module, "GL_SRGB", INT2NUM(GL_SRGB)); - rb_define_const(module, "GL_STACK_OVERFLOW", INT2NUM(GL_STACK_OVERFLOW)); - rb_define_const(module, "GL_STACK_UNDERFLOW", INT2NUM(GL_STACK_UNDERFLOW)); - rb_define_const(module, "GL_STATIC_ATI", INT2NUM(GL_STATIC_ATI)); - rb_define_const(module, "GL_STATIC_COPY_ARB", INT2NUM(GL_STATIC_COPY_ARB)); - rb_define_const(module, "GL_STATIC_COPY", INT2NUM(GL_STATIC_COPY)); - rb_define_const(module, "GL_STATIC_DRAW_ARB", INT2NUM(GL_STATIC_DRAW_ARB)); - rb_define_const(module, "GL_STATIC_DRAW", INT2NUM(GL_STATIC_DRAW)); - rb_define_const(module, "GL_STATIC_READ_ARB", INT2NUM(GL_STATIC_READ_ARB)); - rb_define_const(module, "GL_STATIC_READ", INT2NUM(GL_STATIC_READ)); - rb_define_const(module, "GL_STENCIL_ATTACHMENT_EXT", INT2NUM(GL_STENCIL_ATTACHMENT_EXT)); - rb_define_const(module, "GL_STENCIL_BACK_FAIL_ATI", INT2NUM(GL_STENCIL_BACK_FAIL_ATI)); - rb_define_const(module, "GL_STENCIL_BACK_FAIL", INT2NUM(GL_STENCIL_BACK_FAIL)); - rb_define_const(module, "GL_STENCIL_BACK_FUNC_ATI", INT2NUM(GL_STENCIL_BACK_FUNC_ATI)); - rb_define_const(module, "GL_STENCIL_BACK_FUNC", INT2NUM(GL_STENCIL_BACK_FUNC)); - rb_define_const(module, "GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI", INT2NUM(GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI)); - rb_define_const(module, "GL_STENCIL_BACK_PASS_DEPTH_FAIL", INT2NUM(GL_STENCIL_BACK_PASS_DEPTH_FAIL)); - rb_define_const(module, "GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI", INT2NUM(GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI)); - rb_define_const(module, "GL_STENCIL_BACK_PASS_DEPTH_PASS", INT2NUM(GL_STENCIL_BACK_PASS_DEPTH_PASS)); - rb_define_const(module, "GL_STENCIL_BACK_REF", INT2NUM(GL_STENCIL_BACK_REF)); - rb_define_const(module, "GL_STENCIL_BACK_VALUE_MASK", INT2NUM(GL_STENCIL_BACK_VALUE_MASK)); - rb_define_const(module, "GL_STENCIL_BACK_WRITEMASK", INT2NUM(GL_STENCIL_BACK_WRITEMASK)); - rb_define_const(module, "GL_STENCIL_BITS", INT2NUM(GL_STENCIL_BITS)); - rb_define_const(module, "GL_STENCIL_BUFFER_BIT", INT2NUM(GL_STENCIL_BUFFER_BIT)); - rb_define_const(module, "GL_STENCIL_CLEAR_TAG_VALUE_EXT", INT2NUM(GL_STENCIL_CLEAR_TAG_VALUE_EXT)); - rb_define_const(module, "GL_STENCIL_CLEAR_VALUE", INT2NUM(GL_STENCIL_CLEAR_VALUE)); - rb_define_const(module, "GL_STENCIL_FAIL", INT2NUM(GL_STENCIL_FAIL)); - rb_define_const(module, "GL_STENCIL_FUNC", INT2NUM(GL_STENCIL_FUNC)); - rb_define_const(module, "GL_STENCIL_INDEX16_EXT", INT2NUM(GL_STENCIL_INDEX16_EXT)); - rb_define_const(module, "GL_STENCIL_INDEX1_EXT", INT2NUM(GL_STENCIL_INDEX1_EXT)); - rb_define_const(module, "GL_STENCIL_INDEX4_EXT", INT2NUM(GL_STENCIL_INDEX4_EXT)); - rb_define_const(module, "GL_STENCIL_INDEX8_EXT", INT2NUM(GL_STENCIL_INDEX8_EXT)); - rb_define_const(module, "GL_STENCIL_INDEX", INT2NUM(GL_STENCIL_INDEX)); - rb_define_const(module, "GL_STENCIL", INT2NUM(GL_STENCIL)); - rb_define_const(module, "GL_STENCIL_PASS_DEPTH_FAIL", INT2NUM(GL_STENCIL_PASS_DEPTH_FAIL)); - rb_define_const(module, "GL_STENCIL_PASS_DEPTH_PASS", INT2NUM(GL_STENCIL_PASS_DEPTH_PASS)); - rb_define_const(module, "GL_STENCIL_REF", INT2NUM(GL_STENCIL_REF)); - rb_define_const(module, "GL_STENCIL_TAG_BITS_EXT", INT2NUM(GL_STENCIL_TAG_BITS_EXT)); - rb_define_const(module, "GL_STENCIL_TEST", INT2NUM(GL_STENCIL_TEST)); - rb_define_const(module, "GL_STENCIL_TEST_TWO_SIDE_EXT", INT2NUM(GL_STENCIL_TEST_TWO_SIDE_EXT)); - rb_define_const(module, "GL_STENCIL_VALUE_MASK", INT2NUM(GL_STENCIL_VALUE_MASK)); - rb_define_const(module, "GL_STENCIL_WRITEMASK", INT2NUM(GL_STENCIL_WRITEMASK)); - rb_define_const(module, "GL_STEREO", INT2NUM(GL_STEREO)); - rb_define_const(module, "GL_STORAGE_CACHED_APPLE", INT2NUM(GL_STORAGE_CACHED_APPLE)); - rb_define_const(module, "GL_STORAGE_SHARED_APPLE", INT2NUM(GL_STORAGE_SHARED_APPLE)); - rb_define_const(module, "GL_STREAM_COPY_ARB", INT2NUM(GL_STREAM_COPY_ARB)); - rb_define_const(module, "GL_STREAM_COPY", INT2NUM(GL_STREAM_COPY)); - rb_define_const(module, "GL_STREAM_DRAW_ARB", INT2NUM(GL_STREAM_DRAW_ARB)); - rb_define_const(module, "GL_STREAM_DRAW", INT2NUM(GL_STREAM_DRAW)); - rb_define_const(module, "GL_STREAM_READ_ARB", INT2NUM(GL_STREAM_READ_ARB)); - rb_define_const(module, "GL_STREAM_READ", INT2NUM(GL_STREAM_READ)); - rb_define_const(module, "GL_STRICT_DEPTHFUNC_HINT_PGI", INT2NUM(GL_STRICT_DEPTHFUNC_HINT_PGI)); - rb_define_const(module, "GL_STRICT_LIGHTING_HINT_PGI", INT2NUM(GL_STRICT_LIGHTING_HINT_PGI)); - rb_define_const(module, "GL_STRICT_SCISSOR_HINT_PGI", INT2NUM(GL_STRICT_SCISSOR_HINT_PGI)); - rb_define_const(module, "GL_SUB_ATI", INT2NUM(GL_SUB_ATI)); - rb_define_const(module, "GL_SUBPIXEL_BITS", INT2NUM(GL_SUBPIXEL_BITS)); - rb_define_const(module, "GL_SUBTRACT_ARB", INT2NUM(GL_SUBTRACT_ARB)); - rb_define_const(module, "GL_SUBTRACT", INT2NUM(GL_SUBTRACT)); - rb_define_const(module, "GL_SWIZZLE_STQ_ATI", INT2NUM(GL_SWIZZLE_STQ_ATI)); - rb_define_const(module, "GL_SWIZZLE_STQ_DQ_ATI", INT2NUM(GL_SWIZZLE_STQ_DQ_ATI)); - rb_define_const(module, "GL_SWIZZLE_STR_ATI", INT2NUM(GL_SWIZZLE_STR_ATI)); - rb_define_const(module, "GL_SWIZZLE_STR_DR_ATI", INT2NUM(GL_SWIZZLE_STR_DR_ATI)); - rb_define_const(module, "GL_SWIZZLE_STRQ_ATI", INT2NUM(GL_SWIZZLE_STRQ_ATI)); - rb_define_const(module, "GL_SWIZZLE_STRQ_DQ_ATI", INT2NUM(GL_SWIZZLE_STRQ_DQ_ATI)); - rb_define_const(module, "GL_T2F_C3F_V3F", INT2NUM(GL_T2F_C3F_V3F)); - rb_define_const(module, "GL_T2F_C4F_N3F_V3F", INT2NUM(GL_T2F_C4F_N3F_V3F)); - rb_define_const(module, "GL_T2F_C4UB_V3F", INT2NUM(GL_T2F_C4UB_V3F)); - rb_define_const(module, "GL_T2F_IUI_N3F_V2F_EXT", INT2NUM(GL_T2F_IUI_N3F_V2F_EXT)); - rb_define_const(module, "GL_T2F_IUI_N3F_V3F_EXT", INT2NUM(GL_T2F_IUI_N3F_V3F_EXT)); - rb_define_const(module, "GL_T2F_IUI_V2F_EXT", INT2NUM(GL_T2F_IUI_V2F_EXT)); - rb_define_const(module, "GL_T2F_IUI_V3F_EXT", INT2NUM(GL_T2F_IUI_V3F_EXT)); - rb_define_const(module, "GL_T2F_N3F_V3F", INT2NUM(GL_T2F_N3F_V3F)); - rb_define_const(module, "GL_T2F_V3F", INT2NUM(GL_T2F_V3F)); - rb_define_const(module, "GL_T4F_C4F_N3F_V4F", INT2NUM(GL_T4F_C4F_N3F_V4F)); - rb_define_const(module, "GL_T4F_V4F", INT2NUM(GL_T4F_V4F)); - rb_define_const(module, "GL_TABLE_TOO_LARGE_EXT", INT2NUM(GL_TABLE_TOO_LARGE_EXT)); - rb_define_const(module, "GL_TABLE_TOO_LARGE", INT2NUM(GL_TABLE_TOO_LARGE)); - rb_define_const(module, "GL_TANGENT_ARRAY_EXT", INT2NUM(GL_TANGENT_ARRAY_EXT)); - rb_define_const(module, "GL_TANGENT_ARRAY_POINTER_EXT", INT2NUM(GL_TANGENT_ARRAY_POINTER_EXT)); - rb_define_const(module, "GL_TANGENT_ARRAY_STRIDE_EXT", INT2NUM(GL_TANGENT_ARRAY_STRIDE_EXT)); - rb_define_const(module, "GL_TANGENT_ARRAY_TYPE_EXT", INT2NUM(GL_TANGENT_ARRAY_TYPE_EXT)); - rb_define_const(module, "GL_TEXCOORD1_BIT_PGI", INT2NUM(GL_TEXCOORD1_BIT_PGI)); - rb_define_const(module, "GL_TEXCOORD2_BIT_PGI", INT2NUM(GL_TEXCOORD2_BIT_PGI)); - rb_define_const(module, "GL_TEXCOORD3_BIT_PGI", INT2NUM(GL_TEXCOORD3_BIT_PGI)); - rb_define_const(module, "GL_TEXCOORD4_BIT_PGI", INT2NUM(GL_TEXCOORD4_BIT_PGI)); - rb_define_const(module, "GL_TEXT_FRAGMENT_SHADER_ATI", INT2NUM(GL_TEXT_FRAGMENT_SHADER_ATI)); - rb_define_const(module, "GL_TEXTURE0_ARB", INT2NUM(GL_TEXTURE0_ARB)); - rb_define_const(module, "GL_TEXTURE0", INT2NUM(GL_TEXTURE0)); - rb_define_const(module, "GL_TEXTURE10_ARB", INT2NUM(GL_TEXTURE10_ARB)); - rb_define_const(module, "GL_TEXTURE10", INT2NUM(GL_TEXTURE10)); - rb_define_const(module, "GL_TEXTURE11_ARB", INT2NUM(GL_TEXTURE11_ARB)); - rb_define_const(module, "GL_TEXTURE11", INT2NUM(GL_TEXTURE11)); - rb_define_const(module, "GL_TEXTURE12_ARB", INT2NUM(GL_TEXTURE12_ARB)); - rb_define_const(module, "GL_TEXTURE12", INT2NUM(GL_TEXTURE12)); - rb_define_const(module, "GL_TEXTURE13_ARB", INT2NUM(GL_TEXTURE13_ARB)); - rb_define_const(module, "GL_TEXTURE13", INT2NUM(GL_TEXTURE13)); - rb_define_const(module, "GL_TEXTURE14_ARB", INT2NUM(GL_TEXTURE14_ARB)); - rb_define_const(module, "GL_TEXTURE14", INT2NUM(GL_TEXTURE14)); - rb_define_const(module, "GL_TEXTURE15_ARB", INT2NUM(GL_TEXTURE15_ARB)); - rb_define_const(module, "GL_TEXTURE15", INT2NUM(GL_TEXTURE15)); - rb_define_const(module, "GL_TEXTURE16_ARB", INT2NUM(GL_TEXTURE16_ARB)); - rb_define_const(module, "GL_TEXTURE16", INT2NUM(GL_TEXTURE16)); - rb_define_const(module, "GL_TEXTURE17_ARB", INT2NUM(GL_TEXTURE17_ARB)); - rb_define_const(module, "GL_TEXTURE17", INT2NUM(GL_TEXTURE17)); - rb_define_const(module, "GL_TEXTURE18_ARB", INT2NUM(GL_TEXTURE18_ARB)); - rb_define_const(module, "GL_TEXTURE18", INT2NUM(GL_TEXTURE18)); - rb_define_const(module, "GL_TEXTURE19_ARB", INT2NUM(GL_TEXTURE19_ARB)); - rb_define_const(module, "GL_TEXTURE19", INT2NUM(GL_TEXTURE19)); - rb_define_const(module, "GL_TEXTURE1_ARB", INT2NUM(GL_TEXTURE1_ARB)); - rb_define_const(module, "GL_TEXTURE_1D_BINDING_EXT", INT2NUM(GL_TEXTURE_1D_BINDING_EXT)); - rb_define_const(module, "GL_TEXTURE_1D", INT2NUM(GL_TEXTURE_1D)); - rb_define_const(module, "GL_TEXTURE_1D_STACK_BINDING_MESAX", INT2NUM(GL_TEXTURE_1D_STACK_BINDING_MESAX)); - rb_define_const(module, "GL_TEXTURE_1D_STACK_MESAX", INT2NUM(GL_TEXTURE_1D_STACK_MESAX)); - rb_define_const(module, "GL_TEXTURE1", INT2NUM(GL_TEXTURE1)); - rb_define_const(module, "GL_TEXTURE20_ARB", INT2NUM(GL_TEXTURE20_ARB)); - rb_define_const(module, "GL_TEXTURE20", INT2NUM(GL_TEXTURE20)); - rb_define_const(module, "GL_TEXTURE21_ARB", INT2NUM(GL_TEXTURE21_ARB)); - rb_define_const(module, "GL_TEXTURE21", INT2NUM(GL_TEXTURE21)); - rb_define_const(module, "GL_TEXTURE22_ARB", INT2NUM(GL_TEXTURE22_ARB)); - rb_define_const(module, "GL_TEXTURE22", INT2NUM(GL_TEXTURE22)); - rb_define_const(module, "GL_TEXTURE23_ARB", INT2NUM(GL_TEXTURE23_ARB)); - rb_define_const(module, "GL_TEXTURE23", INT2NUM(GL_TEXTURE23)); - rb_define_const(module, "GL_TEXTURE24_ARB", INT2NUM(GL_TEXTURE24_ARB)); - rb_define_const(module, "GL_TEXTURE24", INT2NUM(GL_TEXTURE24)); - rb_define_const(module, "GL_TEXTURE25_ARB", INT2NUM(GL_TEXTURE25_ARB)); - rb_define_const(module, "GL_TEXTURE25", INT2NUM(GL_TEXTURE25)); - rb_define_const(module, "GL_TEXTURE26_ARB", INT2NUM(GL_TEXTURE26_ARB)); - rb_define_const(module, "GL_TEXTURE26", INT2NUM(GL_TEXTURE26)); - rb_define_const(module, "GL_TEXTURE27_ARB", INT2NUM(GL_TEXTURE27_ARB)); - rb_define_const(module, "GL_TEXTURE27", INT2NUM(GL_TEXTURE27)); - rb_define_const(module, "GL_TEXTURE28_ARB", INT2NUM(GL_TEXTURE28_ARB)); - rb_define_const(module, "GL_TEXTURE28", INT2NUM(GL_TEXTURE28)); - rb_define_const(module, "GL_TEXTURE29_ARB", INT2NUM(GL_TEXTURE29_ARB)); - rb_define_const(module, "GL_TEXTURE29", INT2NUM(GL_TEXTURE29)); - rb_define_const(module, "GL_TEXTURE2_ARB", INT2NUM(GL_TEXTURE2_ARB)); - rb_define_const(module, "GL_TEXTURE_2D_BINDING_EXT", INT2NUM(GL_TEXTURE_2D_BINDING_EXT)); - rb_define_const(module, "GL_TEXTURE_2D", INT2NUM(GL_TEXTURE_2D)); - rb_define_const(module, "GL_TEXTURE_2D_STACK_BINDING_MESAX", INT2NUM(GL_TEXTURE_2D_STACK_BINDING_MESAX)); - rb_define_const(module, "GL_TEXTURE_2D_STACK_MESAX", INT2NUM(GL_TEXTURE_2D_STACK_MESAX)); - rb_define_const(module, "GL_TEXTURE2", INT2NUM(GL_TEXTURE2)); - rb_define_const(module, "GL_TEXTURE30_ARB", INT2NUM(GL_TEXTURE30_ARB)); - rb_define_const(module, "GL_TEXTURE30", INT2NUM(GL_TEXTURE30)); - rb_define_const(module, "GL_TEXTURE31_ARB", INT2NUM(GL_TEXTURE31_ARB)); - rb_define_const(module, "GL_TEXTURE31", INT2NUM(GL_TEXTURE31)); - rb_define_const(module, "GL_TEXTURE3_ARB", INT2NUM(GL_TEXTURE3_ARB)); - rb_define_const(module, "GL_TEXTURE_3D_BINDING_EXT", INT2NUM(GL_TEXTURE_3D_BINDING_EXT)); - rb_define_const(module, "GL_TEXTURE_3D_EXT", INT2NUM(GL_TEXTURE_3D_EXT)); - rb_define_const(module, "GL_TEXTURE_3D", INT2NUM(GL_TEXTURE_3D)); - rb_define_const(module, "GL_TEXTURE3", INT2NUM(GL_TEXTURE3)); - rb_define_const(module, "GL_TEXTURE4_ARB", INT2NUM(GL_TEXTURE4_ARB)); - rb_define_const(module, "GL_TEXTURE_4D_BINDING_SGIS", INT2NUM(GL_TEXTURE_4D_BINDING_SGIS)); - rb_define_const(module, "GL_TEXTURE_4D_SGIS", INT2NUM(GL_TEXTURE_4D_SGIS)); - rb_define_const(module, "GL_TEXTURE_4DSIZE_SGIS", INT2NUM(GL_TEXTURE_4DSIZE_SGIS)); - rb_define_const(module, "GL_TEXTURE4", INT2NUM(GL_TEXTURE4)); - rb_define_const(module, "GL_TEXTURE5_ARB", INT2NUM(GL_TEXTURE5_ARB)); - rb_define_const(module, "GL_TEXTURE5", INT2NUM(GL_TEXTURE5)); - rb_define_const(module, "GL_TEXTURE6_ARB", INT2NUM(GL_TEXTURE6_ARB)); - rb_define_const(module, "GL_TEXTURE6", INT2NUM(GL_TEXTURE6)); - rb_define_const(module, "GL_TEXTURE7_ARB", INT2NUM(GL_TEXTURE7_ARB)); - rb_define_const(module, "GL_TEXTURE7", INT2NUM(GL_TEXTURE7)); - rb_define_const(module, "GL_TEXTURE8_ARB", INT2NUM(GL_TEXTURE8_ARB)); - rb_define_const(module, "GL_TEXTURE8", INT2NUM(GL_TEXTURE8)); - rb_define_const(module, "GL_TEXTURE9_ARB", INT2NUM(GL_TEXTURE9_ARB)); - rb_define_const(module, "GL_TEXTURE9", INT2NUM(GL_TEXTURE9)); - rb_define_const(module, "GL_TEXTURE_ALPHA_SIZE_EXT", INT2NUM(GL_TEXTURE_ALPHA_SIZE_EXT)); - rb_define_const(module, "GL_TEXTURE_ALPHA_SIZE", INT2NUM(GL_TEXTURE_ALPHA_SIZE)); - rb_define_const(module, "GL_TEXTURE_ALPHA_TYPE_ARB", INT2NUM(GL_TEXTURE_ALPHA_TYPE_ARB)); - rb_define_const(module, "GL_TEXTURE_APPLICATION_MODE_EXT", INT2NUM(GL_TEXTURE_APPLICATION_MODE_EXT)); - rb_define_const(module, "GL_TEXTURE_BASE_LEVEL", INT2NUM(GL_TEXTURE_BASE_LEVEL)); - rb_define_const(module, "GL_TEXTURE_BASE_LEVEL_SGIS", INT2NUM(GL_TEXTURE_BASE_LEVEL_SGIS)); - rb_define_const(module, "GL_TEXTURE_BINDING_1D", INT2NUM(GL_TEXTURE_BINDING_1D)); - rb_define_const(module, "GL_TEXTURE_BINDING_2D", INT2NUM(GL_TEXTURE_BINDING_2D)); - rb_define_const(module, "GL_TEXTURE_BINDING_3D", INT2NUM(GL_TEXTURE_BINDING_3D)); - rb_define_const(module, "GL_TEXTURE_BINDING_CUBE_MAP_ARB", INT2NUM(GL_TEXTURE_BINDING_CUBE_MAP_ARB)); - rb_define_const(module, "GL_TEXTURE_BINDING_CUBE_MAP_EXT", INT2NUM(GL_TEXTURE_BINDING_CUBE_MAP_EXT)); - rb_define_const(module, "GL_TEXTURE_BINDING_CUBE_MAP", INT2NUM(GL_TEXTURE_BINDING_CUBE_MAP)); - rb_define_const(module, "GL_TEXTURE_BINDING_RECTANGLE_ARB", INT2NUM(GL_TEXTURE_BINDING_RECTANGLE_ARB)); - rb_define_const(module, "GL_TEXTURE_BINDING_RECTANGLE_NV", INT2NUM(GL_TEXTURE_BINDING_RECTANGLE_NV)); - rb_define_const(module, "GL_TEXTURE_BIT", INT2NUM(GL_TEXTURE_BIT)); - rb_define_const(module, "GL_TEXTURE_BLUE_SIZE_EXT", INT2NUM(GL_TEXTURE_BLUE_SIZE_EXT)); - rb_define_const(module, "GL_TEXTURE_BLUE_SIZE", INT2NUM(GL_TEXTURE_BLUE_SIZE)); - rb_define_const(module, "GL_TEXTURE_BLUE_TYPE_ARB", INT2NUM(GL_TEXTURE_BLUE_TYPE_ARB)); - rb_define_const(module, "GL_TEXTURE_BORDER_COLOR", INT2NUM(GL_TEXTURE_BORDER_COLOR)); - rb_define_const(module, "GL_TEXTURE_BORDER", INT2NUM(GL_TEXTURE_BORDER)); - rb_define_const(module, "GL_TEXTURE_BORDER_VALUES_NV", INT2NUM(GL_TEXTURE_BORDER_VALUES_NV)); - rb_define_const(module, "GL_TEXTURE_CLIPMAP_CENTER_SGIX", INT2NUM(GL_TEXTURE_CLIPMAP_CENTER_SGIX)); - rb_define_const(module, "GL_TEXTURE_CLIPMAP_DEPTH_SGIX", INT2NUM(GL_TEXTURE_CLIPMAP_DEPTH_SGIX)); - rb_define_const(module, "GL_TEXTURE_CLIPMAP_FRAME_SGIX", INT2NUM(GL_TEXTURE_CLIPMAP_FRAME_SGIX)); - rb_define_const(module, "GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX", INT2NUM(GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX)); - rb_define_const(module, "GL_TEXTURE_CLIPMAP_OFFSET_SGIX", INT2NUM(GL_TEXTURE_CLIPMAP_OFFSET_SGIX)); - rb_define_const(module, "GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX", INT2NUM(GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX)); - rb_define_const(module, "GL_TEXTURE_COLOR_TABLE_SGI", INT2NUM(GL_TEXTURE_COLOR_TABLE_SGI)); - rb_define_const(module, "GL_TEXTURE_COLOR_WRITEMASK_SGIS", INT2NUM(GL_TEXTURE_COLOR_WRITEMASK_SGIS)); - rb_define_const(module, "GL_TEXTURE_COMPARE_FAIL_VALUE_ARB", INT2NUM(GL_TEXTURE_COMPARE_FAIL_VALUE_ARB)); - rb_define_const(module, "GL_TEXTURE_COMPARE_FUNC", INT2NUM(GL_TEXTURE_COMPARE_FUNC)); - rb_define_const(module, "GL_TEXTURE_COMPARE_MODE", INT2NUM(GL_TEXTURE_COMPARE_MODE)); - rb_define_const(module, "GL_TEXTURE_COMPARE_OPERATOR_SGIX", INT2NUM(GL_TEXTURE_COMPARE_OPERATOR_SGIX)); - rb_define_const(module, "GL_TEXTURE_COMPARE_SGIX", INT2NUM(GL_TEXTURE_COMPARE_SGIX)); - rb_define_const(module, "GL_TEXTURE_COMPONENTS", INT2NUM(GL_TEXTURE_COMPONENTS)); - rb_define_const(module, "GL_TEXTURE_COMPRESSED_ARB", INT2NUM(GL_TEXTURE_COMPRESSED_ARB)); - rb_define_const(module, "GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB", INT2NUM(GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB)); - rb_define_const(module, "GL_TEXTURE_COMPRESSED_IMAGE_SIZE", INT2NUM(GL_TEXTURE_COMPRESSED_IMAGE_SIZE)); - rb_define_const(module, "GL_TEXTURE_COMPRESSED", INT2NUM(GL_TEXTURE_COMPRESSED)); - rb_define_const(module, "GL_TEXTURE_COMPRESSION_HINT_ARB", INT2NUM(GL_TEXTURE_COMPRESSION_HINT_ARB)); - rb_define_const(module, "GL_TEXTURE_COMPRESSION_HINT", INT2NUM(GL_TEXTURE_COMPRESSION_HINT)); - rb_define_const(module, "GL_TEXTURE_CONSTANT_DATA_SUNX", INT2NUM(GL_TEXTURE_CONSTANT_DATA_SUNX)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB", INT2NUM(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING", INT2NUM(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_COUNT_EXT", INT2NUM(GL_TEXTURE_COORD_ARRAY_COUNT_EXT)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_EXT", INT2NUM(GL_TEXTURE_COORD_ARRAY_EXT)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY", INT2NUM(GL_TEXTURE_COORD_ARRAY)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_LIST_IBM", INT2NUM(GL_TEXTURE_COORD_ARRAY_LIST_IBM)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM", INT2NUM(GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL", INT2NUM(GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_POINTER_EXT", INT2NUM(GL_TEXTURE_COORD_ARRAY_POINTER_EXT)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_POINTER", INT2NUM(GL_TEXTURE_COORD_ARRAY_POINTER)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_SIZE_EXT", INT2NUM(GL_TEXTURE_COORD_ARRAY_SIZE_EXT)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_SIZE", INT2NUM(GL_TEXTURE_COORD_ARRAY_SIZE)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_STRIDE_EXT", INT2NUM(GL_TEXTURE_COORD_ARRAY_STRIDE_EXT)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_STRIDE", INT2NUM(GL_TEXTURE_COORD_ARRAY_STRIDE)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_TYPE_EXT", INT2NUM(GL_TEXTURE_COORD_ARRAY_TYPE_EXT)); - rb_define_const(module, "GL_TEXTURE_COORD_ARRAY_TYPE", INT2NUM(GL_TEXTURE_COORD_ARRAY_TYPE)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_ARB", INT2NUM(GL_TEXTURE_CUBE_MAP_ARB)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_EXT", INT2NUM(GL_TEXTURE_CUBE_MAP_EXT)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP", INT2NUM(GL_TEXTURE_CUBE_MAP)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB", INT2NUM(GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT", INT2NUM(GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_NEGATIVE_X", INT2NUM(GL_TEXTURE_CUBE_MAP_NEGATIVE_X)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB", INT2NUM(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT", INT2NUM(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Y", INT2NUM(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB", INT2NUM(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT", INT2NUM(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_NEGATIVE_Z", INT2NUM(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB", INT2NUM(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT", INT2NUM(GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_POSITIVE_X", INT2NUM(GL_TEXTURE_CUBE_MAP_POSITIVE_X)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB", INT2NUM(GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT", INT2NUM(GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_POSITIVE_Y", INT2NUM(GL_TEXTURE_CUBE_MAP_POSITIVE_Y)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB", INT2NUM(GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT", INT2NUM(GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT)); - rb_define_const(module, "GL_TEXTURE_CUBE_MAP_POSITIVE_Z", INT2NUM(GL_TEXTURE_CUBE_MAP_POSITIVE_Z)); - rb_define_const(module, "GL_TEXTURE_DEFORMATION_BIT_SGIX", INT2NUM(GL_TEXTURE_DEFORMATION_BIT_SGIX)); - rb_define_const(module, "GL_TEXTURE_DEFORMATION_SGIX", INT2NUM(GL_TEXTURE_DEFORMATION_SGIX)); - rb_define_const(module, "GL_TEXTURE_DEPTH_EXT", INT2NUM(GL_TEXTURE_DEPTH_EXT)); - rb_define_const(module, "GL_TEXTURE_DEPTH", INT2NUM(GL_TEXTURE_DEPTH)); - rb_define_const(module, "GL_TEXTURE_DEPTH_SIZE_ARB", INT2NUM(GL_TEXTURE_DEPTH_SIZE_ARB)); - rb_define_const(module, "GL_TEXTURE_DEPTH_SIZE", INT2NUM(GL_TEXTURE_DEPTH_SIZE)); - rb_define_const(module, "GL_TEXTURE_DEPTH_TYPE_ARB", INT2NUM(GL_TEXTURE_DEPTH_TYPE_ARB)); - rb_define_const(module, "GL_TEXTURE_DS_SIZE_NV", INT2NUM(GL_TEXTURE_DS_SIZE_NV)); - rb_define_const(module, "GL_TEXTURE_DT_SIZE_NV", INT2NUM(GL_TEXTURE_DT_SIZE_NV)); - rb_define_const(module, "GL_TEXTURE_ENV_BIAS_SGIX", INT2NUM(GL_TEXTURE_ENV_BIAS_SGIX)); - rb_define_const(module, "GL_TEXTURE_ENV_COLOR", INT2NUM(GL_TEXTURE_ENV_COLOR)); - rb_define_const(module, "GL_TEXTURE_ENV", INT2NUM(GL_TEXTURE_ENV)); - rb_define_const(module, "GL_TEXTURE_ENV_MODE", INT2NUM(GL_TEXTURE_ENV_MODE)); - rb_define_const(module, "GL_TEXTURE_FILTER4_SIZE_SGIS", INT2NUM(GL_TEXTURE_FILTER4_SIZE_SGIS)); - rb_define_const(module, "GL_TEXTURE_FILTER_CONTROL_EXT", INT2NUM(GL_TEXTURE_FILTER_CONTROL_EXT)); - rb_define_const(module, "GL_TEXTURE_FILTER_CONTROL", INT2NUM(GL_TEXTURE_FILTER_CONTROL)); - rb_define_const(module, "GL_TEXTURE_FLOAT_COMPONENTS_NV", INT2NUM(GL_TEXTURE_FLOAT_COMPONENTS_NV)); - rb_define_const(module, "GL_TEXTURE_GEN_MODE", INT2NUM(GL_TEXTURE_GEN_MODE)); - rb_define_const(module, "GL_TEXTURE_GEN_Q", INT2NUM(GL_TEXTURE_GEN_Q)); - rb_define_const(module, "GL_TEXTURE_GEN_R", INT2NUM(GL_TEXTURE_GEN_R)); - rb_define_const(module, "GL_TEXTURE_GEN_S", INT2NUM(GL_TEXTURE_GEN_S)); - rb_define_const(module, "GL_TEXTURE_GEN_T", INT2NUM(GL_TEXTURE_GEN_T)); - rb_define_const(module, "GL_TEXTURE_GEQUAL_R_SGIX", INT2NUM(GL_TEXTURE_GEQUAL_R_SGIX)); - rb_define_const(module, "GL_TEXTURE_GREEN_SIZE_EXT", INT2NUM(GL_TEXTURE_GREEN_SIZE_EXT)); - rb_define_const(module, "GL_TEXTURE_GREEN_SIZE", INT2NUM(GL_TEXTURE_GREEN_SIZE)); - rb_define_const(module, "GL_TEXTURE_GREEN_TYPE_ARB", INT2NUM(GL_TEXTURE_GREEN_TYPE_ARB)); - rb_define_const(module, "GL_TEXTURE_HEIGHT", INT2NUM(GL_TEXTURE_HEIGHT)); - rb_define_const(module, "GL_TEXTURE_HI_SIZE_NV", INT2NUM(GL_TEXTURE_HI_SIZE_NV)); - rb_define_const(module, "GL_TEXTURE_INDEX_SIZE_EXT", INT2NUM(GL_TEXTURE_INDEX_SIZE_EXT)); - rb_define_const(module, "GL_TEXTURE", INT2NUM(GL_TEXTURE)); - rb_define_const(module, "GL_TEXTURE_INTENSITY_SIZE_EXT", INT2NUM(GL_TEXTURE_INTENSITY_SIZE_EXT)); - rb_define_const(module, "GL_TEXTURE_INTENSITY_SIZE", INT2NUM(GL_TEXTURE_INTENSITY_SIZE)); - rb_define_const(module, "GL_TEXTURE_INTENSITY_TYPE_ARB", INT2NUM(GL_TEXTURE_INTENSITY_TYPE_ARB)); - rb_define_const(module, "GL_TEXTURE_INTERNAL_FORMAT", INT2NUM(GL_TEXTURE_INTERNAL_FORMAT)); - rb_define_const(module, "GL_TEXTURE_LEQUAL_R_SGIX", INT2NUM(GL_TEXTURE_LEQUAL_R_SGIX)); - rb_define_const(module, "GL_TEXTURE_LIGHT_EXT", INT2NUM(GL_TEXTURE_LIGHT_EXT)); - rb_define_const(module, "GL_TEXTURE_LIGHTING_MODE_HP", INT2NUM(GL_TEXTURE_LIGHTING_MODE_HP)); - rb_define_const(module, "GL_TEXTURE_LOD_BIAS_EXT", INT2NUM(GL_TEXTURE_LOD_BIAS_EXT)); - rb_define_const(module, "GL_TEXTURE_LOD_BIAS", INT2NUM(GL_TEXTURE_LOD_BIAS)); - rb_define_const(module, "GL_TEXTURE_LOD_BIAS_R_SGIX", INT2NUM(GL_TEXTURE_LOD_BIAS_R_SGIX)); - rb_define_const(module, "GL_TEXTURE_LOD_BIAS_S_SGIX", INT2NUM(GL_TEXTURE_LOD_BIAS_S_SGIX)); - rb_define_const(module, "GL_TEXTURE_LOD_BIAS_T_SGIX", INT2NUM(GL_TEXTURE_LOD_BIAS_T_SGIX)); - rb_define_const(module, "GL_TEXTURE_LO_SIZE_NV", INT2NUM(GL_TEXTURE_LO_SIZE_NV)); - rb_define_const(module, "GL_TEXTURE_LUMINANCE_SIZE_EXT", INT2NUM(GL_TEXTURE_LUMINANCE_SIZE_EXT)); - rb_define_const(module, "GL_TEXTURE_LUMINANCE_SIZE", INT2NUM(GL_TEXTURE_LUMINANCE_SIZE)); - rb_define_const(module, "GL_TEXTURE_LUMINANCE_TYPE_ARB", INT2NUM(GL_TEXTURE_LUMINANCE_TYPE_ARB)); - rb_define_const(module, "GL_TEXTURE_MAG_FILTER", INT2NUM(GL_TEXTURE_MAG_FILTER)); - rb_define_const(module, "GL_TEXTURE_MAG_SIZE_NV", INT2NUM(GL_TEXTURE_MAG_SIZE_NV)); - rb_define_const(module, "GL_TEXTURE_MATERIAL_FACE_EXT", INT2NUM(GL_TEXTURE_MATERIAL_FACE_EXT)); - rb_define_const(module, "GL_TEXTURE_MATERIAL_PARAMETER_EXT", INT2NUM(GL_TEXTURE_MATERIAL_PARAMETER_EXT)); - rb_define_const(module, "GL_TEXTURE_MATRIX", INT2NUM(GL_TEXTURE_MATRIX)); - rb_define_const(module, "GL_TEXTURE_MAX_ANISOTROPY_EXT", INT2NUM(GL_TEXTURE_MAX_ANISOTROPY_EXT)); - rb_define_const(module, "GL_TEXTURE_MAX_CLAMP_R_SGIX", INT2NUM(GL_TEXTURE_MAX_CLAMP_R_SGIX)); - rb_define_const(module, "GL_TEXTURE_MAX_CLAMP_S_SGIX", INT2NUM(GL_TEXTURE_MAX_CLAMP_S_SGIX)); - rb_define_const(module, "GL_TEXTURE_MAX_CLAMP_T_SGIX", INT2NUM(GL_TEXTURE_MAX_CLAMP_T_SGIX)); - rb_define_const(module, "GL_TEXTURE_MAX_LEVEL", INT2NUM(GL_TEXTURE_MAX_LEVEL)); - rb_define_const(module, "GL_TEXTURE_MAX_LEVEL_SGIS", INT2NUM(GL_TEXTURE_MAX_LEVEL_SGIS)); - rb_define_const(module, "GL_TEXTURE_MAX_LOD", INT2NUM(GL_TEXTURE_MAX_LOD)); - rb_define_const(module, "GL_TEXTURE_MAX_LOD_SGIS", INT2NUM(GL_TEXTURE_MAX_LOD_SGIS)); - rb_define_const(module, "GL_TEXTURE_MIN_FILTER", INT2NUM(GL_TEXTURE_MIN_FILTER)); - rb_define_const(module, "GL_TEXTURE_MIN_LOD", INT2NUM(GL_TEXTURE_MIN_LOD)); - rb_define_const(module, "GL_TEXTURE_MIN_LOD_SGIS", INT2NUM(GL_TEXTURE_MIN_LOD_SGIS)); - rb_define_const(module, "GL_TEXTURE_MULTI_BUFFER_HINT_SGIX", INT2NUM(GL_TEXTURE_MULTI_BUFFER_HINT_SGIX)); - rb_define_const(module, "GL_TEXTURE_NORMAL_EXT", INT2NUM(GL_TEXTURE_NORMAL_EXT)); - rb_define_const(module, "GL_TEXTURE_POST_SPECULAR_HP", INT2NUM(GL_TEXTURE_POST_SPECULAR_HP)); - rb_define_const(module, "GL_TEXTURE_PRE_SPECULAR_HP", INT2NUM(GL_TEXTURE_PRE_SPECULAR_HP)); - rb_define_const(module, "GL_TEXTURE_PRIORITY_EXT", INT2NUM(GL_TEXTURE_PRIORITY_EXT)); - rb_define_const(module, "GL_TEXTURE_PRIORITY", INT2NUM(GL_TEXTURE_PRIORITY)); - rb_define_const(module, "GL_TEXTURE_RECTANGLE_ARB", INT2NUM(GL_TEXTURE_RECTANGLE_ARB)); - rb_define_const(module, "GL_TEXTURE_RECTANGLE_NV", INT2NUM(GL_TEXTURE_RECTANGLE_NV)); - rb_define_const(module, "GL_TEXTURE_RED_SIZE_EXT", INT2NUM(GL_TEXTURE_RED_SIZE_EXT)); - rb_define_const(module, "GL_TEXTURE_RED_SIZE", INT2NUM(GL_TEXTURE_RED_SIZE)); - rb_define_const(module, "GL_TEXTURE_RED_TYPE_ARB", INT2NUM(GL_TEXTURE_RED_TYPE_ARB)); - rb_define_const(module, "GL_TEXTURE_RESIDENT_EXT", INT2NUM(GL_TEXTURE_RESIDENT_EXT)); - rb_define_const(module, "GL_TEXTURE_RESIDENT", INT2NUM(GL_TEXTURE_RESIDENT)); - rb_define_const(module, "GL_TEXTURE_SHADER_NV", INT2NUM(GL_TEXTURE_SHADER_NV)); - rb_define_const(module, "GL_TEXTURE_STACK_DEPTH", INT2NUM(GL_TEXTURE_STACK_DEPTH)); - rb_define_const(module, "GL_TEXTURE_STENCIL_SIZE_EXT", INT2NUM(GL_TEXTURE_STENCIL_SIZE_EXT)); - rb_define_const(module, "GL_TEXTURE_TOO_LARGE_EXT", INT2NUM(GL_TEXTURE_TOO_LARGE_EXT)); - rb_define_const(module, "GL_TEXTURE_UNSIGNED_REMAP_MODE_NV", INT2NUM(GL_TEXTURE_UNSIGNED_REMAP_MODE_NV)); - rb_define_const(module, "GL_TEXTURE_WIDTH", INT2NUM(GL_TEXTURE_WIDTH)); - rb_define_const(module, "GL_TEXTURE_WRAP_Q_SGIS", INT2NUM(GL_TEXTURE_WRAP_Q_SGIS)); - rb_define_const(module, "GL_TEXTURE_WRAP_R_EXT", INT2NUM(GL_TEXTURE_WRAP_R_EXT)); - rb_define_const(module, "GL_TEXTURE_WRAP_R", INT2NUM(GL_TEXTURE_WRAP_R)); - rb_define_const(module, "GL_TEXTURE_WRAP_S", INT2NUM(GL_TEXTURE_WRAP_S)); - rb_define_const(module, "GL_TEXTURE_WRAP_T", INT2NUM(GL_TEXTURE_WRAP_T)); - rb_define_const(module, "GL_TIME_ELAPSED_EXT", INT2NUM(GL_TIME_ELAPSED_EXT)); - rb_define_const(module, "GL_T", INT2NUM(GL_T)); - rb_define_const(module, "GL_TRACK_MATRIX_NV", INT2NUM(GL_TRACK_MATRIX_NV)); - rb_define_const(module, "GL_TRACK_MATRIX_TRANSFORM_NV", INT2NUM(GL_TRACK_MATRIX_TRANSFORM_NV)); - rb_define_const(module, "GL_TRANSFORM_BIT", INT2NUM(GL_TRANSFORM_BIT)); - rb_define_const(module, "GL_TRANSFORM_HINT_APPLE", INT2NUM(GL_TRANSFORM_HINT_APPLE)); - rb_define_const(module, "GL_TRANSPOSE_COLOR_MATRIX_ARB", INT2NUM(GL_TRANSPOSE_COLOR_MATRIX_ARB)); - rb_define_const(module, "GL_TRANSPOSE_COLOR_MATRIX", INT2NUM(GL_TRANSPOSE_COLOR_MATRIX)); - rb_define_const(module, "GL_TRANSPOSE_CURRENT_MATRIX_ARB", INT2NUM(GL_TRANSPOSE_CURRENT_MATRIX_ARB)); - rb_define_const(module, "GL_TRANSPOSE_MODELVIEW_MATRIX_ARB", INT2NUM(GL_TRANSPOSE_MODELVIEW_MATRIX_ARB)); - rb_define_const(module, "GL_TRANSPOSE_MODELVIEW_MATRIX", INT2NUM(GL_TRANSPOSE_MODELVIEW_MATRIX)); - rb_define_const(module, "GL_TRANSPOSE_NV", INT2NUM(GL_TRANSPOSE_NV)); - rb_define_const(module, "GL_TRANSPOSE_PROJECTION_MATRIX_ARB", INT2NUM(GL_TRANSPOSE_PROJECTION_MATRIX_ARB)); - rb_define_const(module, "GL_TRANSPOSE_PROJECTION_MATRIX", INT2NUM(GL_TRANSPOSE_PROJECTION_MATRIX)); - rb_define_const(module, "GL_TRANSPOSE_TEXTURE_MATRIX_ARB", INT2NUM(GL_TRANSPOSE_TEXTURE_MATRIX_ARB)); - rb_define_const(module, "GL_TRANSPOSE_TEXTURE_MATRIX", INT2NUM(GL_TRANSPOSE_TEXTURE_MATRIX)); - rb_define_const(module, "GL_TRIANGLE_FAN", INT2NUM(GL_TRIANGLE_FAN)); - rb_define_const(module, "GL_TRIANGLE_LIST_SUN", INT2NUM(GL_TRIANGLE_LIST_SUN)); - rb_define_const(module, "GL_TRIANGLE_MESH_SUN", INT2NUM(GL_TRIANGLE_MESH_SUN)); - rb_define_const(module, "GL_TRIANGLES", INT2NUM(GL_TRIANGLES)); - rb_define_const(module, "GL_TRIANGLE_STRIP", INT2NUM(GL_TRIANGLE_STRIP)); - rb_define_const(module, "GL_TRUE", INT2NUM(GL_TRUE)); - rb_define_const(module, "GL_TYPE_RGBA_FLOAT_ATI", INT2NUM(GL_TYPE_RGBA_FLOAT_ATI)); - rb_define_const(module, "GL_UNPACK_ALIGNMENT", INT2NUM(GL_UNPACK_ALIGNMENT)); - rb_define_const(module, "GL_UNPACK_CLIENT_STORAGE_APPLE", INT2NUM(GL_UNPACK_CLIENT_STORAGE_APPLE)); - rb_define_const(module, "GL_UNPACK_CMYK_HINT_EXT", INT2NUM(GL_UNPACK_CMYK_HINT_EXT)); - rb_define_const(module, "GL_UNPACK_CONSTANT_DATA_SUNX", INT2NUM(GL_UNPACK_CONSTANT_DATA_SUNX)); - rb_define_const(module, "GL_UNPACK_IMAGE_DEPTH_SGIS", INT2NUM(GL_UNPACK_IMAGE_DEPTH_SGIS)); - rb_define_const(module, "GL_UNPACK_IMAGE_HEIGHT_EXT", INT2NUM(GL_UNPACK_IMAGE_HEIGHT_EXT)); - rb_define_const(module, "GL_UNPACK_IMAGE_HEIGHT", INT2NUM(GL_UNPACK_IMAGE_HEIGHT)); - rb_define_const(module, "GL_UNPACK_LSB_FIRST", INT2NUM(GL_UNPACK_LSB_FIRST)); - rb_define_const(module, "GL_UNPACK_RESAMPLE_OML", INT2NUM(GL_UNPACK_RESAMPLE_OML)); - rb_define_const(module, "GL_UNPACK_RESAMPLE_SGIX", INT2NUM(GL_UNPACK_RESAMPLE_SGIX)); - rb_define_const(module, "GL_UNPACK_ROW_LENGTH", INT2NUM(GL_UNPACK_ROW_LENGTH)); - rb_define_const(module, "GL_UNPACK_SKIP_IMAGES_EXT", INT2NUM(GL_UNPACK_SKIP_IMAGES_EXT)); - rb_define_const(module, "GL_UNPACK_SKIP_IMAGES", INT2NUM(GL_UNPACK_SKIP_IMAGES)); - rb_define_const(module, "GL_UNPACK_SKIP_PIXELS", INT2NUM(GL_UNPACK_SKIP_PIXELS)); - rb_define_const(module, "GL_UNPACK_SKIP_ROWS", INT2NUM(GL_UNPACK_SKIP_ROWS)); - rb_define_const(module, "GL_UNPACK_SKIP_VOLUMES_SGIS", INT2NUM(GL_UNPACK_SKIP_VOLUMES_SGIS)); - rb_define_const(module, "GL_UNPACK_SUBSAMPLE_RATE_SGIX", INT2NUM(GL_UNPACK_SUBSAMPLE_RATE_SGIX)); - rb_define_const(module, "GL_UNPACK_SWAP_BYTES", INT2NUM(GL_UNPACK_SWAP_BYTES)); - rb_define_const(module, "GL_UNSIGNED_BYTE_2_3_3_REV_EXT", INT2NUM(GL_UNSIGNED_BYTE_2_3_3_REV_EXT)); - rb_define_const(module, "GL_UNSIGNED_BYTE_2_3_3_REV", INT2NUM(GL_UNSIGNED_BYTE_2_3_3_REV)); - rb_define_const(module, "GL_UNSIGNED_BYTE_3_3_2_EXT", INT2NUM(GL_UNSIGNED_BYTE_3_3_2_EXT)); - rb_define_const(module, "GL_UNSIGNED_BYTE_3_3_2", INT2NUM(GL_UNSIGNED_BYTE_3_3_2)); - rb_define_const(module, "GL_UNSIGNED_BYTE", INT2NUM(GL_UNSIGNED_BYTE)); - rb_define_const(module, "GL_UNSIGNED_IDENTITY_NV", INT2NUM(GL_UNSIGNED_IDENTITY_NV)); - rb_define_const(module, "GL_UNSIGNED_INT_10_10_10_2_EXT", INT2NUM(GL_UNSIGNED_INT_10_10_10_2_EXT)); - rb_define_const(module, "GL_UNSIGNED_INT_10_10_10_2", INT2NUM(GL_UNSIGNED_INT_10_10_10_2)); - rb_define_const(module, "GL_UNSIGNED_INT_2_10_10_10_REV_EXT", INT2NUM(GL_UNSIGNED_INT_2_10_10_10_REV_EXT)); - rb_define_const(module, "GL_UNSIGNED_INT_2_10_10_10_REV", INT2NUM(GL_UNSIGNED_INT_2_10_10_10_REV)); - rb_define_const(module, "GL_UNSIGNED_INT_24_8_EXT", INT2NUM(GL_UNSIGNED_INT_24_8_EXT)); - rb_define_const(module, "GL_UNSIGNED_INT_24_8_NV", INT2NUM(GL_UNSIGNED_INT_24_8_NV)); - rb_define_const(module, "GL_UNSIGNED_INT_8_8_8_8_EXT", INT2NUM(GL_UNSIGNED_INT_8_8_8_8_EXT)); - rb_define_const(module, "GL_UNSIGNED_INT_8_8_8_8", INT2NUM(GL_UNSIGNED_INT_8_8_8_8)); - rb_define_const(module, "GL_UNSIGNED_INT_8_8_8_8_REV_EXT", INT2NUM(GL_UNSIGNED_INT_8_8_8_8_REV_EXT)); - rb_define_const(module, "GL_UNSIGNED_INT_8_8_8_8_REV", INT2NUM(GL_UNSIGNED_INT_8_8_8_8_REV)); - rb_define_const(module, "GL_UNSIGNED_INT_8_8_S8_S8_REV_NV", INT2NUM(GL_UNSIGNED_INT_8_8_S8_S8_REV_NV)); - rb_define_const(module, "GL_UNSIGNED_INT", INT2NUM(GL_UNSIGNED_INT)); - rb_define_const(module, "GL_UNSIGNED_INT_S8_S8_8_8_NV", INT2NUM(GL_UNSIGNED_INT_S8_S8_8_8_NV)); - rb_define_const(module, "GL_UNSIGNED_INVERT_NV", INT2NUM(GL_UNSIGNED_INVERT_NV)); - rb_define_const(module, "GL_UNSIGNED_NORMALIZED_ARB", INT2NUM(GL_UNSIGNED_NORMALIZED_ARB)); - rb_define_const(module, "GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT", INT2NUM(GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT)); - rb_define_const(module, "GL_UNSIGNED_SHORT_1_5_5_5_REV", INT2NUM(GL_UNSIGNED_SHORT_1_5_5_5_REV)); - rb_define_const(module, "GL_UNSIGNED_SHORT_4_4_4_4_EXT", INT2NUM(GL_UNSIGNED_SHORT_4_4_4_4_EXT)); - rb_define_const(module, "GL_UNSIGNED_SHORT_4_4_4_4", INT2NUM(GL_UNSIGNED_SHORT_4_4_4_4)); - rb_define_const(module, "GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT", INT2NUM(GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT)); - rb_define_const(module, "GL_UNSIGNED_SHORT_4_4_4_4_REV", INT2NUM(GL_UNSIGNED_SHORT_4_4_4_4_REV)); - rb_define_const(module, "GL_UNSIGNED_SHORT_5_5_5_1_EXT", INT2NUM(GL_UNSIGNED_SHORT_5_5_5_1_EXT)); - rb_define_const(module, "GL_UNSIGNED_SHORT_5_5_5_1", INT2NUM(GL_UNSIGNED_SHORT_5_5_5_1)); - rb_define_const(module, "GL_UNSIGNED_SHORT_5_6_5_EXT", INT2NUM(GL_UNSIGNED_SHORT_5_6_5_EXT)); - rb_define_const(module, "GL_UNSIGNED_SHORT_5_6_5", INT2NUM(GL_UNSIGNED_SHORT_5_6_5)); - rb_define_const(module, "GL_UNSIGNED_SHORT_5_6_5_REV_EXT", INT2NUM(GL_UNSIGNED_SHORT_5_6_5_REV_EXT)); - rb_define_const(module, "GL_UNSIGNED_SHORT_5_6_5_REV", INT2NUM(GL_UNSIGNED_SHORT_5_6_5_REV)); - rb_define_const(module, "GL_UNSIGNED_SHORT_8_8_APPLE", INT2NUM(GL_UNSIGNED_SHORT_8_8_APPLE)); - rb_define_const(module, "GL_UNSIGNED_SHORT_8_8_MESA", INT2NUM(GL_UNSIGNED_SHORT_8_8_MESA)); - rb_define_const(module, "GL_UNSIGNED_SHORT_8_8_REV_APPLE", INT2NUM(GL_UNSIGNED_SHORT_8_8_REV_APPLE)); - rb_define_const(module, "GL_UNSIGNED_SHORT_8_8_REV_MESA", INT2NUM(GL_UNSIGNED_SHORT_8_8_REV_MESA)); - rb_define_const(module, "GL_UNSIGNED_SHORT", INT2NUM(GL_UNSIGNED_SHORT)); - rb_define_const(module, "GL_UPPER_LEFT", INT2NUM(GL_UPPER_LEFT)); - rb_define_const(module, "GL_V2F", INT2NUM(GL_V2F)); - rb_define_const(module, "GL_V3F", INT2NUM(GL_V3F)); - rb_define_const(module, "GL_VALIDATE_STATUS", INT2NUM(GL_VALIDATE_STATUS)); - rb_define_const(module, "GL_VARIABLE_A_NV", INT2NUM(GL_VARIABLE_A_NV)); - rb_define_const(module, "GL_VARIABLE_B_NV", INT2NUM(GL_VARIABLE_B_NV)); - rb_define_const(module, "GL_VARIABLE_C_NV", INT2NUM(GL_VARIABLE_C_NV)); - rb_define_const(module, "GL_VARIABLE_D_NV", INT2NUM(GL_VARIABLE_D_NV)); - rb_define_const(module, "GL_VARIABLE_E_NV", INT2NUM(GL_VARIABLE_E_NV)); - rb_define_const(module, "GL_VARIABLE_F_NV", INT2NUM(GL_VARIABLE_F_NV)); - rb_define_const(module, "GL_VARIABLE_G_NV", INT2NUM(GL_VARIABLE_G_NV)); - rb_define_const(module, "GL_VARIANT_ARRAY_EXT", INT2NUM(GL_VARIANT_ARRAY_EXT)); - rb_define_const(module, "GL_VARIANT_ARRAY_POINTER_EXT", INT2NUM(GL_VARIANT_ARRAY_POINTER_EXT)); - rb_define_const(module, "GL_VARIANT_ARRAY_STRIDE_EXT", INT2NUM(GL_VARIANT_ARRAY_STRIDE_EXT)); - rb_define_const(module, "GL_VARIANT_ARRAY_TYPE_EXT", INT2NUM(GL_VARIANT_ARRAY_TYPE_EXT)); - rb_define_const(module, "GL_VARIANT_DATATYPE_EXT", INT2NUM(GL_VARIANT_DATATYPE_EXT)); - rb_define_const(module, "GL_VARIANT_EXT", INT2NUM(GL_VARIANT_EXT)); - rb_define_const(module, "GL_VARIANT_VALUE_EXT", INT2NUM(GL_VARIANT_VALUE_EXT)); - rb_define_const(module, "GL_VECTOR_EXT", INT2NUM(GL_VECTOR_EXT)); - rb_define_const(module, "GL_VENDOR", INT2NUM(GL_VENDOR)); - rb_define_const(module, "GL_VERSION_1_1", INT2NUM(GL_VERSION_1_1)); - rb_define_const(module, "GL_VERSION_1_2", INT2NUM(GL_VERSION_1_2)); - rb_define_const(module, "GL_VERSION_1_3", INT2NUM(GL_VERSION_1_3)); - rb_define_const(module, "GL_VERSION_1_4", INT2NUM(GL_VERSION_1_4)); - rb_define_const(module, "GL_VERSION_1_5", INT2NUM(GL_VERSION_1_5)); - rb_define_const(module, "GL_VERSION", INT2NUM(GL_VERSION)); - rb_define_const(module, "GL_VERTEX23_BIT_PGI", INT2NUM(GL_VERTEX23_BIT_PGI)); - rb_define_const(module, "GL_VERTEX4_BIT_PGI", INT2NUM(GL_VERTEX4_BIT_PGI)); - rb_define_const(module, "GL_VERTEX_ARRAY_BINDING_APPLE", INT2NUM(GL_VERTEX_ARRAY_BINDING_APPLE)); - rb_define_const(module, "GL_VERTEX_ARRAY_BUFFER_BINDING_ARB", INT2NUM(GL_VERTEX_ARRAY_BUFFER_BINDING_ARB)); - rb_define_const(module, "GL_VERTEX_ARRAY_BUFFER_BINDING", INT2NUM(GL_VERTEX_ARRAY_BUFFER_BINDING)); - rb_define_const(module, "GL_VERTEX_ARRAY_COUNT_EXT", INT2NUM(GL_VERTEX_ARRAY_COUNT_EXT)); - rb_define_const(module, "GL_VERTEX_ARRAY_EXT", INT2NUM(GL_VERTEX_ARRAY_EXT)); - rb_define_const(module, "GL_VERTEX_ARRAY", INT2NUM(GL_VERTEX_ARRAY)); - rb_define_const(module, "GL_VERTEX_ARRAY_LIST_IBM", INT2NUM(GL_VERTEX_ARRAY_LIST_IBM)); - rb_define_const(module, "GL_VERTEX_ARRAY_LIST_STRIDE_IBM", INT2NUM(GL_VERTEX_ARRAY_LIST_STRIDE_IBM)); - rb_define_const(module, "GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL", INT2NUM(GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL)); - rb_define_const(module, "GL_VERTEX_ARRAY_POINTER_EXT", INT2NUM(GL_VERTEX_ARRAY_POINTER_EXT)); - rb_define_const(module, "GL_VERTEX_ARRAY_POINTER", INT2NUM(GL_VERTEX_ARRAY_POINTER)); - rb_define_const(module, "GL_VERTEX_ARRAY_RANGE_APPLE", INT2NUM(GL_VERTEX_ARRAY_RANGE_APPLE)); - rb_define_const(module, "GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE", INT2NUM(GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE)); - rb_define_const(module, "GL_VERTEX_ARRAY_RANGE_LENGTH_NV", INT2NUM(GL_VERTEX_ARRAY_RANGE_LENGTH_NV)); - rb_define_const(module, "GL_VERTEX_ARRAY_RANGE_NV", INT2NUM(GL_VERTEX_ARRAY_RANGE_NV)); - rb_define_const(module, "GL_VERTEX_ARRAY_RANGE_POINTER_APPLE", INT2NUM(GL_VERTEX_ARRAY_RANGE_POINTER_APPLE)); - rb_define_const(module, "GL_VERTEX_ARRAY_RANGE_POINTER_NV", INT2NUM(GL_VERTEX_ARRAY_RANGE_POINTER_NV)); - rb_define_const(module, "GL_VERTEX_ARRAY_RANGE_VALID_NV", INT2NUM(GL_VERTEX_ARRAY_RANGE_VALID_NV)); - rb_define_const(module, "GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV", INT2NUM(GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV)); - rb_define_const(module, "GL_VERTEX_ARRAY_SIZE_EXT", INT2NUM(GL_VERTEX_ARRAY_SIZE_EXT)); - rb_define_const(module, "GL_VERTEX_ARRAY_SIZE", INT2NUM(GL_VERTEX_ARRAY_SIZE)); - rb_define_const(module, "GL_VERTEX_ARRAY_STORAGE_HINT_APPLE", INT2NUM(GL_VERTEX_ARRAY_STORAGE_HINT_APPLE)); - rb_define_const(module, "GL_VERTEX_ARRAY_STRIDE_EXT", INT2NUM(GL_VERTEX_ARRAY_STRIDE_EXT)); - rb_define_const(module, "GL_VERTEX_ARRAY_STRIDE", INT2NUM(GL_VERTEX_ARRAY_STRIDE)); - rb_define_const(module, "GL_VERTEX_ARRAY_TYPE_EXT", INT2NUM(GL_VERTEX_ARRAY_TYPE_EXT)); - rb_define_const(module, "GL_VERTEX_ARRAY_TYPE", INT2NUM(GL_VERTEX_ARRAY_TYPE)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY0_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY0_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY10_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY10_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY11_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY11_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY12_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY12_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY13_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY13_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY14_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY14_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY15_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY15_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY1_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY1_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY2_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY2_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY3_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY3_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY4_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY4_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY5_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY5_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY6_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY6_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY7_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY7_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY8_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY8_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY9_NV", INT2NUM(GL_VERTEX_ATTRIB_ARRAY9_NV)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB", INT2NUM(GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING", INT2NUM(GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB", INT2NUM(GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY_ENABLED", INT2NUM(GL_VERTEX_ATTRIB_ARRAY_ENABLED)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB", INT2NUM(GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY_NORMALIZED", INT2NUM(GL_VERTEX_ATTRIB_ARRAY_NORMALIZED)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB", INT2NUM(GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY_POINTER", INT2NUM(GL_VERTEX_ATTRIB_ARRAY_POINTER)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB", INT2NUM(GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY_SIZE", INT2NUM(GL_VERTEX_ATTRIB_ARRAY_SIZE)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB", INT2NUM(GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY_STRIDE", INT2NUM(GL_VERTEX_ATTRIB_ARRAY_STRIDE)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB", INT2NUM(GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB)); - rb_define_const(module, "GL_VERTEX_ATTRIB_ARRAY_TYPE", INT2NUM(GL_VERTEX_ATTRIB_ARRAY_TYPE)); - rb_define_const(module, "GL_VERTEX_BLEND_ARB", INT2NUM(GL_VERTEX_BLEND_ARB)); - rb_define_const(module, "GL_VERTEX_CONSISTENT_HINT_PGI", INT2NUM(GL_VERTEX_CONSISTENT_HINT_PGI)); - rb_define_const(module, "GL_VERTEX_DATA_HINT_PGI", INT2NUM(GL_VERTEX_DATA_HINT_PGI)); - rb_define_const(module, "GL_VERTEX_PRECLIP_HINT_SGIX", INT2NUM(GL_VERTEX_PRECLIP_HINT_SGIX)); - rb_define_const(module, "GL_VERTEX_PRECLIP_SGIX", INT2NUM(GL_VERTEX_PRECLIP_SGIX)); - rb_define_const(module, "GL_VERTEX_PROGRAM_ARB", INT2NUM(GL_VERTEX_PROGRAM_ARB)); - rb_define_const(module, "GL_VERTEX_PROGRAM_BINDING_NV", INT2NUM(GL_VERTEX_PROGRAM_BINDING_NV)); - rb_define_const(module, "GL_VERTEX_PROGRAM_NV", INT2NUM(GL_VERTEX_PROGRAM_NV)); - rb_define_const(module, "GL_VERTEX_PROGRAM_POINT_SIZE_ARB", INT2NUM(GL_VERTEX_PROGRAM_POINT_SIZE_ARB)); - rb_define_const(module, "GL_VERTEX_PROGRAM_POINT_SIZE", INT2NUM(GL_VERTEX_PROGRAM_POINT_SIZE)); - rb_define_const(module, "GL_VERTEX_PROGRAM_POINT_SIZE_NV", INT2NUM(GL_VERTEX_PROGRAM_POINT_SIZE_NV)); - rb_define_const(module, "GL_VERTEX_PROGRAM_TWO_SIDE_ARB", INT2NUM(GL_VERTEX_PROGRAM_TWO_SIDE_ARB)); - rb_define_const(module, "GL_VERTEX_PROGRAM_TWO_SIDE", INT2NUM(GL_VERTEX_PROGRAM_TWO_SIDE)); - rb_define_const(module, "GL_VERTEX_PROGRAM_TWO_SIDE_NV", INT2NUM(GL_VERTEX_PROGRAM_TWO_SIDE_NV)); - rb_define_const(module, "GL_VERTEX_SHADER_ARB", INT2NUM(GL_VERTEX_SHADER_ARB)); - rb_define_const(module, "GL_VERTEX_SHADER_BINDING_EXT", INT2NUM(GL_VERTEX_SHADER_BINDING_EXT)); - rb_define_const(module, "GL_VERTEX_SHADER_EXT", INT2NUM(GL_VERTEX_SHADER_EXT)); - rb_define_const(module, "GL_VERTEX_SHADER_INSTRUCTIONS_EXT", INT2NUM(GL_VERTEX_SHADER_INSTRUCTIONS_EXT)); - rb_define_const(module, "GL_VERTEX_SHADER", INT2NUM(GL_VERTEX_SHADER)); - rb_define_const(module, "GL_VERTEX_SHADER_INVARIANTS_EXT", INT2NUM(GL_VERTEX_SHADER_INVARIANTS_EXT)); - rb_define_const(module, "GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT", INT2NUM(GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT)); - rb_define_const(module, "GL_VERTEX_SHADER_LOCALS_EXT", INT2NUM(GL_VERTEX_SHADER_LOCALS_EXT)); - rb_define_const(module, "GL_VERTEX_SHADER_OPTIMIZED_EXT", INT2NUM(GL_VERTEX_SHADER_OPTIMIZED_EXT)); - rb_define_const(module, "GL_VERTEX_SHADER_VARIANTS_EXT", INT2NUM(GL_VERTEX_SHADER_VARIANTS_EXT)); - rb_define_const(module, "GL_VERTEX_SOURCE_ATI", INT2NUM(GL_VERTEX_SOURCE_ATI)); - rb_define_const(module, "GL_VERTEX_STATE_PROGRAM_NV", INT2NUM(GL_VERTEX_STATE_PROGRAM_NV)); - rb_define_const(module, "GL_VERTEX_STREAM0_ATI", INT2NUM(GL_VERTEX_STREAM0_ATI)); - rb_define_const(module, "GL_VERTEX_STREAM1_ATI", INT2NUM(GL_VERTEX_STREAM1_ATI)); - rb_define_const(module, "GL_VERTEX_STREAM2_ATI", INT2NUM(GL_VERTEX_STREAM2_ATI)); - rb_define_const(module, "GL_VERTEX_STREAM3_ATI", INT2NUM(GL_VERTEX_STREAM3_ATI)); - rb_define_const(module, "GL_VERTEX_STREAM4_ATI", INT2NUM(GL_VERTEX_STREAM4_ATI)); - rb_define_const(module, "GL_VERTEX_STREAM5_ATI", INT2NUM(GL_VERTEX_STREAM5_ATI)); - rb_define_const(module, "GL_VERTEX_STREAM6_ATI", INT2NUM(GL_VERTEX_STREAM6_ATI)); - rb_define_const(module, "GL_VERTEX_STREAM7_ATI", INT2NUM(GL_VERTEX_STREAM7_ATI)); - rb_define_const(module, "GL_VERTEX_WEIGHT_ARRAY_EXT", INT2NUM(GL_VERTEX_WEIGHT_ARRAY_EXT)); - rb_define_const(module, "GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT", INT2NUM(GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT)); - rb_define_const(module, "GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT", INT2NUM(GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT)); - rb_define_const(module, "GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT", INT2NUM(GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT)); - rb_define_const(module, "GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT", INT2NUM(GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT)); - rb_define_const(module, "GL_VERTEX_WEIGHTING_EXT", INT2NUM(GL_VERTEX_WEIGHTING_EXT)); - rb_define_const(module, "GL_VIBRANCE_BIAS_NV", INT2NUM(GL_VIBRANCE_BIAS_NV)); - rb_define_const(module, "GL_VIBRANCE_SCALE_NV", INT2NUM(GL_VIBRANCE_SCALE_NV)); - rb_define_const(module, "GL_VIEWPORT_BIT", INT2NUM(GL_VIEWPORT_BIT)); - rb_define_const(module, "GL_VIEWPORT", INT2NUM(GL_VIEWPORT)); - rb_define_const(module, "GL_WEIGHT_ARRAY_ARB", INT2NUM(GL_WEIGHT_ARRAY_ARB)); - rb_define_const(module, "GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB", INT2NUM(GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB)); - rb_define_const(module, "GL_WEIGHT_ARRAY_BUFFER_BINDING", INT2NUM(GL_WEIGHT_ARRAY_BUFFER_BINDING)); - rb_define_const(module, "GL_WEIGHT_ARRAY_POINTER_ARB", INT2NUM(GL_WEIGHT_ARRAY_POINTER_ARB)); - rb_define_const(module, "GL_WEIGHT_ARRAY_SIZE_ARB", INT2NUM(GL_WEIGHT_ARRAY_SIZE_ARB)); - rb_define_const(module, "GL_WEIGHT_ARRAY_STRIDE_ARB", INT2NUM(GL_WEIGHT_ARRAY_STRIDE_ARB)); - rb_define_const(module, "GL_WEIGHT_ARRAY_TYPE_ARB", INT2NUM(GL_WEIGHT_ARRAY_TYPE_ARB)); - rb_define_const(module, "GL_WEIGHT_SUM_UNITY_ARB", INT2NUM(GL_WEIGHT_SUM_UNITY_ARB)); - rb_define_const(module, "GL_W_EXT", INT2NUM(GL_W_EXT)); - rb_define_const(module, "GL_WIDE_LINE_HINT_PGI", INT2NUM(GL_WIDE_LINE_HINT_PGI)); - rb_define_const(module, "GL_WRAP_BORDER_SUN", INT2NUM(GL_WRAP_BORDER_SUN)); - rb_define_const(module, "GL_WRITE_ONLY_ARB", INT2NUM(GL_WRITE_ONLY_ARB)); - rb_define_const(module, "GL_WRITE_ONLY", INT2NUM(GL_WRITE_ONLY)); - rb_define_const(module, "GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV", INT2NUM(GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV)); - rb_define_const(module, "GL_WRITE_PIXEL_DATA_RANGE_NV", INT2NUM(GL_WRITE_PIXEL_DATA_RANGE_NV)); - rb_define_const(module, "GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV", INT2NUM(GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV)); - rb_define_const(module, "GL_X_EXT", INT2NUM(GL_X_EXT)); - rb_define_const(module, "GL_XOR", INT2NUM(GL_XOR)); - rb_define_const(module, "GL_YCBCR_422_APPLE", INT2NUM(GL_YCBCR_422_APPLE)); - rb_define_const(module, "GL_YCBCR_MESA", INT2NUM(GL_YCBCR_MESA)); - rb_define_const(module, "GL_YCRCB_422_SGIX", INT2NUM(GL_YCRCB_422_SGIX)); - rb_define_const(module, "GL_YCRCB_444_SGIX", INT2NUM(GL_YCRCB_444_SGIX)); - rb_define_const(module, "GL_YCRCBA_SGIX", INT2NUM(GL_YCRCBA_SGIX)); - rb_define_const(module, "GL_YCRCB_SGIX", INT2NUM(GL_YCRCB_SGIX)); - rb_define_const(module, "GL_Y_EXT", INT2NUM(GL_Y_EXT)); - rb_define_const(module, "GL_ZERO_EXT", INT2NUM(GL_ZERO_EXT)); - rb_define_const(module, "GL_ZERO", INT2NUM(GL_ZERO)); - rb_define_const(module, "GL_Z_EXT", INT2NUM(GL_Z_EXT)); - rb_define_const(module, "GL_ZOOM_X", INT2NUM(GL_ZOOM_X)); - rb_define_const(module, "GL_ZOOM_Y", INT2NUM(GL_ZOOM_Y)); - /**/ - rb_define_const(module, "GL_ALL_CLIENT_ATTRIB_BITS", INT2NUM(GL_ALL_CLIENT_ATTRIB_BITS)); -} diff --git a/ruby/RubyOpenGL/gl/gl.c b/ruby/RubyOpenGL/gl/gl.c deleted file mode 100644 index bfc71949..00000000 --- a/ruby/RubyOpenGL/gl/gl.c +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (C) 1999 - 2005 Yoshi - * Copyright (C) 2006 John M. Gabriele - * - * This program is distributed under the terms of the MIT license. - * See the included MIT-LICENSE file for the terms of this license. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifdef __APPLE__ -#include -#elif defined WIN32 -#include -#include -#else -#include -#endif -#include "../common/common.h" - -#ifdef WIN32 -#define DLLEXPORT __declspec(dllexport) -#else -#define DLLEXPORT -#endif - -static VALUE module; - -void gl_init_enums(VALUE); -void gl_init_functions_1_0__1_1(VALUE); -void gl_init_functions_1_2(VALUE); -void gl_init_functions_1_3(VALUE); -void gl_init_functions_1_4(VALUE); -void gl_init_functions_1_5(VALUE); -void gl_init_functions_2_0(VALUE); -void gl_init_functions_2_1(VALUE); - -VALUE IsFunctionAvailable(char *name) -{ - GLvoid *ret; - ret = load_gl_function(name,0); /* won't raise */ - if (ret==NULL) - return Qfalse; - else - return Qtrue; -} - -static VALUE -IsAvailable(obj,arg1) -VALUE obj,arg1; -{ - char *name = RSTRING(arg1)->ptr; - Check_Type(arg1, T_STRING); - if (name && name[0] && (name[0]=='G' || name[0]=='W')) { /* GL_, GLX_, WGL_ extension */ - char buf[512+128]; - if (strlen(name)>(512)) - return Qfalse; - if (glGetString(GL_EXTENSIONS)==0) - return Qfalse; - - sprintf(buf,"Gl.glGetString(Gl::GL_EXTENSIONS).split(' ').include?('%s')", name); - return rb_eval_string(buf); - } else { /* function */ - return IsFunctionAvailable(name); - } -} - -DLLEXPORT void Init_gl() -{ - module = rb_define_module("Gl"); - gl_init_enums(module); - gl_init_functions_1_0__1_1(module); - gl_init_functions_1_2(module); - gl_init_functions_1_3(module); - gl_init_functions_1_4(module); - gl_init_functions_1_5(module); - gl_init_functions_2_0(module); - gl_init_functions_2_1(module); - - rb_define_module_function(module, "is_available?", IsAvailable, 1); -} diff --git a/ruby/RubyOpenGL/glu/extconf.rb b/ruby/RubyOpenGL/glu/extconf.rb deleted file mode 100644 index 011d09ad..00000000 --- a/ruby/RubyOpenGL/glu/extconf.rb +++ /dev/null @@ -1,20 +0,0 @@ -require "mkmf" -$CFLAGS = "/MD /O2 /EHsc /DWIN32 /DNDEBUG /D_WINDOWS" -#$CFLAGS = "/MD /Zi /EHsc /DWIN32 /DNDEBUG /D_WINDOWS" -#$LDFLAGS = "/Zi" - -libs = [ - "opengl32", - "glu32", -] - -libs.each {|lib| - unless have_library(lib) - puts "Unable to find #{lib}.lib!" - puts - exit - end -} - -create_makefile("glu") - diff --git a/ruby/RubyOpenGL/glu/glu.c b/ruby/RubyOpenGL/glu/glu.c deleted file mode 100644 index 07ddc075..00000000 --- a/ruby/RubyOpenGL/glu/glu.c +++ /dev/null @@ -1,1637 +0,0 @@ -/* - * Last edit by previous maintainer: - * 2003/10/25 15:25:05, yoshi - * - * Copyright (C) 1999 - 2005 Yoshi - * Copyright (C) 2006 John M. Gabriele - * - * This program is distributed under the terms of the MIT license. - * See the included COPYRIGHT file for the terms of this license. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifdef __APPLE__ -#include -#include -#elif defined WIN32 -#include -#include -#include -#else -#include -#include -#endif - -#include -#include "../common/common.h" - -#ifdef WIN32 -#define DLLEXPORT __declspec(dllexport) -typedef void (CALLBACK*(VOIDFUNC))(); -#else -#define DLLEXPORT -typedef void (*VOIDFUNC)(); -#endif - -#if defined(GLU_VERSION_1_2) -typedef GLUtesselator tesselatorObj; -#else /* GLU_VERSION_1_2 */ -typedef GLUtriangulatorObj tesselatorObj; -#endif /* !GLU_VERSION_1_2 */ - -#ifdef MESA -struct glu_MesaStack { - int len; - GLfloat **ptr; -}; - -static struct glu_MesaStack gms = {0, NULL}; -#endif - -struct nurbsdata { - GLUnurbsObj *nobj; -}; -struct tessdata { - tesselatorObj *tobj; - VALUE t_ref; -}; - -struct quaddata { - GLUquadricObj *qobj; -}; - -static VALUE cNurbs; -static VALUE cTess; -static VALUE cQuad; - -#define GetNURBS(obj, ndata) {\ - Data_Get_Struct(obj, struct nurbsdata, ndata);\ - if (ndata->nobj == NULL) rb_raise(rb_eRuntimeError, "Nurbs Object already deleted!");\ -} - -#define GetTESS(obj, tdata) {\ - Data_Get_Struct(obj, struct tessdata, tdata);\ - if (tdata->tobj == NULL) rb_raise(rb_eRuntimeError, "Triangulator Object already deleted!");\ -} - -#define GetQUAD(obj, qdata) {\ - Data_Get_Struct(obj, struct quaddata, qdata);\ - if (qdata->qobj == NULL) rb_raise(rb_eRuntimeError, "Quadric Object already deleted!");\ -} - -static ID callId; -static ID refId; - -/* - * GLU Implementation - */ - -/* - * Nurbs - */ -/* from nurbscrv.c */ -static int -get_curve_dim(type) -GLenum type; -{ - switch(type) - { - case GL_MAP1_VERTEX_3: return 3; - case GL_MAP1_VERTEX_4: return 4; - case GL_MAP1_INDEX: return 1; - case GL_MAP1_COLOR_4: return 4; - case GL_MAP1_NORMAL: return 3; - case GL_MAP1_TEXTURE_COORD_1: return 1; - case GL_MAP1_TEXTURE_COORD_2: return 2; - case GL_MAP1_TEXTURE_COORD_3: return 3; - case GL_MAP1_TEXTURE_COORD_4: return 4; - default: abort(); /* TODO: is this OK? */ - } - return 0; /*never get here*/ -} -/* from nurbssrf.c */ -static int -get_surface_dim(GLenum type) -{ - switch(type) - { - case GL_MAP2_VERTEX_3: return 3; - case GL_MAP2_VERTEX_4: return 4; - case GL_MAP2_INDEX: return 1; - case GL_MAP2_COLOR_4: return 4; - case GL_MAP2_NORMAL: return 3; - case GL_MAP2_TEXTURE_COORD_1: return 1; - case GL_MAP2_TEXTURE_COORD_2: return 2; - case GL_MAP2_TEXTURE_COORD_3: return 3; - case GL_MAP2_TEXTURE_COORD_4: return 4; - default: abort(); /* TODO: is this OK? */ - } - return 0; /*never get here*/ -} - -/* - * NURBS API - */ -static void -free_nurbs(ndata) -struct nurbsdata *ndata; -{ - if (ndata->nobj) gluDeleteNurbsRenderer(ndata->nobj); - ndata->nobj = NULL; -} -static VALUE -glu_NewNurbsRenderer(obj) -VALUE obj; -{ - VALUE ret; - struct nurbsdata *ndata; - ret = Data_Make_Struct(cNurbs, struct nurbsdata, 0, free_nurbs, ndata); - ndata->nobj = gluNewNurbsRenderer(); - return ret; -} -static VALUE -glu_DeleteNurbsRenderer(obj, arg1) -VALUE obj, arg1; -{ - struct nurbsdata *ndata; - GetNURBS(arg1, ndata); - free_nurbs(ndata); - return Qnil; -} -static VALUE -glu_NurbsProperty(obj, arg1, arg2, arg3) -VALUE obj, arg1, arg2, arg3; -{ - struct nurbsdata *ndata; - GLenum property; - GLfloat value; - GetNURBS(arg1, ndata); - property = (GLenum)NUM2INT(arg2); - value = (GLfloat)NUM2DBL(arg3); - gluNurbsProperty(ndata->nobj, property, value); - return Qnil; -} -static VALUE -glu_GetNurbsProperty(obj, arg1, arg2) -VALUE obj, arg1, arg2; -{ - struct nurbsdata *ndata; - GLenum property; - GLfloat value; - GetNURBS(arg1, ndata); - property = (GLenum)NUM2INT(arg2); - gluGetNurbsProperty(ndata->nobj, property, &value); - return rb_float_new(value); -} -static VALUE -glu_BeginCurve(obj, arg1) -VALUE obj, arg1; -{ - struct nurbsdata *ndata; - GetNURBS(arg1, ndata); - gluBeginCurve(ndata->nobj); - return Qnil; -} -static VALUE -glu_EndCurve(obj, arg1) -VALUE obj, arg1; -{ - struct nurbsdata *ndata; - GetNURBS(arg1, ndata); - gluEndCurve(ndata->nobj); - /* hack for Mesa 3.1 */ -#ifdef MESA - for (gms.len;gms.len>0;gms.len--) - free(gms.ptr[gms.len-1]); - free(gms.ptr); - gms.ptr = NULL; -#endif - return Qnil; -} -static VALUE -glu_NurbsCurve(argc,argv,obj) -int argc; -VALUE *argv; -VALUE obj; -{ - struct nurbsdata *ndata; - GLint uknot_count; - GLfloat *uknot; - GLint u_stride; - GLint uorder; - GLfloat *ctlarray; - GLenum type; - - VALUE args[7]; - GLfloat tmp[4]; - int i; - struct RArray *ary_ctl1; - - switch (rb_scan_args(argc, argv, "43", &args[0], &args[1], &args[2], &args[3], &args[4], &args[5], &args[6])) { - case 3: - uknot_count = RARRAY(rb_Array(args[1]))->len; - uknot = ALLOC_N(GLfloat, uknot_count); - ary2cflt(args[1], uknot, uknot_count); - ary_ctl1 = RARRAY(rb_Array(args[2])); - type = (GLenum)NUM2INT(args[3]); - u_stride = get_curve_dim(type); - uorder = ary_ctl1->len; - ctlarray = ALLOC_N(GLfloat, u_stride*uorder); - for (i = 0; i < ary_ctl1->len; i++) { - ary2cflt(ary_ctl1->ptr[i], tmp, 4); - memcpy(&ctlarray[i*u_stride], tmp, u_stride); - } - break; - case 7: - uknot_count = (GLint)NUM2INT(args[1]); - uknot = ALLOC_N(GLfloat, uknot_count); - ary2cflt(args[2], uknot, uknot_count); - u_stride = (GLint)NUM2INT(args[3]); - uorder = (GLint)NUM2INT(args[5]); - type = (GLenum)NUM2INT(args[6]); /* ---> line was missing */ - /* ctlarray = ALLOC_N(GLfloat, u_stride*uorder); //--->Mathematically incorrect */ - ctlarray = ALLOC_N(GLfloat, u_stride*(uknot_count-uorder)); - ary_ctl1 = RARRAY(rb_Array(args[4])); - if (TYPE(ary_ctl1->ptr[0]) == T_ARRAY) - for (i = 0; i < ary_ctl1->len; i++) { - ary2cflt(ary_ctl1->ptr[i], tmp, 4); - memcpy(&ctlarray[i*u_stride], tmp, u_stride); - } - else { - /* ary2cflt((VALUE)ary_ctl1, ctlarray, u_stride*uorder); //--->Mathematically incorrect */ - ary2cflt((VALUE)ary_ctl1, ctlarray, (uknot_count-uorder)*u_stride); - } - break; - default: - rb_raise(rb_eArgError, "arg num:%d",argc); - } - GetNURBS(args[0], ndata); - gluNurbsCurve(ndata->nobj, uknot_count, uknot, u_stride, ctlarray, uorder, type); -/* as of Mesa 3.1, Mesa assumes all data that following pointers - points to is valid at gluEndCurve. so, free them in - glu_EndCurve() */ -#ifdef MESA - gms.ptr = REALLOC_N(gms.ptr, GLfloat*, gms.len+=2); - gms.ptr[gms.len - 2] = uknot; - gms.ptr[gms.len - 1] = ctlarray; -#else - free(uknot); - free(ctlarray); -#endif - return Qnil; -} -static VALUE -glu_BeginSurface(obj, arg1) -VALUE obj, arg1; -{ - struct nurbsdata *ndata; - GetNURBS(arg1, ndata); - gluBeginSurface(ndata->nobj); - return Qnil; -} -static VALUE -glu_EndSurface(obj, arg1) -VALUE obj, arg1; -{ - struct nurbsdata *ndata; - GetNURBS(arg1, ndata); - gluEndSurface(ndata->nobj); - /* hack for Mesa 3.1 */ -#ifdef MESA - for(gms.len; gms.len>0; gms.len--) - free(gms.ptr[gms.len-1]); - free(gms.ptr); - gms.ptr = NULL; -#endif - return Qnil; -} - -static VALUE -glu_NurbsSurface(argc, argv, obj) -int argc; -VALUE *argv; -VALUE obj; -{ - struct nurbsdata *ndata; - GLint sknot_count; - GLfloat *sknot; - GLint tknot_count; - GLfloat *tknot; - GLint s_stride; - GLint t_stride; - GLfloat *ctlarray; - GLint sorder; - GLint torder; - GLenum type; - VALUE work_ary; - - VALUE args[11]; - struct RArray *ary_ctl1; - int type_len; - - switch (rb_scan_args(argc, argv, "56", &args[0], &args[1], &args[2], &args[3], &args[4], &args[5], &args[6], &args[7], &args[8], &args[9], &args[10])) { - case 5: - sknot_count = RARRAY(rb_Array(args[1]))->len; - sknot = ALLOC_N(GLfloat, sknot_count); - ary2cflt(args[1], sknot, sknot_count); - tknot_count = RARRAY(rb_Array(args[2]))->len; - tknot = ALLOC_N(GLfloat, tknot_count); - ary2cflt(args[2], tknot, tknot_count); - ary_ctl1 = RARRAY(rb_Array(args[3])); - sorder = ary_ctl1->len; - torder = RARRAY(rb_Array(ary_ctl1->ptr[0]))->len; - type = (GLenum)NUM2INT(args[4]); - t_stride = get_surface_dim(type); - s_stride = t_stride * sorder; - ctlarray = ALLOC_N(GLfloat, t_stride*s_stride); - work_ary = rb_ary_new(); - mary2ary((VALUE)ary_ctl1, work_ary); - ary2cflt(work_ary, ctlarray, t_stride*s_stride); - case 11: - sknot_count = (GLint)NUM2INT(args[1]); - sknot = ALLOC_N(GLfloat, sknot_count); - ary2cflt(args[2], sknot, sknot_count); - tknot_count = (GLint)NUM2INT(args[3]); - tknot = ALLOC_N(GLfloat, tknot_count); - ary2cflt(args[4], tknot, tknot_count); - s_stride = (GLint)NUM2INT(args[5]); - t_stride = (GLint)NUM2INT(args[6]); - sorder = (GLint)NUM2INT(args[8]); - torder = (GLint)NUM2INT(args[9]); - type = (GLint)NUM2INT(args[10]); - type_len = get_surface_dim(type); - /* ctlarray = ALLOC_N(GLfloat, sorder*torder*type_len); //--->Mathematically incorrect */ - ctlarray = ALLOC_N(GLfloat, (sknot_count-sorder)*(tknot_count-torder)*type_len); - ary_ctl1 = RARRAY(rb_Array(args[7])); - if (TYPE(ary_ctl1->ptr[0]) == T_ARRAY) { - work_ary = rb_ary_new(); - mary2ary((VALUE)ary_ctl1, work_ary); - /* ary2cflt(work_ary, ctlarray, sorder*torder*type_len); //--->Mathematically incorrect */ - ary2cflt(work_ary, ctlarray, (sknot_count-sorder)*(tknot_count-torder)*type_len); - } - else { - /* ary2cflt((VALUE)ary_ctl1, ctlarray, sorder*torder*type_len); //--->Mathematically incorrect */ - ary2cflt((VALUE)ary_ctl1, ctlarray, (sknot_count-sorder)*(tknot_count-torder)*type_len); - } - break; - default: - rb_raise(rb_eArgError, "arg num:%d",argc); - } - GetNURBS(args[0], ndata); - gluNurbsSurface(ndata->nobj, sknot_count, sknot, tknot_count, tknot, - s_stride, t_stride, ctlarray, sorder, torder, type); - -/* as of Mesa 3.1, Mesa assumes all data that following pointers - points to is valid at gluEndSurface. so, free them in - glu_EndSurface() */ -#ifdef MESA - gms.ptr = REALLOC_N(gms.ptr, GLfloat*, gms.len+=3); - gms.ptr[gms.len-3] = sknot; - gms.ptr[gms.len-2] = tknot; - gms.ptr[gms.len-1] = ctlarray; -#else - free(sknot); - free(tknot); - free(ctlarray); -#endif - return Qnil; -} -static VALUE -glu_BeginTrim(obj, arg1) -VALUE obj, arg1; -{ - struct nurbsdata *ndata; - GetNURBS(arg1, ndata); - gluBeginTrim(ndata->nobj); - return Qnil; -} -static VALUE -glu_EndTrim(obj, arg1) -VALUE obj, arg1; -{ - struct nurbsdata *ndata; - GetNURBS(arg1, ndata); - gluEndTrim(ndata->nobj); - return Qnil; -} -static VALUE -glu_PwlCurve(argc, argv, obj) -int argc; -VALUE *argv; -VALUE obj; -{ - struct nurbsdata *ndata; - GLint count; - GLfloat *array; - GLint stride; - GLenum type; - - VALUE args[5]; - GLfloat tmp[3]; - struct RArray* ary_ctl1; - int i; - - switch (rb_scan_args(argc, argv, "32", &args[0], &args[1], &args[2], &args[3], &args[4])) { - case 3: - ary_ctl1 = RARRAY(rb_Array(args[2])); - count = ary_ctl1->len; - type = NUM2INT(args[2]); - stride = (type == GLU_MAP1_TRIM_2 ? 2 : 3); - array = ALLOC_N(GLfloat, count*stride); - for (i = 0; i < ary_ctl1->len; i++) { - ary2cflt(ary_ctl1->ptr[i], tmp, 3); - memcpy(&array[i*stride], tmp, stride); - } - break; - case 5: - count = NUM2INT(args[1]); - stride = NUM2INT(args[3]); - type = NUM2INT(args[4]); - array = ALLOC_N(GLfloat, count*stride); - ary_ctl1 = RARRAY(rb_Array(args[2])); - if (TYPE(ary_ctl1->ptr[0]) == T_ARRAY) - for (i = 0; i < ary_ctl1->len; i++) { - ary2cflt(ary_ctl1->ptr[i], tmp, 3); - memcpy(&array[i*stride], tmp, stride); - } - else - ary2cflt((VALUE)ary_ctl1, array, count*stride); - break; - default: - rb_raise(rb_eArgError, "arg num:%d",argc); - } - GetNURBS(args[0], ndata); - gluPwlCurve(ndata->nobj, count, array, stride, type); - free(array); - return Qnil; -} - -/* - * Tesselation API - */ -static VALUE t_current; -#define TESS_DATA 0 -#define TESS_BEGIN 1 -#define TESS_VERTEX 2 -#define TESS_END 3 -#define TESS_ERROR 4 -#define TESS_EDGE 5 -#if defined(GLU_VERSION_1_2) -# define TESS_OUTDATA 6 -# define TESS_COMBINE 7 -# define TESS_BEGIN_DATA 8 -# define TESS_VERTEX_DATA 9 -# define TESS_END_DATA 10 -# define TESS_ERROR_DATA 11 -# define TESS_EDGE_DATA 12 -# define TESS_COMBINE_DATA 13 -# define TESS_USERDATA 14 -# define REF_LAST 15 -#else /* !GLU_VERSION_1_2 */ -# define REF_LAST 6 -#endif /* GLU_VERSION_1_2 */ -static void -mark_tess(tdata) -struct tessdata* tdata; -{ - if (tdata->tobj) - rb_gc_mark(tdata->t_ref); -} -static void -free_tess(tdata) -struct tessdata *tdata; -{ - ID id; - VALUE call_key; - - if (tdata->tobj) { - gluDeleteTess(tdata->tobj); - } - tdata->t_ref = Qnil; - tdata->tobj = NULL; -} -static VALUE -glu_NewTess(obj) -VALUE obj; -{ - VALUE ret; - struct tessdata *tdata; - ret = Data_Make_Struct(cTess, struct tessdata, mark_tess, free_tess, tdata); - tdata->tobj = gluNewTess(); - tdata->t_ref = rb_ary_new2(REF_LAST); - return ret; -} -static VALUE -glu_DeleteTess(obj, arg1) -VALUE obj, arg1; -{ - struct tessdata *tdata; - GetTESS(arg1, tdata); - free_tess(tdata); - return Qnil; -} -void -t_begin(type) -GLenum type; -{ - VALUE tess; - struct tessdata *tdata; - tess = rb_ary_entry(t_current, -1); - if (tess != Qnil) { - GetTESS(tess, tdata); - rb_funcall(rb_ary_entry(tdata->t_ref, TESS_BEGIN), callId, 1, INT2NUM(type)); - } -} -static void -t_edgeFlag(flag) -GLboolean flag; -{ - VALUE tess; - struct tessdata *tdata; - tess = rb_ary_entry(t_current, -1); - if (tess != Qnil) { - GetTESS(tess, tdata); - rb_funcall(rb_ary_entry(tdata->t_ref, TESS_EDGE), callId, 1, INT2NUM(flag)); - } -} -static void -t_vertex(data) -void* data; -{ - VALUE tess; - struct tessdata *tdata; - tess = rb_ary_entry(t_current, -1); - if (tess != Qnil) { - GetTESS(tess, tdata); - rb_funcall(rb_ary_entry(tdata->t_ref, TESS_VERTEX), callId, 1, data); - } -} -static void -t_end() -{ - VALUE tess; - struct tessdata *tdata; - tess = rb_ary_entry(t_current, -1); - if (tess != Qnil) { - GetTESS(tess, tdata); - rb_funcall(rb_ary_entry(tdata->t_ref, TESS_END), callId, 0); - } -} -static void -t_error(errorno) -GLenum errorno; -{ - VALUE tess; - struct tessdata *tdata; - tess = rb_ary_entry(t_current, -1); - if (tess != Qnil) { - GetTESS(tess, tdata); - rb_funcall(rb_ary_entry(tdata->t_ref, TESS_ERROR), callId, 1, INT2NUM(errorno)); - } -} - -#if defined(GLU_VERSION_1_2) -static void -t_begin_data(type, user_data) -GLenum type; -void* user_data; -{ - VALUE tess; - struct tessdata *tdata; - tess = rb_ary_entry(t_current, -1); - if (tess != Qnil) { - GetTESS(tess, tdata); - rb_funcall(rb_ary_entry(tdata->t_ref, TESS_BEGIN_DATA), callId, 2, INT2NUM(type), user_data); - } -} -static void -t_edgeFlag_data(flag, user_data) -GLboolean flag; -void* user_data; -{ - VALUE tess; - struct tessdata *tdata; - tess = rb_ary_entry(t_current, -1); - if (tess != Qnil) { - GetTESS(tess, tdata); - rb_funcall(rb_ary_entry(tdata->t_ref, TESS_EDGE_DATA), callId, 2, INT2NUM(flag), user_data); - } -} -static void -t_vertex_data(data, user_data) -void* data; -void* user_data; -{ - VALUE tess; - struct tessdata *tdata; - tess = rb_ary_entry(t_current, -1); - if (tess != Qnil) { - GetTESS(tess, tdata); - rb_funcall(rb_ary_entry(tdata->t_ref, TESS_VERTEX_DATA), callId, 2, data, user_data); - } -} -static void -t_end_data(user_data) -void* user_data; -{ - VALUE tess; - struct tessdata *tdata; - tess = rb_ary_entry(t_current, -1); - if (tess != Qnil) { - GetTESS(tess, tdata); - rb_funcall(rb_ary_entry(tdata->t_ref, TESS_END_DATA), callId, 1, user_data); - } -} -static void -t_error_data(errorno, user_data) -GLenum errorno; -void* user_data; -{ - VALUE tess; - struct tessdata *tdata; - tess = rb_ary_entry(t_current, -1); - if (tess != Qnil) { - GetTESS(tess, tdata); - rb_funcall(rb_ary_entry(tdata->t_ref, TESS_ERROR_DATA), callId, 2, INT2NUM(errorno), user_data); - } -} -static void -t_combine(coords, vertex_data, weight, outData) -GLdouble coords[3]; -void* vertex_data[4]; -GLfloat weight[4]; -void** outData; -{ - VALUE tess; - struct tessdata *tdata; - VALUE rb_coord, rb_vertex_data, rb_weight; - int i; - tess = rb_ary_entry(t_current, -1); - if (tess != Qnil) { - GetTESS(tess, tdata); - rb_coord = rb_ary_new2(3); - for (i = 0; i < 3; i++) - rb_ary_store(rb_coord, i, rb_float_new(coords[i])); - rb_vertex_data = rb_ary_new2(4); - for (i = 0; i < 4; i++) - rb_ary_store(rb_vertex_data, i, (VALUE)vertex_data[i]); - rb_weight = rb_ary_new2(4); - for (i = 0; i < 4; i++) - rb_ary_store(rb_weight, i, rb_float_new(weight[i])); - *outData = (void*)rb_funcall(rb_ary_entry(tdata->t_ref, TESS_COMBINE), callId, 3, rb_coord, rb_vertex_data, rb_weight); - rb_ary_push(rb_ary_entry(tdata->t_ref, TESS_OUTDATA), (VALUE)*outData); - } -} -static void -t_combine_data(coords, vertex_data, weight, outData, user_data) -GLdouble coords[3]; -void* vertex_data[4]; -GLfloat weight[4]; -void** outData; -void* user_data; -{ - VALUE tess; - struct tessdata *tdata; - VALUE rb_coord, rb_vertex_data, rb_weight; - int i; - tess = rb_ary_entry(t_current, -1); - if (tess != Qnil) { - GetTESS(tess, tdata); - rb_coord = rb_ary_new2(3); - for (i = 0; i < 3; i++) - rb_ary_store(rb_coord, i, rb_float_new(coords[i])); - rb_vertex_data = rb_ary_new2(4); - for (i = 0; i < 4; i++) - rb_ary_store(rb_vertex_data, i, (VALUE)vertex_data[i]); - rb_weight = rb_ary_new2(4); - for (i = 0; i < 4; i++) - rb_ary_store(rb_weight, i, rb_float_new(weight[i])); - *outData = (void*)rb_funcall(rb_ary_entry(tdata->t_ref, TESS_COMBINE_DATA), callId, 4, rb_coord, rb_vertex_data, rb_weight, (VALUE)user_data); - rb_ary_push(rb_ary_entry(tdata->t_ref, TESS_OUTDATA), (VALUE)*outData); - } -} -static VALUE -glu_TessProperty(obj, arg1, arg2, arg3) -VALUE obj, arg1, arg2; -{ - struct tessdata* tdata; - GLenum property; - GLdouble value; - GetTESS(arg1, tdata); - property = (GLenum)NUM2INT(arg2); - value = (GLdouble)NUM2DBL(arg3); - gluTessProperty(tdata->tobj, property, value); - return Qnil; -} -static VALUE -glu_GetTessProperty(obj, arg1, arg2) -VALUE obj, arg1, arg2; -{ - struct tessdata* tdata; - GLenum property; - GLdouble value; - GetTESS(arg1, tdata); - property = (GLenum)NUM2INT(arg2); - gluGetTessProperty(tdata->tobj, property, &value); - return rb_float_new(value); -} -static VALUE -glu_TessNormal(obj, arg1, arg2, arg3, arg4) -VALUE obj, arg1, arg2, arg3, arg4; -{ - struct tessdata* tdata; - GLdouble x, y, z; - GetTESS(arg1, tdata); - x = (GLdouble)NUM2DBL(arg2); - y = (GLdouble)NUM2DBL(arg3); - z = (GLdouble)NUM2DBL(arg4); - gluTessNormal(tdata->tobj, x, y, z); - return Qnil; -} -static VALUE -glu_TessBeginPolygon(obj, arg1, arg2) -VALUE obj, arg1, arg2; -{ - struct tessdata* tdata; - GetTESS(arg1, tdata); - rb_ary_store(tdata->t_ref, TESS_USERDATA, arg2); - rb_ary_store(tdata->t_ref, TESS_OUTDATA, rb_ary_new()); - rb_ary_store(tdata->t_ref, TESS_DATA, rb_ary_new()); - rb_ary_push(t_current, arg1); - gluTessBeginPolygon(tdata->tobj, (void*)arg2); - return Qnil; -} -static VALUE -glu_TessEndPolygon(obj, arg1) -VALUE obj, arg1; -{ - struct tessdata* tdata; - GetTESS(arg1, tdata); - gluTessEndPolygon(tdata->tobj); - rb_ary_store(tdata->t_ref, TESS_USERDATA, Qnil); - rb_ary_store(tdata->t_ref, TESS_OUTDATA, Qnil); - rb_ary_store(tdata->t_ref, TESS_DATA, Qnil); - rb_ary_pop(t_current); - return Qnil; -} -static VALUE -glu_TessBeginContour(obj, arg1) -VALUE obj, arg1; -{ - struct tessdata* tdata; - GetTESS(arg1, tdata); - gluTessBeginContour(tdata->tobj); - return Qnil; -} -static VALUE -glu_TessEndContour(obj, arg1) -{ - struct tessdata* tdata; - GetTESS(arg1, tdata); - gluTessEndContour(tdata->tobj); - return Qnil; -} -#endif /* GLU_VERSION_1_2 */ - -static VALUE -glu_TessCallback(obj, arg1, arg2, arg3) -VALUE obj, arg1, arg2, arg3; -{ - struct tessdata* tdata; - GLenum type; - ID id; - GetTESS(arg1, tdata); - type = (GLenum)NUM2INT(arg2); - id = rb_intern("[]="); - if (!rb_obj_is_kind_of(arg3,rb_cProc) && NIL_P(arg3)) - rb_raise(rb_eTypeError, "GLU.TessCallback needs Proc Object:%s",rb_class2name(CLASS_OF(arg3))); - - switch (type) { -#if defined(GLU_VERSION_1_2) - case GLU_TESS_BEGIN: -#else - case GLU_BEGIN: -#endif - rb_ary_store(tdata->t_ref, TESS_BEGIN, arg3); - if (NIL_P(arg3)) - gluTessCallback(tdata->tobj, type, NULL); - else - gluTessCallback(tdata->tobj, type, (VOIDFUNC)(t_begin)); - break; -#if defined(GLU_VERSION_1_2) - case GLU_TESS_EDGE_FLAG: -#else - case GLU_EDGE_FLAG: -#endif - rb_ary_store(tdata->t_ref, TESS_EDGE, arg3); - if (NIL_P(arg3)) - gluTessCallback(tdata->tobj, type, NULL); - else - gluTessCallback(tdata->tobj, type, (VOIDFUNC)t_edgeFlag); - break; -#if defined(GLU_VERSION_1_2) - case GLU_TESS_VERTEX: -#else - case GLU_VERTEX: -#endif - rb_ary_store(tdata->t_ref, TESS_VERTEX, arg3); - if (NIL_P(arg3)) - gluTessCallback(tdata->tobj, type, NULL); - else - gluTessCallback(tdata->tobj, type, (VOIDFUNC)t_vertex); - break; -#if defined(GLU_VERSION_1_2) - case GLU_TESS_END: -#else - case GLU_END: -#endif - rb_ary_store(tdata->t_ref, TESS_END, arg3); - if (NIL_P(arg3)) - gluTessCallback(tdata->tobj, type, NULL); - else - gluTessCallback(tdata->tobj, type, (VOIDFUNC)t_end); - break; -#if defined(GLU_VERSION_1_2) - case GLU_TESS_ERROR: -#else - case GLU_ERROR: -#endif - rb_ary_store(tdata->t_ref, TESS_ERROR, arg3); - if (NIL_P(arg3)) - gluTessCallback(tdata->tobj, type, NULL); - else - gluTessCallback(tdata->tobj, type, (VOIDFUNC)t_error); - break; -#if defined(GLU_VERSION_1_2) - case GLU_TESS_COMBINE: - rb_ary_store(tdata->t_ref, TESS_COMBINE, arg3); - if (NIL_P(arg3)) - gluTessCallback(tdata->tobj, type, NULL); - else - gluTessCallback(tdata->tobj, type, (VOIDFUNC)(t_combine)); - break; - case GLU_TESS_BEGIN_DATA: - rb_ary_store(tdata->t_ref, TESS_BEGIN_DATA, arg3); - if (NIL_P(arg3)) - gluTessCallback(tdata->tobj, type, NULL); - else - gluTessCallback(tdata->tobj, type, (VOIDFUNC)(t_begin_data)); - break; - case GLU_TESS_VERTEX_DATA: - rb_ary_store(tdata->t_ref, TESS_VERTEX_DATA, arg3); - if (NIL_P(arg3)) - gluTessCallback(tdata->tobj, type, NULL); - else - gluTessCallback(tdata->tobj, type, (VOIDFUNC)(t_vertex_data)); - break; - case GLU_TESS_END_DATA: - rb_ary_store(tdata->t_ref, TESS_END_DATA, arg3); - if (NIL_P(arg3)) - gluTessCallback(tdata->tobj, type, NULL); - else - gluTessCallback(tdata->tobj, type, (VOIDFUNC)(t_end_data)); - break; - case GLU_TESS_ERROR_DATA: - rb_ary_store(tdata->t_ref, TESS_ERROR_DATA, arg3); - if (NIL_P(arg3)) - gluTessCallback(tdata->tobj, type, NULL); - else - gluTessCallback(tdata->tobj, type, (VOIDFUNC)(t_error_data)); - break; - case GLU_TESS_EDGE_FLAG_DATA: - rb_ary_store(tdata->t_ref, TESS_EDGE_DATA, arg3); - if (NIL_P(arg3)) - gluTessCallback(tdata->tobj, type, NULL); - else - gluTessCallback(tdata->tobj, type, (VOIDFUNC)(t_edgeFlag_data)); - break; - case GLU_TESS_COMBINE_DATA: - rb_ary_store(tdata->t_ref, TESS_COMBINE_DATA, arg3); - if (NIL_P(arg3)) - gluTessCallback(tdata->tobj, type, NULL); - else - gluTessCallback(tdata->tobj, type, (VOIDFUNC)(t_combine_data)); - break; -#endif /* GLU_VERSION_1_2 */ - } - return Qnil; -} -static VALUE -glu_BeginPolygon(obj, arg1) -VALUE obj, arg1; -{ - struct tessdata* tdata; - GetTESS(arg1, tdata); - rb_ary_store(tdata->t_ref, TESS_DATA, rb_ary_new()); - rb_ary_push(t_current, arg1); - gluBeginPolygon(tdata->tobj); - return Qnil; -} -static VALUE -glu_TessVertex(obj, arg1, arg2, arg3) -VALUE obj, arg1, arg2, arg3; -{ - struct tessdata* tdata; - GLdouble v[3]; - VALUE call_key; - ID id; - GetTESS(arg1, tdata); - rb_ary_push(rb_ary_entry(tdata->t_ref, TESS_DATA), arg3); - ary2cdbl(arg2, v, 3); - gluTessVertex(tdata->tobj, v,(void *)arg3); - return Qnil; -} -static VALUE -glu_NextContour(obj, arg1, arg2) -VALUE obj, arg1, arg2; -{ - struct tessdata* tdata; - GLenum type; - GetTESS(arg1, tdata); - type = (GLenum)NUM2INT(arg2); - gluNextContour(tdata->tobj, type); - return Qnil; -} -static VALUE -glu_EndPolygon(obj, arg1) -VALUE obj, arg1; -{ - struct tessdata* tdata; - GetTESS(arg1, tdata); - gluEndPolygon(tdata->tobj); - rb_ary_store(tdata->t_ref, TESS_DATA, Qnil); - rb_ary_pop(t_current); - return Qnil; -} - -/* - * Quadric API - */ -static void -free_quad(qdata) -struct quaddata *qdata; -{ - if (qdata->qobj) gluDeleteQuadric(qdata->qobj); - qdata->qobj = NULL; -} -static VALUE -glu_NewQuadric(obj) -VALUE obj; -{ - VALUE ret; - struct quaddata *qdata; - ret = Data_Make_Struct(cQuad, struct quaddata, 0, free_quad, qdata); - qdata->qobj = gluNewQuadric(); - return ret; -} -static VALUE -glu_DeleteQuadric(obj, arg1) -VALUE obj, arg1; -{ - struct quaddata *qdata; - GetQUAD(arg1, qdata); - free_quad(qdata); - return Qnil; -} -static VALUE -glu_QuadricNormals(obj, arg1, arg2) -VALUE obj, arg1, arg2; -{ - struct quaddata* qdata; - GLenum normals; - GetQUAD(arg1, qdata); - normals = (GLenum)NUM2INT(arg2); - gluQuadricNormals(qdata->qobj, normals); - return Qnil; -} -static VALUE -glu_QuadricTexture(obj, arg1, arg2) -VALUE obj, arg1, arg2; -{ - struct quaddata* qdata; - GLboolean textureCoords; - GetQUAD(arg1, qdata); - textureCoords = (GLboolean)NUM2INT(arg2); - gluQuadricTexture(qdata->qobj, textureCoords); - return Qnil; -} -static VALUE -glu_QuadricOrientation(obj, arg1, arg2) -VALUE obj, arg1, arg2; -{ - struct quaddata* qdata; - GLenum orientation; - GetQUAD(arg1, qdata); - orientation = (GLenum)NUM2INT(arg2); - gluQuadricOrientation(qdata->qobj, orientation); - return Qnil; -} -static VALUE -glu_QuadricDrawStyle(obj, arg1, arg2) -VALUE obj, arg1, arg2; -{ - struct quaddata* qdata; - GLenum drawStyle; - GetQUAD(arg1, qdata); - drawStyle = (GLenum)NUM2INT(arg2); - gluQuadricDrawStyle(qdata->qobj, drawStyle); - return Qnil; -} -static VALUE -glu_Cylinder(obj, arg1, arg2, arg3, arg4, arg5, arg6) -VALUE obj, arg1, arg2, arg3, arg4, arg5, arg6; -{ - struct quaddata* qdata; - GLdouble baseRadius; - GLdouble topRadius; - GLdouble height; - GLint slices; - GLint stacks; - - GetQUAD(arg1, qdata); - baseRadius = (GLdouble)NUM2DBL(arg2); - topRadius = (GLdouble)NUM2DBL(arg3); - height = (GLdouble)NUM2DBL(arg4); - slices = (GLint)NUM2INT(arg5); - stacks = (GLint)NUM2INT(arg6); - - gluCylinder(qdata->qobj, baseRadius, topRadius, height, slices, stacks); - return Qnil; -} -static VALUE -glu_Disk(obj, arg1, arg2, arg3, arg4, arg5) -VALUE obj, arg1, arg2, arg3, arg4, arg5; -{ - struct quaddata* qdata; - GLdouble innerRadius; - GLdouble outerRadius; - GLint slices; - GLint loops; - - GetQUAD(arg1, qdata); - innerRadius = (GLdouble)NUM2DBL(arg2); - outerRadius = (GLdouble)NUM2DBL(arg3); - slices = (GLint)NUM2INT(arg4); - loops = (GLint)NUM2INT(arg5); - - gluDisk(qdata->qobj, innerRadius, outerRadius, slices, loops); - return Qnil; -} -static VALUE -glu_PartialDisk(obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7) -VALUE obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7; -{ - struct quaddata* qdata; - GLdouble innerRadius; - GLdouble outerRadius; - GLint slices; - GLint loops; - GLdouble startAngle; - GLdouble sweepAngle; - - GetQUAD(arg1, qdata); - innerRadius = (GLdouble)NUM2DBL(arg2); - outerRadius = (GLdouble)NUM2DBL(arg3); - slices = (GLint)NUM2INT(arg4); - loops = (GLint)NUM2INT(arg5); - startAngle = (GLdouble)NUM2DBL(arg6); - sweepAngle = (GLdouble)NUM2DBL(arg7); - - gluPartialDisk(qdata->qobj, innerRadius, outerRadius, slices, loops, startAngle, sweepAngle); - return Qnil; -} -static VALUE -glu_Sphere(obj, arg1, arg2, arg3, arg4) -VALUE obj, arg1, arg2, arg3, arg4; -{ - struct quaddata* qdata; - GLdouble radius; - GLint slices; - GLint stacks; - - GetQUAD(arg1, qdata); - radius = (GLdouble)NUM2DBL(arg2); - slices = (GLint)NUM2INT(arg3); - stacks = (GLint)NUM2INT(arg4); - - gluSphere(qdata->qobj, radius, slices, stacks); - return Qnil; -} -static VALUE -glu_LookAt(obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9) -VALUE obj,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9; -{ - GLdouble eyex; - GLdouble eyey; - GLdouble eyez; - GLdouble centerx; - GLdouble centery; - GLdouble centerz; - GLdouble upx; - GLdouble upy; - GLdouble upz; - eyex = (GLdouble)NUM2DBL(arg1); - eyey = (GLdouble)NUM2DBL(arg2); - eyez = (GLdouble)NUM2DBL(arg3); - centerx = (GLdouble)NUM2DBL(arg4); - centery = (GLdouble)NUM2DBL(arg5); - centerz = (GLdouble)NUM2DBL(arg6); - upx = (GLdouble)NUM2DBL(arg7); - upy = (GLdouble)NUM2DBL(arg8); - upz = (GLdouble)NUM2DBL(arg9); - gluLookAt( eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz ); - return Qnil; -} -static VALUE -glu_Ortho2D(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLdouble left; - GLdouble right; - GLdouble bottom; - GLdouble top; - left = (GLdouble)NUM2DBL(arg1); - right = (GLdouble)NUM2DBL(arg2); - bottom = (GLdouble)NUM2DBL(arg3); - top = (GLdouble)NUM2DBL(arg4); - gluOrtho2D(left,right,bottom,top); - return Qnil; -} -static VALUE -glu_Perspective(obj,arg1,arg2,arg3,arg4) -VALUE obj,arg1,arg2,arg3,arg4; -{ - GLdouble fovy; - GLdouble aspect; - GLdouble zNear; - GLdouble zFar; - fovy = (GLdouble)NUM2DBL(arg1); - aspect = (GLdouble)NUM2DBL(arg2); - zNear = (GLdouble)NUM2DBL(arg3); - zFar = (GLdouble)NUM2DBL(arg4); - gluPerspective(fovy,aspect,zNear,zFar); - return Qnil; -} -static VALUE -glu_PickMatrix(argc,argv,obj) -int argc; -VALUE* argv; -VALUE obj; -{ - GLdouble x; - GLdouble y; - GLdouble width; - GLdouble height; - GLint viewport[4]; - - VALUE args[5]; - - switch (rb_scan_args(argc, argv, "23", &args[0], &args[1], &args[2], &args[3], &args[4])) { - case 2: - width = 5.0f; - height = 5.0f; - glGetIntegerv(GL_VIEWPORT, viewport); - break; - case 4: - width = (GLdouble)NUM2DBL(args[2]); - height = (GLdouble)NUM2DBL(args[3]); - glGetIntegerv(GL_VIEWPORT, viewport); - break; - case 5: - width = (GLdouble)NUM2DBL(args[2]); - height = (GLdouble)NUM2DBL(args[3]); - ary2cint(args[4], viewport, 4); - break; - default: - rb_raise(rb_eArgError, "GLU.PickMatrix args len:%d",argc); - } - x = (GLdouble)NUM2DBL(args[0]); - y = (GLdouble)NUM2DBL(args[1]); - gluPickMatrix(x, y, width, height, viewport); - return Qnil; -} - -static VALUE -glu_Project(argc,argv,obj) -int argc; -VALUE* argv; -VALUE obj; -{ - GLdouble ox; - GLdouble oy; - GLdouble oz; - GLdouble mdl_mtx[4*4]; - GLdouble prj_mtx[4*4]; - GLint vport[4]; - GLdouble wx; - GLdouble wy; - GLdouble wz; - - VALUE args[6]; - VALUE ret; - - switch (rb_scan_args(argc, argv, "33", &args[0], &args[1], &args[2], &args[3], &args[4], &args[5])) { - case 3: - glGetDoublev(GL_MODELVIEW_MATRIX, mdl_mtx); - glGetDoublev(GL_PROJECTION_MATRIX, prj_mtx); - glGetIntegerv(GL_VIEWPORT, vport); - break; - case 6: - ary2cmat4x4dbl(args[3], mdl_mtx); - ary2cmat4x4dbl(args[4], prj_mtx); - ary2cint(args[5], vport, 4); - break; - default: - rb_raise(rb_eArgError, "GLU.Project args len:%d",argc); - } - ox = (GLdouble)NUM2DBL(args[0]); - oy = (GLdouble)NUM2DBL(args[1]); - oz = (GLdouble)NUM2DBL(args[2]); - - if (gluProject(ox, oy, oz, mdl_mtx, prj_mtx, vport, &wx, &wy, &wz) - == GL_TRUE) { - ret = rb_ary_new3(3, rb_float_new(wx), rb_float_new(wy), rb_float_new(wz)); - return ret; - } - else - return Qnil; -} -static VALUE -glu_UnProject(argc,argv,obj) -int argc; -VALUE* argv; -VALUE obj; -{ - GLdouble wx; - GLdouble wy; - GLdouble wz; - GLdouble mdl_mtx[4*4]; - GLdouble prj_mtx[4*4]; - GLint vport[4]; - GLdouble ox; - GLdouble oy; - GLdouble oz; - - VALUE args[6]; - VALUE ret; - - switch (rb_scan_args(argc, argv, "33", &args[0], &args[1], &args[2], &args[3], &args[4], &args[5])) { - case 3: - glGetDoublev(GL_MODELVIEW_MATRIX, mdl_mtx); - glGetDoublev(GL_PROJECTION_MATRIX, prj_mtx); - glGetIntegerv(GL_VIEWPORT, vport); - break; - case 6: - ary2cmat4x4dbl(args[3], mdl_mtx); - ary2cmat4x4dbl(args[4], prj_mtx); - ary2cint(args[5], vport, 4); - break; - default: - rb_raise(rb_eArgError, "GLU.UnProject args len:%d",argc); - } - wx = (GLdouble)NUM2DBL(args[0]); - wy = (GLdouble)NUM2DBL(args[1]); - wz = (GLdouble)NUM2DBL(args[2]); - - if (gluUnProject(wx, wy, wz, mdl_mtx, prj_mtx, vport, &ox, &oy, &oz) - == GL_TRUE) { - ret = rb_ary_new3(3, rb_float_new(ox), rb_float_new(oy), rb_float_new(oz)); - return ret; - } - else - return Qnil; -} - -static VALUE -glu_Build2DMipmaps(obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7) -VALUE obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7; -{ - GLenum target; - GLint components; - GLint width; - GLint height; - GLenum format; - GLenum type; - void* data; - - int type_size; - int format_size; - int size; - - target = (GLenum)NUM2INT(arg1); - components = (GLint)NUM2INT(arg2); - width = (GLint)NUM2INT(arg3); - height = (GLint)NUM2INT(arg4); - format = (GLenum)NUM2INT(arg5); - type = (GLenum)NUM2INT(arg6); - if (TYPE(arg7) == T_STRING) { - type_size = gltype_size(type) / 8; - format_size = glformat_size(format); - if (type_size == -1 || format_size == -1) - return Qnil; - size = type_size*format_size*height*width; - if (RSTRING(arg7)->len < size) - rb_raise(rb_eArgError, "string length:%d",RSTRING(arg7)->len); - data = RSTRING(arg7)->ptr; - } else - rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg7)); - return INT2NUM(gluBuild2DMipmaps(target, components, width, height, format, type, data)); -} - -static VALUE -glu_ScaleImage(obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) -VALUE obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8; -{ - GLenum format; - GLint widthin; - GLint heightin; - GLenum typein; - void* datain; - GLint widthout; - GLint heightout; - GLenum typeout; - int type_size; - int format_size; - int size; - VALUE ret; - - format = (GLenum)NUM2INT(arg1); - widthin = (GLint)NUM2INT(arg2); - heightin = (GLint)NUM2INT(arg3); - typein = (GLenum)NUM2INT(arg4); - if (TYPE(arg5) == T_STRING) { - type_size = gltype_size(typein) / 8; - format_size = glformat_size(format); - if (type_size == -1 || format_size == -1) - return Qnil; - size = type_size*format_size*heightin*widthin; - if (RSTRING(arg5)->len < size) - rb_raise(rb_eArgError, "string length:%d",RSTRING(arg5)->len); - datain = RSTRING(arg5)->ptr; - } else - rb_raise(rb_eTypeError, "type mismatch:%s",rb_class2name(arg5)); - - widthout = (GLint)NUM2INT(arg6); - heightout = (GLint)NUM2INT(arg7); - typeout = (GLenum)NUM2INT(arg8); - type_size = gltype_size(typeout) / 8; - ret = allocate_buffer_with_string(widthout*heightout*format_size*type_size); - gluScaleImage(format, widthin, heightin, typein, datain, - widthout, heightout, typeout, (GLvoid*)RSTRING(ret)->ptr); - return ret; -} - -static VALUE -glu_ErrorString(obj, arg1) -VALUE obj, arg1; -{ - GLenum errorCode; - GLubyte* error; - errorCode = (GLenum)NUM2INT(arg1); - error = (GLubyte*)gluErrorString(errorCode); - if (error) - return rb_str_new2(error); - else - return Qnil; -} -#if defined(GLU_VERSION_1_1) -static VALUE -glu_GetString(obj, arg1) -VALUE obj, arg1; -{ - GLenum name; - GLubyte* str; - name = (GLenum)NUM2INT(arg1); - str = (GLubyte*)gluGetString(name); - if (str) - return rb_str_new2(str); - else - return Qnil; -} -#endif - -static VALUE module; - -#ifndef GLU_BEGIN -#define GLU_BEGIN 100100 -#endif -#ifndef GLU_VERTEX -#define GLU_VERTEX 100101 -#endif -#ifndef GLU_END -#define GLU_END 100102 -#endif -#ifndef GLU_EDGE_FLAG -#define GLU_EDGE_FLAG 100104 -#endif -#ifndef GLU_CW -#define GLU_CW 100120 -#endif -#ifndef GLU_CCW -#define GLU_CCW 100121 -#endif -#ifndef GLU_INTERIOR -#define GLU_INTERIOR 100122 -#endif -#ifndef GLU_EXTERIOR -#define GLU_EXTERIOR 100123 -#endif -#ifndef GLU_UNKNOWN -#define GLU_UNKNOWN 100124 -#endif -#ifndef GLU_ERROR -#define GLU_ERROR 100103 -#endif - -DLLEXPORT void Init_glu() -{ - callId = rb_intern("call"); - refId = rb_intern("[]"); - module = rb_define_module("Glu"); - rb_define_module_function(module, "gluNewNurbsRenderer", glu_NewNurbsRenderer, 0); - rb_define_module_function(module, "gluDeleteNurbsRenderer", glu_DeleteNurbsRenderer, 1); - rb_define_module_function(module, "gluNurbsProperty", glu_NurbsProperty, 3); - rb_define_module_function(module, "gluGetNurbsProperty", glu_GetNurbsProperty, 2); - rb_define_module_function(module, "gluBeginCurve", glu_BeginCurve, 1); - rb_define_module_function(module, "gluEndCurve", glu_EndCurve, 1); - rb_define_module_function(module, "gluNurbsCurve", glu_NurbsCurve, -1); - rb_define_module_function(module, "gluBeginSurface", glu_BeginSurface, 1); - rb_define_module_function(module, "gluEndSurface", glu_EndSurface, 1); - rb_define_module_function(module, "gluNurbsSurface", glu_NurbsSurface, -1); - rb_define_module_function(module, "gluBeginTrim", glu_BeginTrim, 1); - rb_define_module_function(module, "gluEndTrim", glu_EndTrim, 1); - rb_define_module_function(module, "gluPwlCurve", glu_PwlCurve, -1); - rb_define_module_function(module, "gluNewTess", glu_NewTess, 0); - rb_define_module_function(module, "gluDeleteTess", glu_DeleteTess, 1); - rb_define_module_function(module, "gluTessCallback", glu_TessCallback, 3); - rb_define_module_function(module, "gluBeginPolygon", glu_BeginPolygon, 1); - rb_define_module_function(module, "gluTessVertex", glu_TessVertex, 3); - rb_define_module_function(module, "gluNextContour", glu_NextContour, 2); - rb_define_module_function(module, "gluEndPolygon", glu_EndPolygon, 1); -#if defined(GLU_VERSION_1_2) - rb_define_module_function(module, "gluTessBeginPolygon", glu_TessBeginPolygon, 2); - rb_define_module_function(module, "gluTessBeginContour", glu_TessBeginContour, 1); - rb_define_module_function(module, "gluTessEndContour", glu_TessEndContour, 1); - rb_define_module_function(module, "gluTessEndPolygon", glu_TessEndPolygon, 1); - rb_define_module_function(module, "gluTessProperty", glu_TessProperty, 3); - rb_define_module_function(module, "gluTessNormal", glu_TessNormal, 4); - rb_define_module_function(module, "gluGetTessProperty", glu_GetTessProperty, 2); -#endif /* GLU_VERSION_1_2 */ - rb_define_module_function(module, "gluNewQuadric", glu_NewQuadric, 0); - rb_define_module_function(module, "gluDeleteQuadric", glu_DeleteQuadric, 1); - rb_define_module_function(module, "gluQuadricNormals", glu_QuadricNormals, 2); - rb_define_module_function(module, "gluQuadricTexture", glu_QuadricTexture, 2); - rb_define_module_function(module, "gluQuadricOrientation", glu_QuadricOrientation, 2); - rb_define_module_function(module, "gluQuadricDrawStyle", glu_QuadricDrawStyle, 2); - rb_define_module_function(module, "gluCylinder", glu_Cylinder, 6); - rb_define_module_function(module, "gluDisk", glu_Disk, 5); - rb_define_module_function(module, "gluPartialDisk", glu_PartialDisk, 7); - rb_define_module_function(module, "gluSphere", glu_Sphere, 4); - - rb_define_module_function(module, "gluLookAt", glu_LookAt, 9); - rb_define_module_function(module, "gluOrtho2D", glu_Ortho2D, 4); - rb_define_module_function(module, "gluPerspective", glu_Perspective, 4); - rb_define_module_function(module, "gluPickMatrix", glu_PickMatrix, -1); - rb_define_module_function(module, "gluProject", glu_Project, -1); - rb_define_module_function(module, "gluUnProject", glu_UnProject, -1); - rb_define_module_function(module, "gluBuild2DMipmaps", glu_Build2DMipmaps, 7); - rb_define_module_function(module, "gluScaleImage", glu_ScaleImage, 8); - rb_define_module_function(module, "gluErrorString", glu_ErrorString, 1); -#if defined(GLU_VERSION_1_1) - rb_define_module_function(module, "gluGetString", glu_GetString, 1); -#endif - - rb_define_const(module, "GLU_SMOOTH", INT2NUM(GLU_SMOOTH)); - rb_define_const(module, "GLU_FLAT", INT2NUM(GLU_FLAT)); - rb_define_const(module, "GLU_NONE", INT2NUM(GLU_NONE)); - rb_define_const(module, "GLU_POINT", INT2NUM(GLU_POINT)); - rb_define_const(module, "GLU_LINE", INT2NUM(GLU_LINE)); - rb_define_const(module, "GLU_FILL", INT2NUM(GLU_FILL)); - rb_define_const(module, "GLU_SILHOUETTE", INT2NUM(GLU_SILHOUETTE)); - rb_define_const(module, "GLU_OUTSIDE", INT2NUM(GLU_OUTSIDE)); - rb_define_const(module, "GLU_INSIDE", INT2NUM(GLU_INSIDE)); -#if defined(GLU_VERSION_1_2) - rb_define_const(module, "GLU_TESS_BEGIN", INT2NUM(GLU_TESS_BEGIN)); - rb_define_const(module, "GLU_TESS_VERTEX", INT2NUM(GLU_TESS_VERTEX)); - rb_define_const(module, "GLU_TESS_END", INT2NUM(GLU_TESS_END)); - rb_define_const(module, "GLU_TESS_ERROR", INT2NUM(GLU_TESS_ERROR)); - rb_define_const(module, "GLU_TESS_EDGE_FLAG", INT2NUM(GLU_TESS_EDGE_FLAG)); - rb_define_const(module, "GLU_TESS_COMBINE", INT2NUM(GLU_TESS_COMBINE)); - - rb_define_const(module, "GLU_TESS_BEGIN_DATA", INT2NUM(GLU_TESS_BEGIN_DATA)); - rb_define_const(module, "GLU_TESS_VERTEX_DATA", INT2NUM(GLU_TESS_VERTEX_DATA)); - rb_define_const(module, "GLU_TESS_END_DATA", INT2NUM(GLU_TESS_END_DATA)); - rb_define_const(module, "GLU_TESS_ERROR_DATA", INT2NUM(GLU_TESS_ERROR_DATA)); - rb_define_const(module, "GLU_TESS_EDGE_FLAG_DATA", INT2NUM(GLU_TESS_EDGE_FLAG_DATA)); - rb_define_const(module, "GLU_TESS_COMBINE_DATA", INT2NUM(GLU_TESS_COMBINE_DATA)); - - /* Winding rules */ - rb_define_const(module, "GLU_TESS_WINDING_ODD", INT2NUM(GLU_TESS_WINDING_ODD)); - rb_define_const(module, "GLU_TESS_WINDING_NONZERO", INT2NUM(GLU_TESS_WINDING_NONZERO)); - rb_define_const(module, "GLU_TESS_WINDING_POSITIVE", INT2NUM(GLU_TESS_WINDING_POSITIVE)); - rb_define_const(module, "GLU_TESS_WINDING_NEGATIVE", INT2NUM(GLU_TESS_WINDING_NEGATIVE)); - rb_define_const(module, "GLU_TESS_WINDING_ABS_GEQ_TWO", INT2NUM(GLU_TESS_WINDING_ABS_GEQ_TWO)); - - /* Tessellation properties */ - rb_define_const(module, "GLU_TESS_WINDING_RULE", INT2NUM(GLU_TESS_WINDING_RULE)); - rb_define_const(module, "GLU_TESS_BOUNDARY_ONLY", INT2NUM(GLU_TESS_BOUNDARY_ONLY)); - rb_define_const(module, "GLU_TESS_TOLERANCE", INT2NUM(GLU_TESS_TOLERANCE)); -#endif /* GLU_VERSION_1_2 */ - - rb_define_const(module, "GLU_BEGIN", INT2NUM(GLU_BEGIN)); - rb_define_const(module, "GLU_VERTEX", INT2NUM(GLU_VERTEX)); - rb_define_const(module, "GLU_END", INT2NUM(GLU_END)); - rb_define_const(module, "GLU_ERROR", INT2NUM(GLU_ERROR)); - rb_define_const(module, "GLU_EDGE_FLAG", INT2NUM(GLU_EDGE_FLAG)); - rb_define_const(module, "GLU_CW", INT2NUM(GLU_CW)); - rb_define_const(module, "GLU_CCW", INT2NUM(GLU_CCW)); - rb_define_const(module, "GLU_INTERIOR", INT2NUM(GLU_INTERIOR)); - rb_define_const(module, "GLU_EXTERIOR", INT2NUM(GLU_EXTERIOR)); - rb_define_const(module, "GLU_UNKNOWN", INT2NUM(GLU_UNKNOWN)); - rb_define_const(module, "GLU_TESS_ERROR1", INT2NUM(GLU_TESS_ERROR1)); - rb_define_const(module, "GLU_TESS_ERROR2", INT2NUM(GLU_TESS_ERROR2)); - rb_define_const(module, "GLU_TESS_ERROR3", INT2NUM(GLU_TESS_ERROR3)); - rb_define_const(module, "GLU_TESS_ERROR4", INT2NUM(GLU_TESS_ERROR4)); - rb_define_const(module, "GLU_TESS_ERROR5", INT2NUM(GLU_TESS_ERROR5)); - rb_define_const(module, "GLU_TESS_ERROR6", INT2NUM(GLU_TESS_ERROR6)); - rb_define_const(module, "GLU_TESS_ERROR7", INT2NUM(GLU_TESS_ERROR7)); - rb_define_const(module, "GLU_TESS_ERROR8", INT2NUM(GLU_TESS_ERROR8)); -#if defined(TESS_ERROR9) - rb_define_const(module, "GLU_TESS_ERROR9", INT2NUM(GLU_TESS_ERROR9)); -#endif -#if defined(GLU_VERSION_1_3) - rb_define_const(module, "GLU_AUTO_LOAD_MATRIX", INT2NUM(GLU_AUTO_LOAD_MATRIX)); - rb_define_const(module, "GLU_CULLING", INT2NUM(GLU_CULLING)); - rb_define_const(module, "GLU_SAMPLING_TOLERANCE", INT2NUM(GLU_SAMPLING_TOLERANCE)); - rb_define_const(module, "GLU_DISPLAY_MODE", INT2NUM(GLU_DISPLAY_MODE)); - rb_define_const(module, "GLU_SAMPLING_METHOD", INT2NUM(GLU_SAMPLING_METHOD)); - rb_define_const(module, "GLU_U_STEP", INT2NUM(GLU_U_STEP)); - rb_define_const(module, "GLU_V_STEP", INT2NUM(GLU_V_STEP)); -#endif - rb_define_const(module, "GLU_PATH_LENGTH", INT2NUM(GLU_PATH_LENGTH)); - rb_define_const(module, "GLU_PARAMETRIC_ERROR", INT2NUM(GLU_PARAMETRIC_ERROR)); - rb_define_const(module, "GLU_DOMAIN_DISTANCE", INT2NUM(GLU_DOMAIN_DISTANCE)); - rb_define_const(module, "GLU_MAP1_TRIM_2", INT2NUM(GLU_MAP1_TRIM_2)); - rb_define_const(module, "GLU_MAP1_TRIM_3", INT2NUM(GLU_MAP1_TRIM_3)); - rb_define_const(module, "GLU_OUTLINE_POLYGON", INT2NUM(GLU_OUTLINE_POLYGON)); - rb_define_const(module, "GLU_OUTLINE_PATCH", INT2NUM(GLU_OUTLINE_PATCH)); - rb_define_const(module, "GLU_NURBS_ERROR1", INT2NUM(GLU_NURBS_ERROR1)); - rb_define_const(module, "GLU_NURBS_ERROR2", INT2NUM(GLU_NURBS_ERROR2)); - rb_define_const(module, "GLU_NURBS_ERROR3", INT2NUM(GLU_NURBS_ERROR3)); - rb_define_const(module, "GLU_NURBS_ERROR4", INT2NUM(GLU_NURBS_ERROR4)); - rb_define_const(module, "GLU_NURBS_ERROR5", INT2NUM(GLU_NURBS_ERROR5)); - rb_define_const(module, "GLU_NURBS_ERROR6", INT2NUM(GLU_NURBS_ERROR6)); - rb_define_const(module, "GLU_NURBS_ERROR7", INT2NUM(GLU_NURBS_ERROR7)); - rb_define_const(module, "GLU_NURBS_ERROR8", INT2NUM(GLU_NURBS_ERROR8)); - rb_define_const(module, "GLU_NURBS_ERROR9", INT2NUM(GLU_NURBS_ERROR9)); - rb_define_const(module, "GLU_NURBS_ERROR10", INT2NUM(GLU_NURBS_ERROR10)); - rb_define_const(module, "GLU_NURBS_ERROR11", INT2NUM(GLU_NURBS_ERROR11)); - rb_define_const(module, "GLU_NURBS_ERROR12", INT2NUM(GLU_NURBS_ERROR12)); - rb_define_const(module, "GLU_NURBS_ERROR13", INT2NUM(GLU_NURBS_ERROR13)); - rb_define_const(module, "GLU_NURBS_ERROR14", INT2NUM(GLU_NURBS_ERROR14)); - rb_define_const(module, "GLU_NURBS_ERROR15", INT2NUM(GLU_NURBS_ERROR15)); - rb_define_const(module, "GLU_NURBS_ERROR16", INT2NUM(GLU_NURBS_ERROR16)); - rb_define_const(module, "GLU_NURBS_ERROR17", INT2NUM(GLU_NURBS_ERROR17)); - rb_define_const(module, "GLU_NURBS_ERROR18", INT2NUM(GLU_NURBS_ERROR18)); - rb_define_const(module, "GLU_NURBS_ERROR19", INT2NUM(GLU_NURBS_ERROR19)); - rb_define_const(module, "GLU_NURBS_ERROR20", INT2NUM(GLU_NURBS_ERROR20)); - rb_define_const(module, "GLU_NURBS_ERROR21", INT2NUM(GLU_NURBS_ERROR21)); - rb_define_const(module, "GLU_NURBS_ERROR22", INT2NUM(GLU_NURBS_ERROR22)); - rb_define_const(module, "GLU_NURBS_ERROR23", INT2NUM(GLU_NURBS_ERROR23)); - rb_define_const(module, "GLU_NURBS_ERROR24", INT2NUM(GLU_NURBS_ERROR24)); - rb_define_const(module, "GLU_NURBS_ERROR25", INT2NUM(GLU_NURBS_ERROR25)); - rb_define_const(module, "GLU_NURBS_ERROR26", INT2NUM(GLU_NURBS_ERROR26)); - rb_define_const(module, "GLU_NURBS_ERROR27", INT2NUM(GLU_NURBS_ERROR27)); - rb_define_const(module, "GLU_NURBS_ERROR28", INT2NUM(GLU_NURBS_ERROR28)); - rb_define_const(module, "GLU_NURBS_ERROR29", INT2NUM(GLU_NURBS_ERROR29)); - rb_define_const(module, "GLU_NURBS_ERROR30", INT2NUM(GLU_NURBS_ERROR30)); - rb_define_const(module, "GLU_NURBS_ERROR31", INT2NUM(GLU_NURBS_ERROR31)); - rb_define_const(module, "GLU_NURBS_ERROR32", INT2NUM(GLU_NURBS_ERROR32)); - rb_define_const(module, "GLU_NURBS_ERROR33", INT2NUM(GLU_NURBS_ERROR33)); - rb_define_const(module, "GLU_NURBS_ERROR34", INT2NUM(GLU_NURBS_ERROR34)); - rb_define_const(module, "GLU_NURBS_ERROR35", INT2NUM(GLU_NURBS_ERROR35)); - rb_define_const(module, "GLU_NURBS_ERROR36", INT2NUM(GLU_NURBS_ERROR36)); - rb_define_const(module, "GLU_NURBS_ERROR37", INT2NUM(GLU_NURBS_ERROR37)); - rb_define_const(module, "GLU_INVALID_ENUM", INT2NUM(GLU_INVALID_ENUM)); - rb_define_const(module, "GLU_INVALID_VALUE", INT2NUM(GLU_INVALID_VALUE)); - rb_define_const(module, "GLU_OUT_OF_MEMORY", INT2NUM(GLU_OUT_OF_MEMORY)); -#ifdef GLU_INCOMPATIBLE_GL_VERSION - rb_define_const(module, "GLU_INCOMPATIBLE_GL_VERSION", INT2NUM(GLU_INCOMPATIBLE_GL_VERSION)); -#endif - rb_define_const(module, "GLU_VERSION", INT2NUM(GLU_VERSION)); - rb_define_const(module, "GLU_EXTENSIONS", INT2NUM(GLU_EXTENSIONS)); - - cNurbs = rb_define_class("Nurbs", rb_cObject); - cTess = rb_define_class("Tess", rb_cObject); - cQuad = rb_define_class("Quadric", rb_cObject); - - rb_global_variable(&t_current); - t_current = rb_ary_new(); -} diff --git a/ruby/RubySFML/RubySFML.cpp b/ruby/RubySFML/RubySFML.cpp deleted file mode 100644 index 901412d9..00000000 --- a/ruby/RubySFML/RubySFML.cpp +++ /dev/null @@ -1,213 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include -#include -#include -#include -#include "RubySFML.h" -using namespace sf; - -VALUE NOARGV[1]; -VALUE g_vModule; - - -/* - * Returns true if the specified OpenGL extension is supported, false otherwise. - */ -VALUE SFML_checkExtension(VALUE vClass, VALUE vName) { - return OpenGLCaps::CheckExtension(STR2CSTR(vName)) ? Qtrue : Qfalse; -} - -/* - * Returns the maximum texture size on the current display hardware. - */ -VALUE SFML_getMaxTextureSize() { - return INT2NUM(OpenGLCaps::GetMaxTextureSize()); -} - -/* - * Returns the maximum texture units on the current display hardware. - */ -VALUE SFML_getMaxTextureUnits() { - return INT2NUM(OpenGLCaps::GetMaxTextureUnits()); -} - -extern "C" void Init_RubySFML() { - g_vModule = rb_define_module("SFML"); - DEFINE_MODULE_METHOD(checkExtension, checkExtension, 1); - DEFINE_MODULE_METHOD(checkExtension, getMaxTextureSize, 0); - DEFINE_MODULE_METHOD(checkExtension, getMaxTextureUnits, 0); - - Init_Clock(); - Init_Color(); - Init_Drawable(); - Init_Event(); - Init_FloatRect(); - Init_Image(); - Init_Input(); - Init_IntRect(); - Init_Music(); - Init_PostFX(); - Init_RenderWindow(); - Init_Sound(); - Init_SoundBuffer(); - Init_SoundBufferRecorder(); - Init_Sprite(); - Init_String(); - Init_VideoMode(); - Init_View(); - Init_Window(); - - // Window style constants - VALUE vStyle = rb_define_module_under(g_vModule, "Style"); - rb_define_const(g_cWindow, "Resize", INT2FIX(Style::Resize)); - rb_define_const(g_cWindow, "Close", INT2FIX(Style::Close)); - rb_define_const(g_cWindow, "Fullscreen", INT2FIX(Style::Fullscreen)); - - // Sound constants - rb_define_const(g_cSound, "Stopped", INT2FIX(Sound::Stopped)); - rb_define_const(g_cSound, "Paused", INT2FIX(Sound::Paused)); - rb_define_const(g_cSound, "Playing", INT2FIX(Sound::Playing)); - - // Event constants - rb_define_const(g_cEvent, "Closed", INT2FIX(Event::Closed)); - rb_define_const(g_cEvent, "Resized", INT2FIX(Event::Resized)); - rb_define_const(g_cEvent, "LostFocus", INT2FIX(Event::LostFocus)); - rb_define_const(g_cEvent, "GainedFocus", INT2FIX(Event::GainedFocus)); - rb_define_const(g_cEvent, "TextEntered", INT2FIX(Event::TextEntered)); - rb_define_const(g_cEvent, "KeyPressed", INT2FIX(Event::KeyPressed)); - rb_define_const(g_cEvent, "KeyReleased", INT2FIX(Event::KeyReleased)); - rb_define_const(g_cEvent, "MouseWheelMoved", INT2FIX(Event::MouseWheelMoved)); - rb_define_const(g_cEvent, "MouseButtonPressed", INT2FIX(Event::MouseButtonPressed)); - rb_define_const(g_cEvent, "MouseButtonReleased", INT2FIX(Event::MouseButtonReleased)); - rb_define_const(g_cEvent, "MouseMoved", INT2FIX(Event::MouseMoved)); - rb_define_const(g_cEvent, "JoyButtonPressed", INT2FIX(Event::JoyButtonPressed)); - rb_define_const(g_cEvent, "JoyButtonReleased", INT2FIX(Event::JoyButtonReleased)); - rb_define_const(g_cEvent, "JoyMoved", INT2FIX(Event::JoyMoved)); - - // Mouse constants - VALUE vMouse = rb_define_module_under(g_vModule, "Mouse"); - rb_define_const(vMouse, "Left", INT2FIX(Mouse::Left)); - rb_define_const(vMouse, "Right", INT2FIX(Mouse::Right)); - rb_define_const(vMouse, "Middle", INT2FIX(Mouse::Middle)); - rb_define_const(vMouse, "XButton1", INT2FIX(Mouse::XButton1)); - rb_define_const(vMouse, "XButton2", INT2FIX(Mouse::XButton2)); - - // Joystick constants - VALUE vJoy = rb_define_module_under(g_vModule, "Joy"); - rb_define_const(vJoy, "AxisX", INT2FIX(Joy::AxisX)); - rb_define_const(vJoy, "AxisY", INT2FIX(Joy::AxisY)); - rb_define_const(vJoy, "AxisZ", INT2FIX(Joy::AxisZ)); - rb_define_const(vJoy, "AxisR", INT2FIX(Joy::AxisR)); - rb_define_const(vJoy, "AxisU", INT2FIX(Joy::AxisU)); - rb_define_const(vJoy, "AxisV", INT2FIX(Joy::AxisV)); - rb_define_const(vJoy, "AxisPOV", INT2FIX(Joy::AxisPOV)); - - // Keyboard constants - VALUE vKey = rb_define_module_under(g_vModule, "Key"); - rb_define_const(vKey, "A", INT2FIX(Key::A)); - rb_define_const(vKey, "B", INT2FIX(Key::B)); - rb_define_const(vKey, "C", INT2FIX(Key::C)); - rb_define_const(vKey, "D", INT2FIX(Key::D)); - rb_define_const(vKey, "E", INT2FIX(Key::E)); - rb_define_const(vKey, "F", INT2FIX(Key::F)); - rb_define_const(vKey, "G", INT2FIX(Key::G)); - rb_define_const(vKey, "H", INT2FIX(Key::H)); - rb_define_const(vKey, "I", INT2FIX(Key::I)); - rb_define_const(vKey, "J", INT2FIX(Key::J)); - rb_define_const(vKey, "K", INT2FIX(Key::K)); - rb_define_const(vKey, "L", INT2FIX(Key::L)); - rb_define_const(vKey, "M", INT2FIX(Key::M)); - rb_define_const(vKey, "N", INT2FIX(Key::N)); - rb_define_const(vKey, "O", INT2FIX(Key::O)); - rb_define_const(vKey, "P", INT2FIX(Key::P)); - rb_define_const(vKey, "Q", INT2FIX(Key::Q)); - rb_define_const(vKey, "R", INT2FIX(Key::R)); - rb_define_const(vKey, "S", INT2FIX(Key::S)); - rb_define_const(vKey, "T", INT2FIX(Key::T)); - rb_define_const(vKey, "U", INT2FIX(Key::U)); - rb_define_const(vKey, "V", INT2FIX(Key::V)); - rb_define_const(vKey, "W", INT2FIX(Key::W)); - rb_define_const(vKey, "X", INT2FIX(Key::X)); - rb_define_const(vKey, "Y", INT2FIX(Key::Y)); - rb_define_const(vKey, "Z", INT2FIX(Key::Z)); - rb_define_const(vKey, "Num0", INT2FIX(Key::Num0)); - rb_define_const(vKey, "Num1", INT2FIX(Key::Num1)); - rb_define_const(vKey, "Num2", INT2FIX(Key::Num2)); - rb_define_const(vKey, "Num3", INT2FIX(Key::Num3)); - rb_define_const(vKey, "Num4", INT2FIX(Key::Num4)); - rb_define_const(vKey, "Num5", INT2FIX(Key::Num5)); - rb_define_const(vKey, "Num6", INT2FIX(Key::Num6)); - rb_define_const(vKey, "Num7", INT2FIX(Key::Num7)); - rb_define_const(vKey, "Num8", INT2FIX(Key::Num8)); - rb_define_const(vKey, "Num9", INT2FIX(Key::Num9)); - rb_define_const(vKey, "Escape", INT2FIX(Key::Escape)); - rb_define_const(vKey, "Space", INT2FIX(Key::Space)); - rb_define_const(vKey, "Return", INT2FIX(Key::Return)); - rb_define_const(vKey, "Back", INT2FIX(Key::Space)); - rb_define_const(vKey, "Tab", INT2FIX(Key::Tab)); - rb_define_const(vKey, "PageUp", INT2FIX(Key::PageUp)); - rb_define_const(vKey, "PageDown", INT2FIX(Key::PageDown)); - rb_define_const(vKey, "End", INT2FIX(Key::End)); - rb_define_const(vKey, "Home", INT2FIX(Key::Home)); - rb_define_const(vKey, "Insert", INT2FIX(Key::Insert)); - rb_define_const(vKey, "Delete", INT2FIX(Key::Delete)); - rb_define_const(vKey, "Add", INT2FIX(Key::Add)); - rb_define_const(vKey, "Subtract", INT2FIX(Key::Subtract)); - rb_define_const(vKey, "Multiply", INT2FIX(Key::Multiply)); - rb_define_const(vKey, "Divide", INT2FIX(Key::Divide)); - rb_define_const(vKey, "Left", INT2FIX(Key::Left)); - rb_define_const(vKey, "Right", INT2FIX(Key::Right)); - rb_define_const(vKey, "Up", INT2FIX(Key::Up)); - rb_define_const(vKey, "Down", INT2FIX(Key::Down)); - rb_define_const(vKey, "Numpad0", INT2FIX(Key::Numpad0)); - rb_define_const(vKey, "Numpad1", INT2FIX(Key::Numpad1)); - rb_define_const(vKey, "Numpad2", INT2FIX(Key::Numpad2)); - rb_define_const(vKey, "Numpad3", INT2FIX(Key::Numpad3)); - rb_define_const(vKey, "Numpad4", INT2FIX(Key::Numpad4)); - rb_define_const(vKey, "Numpad5", INT2FIX(Key::Numpad5)); - rb_define_const(vKey, "Numpad6", INT2FIX(Key::Numpad6)); - rb_define_const(vKey, "Numpad7", INT2FIX(Key::Numpad7)); - rb_define_const(vKey, "Numpad8", INT2FIX(Key::Numpad8)); - rb_define_const(vKey, "Numpad9", INT2FIX(Key::Numpad9)); - rb_define_const(vKey, "F1", INT2FIX(Key::F1)); - rb_define_const(vKey, "F2", INT2FIX(Key::F2)); - rb_define_const(vKey, "F3", INT2FIX(Key::F3)); - rb_define_const(vKey, "F4", INT2FIX(Key::F4)); - rb_define_const(vKey, "F5", INT2FIX(Key::F5)); - rb_define_const(vKey, "F6", INT2FIX(Key::F6)); - rb_define_const(vKey, "F7", INT2FIX(Key::F7)); - rb_define_const(vKey, "F8", INT2FIX(Key::F8)); - rb_define_const(vKey, "F9", INT2FIX(Key::F9)); - rb_define_const(vKey, "F10", INT2FIX(Key::F10)); - rb_define_const(vKey, "F11", INT2FIX(Key::F11)); - rb_define_const(vKey, "F12", INT2FIX(Key::F12)); - rb_define_const(vKey, "F13", INT2FIX(Key::F13)); - rb_define_const(vKey, "F14", INT2FIX(Key::F14)); - rb_define_const(vKey, "F15", INT2FIX(Key::F15)); - rb_define_const(vKey, "Pause", INT2FIX(Key::Pause)); -} - diff --git a/ruby/RubySFML/RubySFML.h b/ruby/RubySFML/RubySFML.h deleted file mode 100644 index d6fbc7ae..00000000 --- a/ruby/RubySFML/RubySFML.h +++ /dev/null @@ -1,88 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include "ruby_helper.h" - -extern VALUE NOARGV[1]; - -// SFML Ruby module object -extern VALUE g_vModule; - -// SFML Ruby class objects -extern VALUE g_cClock; -extern VALUE g_cColor; -extern VALUE g_cDrawable; -extern VALUE g_cEvent; -extern VALUE g_cFloatRect; -extern VALUE g_cImage; -extern VALUE g_cInput; -extern VALUE g_cIntRect; -extern VALUE g_cMusic; -extern VALUE g_cPostFX; -extern VALUE g_cRenderWindow; -extern VALUE g_cSound; -extern VALUE g_cSoundBuffer; -extern VALUE g_cSoundBufferRecorder; -extern VALUE g_cSprite; -extern VALUE g_cString; -extern VALUE g_cVideoMode; -extern VALUE g_cView; -extern VALUE g_cWindow; - -// SMFL Ruby class init functions -extern void Init_Clock(); -extern void Init_Color(); -extern void Init_Drawable(); -extern void Init_Event(); -extern void Init_FloatRect(); -extern void Init_Image(); -extern void Init_Input(); -extern void Init_IntRect(); -extern void Init_Music(); -extern void Init_PostFX(); -extern void Init_RenderWindow(); -extern void Init_Sound(); -extern void Init_SoundBuffer(); -extern void Init_SoundBufferRecorder(); -extern void Init_Sprite(); -extern void Init_String(); -extern void Init_VideoMode(); -extern void Init_View(); -extern void Init_Window(); - -extern void Color_free(void *p); -extern VALUE Color_new(int argc, VALUE *argv, VALUE vClass); - -extern void Event_free(void *p); -extern VALUE Event_new(int argc, VALUE *argv, VALUE vClass); - -extern void FloatRect_free(void *p); -extern VALUE FloatRect_new(int argc, VALUE *argv, VALUE vClass); - -extern void Image_free(void *p); -extern VALUE Image_new(int argc, VALUE *argv, VALUE vClass); - -extern void IntRect_free(void *p); -extern VALUE IntRect_new(int argc, VALUE *argv, VALUE vClass); - diff --git a/ruby/RubySFML/RubySFML.rb b/ruby/RubySFML/RubySFML.rb deleted file mode 100644 index 4259820e..00000000 --- a/ruby/RubySFML/RubySFML.rb +++ /dev/null @@ -1,83 +0,0 @@ -require "RubySFML.so" - -module SFML - - # A simple class for dealing with tiled sprites. - class TSprite < Sprite - # Use to set/get the tile column - attr_accessor :tx - # Use to set/get the tile row - attr_accessor :ty - - # Pass in the image, the tile width, and the tile height. - def initialize(image, w, h) - super(image) - @tx, @ty, @tw, @th = 0, 0, w, h - setRotationCenter(@tw/2, @th/2) - end - - # Overrides Sprite::render to call setSubRect() for you to choose a - # tile based on tx and ty before the sprite is rendered. - def render(win) - l, t = @tw*@tx, @th*@ty - setSubRect(IntRect.new(l, t, l+@tw, t+@th)) - super(win) - end - end - - # A simple class for dealing with sprites and 2D velocity/acceleration - class VSprite < TSprite - # Use to get/set the x component of the velocity vector - attr_accessor :vx - # Use to get/set the y component of the velocity vector - attr_accessor :vy - - # Pass in the image, the tile width, and the tile height. - def initialize(image, w, h) - super(image, w, h) - @vx = @vy = 0.0 - end - - # Specify a number of degrees to rotate left - def turn_left(degrees) rotate(degrees); end - # Specify a number of degrees to rotate right - def turn_right(degrees) rotate(-degrees); end - - # Returns the magnitude of the velocity vector - def speed - return Math.sqrt(@vx**2 + @vy**2) - end - - # Returns the direction of the velocity vector - def direction - s = speed - return [@vx/s, @vy/s] - end - - # Accelerates the sprite in the direction vector v by the amount "thrust" - def accelerate(v, thrust) - @vx += v[0] * thrust - @vy += v[1] * thrust - end - - # Scales the speed component of the velocity - def scale_speed(amount) - @vx *= amount - @vy *= amount - end - - # Moves the sprite in the direction vector v by the amound d - def move(v, d) - self.x += v[0] * d - self.y += v[1] * d - end - - # Updates the sprite's position based on its velocity and its time slice - def update(time) - self.x += @vx * time - self.y += @vy * time - end - end - -end - diff --git a/ruby/RubySFML/extconf-linux.rb b/ruby/RubySFML/extconf-linux.rb deleted file mode 100644 index 30589175..00000000 --- a/ruby/RubySFML/extconf-linux.rb +++ /dev/null @@ -1,26 +0,0 @@ -require "mkmf" - -dir_config('SFML') - -libs = [ - "GL", - "GLU", - "sfml-system", - "sfml-window", - "sfml-graphics", - "sfml-audio", -] - -libs.each {|lib| - unless have_library(lib) - puts "Unable to find #{lib}.lib!" - puts "Please specify the path to them using:" - puts "--with-SFML-lib=lib_path" - puts "--with-SFML-include=include_path" - puts - exit - end -} - -create_makefile("RubySFML") - diff --git a/ruby/RubySFML/extconf-win.rb b/ruby/RubySFML/extconf-win.rb deleted file mode 100644 index bd2b6aed..00000000 --- a/ruby/RubySFML/extconf-win.rb +++ /dev/null @@ -1,30 +0,0 @@ -require "mkmf" -$CFLAGS = "/MD /O2 /EHsc /DWIN32 /DNDEBUG /D_WINDOWS" -#$CFLAGS = "/MD /Zi /EHsc /DWIN32 /DNDEBUG /D_WINDOWS" -#$LDFLAGS = "/Zi" - -dir_config('SFML') - -libs = [ - "gdi32", - "opengl32", - "glu32", - "sfml-system-s", - "sfml-window-s", - "sfml-graphics-s", - "sfml-audio-s", -] - -libs.each {|lib| - unless have_library(lib) - puts "Unable to find #{lib}.lib!" - puts "Please specify the path to them using:" - puts "--with-SFML-lib=lib_path" - puts "--with-SFML-include=include_path" - puts - exit - end -} - -create_makefile("RubySFML") - diff --git a/ruby/RubySFML/ruby_helper.h b/ruby/RubySFML/ruby_helper.h deleted file mode 100644 index 12c3610b..00000000 --- a/ruby/RubySFML/ruby_helper.h +++ /dev/null @@ -1,846 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// - -#ifndef __ruby_helper_h__ -#define __ruby_helper_h__ -#define NOMINMAX -#include -#include -#include -#if defined(_WIN32) || defined(__WIN32__) - #include -#endif -#include - -#if defined(_WIN32) || defined(__WIN32__) - #define DECL __cdecl -#else - #define DECL __attribute__((cdecl)) -#endif - -// Copies a string, makes the first character upper case, and then returns it -inline std::string fupr(const char *p) { - std::string str = p; - str[0] = toupper(str[0]); - return str; -} - -#define IS(v, c) rb_obj_class(v) == c -#define ISKO(v, c) rb_obj_is_kind_of(v, c) -#define ISNUM(v) ISKO(v, rb_cNumeric) -#define ISSTR(v) ISKO(v, rb_cString) - -#define DECLARE_PTR_VAR(MyClass, MyVar, expr)\ - MyClass *p##MyVar = expr;\ - VALUE v##MyVar = p##MyVar == NULL ? Qnil : Data_Wrap_Struct(g_c##MyClass, 0, 0, p##MyVar) - -#define DECLARE_OBJ_VAR(MyClass, MyVar, expr)\ - VALUE v##MyVar = MyClass##_new(0, NOARGV, g_c##MyClass);\ - MyClass *p##MyVar = NULL;\ - Data_Get_Struct(v##MyVar, MyClass, p##MyVar);\ - *p##MyVar = expr - -#define GET_OBJ_VAR(MyClass, MyVar)\ - MyClass *p##MyVar = NULL;\ - Data_Get_Struct(v##MyVar, MyClass, p##MyVar) - -#define DEFINE_CLASS_METHOD(MyClass, MyMethod, n)\ - rb_define_singleton_method(g_c##MyClass, #MyMethod,\ - (unsigned long (DECL *)(...))MyClass##_##MyMethod, n) - -#define DEFINE_CLASS_METHOD2(MyClass, MyMethod, RubyMethod, n)\ - rb_define_singleton_method(g_c##MyClass, #RubyMethod,\ - (unsigned long (DECL *)(...))MyClass##_##MyMethod, n) - -#define DEFINE_INSTANCE_METHOD(MyClass, MyMethod, n)\ - rb_define_method(g_c##MyClass, #MyMethod,\ - (unsigned long (DECL *)(...))MyClass##_##MyMethod, n) - -#define DEFINE_INSTANCE_METHOD2(MyClass, MyMethod, RubyMethod, n)\ - rb_define_method(g_c##MyClass, #RubyMethod,\ - (unsigned long (DECL *)(...))MyClass##_##MyMethod, n) - -// Use to define a standard getter method (for any type of member) -// (Defines both obj.variableName and obj.getVariableName) -#define DEFINE_GETTER(MyClass, MyField) \ - rb_define_method(g_c##MyClass, #MyField, \ - (unsigned long (DECL *)(...))MyClass##_get_##MyField, 0);\ - rb_define_method(g_c##MyClass, (std::string("get")+fupr(#MyField)).c_str(), \ - (unsigned long (DECL *)(...))MyClass##_get_##MyField, 0) - -// Use to define a standard setter method (for any type of member) -// (Defines both obj.variableName = v and obj.setVariableName v) -#define DEFINE_SETTER(MyClass, MyField) \ - rb_define_method(g_c##MyClass, #MyField "=", \ - (unsigned long (DECL *)(...))MyClass##_set_##MyField, 1);\ - rb_define_method(g_c##MyClass, (std::string("set")+fupr(#MyField)).c_str(), \ - (unsigned long (DECL *)(...))MyClass##_set_##MyField, 1) - -// Use to define standard getter and setter methods (for any type of member) -#define DEFINE_RW(MyClass, MyField) \ - DEFINE_GETTER(MyClass, MyField);\ - DEFINE_SETTER(MyClass, MyField) - -// Use to define a standard getter method (for any type of member) -// (Defines both obj.variableName and obj.getVariableName) -#define DEFINE_GETTER2(MyClass, MyField, RubyField) \ - rb_define_method(g_c##MyClass, #RubyField, \ - (unsigned long (DECL *)(...))MyClass##_get_##MyField, 0);\ - rb_define_method(g_c##MyClass, (std::string("get")+fupr(#RubyField)).c_str(), \ - (unsigned long (DECL *)(...))MyClass##_get_##MyField, 0) - -// Use to define a standard setter method (for any type of member) -// (Defines both obj.variableName = v and obj.setVariableName v) -#define DEFINE_SETTER2(MyClass, MyField, RubyField) \ - rb_define_method(g_c##MyClass, #RubyField "=", \ - (unsigned long (DECL *)(...))MyClass##_set_##MyField, 1);\ - rb_define_method(g_c##MyClass, (std::string("set")+fupr(#RubyField)).c_str(), \ - (unsigned long (DECL *)(...))MyClass##_set_##MyField, 1) - -// Use to define standard getter and setter methods (for any type of member) -#define DEFINE_RW2(MyClass, MyField, RubyField) \ - DEFINE_GETTER2(MyClass, MyField, RubyField);\ - DEFINE_SETTER2(MyClass, MyField, RubyField) - -// Use to define a static getter method (for any type of member) -// (Defines both Class.variableName and Class.getVariableName) -#define DEFINE_STATIC_GETTER(MyClass, MyField) \ - rb_define_singleton_method(g_c##MyClass, #MyField, \ - (unsigned long (DECL *)(...))MyClass##_get_##MyField, 0);\ - rb_define_singleton_method(g_c##MyClass, (std::string("get")+fupr(#MyField)).c_str(), \ - (unsigned long (DECL *)(...))MyClass##_get_##MyField, 0) - -// Use to define a static setter method (for any type of member) -// (Defines both Class.variableName = v and Class.setVariableName v) -#define DEFINE_STATIC_SETTER(MyClass, MyField) \ - rb_define_singleton_method(g_c##MyClass, #MyField "=", \ - (unsigned long (DECL *)(...))MyClass##_set_##MyField, 1);\ - rb_define_singleton_method(g_c##MyClass, (std::string("set")+fupr(#MyField)).c_str(), \ - (unsigned long (DECL *)(...))MyClass##_set_##MyField, 1) - -// Use to define static getter and setter methods (for any type of member) -#define DEFINE_STATIC_RW(MyClass, MyField) \ - DEFINE_STATIC_GETTER(MyClass, MyField);\ - DEFINE_STATIC_SETTER(MyClass, MyField) - -#define DEFINE_MODULE_CONST(MyConst)\ - rb_define_const(g_vModule, #MyConst, INT2FIX(MyConst)) - -#define DEFINE_MODULE_METHOD(MyMethod, RubyMethod, n)\ - rb_define_singleton_method(g_vModule, #RubyMethod,\ - (unsigned long (DECL *)(...))SFML_##MyMethod, n) - -#define DEFINE_INT_CONST(MyClass, MyConst)\ - rb_define_const(g_c##MyClass, #MyConst, INT2FIX(MyClass::MyConst)) - -#define DEFINE_PTR_CONST(MyClass, MyConst, expr)\ - rb_define_const(g_c##MyClass, #MyConst, Data_Wrap_Struct(g_c##MyClass, 0, 0, expr)) - - -#define DECLARE_VOID_METHOD(MyClass, MyMethod)\ -static VALUE MyClass##_##MyMethod(VALUE vSelf)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - ptr->MyMethod();\ - return vSelf;\ -}\ - -// Use to declare standard free, new, and init methods with 0 parameters -#define DECLARE_FREE_NEW_INIT0(MyClass)\ -static void MyClass##_free(void *p)\ -{\ - delete (MyClass *)p;\ -}\ -static VALUE MyClass##_new(VALUE vClass)\ -{\ - VALUE argv[1];\ - MyClass *ptr = new MyClass;\ - VALUE tData = Data_Wrap_Struct(vClass, 0, MyClass##_free, ptr);\ - rb_obj_call_init(tData, 0, argv);\ - return tData;\ -}\ -static VALUE MyClass##_initialize(VALUE vSelf)\ -{\ - return vSelf;\ -} - -// Use to declare standard free and new methods with 1 parameter -#define DECLARE_FREE_NEW1(MyClass)\ -static void MyClass##_free(void *p)\ -{\ - delete (MyClass *)p;\ -}\ -static VALUE MyClass##_new(VALUE vClass, VALUE v1)\ -{\ - VALUE argv[1];\ - argv[0] = v1;\ - MyClass *ptr = new MyClass;\ - VALUE tData = Data_Wrap_Struct(vClass, 0, MyClass##_free, ptr);\ - rb_obj_call_init(tData, 1, argv);\ - return tData;\ -} - -// Use to define standard free, new, and init methods with n parameters -// (Also declares a free method) -#define DEFINE_CLASS_NEW_INIT(MyClass, n)\ - g_c##MyClass = rb_define_class(#MyClass, rb_cObject);\ - DEFINE_CLASS_METHOD(MyClass, new, n);\ - DEFINE_INSTANCE_METHOD(MyClass, initialize, n); - - -// Use to declare a standard getter method for a public int member -#define DECLARE_INT_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - return INT2NUM((int)ptr->MyField);\ -} - -// Use to declare a static getter method for a public int member -#define DECLARE_STATIC_INT_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vClass)\ -{\ - return INT2NUM((int)MyClass::MyField);\ -} - -// Use to declare a standard setter method for a public int member -#define DECLARE_INT_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - ptr->MyField = NUM2INT(v);\ - return v;\ -} - -// Use to declare a static setter method for a public int member -#define DECLARE_STATIC_INT_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vClass)\ -{\ - MyClass::MyField = NUM2INT(v);\ - return v;\ -} - -// Use to declare standard getter and setter methods for a public int member -#define DECLARE_INT_RW(MyClass, MyField)\ -DECLARE_INT_GETTER(MyClass, MyField)\ -DECLARE_INT_SETTER(MyClass, MyField) - -// Use to declare static getter and setter methods for a public int member -#define DECLARE_STATIC_INT_RW(MyClass, MyField)\ -DECLARE_STATIC_INT_GETTER(MyClass, MyField)\ -DECLARE_STATIC_INT_SETTER(MyClass, MyField) - -// Use to declare a standard setter method for a public enum member -#define DECLARE_ENUM_SETTER(MyClass, MyField, EnumType)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - ptr->MyField = (EnumType)NUM2INT(v);\ - return v;\ -} - -// Use to declare a standard setter method for a public enum member -#define DECLARE_STATIC_ENUM_SETTER(MyClass, MyField, EnumType)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass::MyField = (EnumType)NUM2INT(v);\ - return v;\ -} - -// Use to declare standard getter and setter methods for a public enum member -#define DECLARE_ENUM_RW(MyClass, MyField, EnumType)\ -DECLARE_INT_GETTER(MyClass, MyField)\ -DECLARE_ENUM_SETTER(MyClass, MyField, EnumType) - -// Use to declare standard getter and setter methods for a public enum member -#define DECLARE_STATIC_ENUM_RW(MyClass, MyField, EnumType)\ -DECLARE_STATIC_INT_GETTER(MyClass, MyField)\ -DECLARE_STATIC_ENUM_SETTER(MyClass, MyField, EnumType) - -// Use to declare a standard getter method for a public bool member -#define DECLARE_BOOL_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - return ptr->MyField ? Qtrue : Qfalse;\ -} - -// Use to declare a static getter method for a public bool member -#define DECLARE_STATIC_BOOL_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vClass)\ -{\ - return MyClass::MyField ? Qtrue : Qfalse;\ -} - -// Use to declare a standard setter method for a public bool member -#define DECLARE_BOOL_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - ptr->MyField = RTEST(v) ? true : false;\ - return v;\ -} - -// Use to declare a static setter method for a public bool member -#define DECLARE_STATIC_BOOL_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vClass, VALUE v)\ -{\ - MyClass::MyField = RTEST(v) ? true : false;\ - return v;\ -} - -// Use to declare standard getter and setter methods for a public int member -#define DECLARE_BOOL_RW(MyClass, MyField)\ -DECLARE_BOOL_GETTER(MyClass, MyField)\ -DECLARE_BOOL_SETTER(MyClass, MyField) - -// Use to declare standard getter and setter methods for a public int member -#define DECLARE_STATIC_BOOL_RW(MyClass, MyField)\ -DECLARE_STATIC_BOOL_GETTER(MyClass, MyField)\ -DECLARE_STATIC_BOOL_SETTER(MyClass, MyField) - -// Use to declare a standard getter method for a public double member -#define DECLARE_DOUBLE_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - return rb_float_new((double)ptr->MyField);\ -} - -// Use to declare a static getter method for a public double member -#define DECLARE_STATIC_DOUBLE_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - return rb_float_new((double)MyClass::MyField);\ -} - -// Use to declare a standard setter method for a public double member -#define DECLARE_DOUBLE_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - ptr->MyField = (float)NUM2DBL(v);\ - return v;\ -} - -// Use to declare a static setter method for a public double member -#define DECLARE_STATIC_DOUBLE_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass::MyField = NUM2DBL(v);\ - return v;\ -} - -// Use to declare standard getter and setter methods for a public double member -#define DECLARE_DOUBLE_RW(MyClass, MyField)\ -DECLARE_DOUBLE_GETTER(MyClass, MyField)\ -DECLARE_DOUBLE_SETTER(MyClass, MyField) - -// Use to declare standard getter and setter methods for a public double member -#define DECLARE_STATIC_DOUBLE_RW(MyClass, MyField)\ -DECLARE_DOUBLE_STATIC_GETTER(MyClass, MyField)\ -DECLARE_DOUBLE_STATIC_SETTER(MyClass, MyField) - -// Use to declare a standard getter method for a public std::string member -#define DECLARE_STRING_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - return rb_str_new2(ptr->MyField.c_str());\ -} - -// Use to declare a static getter method for a public std::string member -#define DECLARE_STATIC_STRING_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - return rb_str_new2(MyClass::MyField.c_str());\ -} - -// Use to declare a standard setter method for a public std::string member -#define DECLARE_STRING_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - ptr->MyField = STR2CSTR(v);\ - return v;\ -} - -// Use to declare a static setter method for a public std::string member -#define DECLARE_STATIC_STRING_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass::MyField = STR2CSTR(v);\ - return v;\ -} - -// Use to declare standard getter and setter methods for a public std::string member -#define DECLARE_STRING_RW(MyClass, MyField)\ -DECLARE_STRING_GETTER(MyClass, MyField)\ -DECLARE_STRING_SETTER(MyClass, MyField) - -// Use to declare standard getter and setter methods for a public int member -#define DECLARE_STATIC_STRING_RW(MyClass, MyField)\ -DECLARE_STATIC_STRING_GETTER(MyClass, MyField)\ -DECLARE_STATIC_STRING_SETTER(MyClass, MyField) - -// Use to declare a standard getter method for a public short member -#define DECLARE_SHORT_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - return INT2FIX((int)ptr->MyField);\ -} - -// Use to declare a standard getter method for a public short member -#define DECLARE_STATIC_SHORT_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - return INT2FIX((int)MyClass->MyField);\ -} - -// Use to declare a standard setter method for a public short member -#define DECLARE_SHORT_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - ptr->MyField = (short)FIX2INT(v);\ - return v;\ -} - -// Use to declare a standard setter method for a public short member -#define DECLARE_STATIC_SHORT_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass::MyField = (short)FIX2INT(v);\ - return v;\ -} - -// Use to declare standard getter and setter methods for a public short member -#define DECLARE_SHORT_RW(MyClass, MyField)\ -DECLARE_SHORT_GETTER(MyClass, MyField)\ -DECLARE_SHORT_SETTER(MyClass, MyField) - -// Use to declare standard getter and setter methods for a public short member -#define DECLARE_STATIC_SHORT_RW(MyClass, MyField)\ -DECLARE_STATIC_SHORT_GETTER(MyClass, MyField)\ -DECLARE_STATIC_SHORT_SETTER(MyClass, MyField) - - -// Use to declare a standard getter method for a public object member -#define DECLARE_OBJ_GETTER(MyClass, MyField, FieldType)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *pSelf;\ - Data_Get_Struct(vSelf, MyClass, pSelf);\ - VALUE vRet = FieldType##_new(0, NOARGV, g_c##FieldType);\ - FieldType *pRet;\ - Data_Get_Struct(vRet, FieldType, pRet);\ - *pRet = pSelf->MyField;\ - return vRet;\ -} - -// Use to declare a static getter method for a public object member -#define DECLARE_STATIC_OBJ_GETTER(MyClass, MyField, FieldType)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - VALUE vRet = FieldType##_new(0, NOARGV, g_c##FieldType);\ - FieldType *pRet;\ - Data_Get_Struct(vRet, FieldType, pRet);\ - *pRet = MyClass::MyField;\ - return vRet;\ -} - -// Use to declare a standard setter method for a public object member -#define DECLARE_OBJ_SETTER(MyClass, MyField, FieldType)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *pSelf;\ - Data_Get_Struct(vSelf, MyClass, pSelf);\ - FieldType *pV;\ - Data_Get_Struct(v, FieldType, pV);\ - pSelf->MyField = *pV;\ - return Qnil;\ -} - -// Use to declare a static setter method for a public object member -#define DECLARE_STATIC_OBJ_SETTER(MyClass, MyField, FieldType)\ -static VALUE MyClass##_set_##MyField(VALUE vClass, VALUE v)\ -{\ - FieldType *pV;\ - Data_Get_Struct(v, FieldType, pV);\ - MyClass::MyField = *pV;\ - return Qnil;\ -} - -// Use to declare standard getter and setter methods for a public object member -#define DECLARE_OBJ_RW(MyClass, MyField, FieldType)\ -DECLARE_OBJ_GETTER(MyClass, MyField, FieldType)\ -DECLARE_OBJ_SETTER(MyClass, MyField, FieldType) - -// Use to declare static getter and setter methods for a public object member -#define DECLARE_STATIC_OBJ_RW(MyClass, MyField, FieldType)\ -DECLARE_STATIC_OBJ_GETTER(MyClass, MyField, FieldType)\ -DECLARE_STATIC_OBJ_SETTER(MyClass, MyField, FieldType) - - -// Use to declare a standard getter method for a public unsigned short member -#define DECLARE_USHORT_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - return INT2FIX((int)ptr->MyField);\ -} - -// Use to declare a standard getter method for a public unsigned short member -#define DECLARE_STATIC_USHORT_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - return INT2FIX((int)MyClass->MyField);\ -} - -// Use to declare a standard setter method for a public unsigned short member -#define DECLARE_USHORT_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - ptr->MyField = (unsigned short)FIX2INT(v);\ - return v;\ -} - -// Use to declare a standard setter method for a public unsigned short member -#define DECLARE_STATIC_USHORT_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass::MyField = (unsigned short)FIX2INT(v);\ - return v;\ -} - -// Use to declare standard getter and setter methods for a public unsigned short member -#define DECLARE_USHORT_RW(MyClass, MyField)\ -DECLARE_USHORT_GETTER(MyClass, MyField)\ -DECLARE_USHORT_SETTER(MyClass, MyField) - -// Use to declare standard getter and setter methods for a public unsigned short member -#define DECLARE_STATIC_USHORT_RW(MyClass, MyField)\ -DECLARE_STATIC_USHORT_GETTER(MyClass, MyField)\ -DECLARE_STATIC_USHORT_SETTER(MyClass, MyField) - - -// Use to declare a standard getter method for a public unsigned char member -#define DECLARE_UCHAR_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - return INT2FIX((int)ptr->MyField);\ -} - -// Use to declare a standard getter method for a public unsigned char member -#define DECLARE_STATIC_UCHAR_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - return INT2FIX((int)MyClass->MyField);\ -} - -// Use to declare a standard setter method for a public unsigned char member -#define DECLARE_UCHAR_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - ptr->MyField = (unsigned char)FIX2INT(v);\ - return v;\ -} - -// Use to declare a standard setter method for a public unsigned char member -#define DECLARE_STATIC_UCHAR_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass::MyField = (unsigned char)FIX2INT(v);\ - return v;\ -} - -// Use to declare standard getter and setter methods for a public unsigned char member -#define DECLARE_UCHAR_RW(MyClass, MyField)\ -DECLARE_UCHAR_GETTER(MyClass, MyField)\ -DECLARE_UCHAR_SETTER(MyClass, MyField) - -// Use to declare standard getter and setter methods for a public unsigned char member -#define DECLARE_STATIC_UCHAR_RW(MyClass, MyField)\ -DECLARE_STATIC_UCHAR_GETTER(MyClass, MyField)\ -DECLARE_STATIC_UCHAR_SETTER(MyClass, MyField) - - -// Use to declare a standard getter method for a public char member -#define DECLARE_CHAR_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - return INT2FIX((int)ptr->MyField);\ -} - -// Use to declare a standard getter method for a public char member -#define DECLARE_STATIC_CHAR_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - return INT2FIX((int)MyClass->MyField);\ -} - -// Use to declare a standard setter method for a public char member -#define DECLARE_CHAR_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - ptr->MyField = (char)FIX2INT(v);\ - return v;\ -} - -// Use to declare a standard setter method for a public char member -#define DECLARE_STATIC_CHAR_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass::MyField = (char)FIX2INT(v);\ - return v;\ -} - -// Use to declare standard getter and setter methods for a public char member -#define DECLARE_CHAR_RW(MyClass, MyField)\ -DECLARE_CHAR_GETTER(MyClass, MyField)\ -DECLARE_CHAR_SETTER(MyClass, MyField) - -// Use to declare standard getter and setter methods for a public char member -#define DECLARE_STATIC_CHAR_RW(MyClass, MyField)\ -DECLARE_STATIC_CHAR_GETTER(MyClass, MyField)\ -DECLARE_STATIC_CHAR_SETTER(MyClass, MyField) - -// Use to declare a standard getter method for a public int64 member -#define DECLARE_INT64_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - return LL2NUM(ptr->MyField);\ -} - -// Use to declare a static getter method for a public int64 member -#define DECLARE_STATIC_INT64_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vClass)\ -{\ - return LL2NUM(MyClass::MyField);\ -} - -// Use to declare a standard setter method for a public int64 member -#define DECLARE_INT64_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - ptr->MyField = NUM2LL(v);\ - return v;\ -} - -// Use to declare a static setter method for a public int64 member -#define DECLARE_STATIC_INT64_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vClass)\ -{\ - MyClass::MyField = NUM2LL(v);\ - return v;\ -} - -// Use to declare standard getter and setter methods for a public int64 member -#define DECLARE_INT64_RW(MyClass, MyField)\ -DECLARE_INT64_GETTER(MyClass, MyField)\ -DECLARE_INT64_SETTER(MyClass, MyField) - -// Use to declare static getter and setter methods for a public int64 member -#define DECLARE_STATIC_INT64_RW(MyClass, MyField)\ -DECLARE_STATIC_INT64_GETTER(MyClass, MyField)\ -DECLARE_STATIC_INT64_SETTER(MyClass, MyField) - - -// Use to declare a standard getter method for a public uint64 member -#define DECLARE_UINT64_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - return ULL2NUM(ptr->MyField);\ -} - -// Use to declare a static getter method for a public uint64 member -#define DECLARE_STATIC_UINT64_GETTER(MyClass, MyField)\ -static VALUE MyClass##_get_##MyField(VALUE vClass)\ -{\ - return ULL2NUM(MyClass::MyField);\ -} - -// Use to declare a standard setter method for a public uint64 member -#define DECLARE_UINT64_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *ptr;\ - Data_Get_Struct(vSelf, MyClass, ptr);\ - ptr->MyField = NUM2ULL(v);\ - return v;\ -} - -// Use to declare a static setter method for a public uint64 member -#define DECLARE_USTATIC_INT64_SETTER(MyClass, MyField)\ -static VALUE MyClass##_set_##MyField(VALUE vClass)\ -{\ - MyClass::MyField = NUM2ULL(v);\ - return v;\ -} - -// Use to declare standard getter and setter methods for a public uint64 member -#define DECLARE_UINT64_RW(MyClass, MyField)\ -DECLARE_UINT64_GETTER(MyClass, MyField)\ -DECLARE_UINT64_SETTER(MyClass, MyField) - -// Use to declare static getter and setter methods for a public uint64 member -#define DECLARE_STATIC_UINT64_RW(MyClass, MyField)\ -DECLARE_STATIC_UINT64_GETTER(MyClass, MyField)\ -DECLARE_STATIC_UINT64_SETTER(MyClass, MyField) - - -#define DECLARE_INT_ARR_GETTER(MyClass, MyField, Size)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *pSelf;\ - Data_Get_Struct(vSelf, MyClass, pSelf);\ - VALUE v = rb_ary_new();\ - for(int i=0; iMyField[i]));\ - return v;\ -} - -#define DECLARE_INT_ARR_SETTER(MyClass, MyField, Size)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *pSelf;\ - Data_Get_Struct(vSelf, MyClass, pSelf);\ - for(int i=0; iMyField[i] = FIX2INT(rb_ary_entry(v, i));\ - return v;\ -} - -#define DECLARE_INT_ARR_RW(MyClass, MyField, Size)\ -DECLARE_INT_ARR_GETTER(MyClass, MyField, Size);\ -DECLARE_INT_ARR_SETTER(MyClass, MyField, Size) - - -#define DECLARE_DOUBLE_ARR_GETTER(MyClass, MyField, Size)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *pSelf;\ - Data_Get_Struct(vSelf, MyClass, pSelf);\ - VALUE v = rb_ary_new();\ - for(int i=0; iMyField[i]));\ - return v;\ -} - -#define DECLARE_DOUBLE_ARR_SETTER(MyClass, MyField, Size)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *pSelf;\ - Data_Get_Struct(vSelf, MyClass, pSelf);\ - for(int i=0; iMyField[i] = NUM2DBL(rb_ary_entry(v, i));\ - return v;\ -} - -#define DECLARE_DOUBLE_ARR_RW(MyClass, MyField, Size)\ -DECLARE_DOUBLE_ARR_GETTER(MyClass, MyField, Size);\ -DECLARE_DOUBLE_ARR_SETTER(MyClass, MyField, Size) - - -#define DECLARE_ADDR_GETTER(MyClass, MyField, FieldType)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *pSelf;\ - Data_Get_Struct(vSelf, MyClass, pSelf);\ - VALUE vRet = Data_Wrap_Struct(g_c##FieldType, 0, 0, &pSelf->MyField);\ - return vRet;\ -} - -// Use to declare a standard getter method for a public object pointer member -#define DECLARE_PTR_GETTER(MyClass, MyField, FieldType)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *pSelf;\ - Data_Get_Struct(vSelf, MyClass, pSelf);\ - VALUE vRet = Data_Wrap_Struct(g_c##FieldType, 0, 0, pSelf->MyField);\ - return vRet;\ -} - - -// Use to declare a standard getter method for a public object reference member -#define DECLARE_REF_GETTER(MyClass, MyField, FieldType)\ -static VALUE MyClass##_get_##MyField(VALUE vSelf)\ -{\ - MyClass *pSelf;\ - Data_Get_Struct(vSelf, MyClass, pSelf);\ - pSelf->MyField->ReferenceCountedObject_refCount.increment();\ - VALUE vRet = Data_Wrap_Struct(g_c##FieldType, 0, FieldType##_free, pSelf->MyField.pointer());\ - return vRet;\ -} - -// Use to declare a standard setter method for a public object reference member -#define DECLARE_REF_SETTER(MyClass, MyField, FieldType)\ -static VALUE MyClass##_set_##MyField(VALUE vSelf, VALUE v)\ -{\ - MyClass *pSelf;\ - Data_Get_Struct(vSelf, MyClass, pSelf);\ - FieldType *pV;\ - Data_Get_Struct(v, FieldType, pV);\ - pSelf->MyField = pV;\ - return Qnil;\ -} - -// Use to declare standard getter and setter methods for a public object member -#define DECLARE_REF_RW(MyClass, MyField, FieldType)\ -DECLARE_REF_GETTER(MyClass, MyField, FieldType)\ -DECLARE_REF_SETTER(MyClass, MyField, FieldType) - - -#endif // __ruby_helper_h__ - diff --git a/ruby/RubySFML/sfClock.cpp b/ruby/RubySFML/sfClock.cpp deleted file mode 100644 index 9880057e..00000000 --- a/ruby/RubySFML/sfClock.cpp +++ /dev/null @@ -1,86 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cClock; - -void Clock_free(void *p) { delete (Clock *)p; } -VALUE Clock_new(int argc, VALUE *argv, VALUE vClass) { - Clock *ptr = new Clock(); - VALUE tData = Data_Wrap_Struct(vClass, 0, Clock_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE Clock_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - Clock *pSelf; - Data_Get_Struct(vSelf, Clock, pSelf); - if(argc == 0) { - // Nothing to initialize - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -static VALUE Clock_to_s(VALUE vSelf) { - // Get C++ object pointer from vSelf - Clock *pSelf; - Data_Get_Struct(vSelf, Clock, pSelf); - char szBuffer[256]; - sprintf(szBuffer, "Elapsed Time=%f", pSelf->GetElapsedTime()); - return rb_str_new2(szBuffer); -} - -static VALUE Clock_get_elapsedTime(VALUE vSelf) { - // Get C++ object pointer from vSelf - Clock *pSelf; - Data_Get_Struct(vSelf, Clock, pSelf); - return rb_float_new(pSelf->GetElapsedTime()); -} - -static VALUE Clock_reset(VALUE vSelf) { - // Get C++ object pointer from vSelf - Clock *pSelf; - Data_Get_Struct(vSelf, Clock, pSelf); - pSelf->Reset(); - return Qnil; -} - -void Init_Clock() -{ - g_cClock = rb_define_class_under(g_vModule, "Clock", rb_cObject); - DEFINE_CLASS_METHOD(Clock, new, -1); - DEFINE_INSTANCE_METHOD(Clock, initialize, -1); - - DEFINE_GETTER(Clock, elapsedTime); - - DEFINE_INSTANCE_METHOD(Clock, to_s, 0); - DEFINE_INSTANCE_METHOD2(Clock, get_elapsedTime, to_f, 0); - DEFINE_INSTANCE_METHOD(Clock, reset, 0); -} - diff --git a/ruby/RubySFML/sfColor.cpp b/ruby/RubySFML/sfColor.cpp deleted file mode 100644 index 5ee4e8f2..00000000 --- a/ruby/RubySFML/sfColor.cpp +++ /dev/null @@ -1,120 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cColor; - -DECLARE_STATIC_OBJ_GETTER(Color, Black, Color); -DECLARE_STATIC_OBJ_GETTER(Color, White, Color); -DECLARE_STATIC_OBJ_GETTER(Color, Red, Color); -DECLARE_STATIC_OBJ_GETTER(Color, Green, Color); -DECLARE_STATIC_OBJ_GETTER(Color, Blue, Color); -DECLARE_STATIC_OBJ_GETTER(Color, Yellow, Color); -DECLARE_STATIC_OBJ_GETTER(Color, Magenta, Color); -DECLARE_STATIC_OBJ_GETTER(Color, Cyan, Color); - -DECLARE_INT_RW(Color, r); -DECLARE_INT_RW(Color, g); -DECLARE_INT_RW(Color, b); -DECLARE_INT_RW(Color, a); - -void Color_free(void *p) { delete (Color *)p; } -VALUE Color_new(int argc, VALUE *argv, VALUE vClass) { - Color *ptr = new Color(); - VALUE tData = Data_Wrap_Struct(vClass, 0, Color_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE Color_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - Color *pSelf; - Data_Get_Struct(vSelf, Color, pSelf); - if(argc == 0) { - // Nothing to initialize - } else if(argc == 1 && ISNUM(argv[0])) { - DWORD dw = NUM2UINT(argv[0]); - *pSelf = Color( - (dw >> 24) & 0xFF, - (dw >> 16) & 0xFF, - (dw >> 8) & 0xFF, - (dw >> 0) & 0xFF); - } else if(argc >= 3 && argc <= 4 && - ISNUM(argv[0]) && ISNUM(argv[1]) && ISNUM(argv[2]) && - (argc < 4 || ISNUM(argv[3]))) { - pSelf->r = (unsigned char)NUM2INT(argv[0]); - pSelf->g = (unsigned char)NUM2INT(argv[1]); - pSelf->b = (unsigned char)NUM2INT(argv[2]); - pSelf->a = argc < 4 ? 255 : (unsigned char)NUM2INT(argv[3]); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -static VALUE Color_to_s(VALUE vSelf) -{ - // Get C++ object pointer from vSelf - Color *pSelf; - Data_Get_Struct(vSelf, Color, pSelf); - char szBuffer[256]; - sprintf(szBuffer, "r=%d, g=%d, b=%d, a=%d", pSelf->r, pSelf->g, pSelf->b, pSelf->a); - return rb_str_new2(szBuffer); -} - -static VALUE Color_toRGBA(VALUE vSelf) -{ - // Get C++ object pointer from vSelf - Color *pSelf; - Data_Get_Struct(vSelf, Color, pSelf); - return UINT2NUM((pSelf->r << 24) | (pSelf->g << 16) | (pSelf->b << 8) | pSelf->a); -} - -void Init_Color() -{ - g_cColor = rb_define_class_under(g_vModule, "Color", rb_cObject); - DEFINE_CLASS_METHOD(Color, new, -1); - DEFINE_INSTANCE_METHOD(Color, initialize, -1); - - DEFINE_STATIC_GETTER(Color, Black); - DEFINE_STATIC_GETTER(Color, White); - DEFINE_STATIC_GETTER(Color, Red); - DEFINE_STATIC_GETTER(Color, Green); - DEFINE_STATIC_GETTER(Color, Blue); - DEFINE_STATIC_GETTER(Color, Yellow); - DEFINE_STATIC_GETTER(Color, Magenta); - DEFINE_STATIC_GETTER(Color, Cyan); - - DEFINE_RW(Color, r); - DEFINE_RW(Color, g); - DEFINE_RW(Color, b); - DEFINE_RW(Color, a); - - DEFINE_INSTANCE_METHOD(Color, to_s, 0); - DEFINE_INSTANCE_METHOD(Color, toRGBA, 0); - DEFINE_INSTANCE_METHOD2(Color, toRGBA, to_i, 0); -} - diff --git a/ruby/RubySFML/sfDrawable.cpp b/ruby/RubySFML/sfDrawable.cpp deleted file mode 100644 index a057ca6d..00000000 --- a/ruby/RubySFML/sfDrawable.cpp +++ /dev/null @@ -1,285 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -#include - -#ifdef _MSC_VER - #define COSF cosf - #define SINF sinf -#else - #define COSF cos - #define SINF sin -#endif - -using namespace sf; -#define PI 3.14159265f - -// Wrapper for Drawable that calls the Ruby version of virtual methods in case a Ruby class derives from this one -class rDrawable : public Drawable { -protected: - VALUE m_vSelf, m_vClass; - ID m_idRender; - bool m_bRender; - - virtual void Render(const RenderWindow &Window) const { - // If this method is overridden in Ruby, call it - if(m_bRender) { - VALUE vWindow = Data_Wrap_Struct(g_cRenderWindow, 0, 0, (void*)&Window); - VALUE vRet = rb_funcall(m_vSelf, m_idRender, 1, vWindow); - } else // else raise error (pure virtual method) - rb_raise(rb_eRuntimeError, "Pure virtual method Drawable::Render() called, but not defined."); - } - -public: - // Call as soon as you get a Ruby VALUE pointing to this object - void rInit(VALUE vSelf) { - // Need these for rb_funcall - m_vSelf = vSelf; - m_vClass = CLASS_OF(m_vSelf); - - // Initialize members for Render() virtual method - m_idRender = rb_intern("render"); - m_bRender = rb_method_boundp(m_vClass, m_idRender, 0) == Qtrue; - } -}; - - -VALUE g_cDrawable; - -void Drawable_free(void *p) { delete (Drawable *)p; } -VALUE Drawable_new(int argc, VALUE *argv, VALUE vClass) { - rDrawable *ptr = new rDrawable(); - VALUE tData = Data_Wrap_Struct(vClass, 0, Drawable_free, ptr); - ptr->rInit(tData); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE Drawable_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - if(argc == 0) { - // Nothing to initialize - } else if(argc >= 1 && argc <= 5 && (argc < 5 || IS(argv[4], g_cColor))) { - if(argc >= 1) - pSelf->SetLeft((float)NUM2DBL(argv[0])); - if(argc >= 2) - pSelf->SetTop((float)NUM2DBL(argv[1])); - if(argc >= 3) { - if(ISNUM(argv[2])) { - float f = (float)NUM2DBL(argv[2]); - pSelf->SetScale(f, f); - } else if(IS(argv[2], rb_cArray)) { - float x = (float)NUM2DBL(rb_ary_entry(argv[2], 0)); - float y = (float)NUM2DBL(rb_ary_entry(argv[2], 1)); - pSelf->SetScale(x, y); - } - } - if(argc >= 4) - pSelf->SetRotation((float)NUM2DBL(argv[3])); - if(argc >= 5) - pSelf->SetColor(*(Color *)DATA_PTR(argv[4])); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -static VALUE Drawable_to_s(VALUE vSelf) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - char szBuffer[256]; - sprintf(szBuffer, "Left=%f, Top=%f, Scale=[%f,%f], Rotation=%f", pSelf->GetLeft(), pSelf->GetTop(), pSelf->GetScaleX(), pSelf->GetScaleX(), pSelf->GetRotation()); - return rb_str_new2(szBuffer); -} - -static VALUE Drawable_set_left(VALUE vSelf, VALUE vLeft) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - pSelf->SetLeft((float)NUM2DBL(vLeft)); - return Qnil; -} - -static VALUE Drawable_set_top(VALUE vSelf, VALUE vTop) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - pSelf->SetTop((float)NUM2DBL(vTop)); - return Qnil; -} - -static VALUE Drawable_set_scale(VALUE vSelf, VALUE vScale) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - if(ISNUM(vScale)) { - float f = (float)NUM2DBL(vScale); - pSelf->SetScale(f, f); - } else if(IS(vScale, rb_cArray)) { - float x = (float)NUM2DBL(rb_ary_entry(vScale, 0)); - float y = (float)NUM2DBL(rb_ary_entry(vScale, 1)); - pSelf->SetScale(x, y); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return Qnil; -} - -static VALUE Drawable_set_rotation(VALUE vSelf, VALUE vRotation) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - pSelf->SetRotation((float)NUM2DBL(vRotation)); - return Qnil; -} - -static VALUE Drawable_setRotationCenter(VALUE vSelf, VALUE vX, VALUE vY) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - pSelf->SetRotationCenter((float)NUM2DBL(vX), (float)NUM2DBL(vY)); - return Qnil; -} - -static VALUE Drawable_set_color(VALUE vSelf, VALUE vColor) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - if(!IS(vColor, g_cColor)) - rb_raise(rb_eTypeError, "wrong argument type(s)"); - pSelf->SetColor(*(Color *)DATA_PTR(vColor)); - return Qnil; -} - -static VALUE Drawable_get_left(VALUE vSelf) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - return rb_float_new(pSelf->GetLeft()); -} - -static VALUE Drawable_get_top(VALUE vSelf) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - return rb_float_new(pSelf->GetTop()); -} - -static VALUE Drawable_get_scale(VALUE vSelf) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - float x = pSelf->GetScaleX(); - float y = pSelf->GetScaleY(); - VALUE vArr = rb_ary_new(); - rb_ary_push(vArr, rb_float_new(x)); - rb_ary_push(vArr, rb_float_new(y)); - return vArr; -} - -static VALUE Drawable_get_rotation(VALUE vSelf) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - return rb_float_new(pSelf->GetRotation()); -} - -static VALUE Drawable_get_upVector(VALUE vSelf) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - float f = (pSelf->GetRotation() + 90) * (PI/180.0f); - VALUE v = rb_ary_new(); - rb_ary_push(v, rb_float_new(COSF(f))); - rb_ary_push(v, rb_float_new(-SINF(f))); - return v; -} - -static VALUE Drawable_get_rightVector(VALUE vSelf) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - float f = pSelf->GetRotation() * (PI/180.0f); - VALUE v = rb_ary_new(); - rb_ary_push(v, rb_float_new(COSF(f))); - rb_ary_push(v, rb_float_new(-SINF(f))); - return v; -} - -static VALUE Drawable_get_color(VALUE vSelf) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - DECLARE_OBJ_VAR(Color, Color, pSelf->GetColor()); - return vColor; -} - -static VALUE Drawable_setPosition(VALUE vSelf, float vX, float vY) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - pSelf->SetPosition((float)NUM2DBL(vX), (float)NUM2DBL(vY)); - return Qnil; -} - -static VALUE Drawable_move(VALUE vSelf, float vX, float vY) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - pSelf->Move((float)NUM2DBL(vX), (float)NUM2DBL(vY)); - return Qnil; -} - -static VALUE Drawable_rotate(VALUE vSelf, VALUE vRotate) { - // Get C++ object pointer from vSelf - Drawable *pSelf; - Data_Get_Struct(vSelf, Drawable, pSelf); - pSelf->Rotate((float)NUM2DBL(vRotate)); - return Qnil; -} - -void Init_Drawable() -{ - g_cDrawable = rb_define_class_under(g_vModule, "Drawable", rb_cObject); - DEFINE_CLASS_METHOD(Drawable, new, -1); - DEFINE_INSTANCE_METHOD(Drawable, initialize, -1); - - DEFINE_RW(Drawable, left); - DEFINE_RW(Drawable, top); - DEFINE_RW(Drawable, scale); - DEFINE_RW(Drawable, color); - DEFINE_RW(Drawable, rotation); - DEFINE_GETTER(Drawable, upVector); - DEFINE_GETTER(Drawable, rightVector); - - DEFINE_INSTANCE_METHOD(Drawable, to_s, 0); - DEFINE_INSTANCE_METHOD(Drawable, setRotationCenter, 2); - DEFINE_INSTANCE_METHOD(Drawable, setPosition, 2); - DEFINE_INSTANCE_METHOD(Drawable, move, 2); - DEFINE_INSTANCE_METHOD(Drawable, rotate, 1); -} - diff --git a/ruby/RubySFML/sfEvent.cpp b/ruby/RubySFML/sfEvent.cpp deleted file mode 100644 index 6bc2c055..00000000 --- a/ruby/RubySFML/sfEvent.cpp +++ /dev/null @@ -1,270 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cEvent; - -void Event_free(void *p) { delete (Event *)p; } -VALUE Event_new(int argc, VALUE *argv, VALUE vClass) { - Event *ptr = new Event(); - VALUE tData = Data_Wrap_Struct(vClass, 0, Event_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE Event_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - if(argc == 0) { - // Nothing to initialize - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -static VALUE Event_to_s(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - char szBuffer[1024]; - szBuffer[0] = 0; - switch(pSelf->Type) { - case Event::Closed: - strcpy(szBuffer, "Closed"); - break; - case Event::Resized: - sprintf(szBuffer, "Resized: Width=%d, Height=%d", pSelf->Size.Width, pSelf->Size.Height); - break; - case Event::LostFocus: - strcpy(szBuffer, "LostFocus"); - break; - case Event::GainedFocus: - strcpy(szBuffer, "GainedFocus"); - break; - case Event::TextEntered: - sprintf(szBuffer, "TextEntered: %C", pSelf->Text.Unicode); - break; - case Event::KeyPressed: - sprintf(szBuffer, "KeyPressed: Code=%d, Alt=%s, Ctrl=%s, Shift=%s", pSelf->Key.Code, pSelf->Key.Alt ? "true" : "false", pSelf->Key.Control ? "true" : "false", pSelf->Key.Shift ? "true" : "false"); - break; - case Event::KeyReleased: - sprintf(szBuffer, "KeyReleased: Code=%d, Alt=%s, Ctrl=%s, Shift=%s", pSelf->Key.Code, pSelf->Key.Alt ? "true" : "false", pSelf->Key.Control ? "true" : "false", pSelf->Key.Shift ? "true" : "false"); - break; - case Event::MouseWheelMoved: - sprintf(szBuffer, "MouseWheelMoved: Delta=%d", pSelf->MouseWheel.Delta); - case Event::MouseButtonPressed: - sprintf(szBuffer, "MouseButtonPressed: Button=%d", pSelf->MouseButton.Button); - break; - case Event::MouseButtonReleased: - sprintf(szBuffer, "MouseButtonReleased: Button=%d", pSelf->MouseButton.Button); - break; - case Event::MouseMoved: - sprintf(szBuffer, "MouseMoved: X=%d, Y=%d", pSelf->MouseMove.X, pSelf->MouseMove.Y); - break; - case Event::JoyButtonPressed: - sprintf(szBuffer, "JoyButtonPressed: Button=%d", pSelf->JoyButton.Button); - break; - case Event::JoyButtonReleased: - sprintf(szBuffer, "JoyButtonReleased: Button=%d", pSelf->JoyButton.Button); - break; - case Event::JoyMoved: - sprintf(szBuffer, "JoyMoved: Axis=%d, Pos=%f", pSelf->JoyMove.Axis, pSelf->JoyMove.Position); - break; - default: - sprintf(szBuffer, "Unsupported event type: %d", pSelf->Type); - break; - } - return rb_str_new2(szBuffer); -} - -static VALUE Event_type(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - return INT2FIX(pSelf->Type); -} - -static VALUE Event_char(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - char szBuffer[4]; - sprintf(szBuffer, "%C", pSelf->Text.Unicode); - return rb_str_new2(szBuffer); -} - -static VALUE Event_code(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - if(pSelf->Type == Event::KeyPressed || pSelf->Type == Event::KeyReleased) - return INT2FIX(pSelf->Key.Code); - rb_raise(rb_eTypeError, "wrong event type"); -} - -static VALUE Event_alt(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - if(pSelf->Type == Event::KeyPressed || pSelf->Type == Event::KeyReleased) - return pSelf->Key.Alt ? Qtrue : Qfalse; - rb_raise(rb_eTypeError, "wrong event type"); -} - -static VALUE Event_control(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - if(pSelf->Type == Event::KeyPressed || pSelf->Type == Event::KeyReleased) - return pSelf->Key.Control ? Qtrue : Qfalse; - rb_raise(rb_eTypeError, "wrong event type"); -} - -static VALUE Event_shift(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - if(pSelf->Type == Event::KeyPressed || pSelf->Type == Event::KeyReleased) - return pSelf->Key.Shift ? Qtrue : Qfalse; - rb_raise(rb_eTypeError, "wrong event type"); -} - -static VALUE Event_delta(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - if(pSelf->Type == Event::MouseWheelMoved) - return INT2FIX(pSelf->MouseWheel.Delta); - rb_raise(rb_eTypeError, "wrong event type"); -} - -static VALUE Event_buttons(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - if(pSelf->Type == Event::MouseButtonPressed || pSelf->Type == Event::MouseButtonReleased) - return INT2FIX(pSelf->MouseButton.Button); - rb_raise(rb_eTypeError, "wrong event type"); -} - -static VALUE Event_button(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - if(pSelf->Type == Event::JoyButtonPressed || pSelf->Type == Event::JoyButtonReleased) - return INT2FIX(pSelf->JoyButton.Button); - rb_raise(rb_eTypeError, "wrong event type"); -} - -static VALUE Event_x(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - if(pSelf->Type == Event::MouseMoved) - return INT2FIX(pSelf->MouseMove.X); - rb_raise(rb_eTypeError, "wrong event type"); -} - -static VALUE Event_y(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - if(pSelf->Type == Event::MouseMoved) - return INT2FIX(pSelf->MouseMove.Y); - rb_raise(rb_eTypeError, "wrong event type"); -} - -static VALUE Event_axis(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - if(pSelf->Type == Event::JoyMoved) - return INT2FIX(pSelf->JoyMove.Axis); - rb_raise(rb_eTypeError, "wrong event type"); -} - -static VALUE Event_pos(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - if(pSelf->Type == Event::JoyMoved) - return rb_float_new(pSelf->JoyMove.Position); - rb_raise(rb_eTypeError, "wrong event type"); -} - -static VALUE Event_width(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - if(pSelf->Type == Event::Resized) - return INT2FIX(pSelf->Size.Width); - rb_raise(rb_eTypeError, "wrong event type"); -} - -static VALUE Event_height(VALUE vSelf) { - // Get C++ object pointer from vSelf - Event *pSelf; - Data_Get_Struct(vSelf, Event, pSelf); - if(pSelf->Type == Event::Resized) - return INT2FIX(pSelf->Size.Height); - rb_raise(rb_eTypeError, "wrong event type"); -} - -void Init_Event() -{ - g_cEvent = rb_define_class_under(g_vModule, "Event", rb_cObject); - DEFINE_CLASS_METHOD(Event, new, -1); - DEFINE_INSTANCE_METHOD(Event, initialize, -1); - - // For any event type - DEFINE_INSTANCE_METHOD(Event, to_s, 0); - DEFINE_INSTANCE_METHOD(Event, type, 0); - - // For text events - DEFINE_INSTANCE_METHOD(Event, char, 0); - - // For keyboard event types - DEFINE_INSTANCE_METHOD(Event, code, 0); - DEFINE_INSTANCE_METHOD(Event, alt, 0); - DEFINE_INSTANCE_METHOD(Event, control, 0); - DEFINE_INSTANCE_METHOD(Event, shift, 0); - - // For mouse/joystick event types - DEFINE_INSTANCE_METHOD(Event, delta, 0); - DEFINE_INSTANCE_METHOD(Event, buttons, 0); - DEFINE_INSTANCE_METHOD(Event, button, 0); - DEFINE_INSTANCE_METHOD(Event, x, 0); - DEFINE_INSTANCE_METHOD(Event, y, 0); - DEFINE_INSTANCE_METHOD(Event, axis, 0); - DEFINE_INSTANCE_METHOD(Event, pos, 0); - - // For size event types - DEFINE_INSTANCE_METHOD(Event, width, 0); - DEFINE_INSTANCE_METHOD(Event, height, 0); -} - diff --git a/ruby/RubySFML/sfFloatRect.cpp b/ruby/RubySFML/sfFloatRect.cpp deleted file mode 100644 index d09bcae1..00000000 --- a/ruby/RubySFML/sfFloatRect.cpp +++ /dev/null @@ -1,155 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cFloatRect; - -DECLARE_DOUBLE_RW(FloatRect, Left); -DECLARE_DOUBLE_RW(FloatRect, Top); -DECLARE_DOUBLE_RW(FloatRect, Right); -DECLARE_DOUBLE_RW(FloatRect, Bottom); - - -void FloatRect_free(void *p) { delete (FloatRect *)p; } -VALUE FloatRect_new(int argc, VALUE *argv, VALUE vClass) { - FloatRect *ptr = new FloatRect(); - VALUE tData = Data_Wrap_Struct(vClass, 0, FloatRect_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE FloatRect_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - FloatRect *pSelf; - Data_Get_Struct(vSelf, FloatRect, pSelf); - if(argc == 0) { - // Nothing to initialize - } else if(argc == 4 && - ISNUM(argv[0]) && - ISNUM(argv[1]) && - ISNUM(argv[2]) && - ISNUM(argv[3])) { - pSelf->Left = (float)NUM2DBL(argv[0]); - pSelf->Top = (float)NUM2DBL(argv[1]); - pSelf->Right = (float)NUM2DBL(argv[2]); - pSelf->Bottom = (float)NUM2DBL(argv[3]); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -static VALUE FloatRect_to_s(VALUE vSelf) -{ - // Get C++ object pointer from vSelf - FloatRect *pSelf; - Data_Get_Struct(vSelf, FloatRect, pSelf); - char szBuffer[256]; - sprintf(szBuffer, "Left=%f, Top=%f, Right=%f, Bottom=%f", pSelf->Left, pSelf->Top, pSelf->Right, pSelf->Bottom); - return rb_str_new2(szBuffer); -} - -static VALUE FloatRect_get_Width(VALUE vSelf) -{ - // Get C++ object pointer from vSelf - FloatRect *pSelf; - Data_Get_Struct(vSelf, FloatRect, pSelf); - return rb_float_new(pSelf->GetWidth()); -} - -static VALUE FloatRect_set_Width(VALUE vSelf, VALUE vWidth) -{ - // Get C++ object pointer from vSelf - FloatRect *pSelf; - Data_Get_Struct(vSelf, FloatRect, pSelf); - float nWidth = (float)NUM2DBL(vWidth); - pSelf->Right = pSelf->Left + nWidth; - return vWidth; -} - -static VALUE FloatRect_get_Height(VALUE vSelf) -{ - // Get C++ object pointer from vSelf - FloatRect *pSelf; - Data_Get_Struct(vSelf, FloatRect, pSelf); - return rb_float_new(pSelf->GetHeight()); -} - -static VALUE FloatRect_set_Height(VALUE vSelf, VALUE vHeight) -{ - // Get C++ object pointer from vSelf - FloatRect *pSelf; - Data_Get_Struct(vSelf, FloatRect, pSelf); - float nHeight = (float)NUM2DBL(vHeight); - pSelf->Bottom = pSelf->Top + nHeight; - return vHeight; -} - -static VALUE FloatRect_contains(VALUE vSelf, VALUE x, VALUE y) -{ - // Get C++ object pointer from vSelf - FloatRect *pSelf; - Data_Get_Struct(vSelf, FloatRect, pSelf); - return pSelf->Contains((float)NUM2DBL(x), (float)NUM2DBL(y)) ? Qtrue : Qfalse; -} - -static VALUE FloatRect_intersects(VALUE vSelf, VALUE vRect) -{ - // Get C++ object pointer from vSelf - FloatRect *pSelf = NULL, *pRect = NULL; - FloatRect r; - Data_Get_Struct(vSelf, FloatRect, pSelf); - Data_Get_Struct(vRect, FloatRect, pRect); - if(!pSelf->Intersects(*pRect, &r)) - return Qnil; - DECLARE_OBJ_VAR(FloatRect, Result, r); - return vResult; -} - -void Init_FloatRect() -{ - g_cFloatRect = rb_define_class_under(g_vModule, "FloatRect", rb_cObject); - DEFINE_CLASS_METHOD(FloatRect, new, -1); - DEFINE_INSTANCE_METHOD(FloatRect, initialize, -1); - - DEFINE_RW2(FloatRect, Left, left); - DEFINE_RW2(FloatRect, Left, l); - DEFINE_RW2(FloatRect, Top, top); - DEFINE_RW2(FloatRect, Top, t); - DEFINE_RW2(FloatRect, Right, right); - DEFINE_RW2(FloatRect, Right, r); - DEFINE_RW2(FloatRect, Bottom, bottom); - DEFINE_RW2(FloatRect, Bottom, b); - DEFINE_RW2(FloatRect, Width, width); - DEFINE_RW2(FloatRect, Width, w); - DEFINE_RW2(FloatRect, Height, height); - DEFINE_RW2(FloatRect, Height, h); - - DEFINE_INSTANCE_METHOD(FloatRect, to_s, 0); - DEFINE_INSTANCE_METHOD(FloatRect, contains, 2); - DEFINE_INSTANCE_METHOD(FloatRect, intersects, 1); -} - diff --git a/ruby/RubySFML/sfImage.cpp b/ruby/RubySFML/sfImage.cpp deleted file mode 100644 index 7f861100..00000000 --- a/ruby/RubySFML/sfImage.cpp +++ /dev/null @@ -1,238 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cImage; - -void Image_free(void *p) { delete (Image *)p; } -VALUE Image_new(int argc, VALUE *argv, VALUE vClass) { - Image *ptr = new Image(); - VALUE tData = Data_Wrap_Struct(vClass, 0, Image_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE Image_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - if(argc == 0) { - // Nothing to initialize - } else if(argc == 1 && IS(argv[0], g_cImage)) { - *pSelf = *(Image *)DATA_PTR(argv[0]); - } else if(argc == 1 && ISSTR(argv[0])) { - if(!pSelf->LoadFromFile(STR2CSTR(argv[0]))) - rb_raise(rb_eRuntimeError, "Failed to load specified image file"); - } else if(argc >= 2 && argc <= 3 && - ISNUM(argv[0]) && - ISNUM(argv[1]) && - (argc < 3 || IS(argv[2], g_cColor))) { - pSelf->Create(NUM2INT(argv[0]), NUM2INT(argv[1]), - argc < 3 ? Color::Black : *(Color *)DATA_PTR(argv[2])); - } else if(argc == 2 && - ISSTR(argv[0]) && - ISNUM(argv[1])) { - pSelf->LoadFromMemory(STR2CSTR(argv[2]), NUM2INT(argv[0])); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -static VALUE Image_to_s(VALUE vSelf) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - char szBuffer[256]; - sprintf(szBuffer, "Width=%d, Height=%d", pSelf->GetWidth(), pSelf->GetHeight()); - return rb_str_new2(szBuffer); -} - -static VALUE Image_loadFromFile(VALUE vSelf, VALUE vPath) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - return pSelf->LoadFromFile(STR2CSTR(vPath)) ? Qtrue : Qfalse; -} - -static VALUE Image_saveToFile(VALUE vSelf, VALUE vPath) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - return pSelf->SaveToFile(STR2CSTR(vPath)) ? Qtrue : Qfalse; -} - -static VALUE Image_create(VALUE vSelf, VALUE vWidth, VALUE vHeight, VALUE vColor) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - if(!IS(vColor, g_cColor)) - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return pSelf->Create(NUM2INT(vWidth), NUM2INT(vHeight), *(Color *)DATA_PTR(vColor)); -} - -static VALUE Image_loadFromMemory(VALUE vSelf, VALUE vData, VALUE vSize) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - return pSelf->LoadFromMemory(STR2CSTR(vData), NUM2INT(vSize)); -} - -static VALUE Image_createMaskFromColor(VALUE vSelf, VALUE vColor) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - if(IS(vColor, g_cColor)) - pSelf->CreateMaskFromColor(*(Color *)DATA_PTR(vColor)); - else if(ISNUM(vColor)) { - DWORD dw = NUM2UINT(vColor); - Color c((dw >> 24) & 0xFF, (dw >> 16) & 0xFF, (dw >> 8) & 0xFF, (dw >> 0) & 0xFF); - pSelf->CreateMaskFromColor(c); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return Qnil; -} - -static VALUE Image_resize(VALUE vSelf, VALUE vWidth, VALUE vHeight, VALUE vColor) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - if(IS(vColor, g_cColor)) - return pSelf->Resize(NUM2INT(vWidth), NUM2INT(vHeight), *(Color *)DATA_PTR(vColor)); - else if(ISNUM(vColor)) { - DWORD dw = NUM2UINT(vColor); - Color c((dw >> 24) & 0xFF, (dw >> 16) & 0xFF, (dw >> 8) & 0xFF, (dw >> 0) & 0xFF); - return pSelf->Resize(NUM2INT(vWidth), NUM2INT(vHeight), c); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return Qnil; -} - -static VALUE Image_setPixel(VALUE vSelf, VALUE vX, VALUE vY, VALUE vColor) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - if(IS(vColor, g_cColor)) - pSelf->SetPixel(NUM2INT(vX), NUM2INT(vY), *(Color *)DATA_PTR(vColor)); - else if(ISNUM(vColor)) { - DWORD dw = NUM2UINT(vColor); - Color c((dw >> 24) & 0xFF, (dw >> 16) & 0xFF, (dw >> 8) & 0xFF, (dw >> 0) & 0xFF); - pSelf->SetPixel(NUM2INT(vX), NUM2INT(vY), c); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return Qnil; -} - -static VALUE Image_getPixel(VALUE vSelf, VALUE vX, VALUE vY) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - DECLARE_OBJ_VAR(Color, Color, pSelf->GetPixel(NUM2INT(vX), NUM2INT(vY))); - return vColor; -} - -static VALUE Image_bind(VALUE vSelf) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - pSelf->Bind(); - return Qnil; -} - -static VALUE Image_set_smooth(VALUE vSelf, VALUE vSmooth) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - pSelf->SetSmooth(RTEST(vSmooth)); - return Qnil; -} - -static VALUE Image_set_repeat(VALUE vSelf, VALUE vRepeat) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - pSelf->SetRepeat(RTEST(vRepeat)); - return Qnil; -} - -static VALUE Image_get_width(VALUE vSelf) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - return INT2FIX(pSelf->GetWidth()); -} - -static VALUE Image_get_height(VALUE vSelf) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - return INT2FIX(pSelf->GetHeight()); -} - -static VALUE Image_getTexCoords(VALUE vSelf, VALUE vRect) { - // Get C++ object pointer from vSelf - Image *pSelf; - Data_Get_Struct(vSelf, Image, pSelf); - if(!IS(vRect, g_cIntRect)) - rb_raise(rb_eTypeError, "wrong argument type(s)"); - DECLARE_OBJ_VAR(FloatRect, Coord, pSelf->GetTexCoords(*(IntRect *)DATA_PTR(vRect))); - return vCoord; -} - -static VALUE Image_getValidTextureSize(VALUE vClass, VALUE vSize) { - // Get C++ object pointer from vSelf - return INT2FIX(Image::GetValidTextureSize(NUM2INT(vSize))); -} - -void Init_Image() -{ - g_cImage = rb_define_class_under(g_vModule, "Image", rb_cObject); - DEFINE_CLASS_METHOD(Image, new, -1); - DEFINE_CLASS_METHOD(Image, getValidTextureSize, 1); - DEFINE_INSTANCE_METHOD(Image, initialize, -1); - - DEFINE_SETTER(Image, smooth); - DEFINE_SETTER(Image, repeat); - DEFINE_GETTER(Image, width); - DEFINE_GETTER2(Image, width, w); - DEFINE_GETTER(Image, height); - DEFINE_GETTER2(Image, height, h); - - DEFINE_INSTANCE_METHOD(Image, to_s, 0); - DEFINE_INSTANCE_METHOD(Image, loadFromFile, 1); - DEFINE_INSTANCE_METHOD(Image, saveToFile, 1); - DEFINE_INSTANCE_METHOD(Image, create, 3); - DEFINE_INSTANCE_METHOD(Image, loadFromMemory, 2); - DEFINE_INSTANCE_METHOD(Image, createMaskFromColor, 1); - DEFINE_INSTANCE_METHOD(Image, resize, 3); - DEFINE_INSTANCE_METHOD(Image, setPixel, 3); - DEFINE_INSTANCE_METHOD(Image, getPixel, 2); - DEFINE_INSTANCE_METHOD(Image, bind, 0); - DEFINE_INSTANCE_METHOD(Image, getTexCoords, 1); - DEFINE_INSTANCE_METHOD2(Image, getPixel, [], 2); - DEFINE_INSTANCE_METHOD2(Image, setPixel, []=, 2); -} - diff --git a/ruby/RubySFML/sfInput.cpp b/ruby/RubySFML/sfInput.cpp deleted file mode 100644 index 7c759021..00000000 --- a/ruby/RubySFML/sfInput.cpp +++ /dev/null @@ -1,105 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cInput; - -void Input_free(void *p) { delete (Input *)p; } -VALUE Input_new(int argc, VALUE *argv, VALUE vClass) { - Input *ptr = new Input(); - VALUE tData = Data_Wrap_Struct(vClass, 0, Input_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE Input_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - Input *pSelf; - Data_Get_Struct(vSelf, Input, pSelf); - if(argc == 0) { - // Nothing to initialize - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -static VALUE Input_isKeyDown(VALUE vSelf, VALUE vKey) { - // Get C++ object pointer from vSelf - Input *pSelf; - Data_Get_Struct(vSelf, Input, pSelf); - return pSelf->IsKeyDown((Key::Code)NUM2INT(vKey)) ? Qtrue : Qfalse; -} - -static VALUE Input_isMouseButtonDown(VALUE vSelf, VALUE vButton) { - // Get C++ object pointer from vSelf - Input *pSelf; - Data_Get_Struct(vSelf, Input, pSelf); - return pSelf->IsMouseButtonDown((Mouse::Button)NUM2INT(vButton)) ? Qtrue : Qfalse; -} - -static VALUE Input_isJoystickButtonDown(VALUE vSelf, VALUE vJoy, VALUE vButton) { - // Get C++ object pointer from vSelf - Input *pSelf; - Data_Get_Struct(vSelf, Input, pSelf); - return pSelf->IsJoystickButtonDown(NUM2INT(vJoy), NUM2INT(vButton)) ? Qtrue : Qfalse; -} - -static VALUE Input_getMouseX(VALUE vSelf) { - // Get C++ object pointer from vSelf - Input *pSelf; - Data_Get_Struct(vSelf, Input, pSelf); - return INT2FIX(pSelf->GetMouseX()); -} - -static VALUE Input_getMouseY(VALUE vSelf) { - // Get C++ object pointer from vSelf - Input *pSelf; - Data_Get_Struct(vSelf, Input, pSelf); - return INT2FIX(pSelf->GetMouseY()); -} - -static VALUE Input_getJoystickAxis(VALUE vSelf, VALUE vJoy, VALUE vAxis) { - // Get C++ object pointer from vSelf - Input *pSelf; - Data_Get_Struct(vSelf, Input, pSelf); - return INT2FIX(pSelf->GetJoystickAxis(NUM2INT(vJoy), (Joy::Axis)NUM2INT(vAxis))); -} - -void Init_Input() -{ - g_cInput = rb_define_class_under(g_vModule, "Input", rb_cObject); - DEFINE_CLASS_METHOD(Input, new, -1); - DEFINE_INSTANCE_METHOD(Input, initialize, -1); - - DEFINE_INSTANCE_METHOD(Input, isKeyDown, 1); - DEFINE_INSTANCE_METHOD(Input, isMouseButtonDown, 1); - DEFINE_INSTANCE_METHOD(Input, isJoystickButtonDown, 2); - DEFINE_INSTANCE_METHOD(Input, getMouseX, 0); - DEFINE_INSTANCE_METHOD(Input, getMouseY, 0); - DEFINE_INSTANCE_METHOD(Input, getJoystickAxis, 2); -} - diff --git a/ruby/RubySFML/sfIntRect.cpp b/ruby/RubySFML/sfIntRect.cpp deleted file mode 100644 index 44bee564..00000000 --- a/ruby/RubySFML/sfIntRect.cpp +++ /dev/null @@ -1,157 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cIntRect; - -DECLARE_INT_RW(IntRect, Left); -DECLARE_INT_RW(IntRect, Top); -DECLARE_INT_RW(IntRect, Right); -DECLARE_INT_RW(IntRect, Bottom); - - -void IntRect_free(void *p) { delete (IntRect *)p; } -VALUE IntRect_new(int argc, VALUE *argv, VALUE vClass) { - // For each version of this method, convert Ruby args to C++ types (applying default values) - IntRect *ptr = new IntRect(); - VALUE tData = Data_Wrap_Struct(vClass, 0, IntRect_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE IntRect_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - IntRect *pSelf; - Data_Get_Struct(vSelf, IntRect, pSelf); - if(argc == 0) { - // Nothing to initialize - } else if(argc == 4 && - ISNUM(argv[0]) && - ISNUM(argv[1]) && - ISNUM(argv[2]) && - ISNUM(argv[3])) { - pSelf->Left = NUM2INT(argv[0]); - pSelf->Top = NUM2INT(argv[1]); - pSelf->Right = NUM2INT(argv[2]); - pSelf->Bottom = NUM2INT(argv[3]); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - - return vSelf; -} - -static VALUE IntRect_to_s(VALUE vSelf) -{ - // Get C++ object pointer from vSelf - IntRect *pSelf; - Data_Get_Struct(vSelf, IntRect, pSelf); - char szBuffer[256]; - sprintf(szBuffer, "Left=%d, Top=%d, Right=%d, Bottom=%d", pSelf->Left, pSelf->Top, pSelf->Right, pSelf->Bottom); - return rb_str_new2(szBuffer); -} - -static VALUE IntRect_get_Width(VALUE vSelf) -{ - // Get C++ object pointer from vSelf - IntRect *pSelf; - Data_Get_Struct(vSelf, IntRect, pSelf); - return INT2NUM(pSelf->GetWidth()); -} - -static VALUE IntRect_set_Width(VALUE vSelf, VALUE vWidth) -{ - // Get C++ object pointer from vSelf - IntRect *pSelf; - Data_Get_Struct(vSelf, IntRect, pSelf); - int nWidth = NUM2INT(vWidth); - pSelf->Right = pSelf->Left + nWidth; - return vWidth; -} - -static VALUE IntRect_get_Height(VALUE vSelf) -{ - // Get C++ object pointer from vSelf - IntRect *pSelf; - Data_Get_Struct(vSelf, IntRect, pSelf); - return INT2NUM(pSelf->GetHeight()); -} - -static VALUE IntRect_set_Height(VALUE vSelf, VALUE vHeight) -{ - // Get C++ object pointer from vSelf - IntRect *pSelf; - Data_Get_Struct(vSelf, IntRect, pSelf); - int nHeight = NUM2INT(vHeight); - pSelf->Bottom = pSelf->Top + nHeight; - return vHeight; -} - -static VALUE IntRect_contains(VALUE vSelf, VALUE x, VALUE y) -{ - // Get C++ object pointer from vSelf - IntRect *pSelf; - Data_Get_Struct(vSelf, IntRect, pSelf); - return pSelf->Contains(NUM2INT(x), NUM2INT(y)) ? Qtrue : Qfalse; -} - -static VALUE IntRect_intersects(VALUE vSelf, VALUE vRect) -{ - // Get C++ object pointer from vSelf - IntRect *pSelf = NULL, *pRect = NULL; - IntRect r; - Data_Get_Struct(vSelf, IntRect, pSelf); - Data_Get_Struct(vRect, IntRect, pRect); - if(!pSelf->Intersects(*pRect, &r)) - return Qnil; - DECLARE_OBJ_VAR(IntRect, Result, r); - return vResult; -} - -void Init_IntRect() -{ - g_cIntRect = rb_define_class_under(g_vModule, "IntRect", rb_cObject); - DEFINE_CLASS_METHOD(IntRect, new, -1); - DEFINE_INSTANCE_METHOD(IntRect, initialize, -1); - - DEFINE_RW2(IntRect, Left, left); - DEFINE_RW2(IntRect, Left, l); - DEFINE_RW2(IntRect, Top, top); - DEFINE_RW2(IntRect, Top, t); - DEFINE_RW2(IntRect, Right, right); - DEFINE_RW2(IntRect, Right, r); - DEFINE_RW2(IntRect, Bottom, bottom); - DEFINE_RW2(IntRect, Bottom, b); - DEFINE_RW2(IntRect, Width, width); - DEFINE_RW2(IntRect, Width, w); - DEFINE_RW2(IntRect, Height, height); - DEFINE_RW2(IntRect, Height, h); - - DEFINE_INSTANCE_METHOD(IntRect, to_s, 0); - DEFINE_INSTANCE_METHOD(IntRect, contains, 2); - DEFINE_INSTANCE_METHOD(IntRect, intersects, 1); -} - diff --git a/ruby/RubySFML/sfMusic.cpp b/ruby/RubySFML/sfMusic.cpp deleted file mode 100644 index d0a73ac0..00000000 --- a/ruby/RubySFML/sfMusic.cpp +++ /dev/null @@ -1,153 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cMusic; - -void Music_free(void *p) { delete (Music *)p; } - -VALUE Music_new(int argc, VALUE *argv, VALUE vClass) { - Music *ptr = NULL; - if(argc == 1 && ISNUM(argv[0])) - ptr = new Music(NUM2INT(argv[0])); - else - ptr = new Music(); - VALUE tData = Data_Wrap_Struct(vClass, 0, Music_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE Music_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - Music *pSelf; - Data_Get_Struct(vSelf, Music, pSelf); - if(argc == 0) { - // Nothing to initialize - } else if(argc == 1 && ISNUM(argv[0])) { - // Was forced to set this above in Music_new() - } else if(argc == 1 && ISSTR(argv[0])) { - if(!pSelf->Open(STR2CSTR(argv[0]))) - rb_raise(rb_eRuntimeError, "Failed to load specified music file"); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - - return vSelf; -} - -static VALUE Music_to_s(VALUE vSelf) { - // Get C++ object pointer from vSelf - Music *pSelf; - Data_Get_Struct(vSelf, Music, pSelf); - char szBuffer[256]; - sprintf(szBuffer, "Channels=%d, SampleRate=%d, Duration=%f, Status=%s", pSelf->GetChannelsCount(), pSelf->GetSampleRate(), pSelf->GetDuration(), pSelf->GetStatus() == Sound::Playing ? "playing" : pSelf->GetStatus() == Sound::Paused ? "paused" : "stopped"); - return rb_str_new2(szBuffer); -} - -static VALUE Music_open(VALUE vSelf, VALUE vFile) { - // Get C++ object pointer from vSelf - Music *pSelf; - Data_Get_Struct(vSelf, Music, pSelf); - return pSelf->Open(STR2CSTR(vFile)) ? Qtrue : Qfalse; -} - -static VALUE Music_play(VALUE vSelf) { - // Get C++ object pointer from vSelf - Music *pSelf; - Data_Get_Struct(vSelf, Music, pSelf); - pSelf->Play(); - return Qnil; -} - -static VALUE Music_stop(VALUE vSelf) { - // Get C++ object pointer from vSelf - Music *pSelf; - Data_Get_Struct(vSelf, Music, pSelf); - pSelf->Stop(); - return Qnil; -} - -static VALUE Music_set_loop(VALUE vSelf, VALUE vLoop) { - // Get C++ object pointer from vSelf - Music *pSelf; - Data_Get_Struct(vSelf, Music, pSelf); - pSelf->SetLoop(RTEST(vLoop)); - return Qnil; -} - -static VALUE Music_get_loop(VALUE vSelf) { - // Get C++ object pointer from vSelf - Music *pSelf; - Data_Get_Struct(vSelf, Music, pSelf); - return pSelf->GetLoop() ? Qtrue : Qfalse; -} - -static VALUE Music_get_duration(VALUE vSelf) { - // Get C++ object pointer from vSelf - Music *pSelf; - Data_Get_Struct(vSelf, Music, pSelf); - return rb_float_new(pSelf->GetDuration()); -} - -static VALUE Music_get_channels(VALUE vSelf) { - // Get C++ object pointer from vSelf - Music *pSelf; - Data_Get_Struct(vSelf, Music, pSelf); - return INT2FIX(pSelf->GetChannelsCount()); -} - -static VALUE Music_get_sampleRate(VALUE vSelf) { - // Get C++ object pointer from vSelf - Music *pSelf; - Data_Get_Struct(vSelf, Music, pSelf); - return INT2FIX(pSelf->GetSampleRate()); -} - -static VALUE Music_get_status(VALUE vSelf) { - // Get C++ object pointer from vSelf - Music *pSelf; - Data_Get_Struct(vSelf, Music, pSelf); - return INT2FIX(pSelf->GetStatus()); -} - -void Init_Music() -{ - g_cMusic = rb_define_class_under(g_vModule, "Music", rb_cObject); - DEFINE_CLASS_METHOD(Music, new, -1); - DEFINE_INSTANCE_METHOD(Music, initialize, -1); - - DEFINE_RW(Music, loop); - DEFINE_GETTER(Music, duration); - DEFINE_GETTER(Music, status); - DEFINE_GETTER(Music, channels); - DEFINE_GETTER(Music, sampleRate); - - DEFINE_INSTANCE_METHOD(Music, to_s, 0); - DEFINE_INSTANCE_METHOD(Music, open, 1); - DEFINE_INSTANCE_METHOD(Music, play, 0); - DEFINE_INSTANCE_METHOD(Music, stop, 0); -} - diff --git a/ruby/RubySFML/sfPostFX.cpp b/ruby/RubySFML/sfPostFX.cpp deleted file mode 100644 index 810987fa..00000000 --- a/ruby/RubySFML/sfPostFX.cpp +++ /dev/null @@ -1,147 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -// Wrapper for PostFX that calls the Ruby version of virtual methods in case a Ruby class derives from this one -class rPostFX : public PostFX { -protected: - VALUE m_vSelf, m_vClass; - ID m_idRender; - bool m_bRender, m_bInRender; - - virtual void Render(const RenderWindow &Window) const { - // If this method is overridden in Ruby, call it - if(m_bRender) { - VALUE vWindow = Data_Wrap_Struct(g_cRenderWindow, 0, 0, (void*)&Window); - VALUE vRet = rb_funcall(m_vSelf, m_idRender, 1, vWindow); - } else // else call parent - PostFX::Render(Window); - } - -public: - // Damn constructors should be inherited from base class - rPostFX() : PostFX() {} - rPostFX(const PostFX &Copy) : PostFX(Copy) {} - - // Call as soon as you get a Ruby VALUE pointing to this object - void rInit(VALUE vSelf) { - // Need these for rb_funcall - m_vSelf = vSelf; - m_vClass = CLASS_OF(m_vSelf); - - // Initialize members for Render() virtual method - m_idRender = rb_intern("render"); - m_bRender = rb_method_boundp(m_vClass, m_idRender, 0) == Qtrue; - } - - // When an overridden method in Ruby calls super(), it is called this way - VALUE Render(VALUE vWindow) { - PostFX::Render(*(RenderWindow *)DATA_PTR(vWindow)); - return Qnil; - } -}; - - -VALUE g_cPostFX; - -void PostFX_free(void *p) { delete (PostFX *)p; } -VALUE PostFX_new(int argc, VALUE *argv, VALUE vClass) { - // For each version of this method, convert Ruby args to C++ types (applying default values) - rPostFX *ptr = new rPostFX(); - VALUE tData = Data_Wrap_Struct(vClass, 0, PostFX_free, ptr); - ptr->rInit(tData); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE PostFX_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - PostFX *pSelf; - Data_Get_Struct(vSelf, PostFX, pSelf); - if(argc == 0) { - // Nothing to initialize - } else if(argc == 1 && ISSTR(argv[0])) { - pSelf->LoadFromFile(STR2CSTR(argv[0])); - } else if(argc == 1 && IS(argv[0], g_cPostFX)) { - *pSelf = *(PostFX *)DATA_PTR(argv[0]); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -static VALUE PostFX_loadFromFile(VALUE vSelf, VALUE vFile) { - // Get C++ object pointer from vSelf - PostFX *pSelf; - Data_Get_Struct(vSelf, PostFX, pSelf); - return pSelf->LoadFromFile(STR2CSTR(vFile)) ? Qtrue : Qfalse; -} - -static VALUE PostFX_setParameter(int argc, VALUE *argv, VALUE vSelf) { - PostFX *pSelf; - Data_Get_Struct(vSelf, PostFX, pSelf); - if(argc == 2 && ISSTR(argv[0]) && ISNUM(argv[1])) { - pSelf->SetParameter(STR2CSTR(argv[0]), (float)NUM2DBL(argv[1])); - } else if(argc == 3 && ISSTR(argv[0]) && ISNUM(argv[1]) && ISNUM(argv[2])) { - pSelf->SetParameter(STR2CSTR(argv[0]), (float)NUM2DBL(argv[1]), (float)NUM2DBL(argv[2])); - } else if(argc == 4 && ISSTR(argv[0]) && ISNUM(argv[1]) && ISNUM(argv[2]) && ISNUM(argv[3])) { - pSelf->SetParameter(STR2CSTR(argv[0]), (float)NUM2DBL(argv[1]), (float)NUM2DBL(argv[2]), (float)NUM2DBL(argv[3])); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return Qnil; -} - -static VALUE PostFX_setTexture(VALUE vSelf, VALUE vName, VALUE vImage) { - // Get C++ object pointer from vSelf - PostFX *pSelf; - Data_Get_Struct(vSelf, PostFX, pSelf); - if(!IS(vImage, g_cImage)) - rb_raise(rb_eTypeError, "wrong argument type(s)"); - pSelf->SetTexture(STR2CSTR(vName), (Image *)DATA_PTR(vImage)); - return Qnil; -} - -static VALUE PostFX_render(VALUE vSelf, VALUE vWindow) { - // Get C++ object pointer from vSelf - rPostFX *pSelf; - Data_Get_Struct(vSelf, rPostFX, pSelf); - return pSelf->Render(vWindow); -} - -void Init_PostFX() -{ - g_cPostFX = rb_define_class_under(g_vModule, "PostFX", g_cDrawable); - DEFINE_CLASS_METHOD(PostFX, new, -1); - DEFINE_INSTANCE_METHOD(PostFX, initialize, -1); - - DEFINE_INSTANCE_METHOD(PostFX, setParameter, -1); - DEFINE_INSTANCE_METHOD(PostFX, loadFromFile, 1); - DEFINE_INSTANCE_METHOD(PostFX, setTexture, 2); - - // Virtual method - DEFINE_INSTANCE_METHOD(PostFX, render, 1); -} - diff --git a/ruby/RubySFML/sfRenderWindow.cpp b/ruby/RubySFML/sfRenderWindow.cpp deleted file mode 100644 index 368b3632..00000000 --- a/ruby/RubySFML/sfRenderWindow.cpp +++ /dev/null @@ -1,237 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cRenderWindow; - -void RenderWindow_free(void *p) { delete (RenderWindow *)p; } -VALUE RenderWindow_new(int argc, VALUE *argv, VALUE vClass) { - // For each version of this method, convert Ruby args to C++ types (applying default values) - RenderWindow *ptr = new RenderWindow(); - VALUE tData = Data_Wrap_Struct(vClass, 0, RenderWindow_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE RenderWindow_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - if(argc >= 2 && argc <= 4 && - IS(argv[0], g_cVideoMode) && - ISSTR(argv[1]) && - (argc < 3 || true) && - (argc < 4 || ISNUM(argv[3]))) { - pSelf->Create( - *(VideoMode *)DATA_PTR(argv[0]), - STR2CSTR(argv[1]), - argc < 3 ? (Style::Resize | Style::Close) : NUM2INT(argv[2]), - argc < 4 ? 0 : NUM2INT(argv[3])); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -static VALUE RenderWindow_to_s(VALUE vSelf) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - char szBuffer[256]; - sprintf(szBuffer, "Height: %d, Width: %d, Depth Bits: %d, Stencil Bits: %d", pSelf->GetWidth(), pSelf->GetHeight(), pSelf->GetDepthBits(), pSelf->GetStencilBits()); - return rb_str_new2(szBuffer); -} - -static VALUE RenderWindow_get_width(VALUE vSelf) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - return INT2FIX(pSelf->GetWidth()); -} - -static VALUE RenderWindow_get_height(VALUE vSelf) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - return INT2FIX(pSelf->GetHeight()); -} - -static VALUE RenderWindow_get_depthBits(VALUE vSelf) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - return INT2FIX(pSelf->GetDepthBits()); -} - -static VALUE RenderWindow_get_stencilBits(VALUE vSelf) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - return INT2FIX(pSelf->GetStencilBits()); -} - -static VALUE RenderWindow_get_frameTime(VALUE vSelf) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - return rb_float_new(pSelf->GetFrameTime()); -} - -static VALUE RenderWindow_get_input(VALUE vSelf) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - DECLARE_PTR_VAR(Input, Input, (Input *)&pSelf->GetInput()); - return vInput; -} - -static VALUE RenderWindow_getEvent(VALUE vSelf) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - Event ePoll; - if(!pSelf->GetEvent(ePoll)) - return Qnil; - DECLARE_OBJ_VAR(Event, Event, ePoll); - return vEvent; -} - -static VALUE RenderWindow_useVerticalSync(VALUE vSelf, VALUE vEnabled) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - pSelf->UseVerticalSync(RTEST(vEnabled) != 0); - return Qnil; -} - -static VALUE RenderWindow_showMouseCursor(VALUE vSelf, VALUE vShow) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - pSelf->ShowMouseCursor(RTEST(vShow) != 0); - return Qnil; -} - -static VALUE RenderWindow_display(VALUE vSelf) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - pSelf->Display(); - return Qnil; -} - -static VALUE RenderWindow_optimize(VALUE vSelf, VALUE vBool) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - pSelf->OptimizeForNonOpenGL(RTEST(vBool)); - return Qnil; -} - -static VALUE RenderWindow_capture(VALUE vSelf) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - DECLARE_OBJ_VAR(Image, Image, pSelf->Capture()); - return vImage; -} - -static VALUE RenderWindow_get_view(VALUE vSelf) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - DECLARE_OBJ_VAR(FloatRect, Rect, pSelf->GetViewRect()); - return vRect; -} - -static VALUE RenderWindow_set_view(VALUE vSelf, VALUE vView) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - View *pView; - Data_Get_Struct(vView, View, pView); - pSelf->SetView(pView); - return Qnil; -} - -static VALUE RenderWindow_set_backgroundColor(VALUE vSelf, VALUE vColor) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - Color *pColor; - Data_Get_Struct(vColor, Color, pColor); - pSelf->SetBackgroundColor(*pColor); - return Qnil; -} - -static VALUE RenderWindow_draw(VALUE vSelf, VALUE vObject) { - if(!ISKO(vObject, g_cDrawable)) - rb_raise(rb_eTypeError, "wrong argument type(s)"); - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - Drawable *pObject; - Data_Get_Struct(vObject, Drawable, pObject); - pSelf->Draw(*pObject); - return Qnil; -} - -static VALUE RenderWindow_setFramerateLimit(VALUE vSelf, VALUE vLimit) { - // Get C++ object pointer from vSelf - RenderWindow *pSelf; - Data_Get_Struct(vSelf, RenderWindow, pSelf); - pSelf->SetFramerateLimit((unsigned int)NUM2INT(vLimit)); - return Qnil; -} - -void Init_RenderWindow() -{ - g_cRenderWindow = rb_define_class_under(g_vModule, "RenderWindow", rb_cObject); - DEFINE_CLASS_METHOD(RenderWindow, new, -1); - DEFINE_INSTANCE_METHOD(RenderWindow, initialize, -1); - - DEFINE_GETTER(RenderWindow, width); - DEFINE_GETTER2(RenderWindow, width, w); - DEFINE_GETTER(RenderWindow, height); - DEFINE_GETTER2(RenderWindow, height, h); - DEFINE_GETTER(RenderWindow, input); - DEFINE_GETTER(RenderWindow, frameTime); - DEFINE_GETTER(RenderWindow, stencilBits); - DEFINE_GETTER(RenderWindow, depthBits); - DEFINE_RW(RenderWindow, view); - DEFINE_SETTER(RenderWindow, backgroundColor); - - DEFINE_INSTANCE_METHOD(RenderWindow, to_s, 0); - DEFINE_INSTANCE_METHOD(RenderWindow, getEvent, 0); // Don't use GETTER - DEFINE_INSTANCE_METHOD(RenderWindow, useVerticalSync, 1); - DEFINE_INSTANCE_METHOD(RenderWindow, showMouseCursor, 1); - DEFINE_INSTANCE_METHOD(RenderWindow, display, 0); - DEFINE_INSTANCE_METHOD(RenderWindow, optimize, 1); - DEFINE_INSTANCE_METHOD(RenderWindow, capture, 0); - DEFINE_INSTANCE_METHOD(RenderWindow, draw, 1); - DEFINE_INSTANCE_METHOD(RenderWindow, setFramerateLimit, 1); -} - diff --git a/ruby/RubySFML/sfSound.cpp b/ruby/RubySFML/sfSound.cpp deleted file mode 100644 index 8b9511f7..00000000 --- a/ruby/RubySFML/sfSound.cpp +++ /dev/null @@ -1,219 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cSound; - -void Sound_free(void *p) { delete (Sound *)p; } -VALUE Sound_new(int argc, VALUE *argv, VALUE vClass) { - Sound *ptr = new Sound(); - VALUE tData = Data_Wrap_Struct(vClass, 0, Sound_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE Sound_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - if(argc == 1 && IS(argv[0], g_cSound)) { - *pSelf = *(Sound *)DATA_PTR(argv[0]); - } else if(argc >= 0 && argc <= 7 && - (argc < 1 || IS(argv[0], g_cSoundBuffer))) { - if(argc >= 1) - pSelf->SetBuffer(*(SoundBuffer *)DATA_PTR(argv[0])); - if(argc >= 2) - pSelf->SetLoop(RTEST(argv[1]) != 0); - if(argc >= 3) - pSelf->SetPitch((float)NUM2DBL(argv[2])); - if(argc >= 4) - pSelf->SetVolume((float)NUM2DBL(argv[3])); - if(argc >= 5) { - float x = argc < 5 ? 0.0f : (float)NUM2DBL(argv[4]); - float y = argc < 6 ? 0.0f : (float)NUM2DBL(argv[5]); - float z = argc < 7 ? 0.0f : (float)NUM2DBL(argv[6]); - pSelf->SetPosition(x, y, z); - } - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -static VALUE Sound_to_s(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - char szBuffer[256]; - float x, y, z; - pSelf->GetPosition(x, y, z); - sprintf(szBuffer, "Loop=%s, Pitch=%2.2f, Volume=%2.2f, Position=(%2.2f,%2.2f,%2.2f), Status=%s", pSelf->GetLoop() ? "true":"false", pSelf->GetPitch(), pSelf->GetVolume(), x, y, z, pSelf->GetStatus() == Sound::Playing ? "playing" : pSelf->GetStatus() == Sound::Paused ? "paused" : "stopped"); - return rb_str_new2(szBuffer); -} - -static VALUE Sound_play(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - pSelf->Play(); - return Qnil; -} - -static VALUE Sound_pause(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - pSelf->Pause(); - return Qnil; -} - -static VALUE Sound_stop(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - pSelf->Stop(); - return Qnil; -} - -static VALUE Sound_set_buffer(VALUE vSelf, VALUE vBuffer) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - if(!IS(vBuffer, g_cSoundBuffer)) - rb_raise(rb_eTypeError, "wrong argument type(s)"); - pSelf->SetBuffer(*(SoundBuffer *)DATA_PTR(vBuffer)); - return Qnil; -} - -static VALUE Sound_set_loop(VALUE vSelf, VALUE vLoop) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - pSelf->SetLoop(RTEST(vLoop)); - return Qnil; -} - -static VALUE Sound_set_pitch(VALUE vSelf, VALUE vPitch) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - pSelf->SetLoop((float)NUM2DBL(vPitch)); - return Qnil; -} - -static VALUE Sound_set_volume(VALUE vSelf, VALUE vVolume) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - pSelf->SetVolume((float)NUM2DBL(vVolume)); - return Qnil; -} - -static VALUE Sound_set_position(VALUE vSelf, VALUE vX, VALUE vY, VALUE vZ) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - pSelf->SetPosition((float)NUM2DBL(vX), (float)NUM2DBL(vY), (float)NUM2DBL(vZ)); - return Qnil; -} - -static VALUE Sound_get_buffer(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - DECLARE_PTR_VAR(SoundBuffer, SoundBuffer, (SoundBuffer *)pSelf->GetBuffer()); - return vSoundBuffer; -} - -static VALUE Sound_get_loop(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - return pSelf->GetLoop() ? Qtrue : Qfalse; -} - -static VALUE Sound_get_pitch(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - return rb_float_new(pSelf->GetPitch()); -} - -static VALUE Sound_get_volume(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - return rb_float_new(pSelf->GetVolume()); -} - -static VALUE Sound_get_position(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - float x, y, z; - pSelf->GetPosition(x, y, z); - VALUE vArray = rb_ary_new(); - rb_ary_push(vArray, rb_float_new(x)); - rb_ary_push(vArray, rb_float_new(y)); - rb_ary_push(vArray, rb_float_new(z)); - return vArray; -} - -static VALUE Sound_get_status(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - return INT2FIX(pSelf->GetStatus()); -} - -static VALUE Sound_get_playingOffset(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sound *pSelf; - Data_Get_Struct(vSelf, Sound, pSelf); - return rb_float_new(pSelf->GetPlayingOffset()); -} - -void Init_Sound() -{ - g_cSound = rb_define_class_under(g_vModule, "Sound", rb_cObject); - DEFINE_CLASS_METHOD(Sound, new, -1); - - DEFINE_INSTANCE_METHOD(Sound, initialize, -1); - - DEFINE_RW(Sound, buffer); - DEFINE_RW(Sound, loop); - DEFINE_RW(Sound, pitch); - DEFINE_RW(Sound, volume); - DEFINE_RW(Sound, position); - DEFINE_GETTER(Sound, status); - DEFINE_GETTER(Sound, playingOffset); - - DEFINE_INSTANCE_METHOD(Sound, to_s, 0); - DEFINE_INSTANCE_METHOD(Sound, play, 0); - DEFINE_INSTANCE_METHOD(Sound, pause, 0); - DEFINE_INSTANCE_METHOD(Sound, stop, 0); -} - diff --git a/ruby/RubySFML/sfSoundBuffer.cpp b/ruby/RubySFML/sfSoundBuffer.cpp deleted file mode 100644 index 2ee3d594..00000000 --- a/ruby/RubySFML/sfSoundBuffer.cpp +++ /dev/null @@ -1,137 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cSoundBuffer; - -void SoundBuffer_free(void *p) { delete (SoundBuffer *)p; } -VALUE SoundBuffer_new(int argc, VALUE *argv, VALUE vClass) { - SoundBuffer *ptr = new SoundBuffer(); - VALUE tData = Data_Wrap_Struct(vClass, 0, SoundBuffer_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE SoundBuffer_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - SoundBuffer *pSelf; - Data_Get_Struct(vSelf, SoundBuffer, pSelf); - if(argc == 0) { - // Nothing to initialize - } else if(argc == 1 && IS(argv[0], g_cSoundBuffer)) { - *pSelf = *(SoundBuffer *)DATA_PTR(argv[0]); - } else if(argc == 1 && ISSTR(argv[0])) { - if(!pSelf->LoadFromFile(STR2CSTR(argv[0]))) - rb_raise(rb_eRuntimeError, "Failed to load specified sound file"); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -static VALUE SoundBuffer_to_s(VALUE vSelf) { - // Get C++ object pointer from vSelf - SoundBuffer *pSelf; - Data_Get_Struct(vSelf, SoundBuffer, pSelf); - char szBuffer[256]; - sprintf(szBuffer, "Samples=%d, SampleRate=%d, Channels=%d, Duration=%f", pSelf->GetSamplesCount(), pSelf->GetSampleRate(), pSelf->GetChannelsCount(), pSelf->GetDuration()); - return rb_str_new2(szBuffer); -} - -static VALUE SoundBuffer_loadFromFile(VALUE vSelf, VALUE vPath) { - // Get C++ object pointer from vSelf - SoundBuffer *pSelf; - Data_Get_Struct(vSelf, SoundBuffer, pSelf); - return pSelf->LoadFromFile(STR2CSTR(vPath)) ? Qtrue : Qfalse; -} - -static VALUE SoundBuffer_saveToFile(VALUE vSelf, VALUE vPath) { - // Get C++ object pointer from vSelf - SoundBuffer *pSelf; - Data_Get_Struct(vSelf, SoundBuffer, pSelf); - return pSelf->SaveToFile(STR2CSTR(vPath)) ? Qtrue : Qfalse; -} - -static VALUE SoundBuffer_loadFromMemory(VALUE vSelf, VALUE vSamples, VALUE vSize) { - // Get C++ object pointer from vSelf - SoundBuffer *pSelf; - Data_Get_Struct(vSelf, SoundBuffer, pSelf); - return pSelf->LoadFromMemory(STR2CSTR(vSamples), NUM2INT(vSize)) ? Qtrue : Qfalse; -} - -static VALUE SoundBuffer_get_samples(VALUE vSelf) { - // Get C++ object pointer from vSelf - SoundBuffer *pSelf; - Data_Get_Struct(vSelf, SoundBuffer, pSelf); - return rb_str_new((const char *)pSelf->GetSamples(), pSelf->GetSamplesCount()*2); -} - -static VALUE SoundBuffer_get_samplesCount(VALUE vSelf) { - // Get C++ object pointer from vSelf - SoundBuffer *pSelf; - Data_Get_Struct(vSelf, SoundBuffer, pSelf); - return INT2FIX(pSelf->GetSamplesCount()); -} - -static VALUE SoundBuffer_get_sampleRate(VALUE vSelf) { - // Get C++ object pointer from vSelf - SoundBuffer *pSelf; - Data_Get_Struct(vSelf, SoundBuffer, pSelf); - return INT2FIX(pSelf->GetSampleRate()); -} - -static VALUE SoundBuffer_get_channels(VALUE vSelf) { - // Get C++ object pointer from vSelf - SoundBuffer *pSelf; - Data_Get_Struct(vSelf, SoundBuffer, pSelf); - return INT2FIX(pSelf->GetChannelsCount()); -} - -static VALUE SoundBuffer_get_duration(VALUE vSelf) { - // Get C++ object pointer from vSelf - SoundBuffer *pSelf; - Data_Get_Struct(vSelf, SoundBuffer, pSelf); - return rb_float_new(pSelf->GetDuration()); -} - -void Init_SoundBuffer() -{ - g_cSoundBuffer = rb_define_class_under(g_vModule, "SoundBuffer", rb_cObject); - DEFINE_CLASS_METHOD(SoundBuffer, new, -1); - DEFINE_INSTANCE_METHOD(SoundBuffer, initialize, -1); - - DEFINE_GETTER(SoundBuffer, samples); - DEFINE_GETTER(SoundBuffer, samplesCount); - DEFINE_GETTER(SoundBuffer, sampleRate); - DEFINE_GETTER(SoundBuffer, channels); - DEFINE_GETTER(SoundBuffer, duration); - - DEFINE_INSTANCE_METHOD(SoundBuffer, to_s, 0); - DEFINE_INSTANCE_METHOD(SoundBuffer, loadFromFile, 1); - DEFINE_INSTANCE_METHOD(SoundBuffer, saveToFile, 1); - DEFINE_INSTANCE_METHOD(SoundBuffer, loadFromMemory, 2); -} - diff --git a/ruby/RubySFML/sfSoundBufferRecorder.cpp b/ruby/RubySFML/sfSoundBufferRecorder.cpp deleted file mode 100644 index 5cd262c6..00000000 --- a/ruby/RubySFML/sfSoundBufferRecorder.cpp +++ /dev/null @@ -1,101 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cSoundBufferRecorder; - -void SoundBufferRecorder_free(void *p) { delete (SoundBufferRecorder *)p; } -VALUE SoundBufferRecorder_new(int argc, VALUE *argv, VALUE vClass) { - SoundBufferRecorder *ptr = new SoundBufferRecorder(); - VALUE tData = Data_Wrap_Struct(vClass, 0, SoundBufferRecorder_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE SoundBufferRecorder_initialize(int argc, VALUE *argv, VALUE vSelf) { - if(argc == 0) { - // Nothing to initialize - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -VALUE SoundBufferRecorder_canCapture(VALUE vClass) { - return SoundBufferRecorder::CanCapture() ? Qtrue : Qfalse; -} - -VALUE SoundBufferRecorder_get_buffer(VALUE vSelf) { - // Get C++ object pointer from vSelf - SoundBufferRecorder *pSelf; - Data_Get_Struct(vSelf, SoundBufferRecorder, pSelf); - DECLARE_PTR_VAR(SoundBuffer, SoundBuffer, (SoundBuffer *)&pSelf->GetBuffer()); - return vSoundBuffer; -} - -VALUE SoundBufferRecorder_start(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - SoundBufferRecorder *pSelf; - Data_Get_Struct(vSelf, SoundBufferRecorder, pSelf); - if(argc == 0) { - pSelf->Start(); - } else if(argc == 1) { - pSelf->Start(NUM2INT(argv[0])); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return Qnil; -} - -VALUE SoundBufferRecorder_stop(VALUE vSelf) { - // Get C++ object pointer from vSelf - SoundBufferRecorder *pSelf; - Data_Get_Struct(vSelf, SoundBufferRecorder, pSelf); - pSelf->Stop(); - return Qnil; -} - -VALUE SoundBufferRecorder_get_sampleRate(VALUE vSelf) { - // Get C++ object pointer from vSelf - SoundBufferRecorder *pSelf; - Data_Get_Struct(vSelf, SoundBufferRecorder, pSelf); - return INT2FIX(pSelf->GetSampleRate()); -} - -void Init_SoundBufferRecorder() -{ - g_cSoundBufferRecorder = rb_define_class_under(g_vModule, "SoundBufferRecorder", rb_cObject); - DEFINE_CLASS_METHOD(SoundBufferRecorder, new, -1); - DEFINE_INSTANCE_METHOD(SoundBufferRecorder, initialize, -1); - - DEFINE_CLASS_METHOD(SoundBufferRecorder, canCapture, 0); - - DEFINE_GETTER(SoundBufferRecorder, sampleRate); - DEFINE_GETTER(SoundBufferRecorder, buffer); - - DEFINE_INSTANCE_METHOD(SoundBufferRecorder, start, -1); - DEFINE_INSTANCE_METHOD(SoundBufferRecorder, stop, 0); -} - diff --git a/ruby/RubySFML/sfSprite.cpp b/ruby/RubySFML/sfSprite.cpp deleted file mode 100644 index a792dcfe..00000000 --- a/ruby/RubySFML/sfSprite.cpp +++ /dev/null @@ -1,319 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -#include -using namespace sf; - -#ifdef _MSC_VER - #define SQRTF sqrtf -#else - #define SQRTF sqrt -#endif - -// Wrapper for Sprite that calls the Ruby version of virtual methods in case a Ruby class derives from this one -class rSprite : public Sprite { -protected: - VALUE m_vSelf, m_vClass; - ID m_idRender; - bool m_bRender, m_bInRender; - - virtual void Render(const RenderWindow &Window) const { - // If this method is overridden in Ruby, call it - if(m_bRender) { - VALUE vWindow = Data_Wrap_Struct(g_cRenderWindow, 0, 0, (void*)&Window); - VALUE vRet = rb_funcall(m_vSelf, m_idRender, 1, vWindow); - } else // else call parent - Sprite::Render(Window); - } - -public: - // Call as soon as you get a Ruby VALUE pointing to this object - void rInit(VALUE vSelf) { - // Need these for rb_funcall - m_vSelf = vSelf; - m_vClass = CLASS_OF(m_vSelf); - - // Initialize members for Render() virtual method - m_idRender = rb_intern("render"); - m_bRender = rb_method_boundp(m_vClass, m_idRender, 0) == Qtrue; - } - - // When an overridden method in Ruby calls super(), it is called this way - VALUE Render(VALUE vWindow) { - Sprite::Render(*(RenderWindow *)DATA_PTR(vWindow)); - return Qnil; - } -}; - - -VALUE g_cSprite; - -void Sprite_free(void *p) { delete (Sprite *)p; } -VALUE Sprite_new(int argc, VALUE *argv, VALUE vClass) { - rSprite *ptr = new rSprite(); - VALUE tData = Data_Wrap_Struct(vClass, 0, Sprite_free, ptr); - ptr->rInit(tData); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE Sprite_initialize(int argc, VALUE *argv, VALUE vSelf) { - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - if(argc == 0) { - // Nothing to initialize - } else if(argc >= 1 && argc <= 6 && IS(argv[0], g_cImage) && (argc < 6 || IS(argv[5], g_cColor))) { - pSelf->SetImage(*(Image *)DATA_PTR(argv[0])); - if(argc >= 2) - pSelf->SetLeft((float)NUM2DBL(argv[1])); - if(argc >= 3) - pSelf->SetTop((float)NUM2DBL(argv[2])); - if(argc >= 4) { - if(ISNUM(argv[3])) { - float f = (float)NUM2DBL(argv[3]); - pSelf->SetScale(f, f); - } else if(IS(argv[3], rb_cArray)) { - float x = (float)NUM2DBL(rb_ary_entry(argv[3], 0)); - float y = (float)NUM2DBL(rb_ary_entry(argv[3], 1)); - pSelf->SetScale(x, y); - } - } - if(argc >= 5) - pSelf->SetRotation((float)NUM2DBL(argv[4])); - if(argc >= 6) - pSelf->SetColor(*(Color *)DATA_PTR(argv[5])); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - pSelf->SetRotationCenter(pSelf->GetWidth()/2, pSelf->GetHeight()/2); - return vSelf; -} - -static VALUE Sprite_to_s(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - char szBuffer[256]; - sprintf(szBuffer, "Left=%f, Top=%f, Width=%f, Height=%f, Scale=[%f,%f]", pSelf->GetLeft(), pSelf->GetTop(), pSelf->GetWidth(), pSelf->GetHeight(), pSelf->GetScaleX(), pSelf->GetScaleY()); - return rb_str_new2(szBuffer); -} - -static VALUE Sprite_set_image(VALUE vSelf, VALUE vImage) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - if(!IS(vImage, g_cImage)) - rb_raise(rb_eTypeError, "wrong argument type(s)"); - pSelf->SetImage(*(Image *)DATA_PTR(vImage)); - return Qnil; -} - -static VALUE Sprite_set_subRect(VALUE vSelf, VALUE vRect) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - if(!IS(vRect, g_cIntRect)) - rb_raise(rb_eTypeError, "wrong argument type(s)"); - pSelf->SetSubRect(*(IntRect *)DATA_PTR(vRect)); - return Qnil; -} - -static VALUE Sprite_get_image(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - DECLARE_PTR_VAR(Image, Image, (Image *)pSelf->GetImage()); - return vImage; -} - -static VALUE Sprite_get_subRect(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - DECLARE_OBJ_VAR(IntRect, Rect, pSelf->GetSubRect()); - return vRect; -} - -static VALUE Sprite_get_width(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - return rb_float_new(pSelf->GetWidth()); -} - -static VALUE Sprite_get_height(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - return rb_float_new(pSelf->GetHeight()); -} - -static VALUE Sprite_getPixel(VALUE vSelf, VALUE vX, VALUE vY) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - DECLARE_OBJ_VAR(Color, Color, pSelf->GetPixel(NUM2INT(vX), NUM2INT(vY))); - return vColor; -} - -static VALUE Sprite_set_right(VALUE vSelf, VALUE v) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - pSelf->SetLeft((float)NUM2DBL(v) - pSelf->GetWidth()); - return Qnil; -} - -static VALUE Sprite_set_bottom(VALUE vSelf, VALUE v) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - pSelf->SetTop((float)NUM2DBL(v) - pSelf->GetHeight()); - return Qnil; -} - -static VALUE Sprite_set_x(VALUE vSelf, VALUE v) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - pSelf->SetLeft((float)NUM2DBL(v) - pSelf->GetWidth()*0.5f); - return Qnil; -} - -static VALUE Sprite_set_y(VALUE vSelf, VALUE v) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - pSelf->SetTop((float)NUM2DBL(v) - pSelf->GetHeight()*0.5f); - return Qnil; -} - -static VALUE Sprite_get_right(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - return rb_float_new(pSelf->GetLeft() + pSelf->GetWidth()); -} - -static VALUE Sprite_get_bottom(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - return rb_float_new(pSelf->GetTop() + pSelf->GetHeight()); -} - -static VALUE Sprite_get_x(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - return rb_float_new(pSelf->GetLeft() + pSelf->GetWidth()*0.5f); -} - -static VALUE Sprite_get_y(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - return rb_float_new(pSelf->GetTop() + pSelf->GetHeight()*0.5f); -} - -static VALUE Sprite_get_radius(VALUE vSelf) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - float w = pSelf->GetWidth() * 0.5f; - float h = pSelf->GetHeight() * 0.5f; - return rb_float_new(SQRTF(w*w + h*h)); -} - -static VALUE Sprite_flipX(VALUE vSelf, VALUE vBool) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - pSelf->FlipX(RTEST(vBool)); - return Qnil; -} - -static VALUE Sprite_flipY(VALUE vSelf, VALUE vBool) { - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - pSelf->FlipY(RTEST(vBool)); - return Qnil; -} - -static VALUE Sprite_distance(VALUE vSelf, VALUE vOther) { - if(!ISKO(vOther, g_cSprite)) - rb_raise(rb_eTypeError, "wrong argument type(s)"); - - // Get C++ object pointer from vSelf - Sprite *pSelf; - Data_Get_Struct(vSelf, Sprite, pSelf); - Sprite *pOther; - Data_Get_Struct(vOther, Sprite, pOther); - - // Get distance from center positions - float dx = (pSelf->GetLeft() + pSelf->GetWidth()*0.5f) - - (pOther->GetLeft() + pOther->GetWidth()*0.5f); - float dy = (pSelf->GetTop() + pSelf->GetHeight()*0.5f) - - (pOther->GetTop() + pOther->GetHeight()*0.5f); - return rb_float_new(SQRTF(dx*dx + dy*dy)); -} - -static VALUE Sprite_render(VALUE vSelf, VALUE vWindow) { - // Get C++ object pointer from vSelf - rSprite *pSelf; - Data_Get_Struct(vSelf, rSprite, pSelf); - return pSelf->Render(vWindow); -} - -void Init_Sprite() -{ - g_cSprite = rb_define_class_under(g_vModule, "Sprite", g_cDrawable); - DEFINE_CLASS_METHOD(Sprite, new, -1); - DEFINE_INSTANCE_METHOD(Sprite, initialize, -1); - - DEFINE_RW(Sprite, right); // Right x position - DEFINE_RW(Sprite, bottom); // Bottom x position - DEFINE_RW(Sprite, x); // Center x postion - DEFINE_RW(Sprite, y); // Center y position - DEFINE_RW(Sprite, image); - DEFINE_RW(Sprite, subRect); - DEFINE_GETTER(Sprite, width); - DEFINE_GETTER2(Sprite, width, w); - DEFINE_GETTER(Sprite, height); - DEFINE_GETTER2(Sprite, height, h); - DEFINE_GETTER(Sprite, radius); - - DEFINE_INSTANCE_METHOD(Sprite, to_s, 0); - DEFINE_INSTANCE_METHOD(Sprite, getPixel, 2); - DEFINE_INSTANCE_METHOD2(Sprite, getPixel, [], 2); - DEFINE_INSTANCE_METHOD(Sprite, distance, 1); - DEFINE_INSTANCE_METHOD2(Sprite, distance, getDistance, 1); - DEFINE_INSTANCE_METHOD(Sprite, flipX, 0); - DEFINE_INSTANCE_METHOD(Sprite, flipY, 0); - - // Virtual method - DEFINE_INSTANCE_METHOD(Sprite, render, 1); -} diff --git a/ruby/RubySFML/sfString.cpp b/ruby/RubySFML/sfString.cpp deleted file mode 100644 index a6f770d5..00000000 --- a/ruby/RubySFML/sfString.cpp +++ /dev/null @@ -1,190 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -// Wrapper for String that calls the Ruby version of virtual methods in case a Ruby class derives from this one -class rString : public String { -protected: - VALUE m_vSelf, m_vClass; - ID m_idRender; - bool m_bRender; - - virtual void Render(const RenderWindow &Window) const { - // If this method is overridden in Ruby, call it - if(m_bRender) { - VALUE vWindow = Data_Wrap_Struct(g_cRenderWindow, 0, 0, (void*)&Window); - VALUE vRet = rb_funcall(m_vSelf, m_idRender, 1, vWindow); - } else // else call parent - String::Render(Window); - } - -public: - // Damn constructors should be inherited from base class - rString(const std::string &Text="", const std::string &Font="", float Size=32.f) :String(Text, Font, Size) {} - - // Call as soon as you get a Ruby VALUE pointing to this object - void rInit(VALUE vSelf) { - // Need these for rb_funcall - m_vSelf = vSelf; - m_vClass = CLASS_OF(m_vSelf); - - // Initialize members for Render() virtual method - m_idRender = rb_intern("render"); - m_bRender = rb_method_boundp(m_vClass, m_idRender, 0) == Qtrue; - } - - // When an overridden method in Ruby calls super(), it is called this way - VALUE Render(VALUE vWindow) { - String::Render(*(RenderWindow *)DATA_PTR(vWindow)); - return Qnil; - } -}; - - -VALUE g_cString; - -void String_free(void *p) { delete (String *)p; } -VALUE String_new(int argc, VALUE *argv, VALUE vClass) { - // For each version of this method, convert Ruby args to C++ types (applying default values) - rString *ptr = new rString(); - VALUE tData = Data_Wrap_Struct(vClass, 0, String_free, ptr); - rb_obj_call_init(tData, argc, argv); - ptr->rInit(tData); - return tData; -} - -static VALUE String_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - String *pSelf; - Data_Get_Struct(vSelf, String, pSelf); - if(argc >= 0 && argc <= 3 && - (argc < 1 || ISSTR(argv[0])) && - (argc < 2 || ISSTR(argv[1])) && - (argc < 3 || ISNUM(argv[2]))) { - if(argc >= 1) - pSelf->SetText(STR2CSTR(argv[0])); - if(argc >= 2) - pSelf->SetFont(STR2CSTR(argv[1])); - if(argc >= 3) - pSelf->SetSize((float)NUM2DBL(argv[2])); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -static VALUE String_preloadFont(int argc, VALUE *argv, VALUE vClass) { - if(argc >= 2 && argc <= 2) - String::PreloadFont(STR2CSTR(argv[0]), NUM2INT(argv[1])); - else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return Qnil; -} - -static VALUE String_set_text(VALUE vSelf, VALUE vText) { - // Get C++ object pointer from vSelf - String *pSelf; - Data_Get_Struct(vSelf, String, pSelf); - if(!ISSTR(vText)) - rb_raise(rb_eTypeError, "wrong argument type(s)"); - pSelf->SetText(STR2CSTR(vText)); - return Qnil; -} - -static VALUE String_set_font(VALUE vSelf, VALUE vFont) { - // Get C++ object pointer from vSelf - String *pSelf; - Data_Get_Struct(vSelf, String, pSelf); - if(!ISSTR(vFont)) - rb_raise(rb_eTypeError, "wrong argument type(s)"); - pSelf->SetText(STR2CSTR(vFont)); - return Qnil; -} - -static VALUE String_set_size(VALUE vSelf, VALUE vSize) { - // Get C++ object pointer from vSelf - String *pSelf; - Data_Get_Struct(vSelf, String, pSelf); - if(!ISNUM(vSize)) - rb_raise(rb_eTypeError, "wrong argument type(s)"); - pSelf->SetSize((float)NUM2DBL(vSize)); - return Qnil; -} - -static VALUE String_get_text(VALUE vSelf) { - // Get C++ object pointer from vSelf - String *pSelf; - Data_Get_Struct(vSelf, String, pSelf); - return rb_str_new2(pSelf->GetText().c_str()); -} - -static VALUE String_get_font(VALUE vSelf) { - // Get C++ object pointer from vSelf - String *pSelf; - Data_Get_Struct(vSelf, String, pSelf); - return rb_str_new2(pSelf->GetFont().c_str()); -} - -static VALUE String_get_size(VALUE vSelf) { - // Get C++ object pointer from vSelf - String *pSelf; - Data_Get_Struct(vSelf, String, pSelf); - return rb_float_new(pSelf->GetSize()); -} - -static VALUE String_getRect(VALUE vSelf) { - // Get C++ object pointer from vSelf - String *pSelf; - Data_Get_Struct(vSelf, String, pSelf); - DECLARE_OBJ_VAR(FloatRect, Rect, pSelf->GetRect()); - return vRect; -} - -static VALUE String_render(VALUE vSelf, VALUE vWindow) { - // Get C++ object pointer from vSelf - rString *pSelf; - Data_Get_Struct(vSelf, rString, pSelf); - return pSelf->Render(vWindow); -} - -void Init_String() -{ - g_cString = rb_define_class_under(g_vModule, "Text", g_cDrawable); - DEFINE_CLASS_METHOD(String, new, -1); - DEFINE_INSTANCE_METHOD(String, initialize, -1); - - DEFINE_CLASS_METHOD(String, preloadFont, -1); - - DEFINE_RW(String, text); - DEFINE_RW(String, font); - DEFINE_RW(String, size); - - DEFINE_INSTANCE_METHOD(String, getRect, 0); - - // Virtual method - DEFINE_INSTANCE_METHOD(String, render, 1); -} - diff --git a/ruby/RubySFML/sfVideoMode.cpp b/ruby/RubySFML/sfVideoMode.cpp deleted file mode 100644 index f707ce3d..00000000 --- a/ruby/RubySFML/sfVideoMode.cpp +++ /dev/null @@ -1,114 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cVideoMode; - -DECLARE_INT_RW(VideoMode, Width); -DECLARE_INT_RW(VideoMode, Height); -DECLARE_INT_RW(VideoMode, BitsPerPixel); - - -void VideoMode_free(void *p) { delete (VideoMode *)p; } -VALUE VideoMode_new(int argc, VALUE *argv, VALUE vClass) { - VideoMode *ptr = new VideoMode(); - VALUE tData = Data_Wrap_Struct(vClass, 0, VideoMode_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE VideoMode_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - VideoMode *pSelf; - Data_Get_Struct(vSelf, VideoMode, pSelf); - if(argc == 0) { - // Nothing to initialize - } else if(argc >= 2 && argc <= 3 && - ISNUM(argv[0]) && - ISNUM(argv[1]) && - (argc < 3 || ISNUM(argv[2]))) { - *pSelf = VideoMode(NUM2INT(argv[0]), NUM2INT(argv[1]), argc < 3 ? 32 : NUM2INT(argv[2])); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -static VALUE VideoMode_desktop(VALUE vClass) -{ - DECLARE_OBJ_VAR(VideoMode, Desktop, VideoMode::GetDesktopMode()); - return vDesktop; -} - -// Ruby each iterator -static VALUE VideoMode_each(VALUE vClass) -{ - int nLength = VideoMode::GetModesCount(); - for(int i=0; iIsValid() ? Qtrue : Qfalse; -} - -static VALUE VideoMode_to_s(VALUE vSelf) -{ - // Get C++ object pointer from vSelf - VideoMode *pSelf; - Data_Get_Struct(vSelf, VideoMode, pSelf); - char szBuffer[256]; - sprintf(szBuffer, "Width: %d, Height: %d, BPP: %d", pSelf->Width, pSelf->Height, pSelf->BitsPerPixel); - return rb_str_new2(szBuffer); -} - -void Init_VideoMode() -{ - g_cVideoMode = rb_define_class_under(g_vModule, "VideoMode", rb_cObject); - DEFINE_CLASS_METHOD(VideoMode, new, -1); - DEFINE_INSTANCE_METHOD(VideoMode, initialize, -1); - - DEFINE_RW2(VideoMode, Width, width); - DEFINE_RW2(VideoMode, Width, w); - DEFINE_RW2(VideoMode, Height, height); - DEFINE_RW2(VideoMode, Height, h); - DEFINE_RW2(VideoMode, BitsPerPixel, bitsPerPixel); - DEFINE_RW2(VideoMode, BitsPerPixel, bpp); - - DEFINE_CLASS_METHOD(VideoMode, each, 0); - DEFINE_CLASS_METHOD(VideoMode, desktop, 0); - DEFINE_INSTANCE_METHOD(VideoMode, isValid, 0); - DEFINE_INSTANCE_METHOD(VideoMode, to_s, 0); -} - diff --git a/ruby/RubySFML/sfView.cpp b/ruby/RubySFML/sfView.cpp deleted file mode 100644 index 6714074e..00000000 --- a/ruby/RubySFML/sfView.cpp +++ /dev/null @@ -1,93 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cView; - -//DECLARE_DOUBLE_RW(View, Left); -//DECLARE_DOUBLE_RW(View, Top); -//DECLARE_DOUBLE_RW(View, Width); -//DECLARE_DOUBLE_RW(View, Height); -DECLARE_OBJ_RW(View, Rect, FloatRect); -DECLARE_DOUBLE_RW(View, Zoom); - - -void View_free(void *p) { delete (View *)p; } -VALUE View_new(int argc, VALUE *argv, VALUE vClass) { - View *ptr = new View(); - VALUE tData = Data_Wrap_Struct(vClass, 0, View_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE View_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - View *pSelf; - Data_Get_Struct(vSelf, View, pSelf); - if(argc == 0) { - // Nothing to initialize - } else if(argc >= 1 && argc <= 2 && - IS(argv[0], g_cFloatRect) && - (argc < 2 || ISNUM(argv[1]))) { - pSelf->Rect = *(FloatRect *)DATA_PTR(argv[0]); - if(argc >= 2) - pSelf->Zoom = (float)NUM2DBL(argv[1]); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - - return vSelf; -} - -static VALUE View_to_s(VALUE vSelf) -{ - // Get C++ object pointer from vSelf - View *pSelf; - Data_Get_Struct(vSelf, View, pSelf); - char szBuffer[256]; - sprintf(szBuffer, "Left=%f, Top=%f, Width=%f, Height=%f, Zoom=%f", pSelf->Rect.Left, pSelf->Rect.Top, pSelf->Rect.GetHeight(), pSelf->Rect.GetWidth(), pSelf->Zoom); - return rb_str_new2(szBuffer); -} - -void Init_View() -{ - g_cView = rb_define_class_under(g_vModule, "View", rb_cObject); - DEFINE_CLASS_METHOD(View, new, -1); - DEFINE_INSTANCE_METHOD(View, initialize, -1); - - //DEFINE_RW2(View, Left, l); - //DEFINE_RW2(View, Top, top); - //DEFINE_RW2(View, Top, t); - //DEFINE_RW2(View, Width, width); - //DEFINE_RW2(View, Width, w); - //DEFINE_RW2(View, Height, height); - //DEFINE_RW2(View, Height, h); - DEFINE_RW2(View, Rect, rect); - DEFINE_RW2(View, Zoom, zoom); - - DEFINE_INSTANCE_METHOD(View, to_s, 0); -} - diff --git a/ruby/RubySFML/sfWindow.cpp b/ruby/RubySFML/sfWindow.cpp deleted file mode 100644 index 77e74d1d..00000000 --- a/ruby/RubySFML/sfWindow.cpp +++ /dev/null @@ -1,181 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// RubySFML - Ruby extension for the SFML library -// Copyright (C) 2007 Sean O'Neil and Laurent Gomila -// (sean.p.oneil@gmail.com and laurent.gom@gmail.com) -// -// This software is provided 'as-is', without any express or implied warranty. -// In no event will the authors be held liable for any damages arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it freely, -// subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; -// you must not claim that you wrote the original software. -// If you use this software in a product, an acknowledgment -// in the product documentation would be appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, -// and must not be misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// -//////////////////////////////////////////////////////////// -#include -#include "RubySFML.h" -using namespace sf; - -VALUE g_cWindow; - -void Window_free(void *p) { delete (Window *)p; } -VALUE Window_new(int argc, VALUE *argv, VALUE vClass) { - Window *ptr = new Window(); - VALUE tData = Data_Wrap_Struct(vClass, 0, Window_free, ptr); - rb_obj_call_init(tData, argc, argv); - return tData; -} - -static VALUE Window_initialize(int argc, VALUE *argv, VALUE vSelf) { - // Get C++ object pointer from vSelf - Window *pSelf; - Data_Get_Struct(vSelf, Window, pSelf); - if(argc >= 2 && argc <= 3 && - IS(argv[0], g_cVideoMode) && - ISSTR(argv[1]) && - (argc < 3 || true) && - (argc < 4 || ISNUM(argv[3]))) { - pSelf->Create(*(VideoMode *)DATA_PTR(argv[0]), STR2CSTR(argv[1]), - argc < 3 ? (Style::Resize|Style::Close) : NUM2INT(argv[2]), - argc < 4 ? 0 : NUM2INT(argv[3])); - } else - rb_raise(rb_eTypeError, "wrong argument type(s)"); - return vSelf; -} - -static VALUE Window_to_s(VALUE vSelf) { - // Get C++ object pointer from vSelf - Window *pSelf; - Data_Get_Struct(vSelf, Window, pSelf); - char szBuffer[256]; - sprintf(szBuffer, "Height: %d, Width: %d, Depth Bits: %d, Stencil Bits: %d", pSelf->GetWidth(), pSelf->GetHeight(), pSelf->GetDepthBits(), pSelf->GetStencilBits()); - return rb_str_new2(szBuffer); -} - -static VALUE Window_get_width(VALUE vSelf) { - // Get C++ object pointer from vSelf - Window *pSelf; - Data_Get_Struct(vSelf, Window, pSelf); - return INT2FIX(pSelf->GetWidth()); -} - -static VALUE Window_get_height(VALUE vSelf) { - // Get C++ object pointer from vSelf - Window *pSelf; - Data_Get_Struct(vSelf, Window, pSelf); - return INT2FIX(pSelf->GetHeight()); -} - -static VALUE Window_get_depthBits(VALUE vSelf) { - // Get C++ object pointer from vSelf - Window *pSelf; - Data_Get_Struct(vSelf, Window, pSelf); - return INT2FIX(pSelf->GetDepthBits()); -} - -static VALUE Window_get_stencilBits(VALUE vSelf) { - // Get C++ object pointer from vSelf - Window *pSelf; - Data_Get_Struct(vSelf, Window, pSelf); - return INT2FIX(pSelf->GetStencilBits()); -} - -static VALUE Window_get_frameTime(VALUE vSelf) { - // Get C++ object pointer from vSelf - Window *pSelf; - Data_Get_Struct(vSelf, Window, pSelf); - return rb_float_new(pSelf->GetFrameTime()); -} - -static VALUE Window_get_input(VALUE vSelf) { - // Get C++ object pointer from vSelf - Window *pSelf; - Data_Get_Struct(vSelf, Window, pSelf); - DECLARE_PTR_VAR(Input, Input, (Input *)&pSelf->GetInput()); - return vInput; -} - -static VALUE Window_getEvent(VALUE vSelf) { - // Get C++ object pointer from vSelf - Window *pSelf; - Data_Get_Struct(vSelf, Window, pSelf); - Event ePoll; - if(!pSelf->GetEvent(ePoll)) - return Qnil; - DECLARE_OBJ_VAR(Event, Event, ePoll); - return vEvent; -} - -static VALUE Window_useVerticalSync(VALUE vSelf, VALUE vEnabled) { - // Get C++ object pointer from vSelf - Window *pSelf; - Data_Get_Struct(vSelf, Window, pSelf); - pSelf->UseVerticalSync(RTEST(vEnabled) != 0); - return Qnil; -} - -static VALUE Window_showMouseCursor(VALUE vSelf, VALUE vShow) { - // Get C++ object pointer from vSelf - Window *pSelf; - Data_Get_Struct(vSelf, Window, pSelf); - pSelf->ShowMouseCursor(RTEST(vShow) != 0); - return Qnil; -} - -static VALUE Window_setFramerateLimit(VALUE vSelf, VALUE vLimit) { - // Get C++ object pointer from vSelf - Window *pSelf; - Data_Get_Struct(vSelf, Window, pSelf); - pSelf->SetFramerateLimit((unsigned int)NUM2INT(vLimit)); - return Qnil; -} - -static VALUE Window_display(VALUE vSelf) { - // Get C++ object pointer from vSelf - Window *pSelf; - Data_Get_Struct(vSelf, Window, pSelf); - pSelf->Display(); - return Qnil; -} - -static VALUE Window_setCurrent(VALUE vSelf) { - // Get C++ object pointer from vSelf - Window *pSelf; - Data_Get_Struct(vSelf, Window, pSelf); - return pSelf->SetCurrent() ? Qtrue : Qfalse; -} - -void Init_Window() -{ - g_cWindow = rb_define_class_under(g_vModule, "Window", rb_cObject); - DEFINE_CLASS_METHOD(Window, new, -1); - DEFINE_INSTANCE_METHOD(Window, initialize, -1); - - DEFINE_GETTER(Window, width); - DEFINE_GETTER2(Window, width, w); - DEFINE_GETTER(Window, height); - DEFINE_GETTER2(Window, height, h); - DEFINE_GETTER(Window, input); - DEFINE_GETTER(Window, frameTime); - DEFINE_GETTER(Window, stencilBits); - DEFINE_GETTER(Window, depthBits); - - DEFINE_INSTANCE_METHOD(Window, to_s, 0); - DEFINE_INSTANCE_METHOD(Window, getEvent, 0); // Don't use GETTER - DEFINE_INSTANCE_METHOD(Window, useVerticalSync, 1); - DEFINE_INSTANCE_METHOD(Window, showMouseCursor, 1); - DEFINE_INSTANCE_METHOD(Window, setFramerateLimit, 1); - DEFINE_INSTANCE_METHOD(Window, display, 0); - DEFINE_INSTANCE_METHOD(Window, setCurrent, 0); // Dont use SETTER -} - diff --git a/ruby/doc/Reference-en.html b/ruby/doc/Reference-en.html deleted file mode 100644 index 1b0bb2d2..00000000 --- a/ruby/doc/Reference-en.html +++ /dev/null @@ -1,431 +0,0 @@ - -RubySFML Documentation - - - - -

Introduction

-

I apologize for how limited this documentation is, but as this extension is primarily a simple wrapper around SFML's C++ classes, I will rely on SFML's documentation to explain more detail about the classes and methods. This documentation is simply meant to explain which classes and methods are available in Ruby, as well as what changes have been made during the translation from C++ to Ruby.

-

As Ruby doesn't support native threading and has its own networking classes, I only exposed certain classes in the system, window, graphics, and audio libraries. For most exposed classes, the only changes I made were to make the methods start with a lower-case letter. For classes with simple Get/Set methods, I often drop the Get and Set to allow you to use sprite.left and sprite.left=. I also added a few to_i, to_f, and to_s methods where it seemed appropriate. Last but not least, I added an each iterator to VideoMode.

-

In addition to the C++ classes I exposed, I also added two helper classes in RubySFML.rb, one for rendering tiled sprites, and the other for dealing with sprites that use 2D velocity/accelerate calculations (TSprite and VSprite respectively).

-

Tips for Windows Users

-

For the Windows users out there, I apologize for not being compatible with the one-click installer, but it's being built with Visual Studio 6.0, which is ridiculously old and not compatible with any of the SFML libraries. There's a free version of Visual Studio 2005 available, and the Ruby source compiles very smoothly with it, so I can't think of a good excuse for the one-click installer to still be using 6.0.

-

On the bright side, you can distribute your game in a self-sufficient package by zipping it up with the bin and lib folders that come with the Windows binary version of this extension. Add a simple installer that creates a program group icon that runs "%install_path%\bin\ruby.exe %install_path%\my_game.rb", and you're all set. Oh yeah, OpenAL needs to be installed on any machine running this. Fortunately it is a very small/simple install, and it should be easy for you to either bundle it with your distribution or provide a link for your users to download it. All of this keeps your users from having to download/run the one-click installer, install all the necessary extensions, worry about compatibility issues, etc. It is likely that very few Windows users will ever play your game if you don't provide them everything they need to run it, so it's probably better this way.

-

Note: This custom build of Ruby does have gems and zlib (which is required by gems), but no other extensions are installed. Feel free to install any other gems/extensions you need (native mswin32 gems compiled with Visual Studio 6.0 may not work). Keep in mind that many gems often have large doc, examples, and test folders. Deleting these unnecessary folders, along with the gem cache folder, can significantly shrink the size of the file you're distributing.

- -

RubySFML Sample Code

-
-# Include the RubySFML extension
-require "RubySFML"
-include SFML
-
-# Create the main window
-mode = VideoMode.new 800, 600, 32
-window = RenderWindow.new mode, "RubySFML Test", false
-
-# Load a sprite to display
-image = Image.new "cute_image.jpg"
-sprite = Sprite.new image
- 
-# Create a graphical string to display
-text = Text.new "Hello SFML", "arial.ttf", 50
- 
-# Load a music and start playing it
-music = Music.new "nice_music.ogg"
-music.play
- 
-# Start the game loop
-running = true
-while running
-	while event = window.getEvent
-		running = false if event.type == Event::Close
-	end
- 
-	# Draw the sprite, then the text, and update the window
-	window.draw sprite
-	window.draw text
-	window.display
-end
-	
- -

RubySFML Modules

- - -

RubySFML Classes

-
    -
  • SFML::Clock - A system clock using high-performance timers where available
  • -
  • SFML::Color - A simple RGBA color class
  • -
  • SFML::Drawable - A pure virtual class representing 2D objects to use with RenderWindow
  • -
  • SFML::Event - A class representing various system events (like keyboard and mouse events)
  • -
  • SFML::FloatRect - A simple rectangle made of 4 floats
  • -
  • SFML::Image - A class for managing image files and textures
  • -
  • SFML::Input - A class for checking the current state of various input devices
  • -
  • SFML::IntRect - A simple rectangle made of 4 ints
  • -
  • SFML::Music - A class for playing streaming music files
  • -
  • SFML::PostFX - A class for mananging post-rendering shaders
  • -
  • SFML::RenderWindow - A sub-class of Window which makes it easy to draw 2D sprites and text
  • -
  • SFML::Sound - A class for playing sound clips
  • -
  • SFML::SoundBuffer - A class for managing sound clips and sound files
  • -
  • SFML::SoundBufferRecorder - A class for recording sound from a capture device, like a microphone
  • -
  • SFML::Sprite - A class for managing/drawing 2D sprites
  • -
  • SFML::Text - A class for managing/drawing 2D text (using ttf fonts)
  • -
  • SFML::VideoMode - A class for managing video modes and window sizes
  • -
  • SFML::View - A class for managing the 2D camera in RenderWindow
  • -
  • SFML::Window - A class for creating/managing a suitable window for custom OpenGL rendering (also handles all input and events)
  • -
- -

RubySFML Methods (by module/class)

-
-

SFML

-
    -
  • checkExtension(str) - Returns true if the specifed OpenGL extension is supported.
  • -
  • getMaxTextureSize - Returns the max texture size for the current display hardware.
  • -
  • getMaxTextureUnits - Returns the max number of texture units for the current display hardware.
  • -
- -
-

SFML::Clock

-
    -
  • initialize() - Default constructor
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • reset - Resets the clock
  • -
  • elapsedTime,to_f - Returns the elapsed time since the last reset
  • -
- -
-

SFML::Color

-
    -
  • initialize() - Default constructor
  • -
  • initialize(n) - Builds the color from a 32-bit unsigned RGBA value (0x12345678 is r=0x78, g=0x56, b=0x34, a=0x12)
  • -
  • initialize(r, g, b, a=255) - Builds the color from its separate components
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • r, g, b, a - Returns the r, g, b, and a values (respectively)
  • -
  • r=, g=, b=, a= - Sets the r, g, b, and a values (respectively)
  • -
  • toRGBA - Returns the 4 components as a 32-bit unsigned value (0x12345678 is r=0x78, g=0x56, b=0x34, a=0x12)
  • -
  • to_i - Alias for toRGBA
  • -
- -
-

SFML::Drawable

-
    -
  • initialize(left=0, top=0, scale=1, rotation=0, color=Color.White) - Initializes various members (scale can be a number or an array of two numbers)
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • left, left= - Gets/sets the left x position
  • -
  • top, top= - Gets/sets the top y position
  • -
  • scale, scale= - Gets/sets the scale of this object (get returns an array, set takes a num or an array
  • -
  • color, color= - Gets/sets the base color of this object
  • -
  • rotation, rotation= - Gets/sets the angle of rotation (in degrees)
  • -
  • upVector - Gets this object's up vector (based on its angle of rotation)
  • -
  • rightVector - Gets this object's right vector (based on its angle of rotation)
  • -
  • setRotationCenter(x, y) - Sets the center of rotation for this object
  • -
  • move(x, y) - Adds an offset to the left and top members
  • -
  • rotate(a) - Adds an offset to the rotation member
  • -
  • render(window) - (virtual) Override to add custom rendering code
  • -
- -
-

SFML::Event

-
For all event types
-
    -
  • initialize - Takes no parameters
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • type - Returns the event type
  • -
-
For the Event::TextEntered event type
-
    -
  • char - Returns the character typed (only for Event::TextEntered events)
  • -
-
For Event::KeyPressed and Event::KeyReleased event types
-
    -
  • code - Returns the character code (only for Event::KeyPressed and Event::KeyReleased events)
  • -
  • alt - Returns true if an Alt key is down (only for Event::KeyPressed and Event::KeyReleased events)
  • -
  • control - Returns true if a Ctrl key is down (only for Event::KeyPressed and Event::KeyReleased events)
  • -
  • shift - Returns true if a Shift key is down (only for Event::KeyPressed and Event::KeyReleased events)
  • -
-
For mouse and joystick event types
-
    -
  • delta - Returns the scroll wheel offset (only for Event::MouseWheelMoved events)
  • -
  • buttons - Returns the state of the mouse buttons (only for mouse events)
  • -
  • button - Returns the state of the joystick buttons (only for joystick events)
  • -
  • x - Returns the x position (for mouse and joystick events)
  • -
  • y - Returns the y position (for mouse and joystick events)
  • -
  • z - Returns the z position (for joystick events)
  • -
-
For the Event::Resize event type
-
    -
  • width - Returns the new window width (only for Event::Resize events)
  • -
  • height - Returns the new window height (only for Event::Resize events)
  • -
- -
-

SFML::FloatRect

-
    -
  • initialize() - Default constructor
  • -
  • initialize(left, top, right, bottom) - Initialize the rectangle's members
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • left, l - Gets the left x position
  • -
  • left=, l= - Sets the left x position
  • -
  • top, t - Gets the top y position
  • -
  • top=, t= - Sets the top y position
  • -
  • right, r - Gets the right x position
  • -
  • right=, r= - Sets the right x position
  • -
  • bottom, b - Gets the bottom y position
  • -
  • bottom=, b= - Sets the bottom y position
  • -
  • width, w - Gets the rectangle width
  • -
  • height, h - Gets the rectangle height
  • -
  • contains(x, y) - Returns true if the x, y position is inside the rectangle
  • -
  • intersects(rect) - Returns the intersection of two rectangles (nil if there is no intersection)
  • -
- -
-

SFML::Image

-
    -
  • initialize - Creates an empty image
  • -
  • initialize(image) - Creates a copy of an image
  • -
  • initialize(path) - Loads an image file using the specified path (raises a RuntimeError on failure)
  • -
  • initialize(w, h, c=Color.Black) - Creates a blank image using the specified width, height, and color
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • getValidTextureSize(s) - (static) Returns the valid nearest texture size >= s
  • -
  • width, w - Gets the image width
  • -
  • height, h - Gets the image height
  • -
  • smooth=, setSmooth(bool) - Sets the OpenGL texture parameter to linear interpolation for true or nearest for false
  • -
  • repeat=, setRepeat(bool) - Sets the OpenGL texture parameter to repeat for true or clip for false
  • -
  • loadFromFile(path) - Loads a file image using the specified path
  • -
  • saveToFile(path) - Saves the image to a file using the specified path
  • -
  • create(w, h, c=Color.Black) - Creates an empty image with the specified width, height, and color
  • -
  • createMaskFromColor(color, a=0) - Scans the image for pixels of the specified color, and sets the alpha value of those pixels to a.
  • -
  • resize(w, h, c=Color.Black) - Resizes the image. If the image grows, sets new pixels to the specified color.
  • -
  • getPixel(x, y), [x,y] - Returns the color of the specified pixel.
  • -
  • setPixel(x, y, c), [x,y]= - Sets the color of the specified pixel to c.
  • -
  • update - Updates the image in video memory (call after manually setting pixels).
  • -
  • bind - Bind the image for rendering (call if you're using this image with raw OpenGL calls).
  • -
  • getTexCoords(rect) - Converts an IntRect representing pixel positions to a FloatRect representing texture coordinates.
  • -
- -
-

SFML::Input

-
    -
  • initialize - Default constructor
  • -
  • isKeyDown(key) - Returns true if the specified key is down
  • -
  • isMouseButtonDown(button) - Returns true if the specified mouse button is down
  • -
  • isJoystickButtonDown(n, button) - Returns true if the specified button on joystick n is down
  • -
  • getMouseX - Returns the current x position of the mouse
  • -
  • getMouseY - Returns the current y position of the mouse
  • -
  • getJoystickX(n) - Returns the current x position of joystick n
  • -
  • getJoystickY(n) - Returns the current y position of joystick n
  • -
  • getJoystickZ(n) - Returns the current z position of joystick n
  • -
- -
-

SFML::IntRect

-
    -
  • initialize() - Default constructor
  • -
  • initialize(left, top, right, bottom) - Initialize the rectangle's members
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • left, l - Gets the left x position
  • -
  • left=, l= - Sets the left x position
  • -
  • top, t - Gets the top y position
  • -
  • top=, t= - Sets the top y position
  • -
  • right, r - Gets the right x position
  • -
  • right=, r= - Sets the right x position
  • -
  • bottom, b - Gets the bottom y position
  • -
  • bottom=, b= - Sets the bottom y position
  • -
  • width, w - Gets the rectangle width
  • -
  • height, h - Gets the rectangle height
  • -
  • contains(x, y) - Returns true if the x, y position is inside the rectangle
  • -
  • intersects(rect) - Returns the intersection of two rectangles (nil if there is no intersection)
  • -
- -
-

SFML::Music

-
    -
  • initialize(bufSize=44100) - Allows you to specify the buffer size.
  • -
  • initialize(path) - Opens a music file using the specified path (raises a RuntimeError on failure).
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • loop, loop= - Gets/sets a boolean indicating whether the music should loop back to the beginning when it's finished playing.
  • -
  • duration - Gets the duration of the sound stream.
  • -
  • channels - Gets the number of channels in the sound stream (1=mono, 2=stereo).
  • -
  • sampleRate - Gets the sample rate of the sound stream (44100 = CD quality).
  • -
  • status - Gets the status of the music object (Sound::Stopped, Sound::Paused, Sound::Playing).
  • -
  • open(path) - Opens a music file using the specified path (returns false on failure).
  • -
  • play - Start the music.
  • -
  • stop - Stop the music.
  • -
- -
-

SFML::PostFX

-
    -
  • (Inherits all methods from SFML::Drawable)
  • -
  • initialize() - Default constructor
  • -
  • initialize(path) - Loads an effect file using the specified path.
  • -
  • initialize(postFX) - Makes a copy of a PostFX object.
  • -
  • loadFromFile(path) - Loads an effect file using the specified path (returns false on failure).
  • -
  • setParameter(name, x, y=nil, z=nil, w=nil) - Sets the named parameter to an array of 1, 2, 3, or 4 floats.
  • -
  • setTexture(name, image) - Sets a named texture parameter.
  • -
- -
-

SFML::RenderWindow

-
    -
  • initialize(mode, title, style=Window::Resizable, antialias=0) - Creates a 2D render window using the specified VideoMode, title, and style
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • width, w - Gets the width of the window
  • -
  • height, h - Gets the height of the window
  • -
  • input - Gets the SFML::Input object for this window
  • -
  • frameTime - Gets the amount of time it took to render the previous frame
  • -
  • stencilBits - Gets the number of bits used in the stencil buffer
  • -
  • depthBits - Gets the number of bits used in the back buffer
  • -
  • view, view= - Gets/sets the SFML::View into the 2D world (2D camera position)
  • -
  • backgroundColor= - Sets the background color for the whole window
  • -
  • getEvent - Returns the next event in the window's event queue (or nil if the queue is empty)
  • -
  • useVerticalSync(bool) - Use to enable/disable vsync
  • -
  • showMouseCursor(bool) - Use to show/hide the operating system's mouse cursor
  • -
  • display - Call to swap the front and back buffers to display the frame
  • -
  • beginOpenGL - Call to save the OpenGL state before you call raw OpenGL methods
  • -
  • endOpenGL - Call to restore the OpenGL state after you call raw OpenGL methods
  • -
  • capture - Take a screenshot and return it as an image
  • -
  • draw(obj) - Call to draw any object derived from SFML::Drawable
  • -
  • setFramerateLimit - Set a fixed framerate (use 0 to disable it)
  • -
- -
-

SFML::Sound

-
    -
  • initialize(sound) - Creates a copy of a Sound object
  • -
  • initialize(buffer=nil, loop=false, pitch=1, volume=100, x=0, y=0, z=0) - Creates a Sound object using the specified sound buffer and other parameters
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • buffer, buffer= - Gets/sets this sound object's SFML::SoundBuffer.
  • -
  • loop, loop= - Gets/sets the loop flag for this sound object.
  • -
  • pitch, pitch= - Gets/sets the pitch for this sound object.
  • -
  • volume, volume= - Gets/sets the volume for this sound object.
  • -
  • position, position= - Gets/sets the position for this sound object (using an array of 3 numbers).
  • -
  • status - Gets the status of this sound object (Sound::Stopped, Sound::Paused, Sound::Playing).
  • -
  • playingOffset - Gets the current playing position of the sound (in seconds).
  • -
  • play - Starts playing the sound.
  • -
  • pause - Pauses the sound.
  • -
  • stop - Stops playing the sound.
  • -
- -
-

SFML::SoundBuffer

-
    -
  • initialize() - Default constructor
  • -
  • initialize(soundBuffer) - Creates a copy of a SoundBuffer object.
  • -
  • initialize(path) - Loads a sound file using the specified path (raises a RuntimeError on failure).
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • samples - Gets the raw (binary) samples as a Ruby string.
  • -
  • samplesCount - Gets the total number of samples (shorts) returned by the samples call.
  • -
  • samplesRate - Gets the sample rate (or number of samples per second for each channel).
  • -
  • channels - Gets the number of channels (1=mono, 2=stereo).
  • -
  • duration - Gets the duration of the sound buffer (in seconds).
  • -
  • loadFromFile(path) - Loads a sound file using the specified path (returns false on failure).
  • -
  • saveToFile(path) - Saves a sound file to the specified path (returns false on failure).
  • -
  • loadFromMemory(samples, samplesCount, channels, sampleRate) - Builds a SoundBuffer from raw (binary) samples.
  • -
- -
-

SFML::SoundBufferRecorder

-
    -
  • initialize() - Default constructor
  • -
  • canCapture - (static) Returns true if the current system is capable of sound capture
  • -
  • start(sampleRate=44100) - Starts the sound capture
  • -
  • stop - Stops the sound capture
  • -
  • buffer - Gets the SoundBuffer object containing the captured audio
  • -
  • sampleRate - Gets the current sample rate
  • -
- -
-

SFML::Sprite

-
    -
  • (Inherits all methods from SFML::Drawable)
  • -
  • initialize() - Default constructor
  • -
  • initialize(image, left=0, top=0, scale=1, rotation=0, c=Color.White) - Builds a Sprite object with the specified image and other options (scale can take one number or an array of two numbers)
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • width, w - Gets the sprite's width (affected by subRect and scale)
  • -
  • height, h - Gets the sprite's height (affected by subRect and scale)
  • -
  • right, right= - Gets/sets the right x position
  • -
  • bottom, bottom= - Gets/sets the bottom y position
  • -
  • x, x= - Gets/sets the center x position
  • -
  • y, y= - Gets/sets the center y position
  • -
  • image, image= - Gets/sets the image to use for this sprite
  • -
  • subRect, subRect= - Gets/sets a rectangle within the image to use (generally used for tiled images)
  • -
  • getPixel(x,y), [x,y] - Gets the color of a pixel within the sprite's subRect of the sprite's image ([0,0] would be the top-left pixel of the subRect)
  • -
  • radius - Gets the bounding radius of the sprite (based on height and width)
  • -
  • distance(sprite) - Gets the distance between the center positions of two sprites
  • -
  • render(window) - (virtual) Override to add custom rendering code
  • -
- -
-

SFML::Text

-
    -
  • (Inherits all methods from SFML::Drawable)
  • -
  • initialize(str="", font="", size=32) - Initialize the Text object to the specified string, font, and font size.
  • -
  • preloadFont(font, size) - (static) Call this to force the font to be loaded before the first time it gets rendered.
  • - -
  • text, text= - Gets/sets the current text string.
  • -
  • font, font= - Gets/sets the current font.
  • -
  • size, size= - Gets/sets the current font size.
  • -
  • getRect - Gets the current screen rectangle.
  • -
  • render(window) - (virtual) Override to add custom rendering code
  • -
- -
-

SFML::VideoMode

-
    -
  • initialize() - Default constructor
  • -
  • initialize(w, h, bpp=32) - Creates a VideoMode with the specified width, height, and bits-per-pixel.
  • -
  • desktop - (static) Returns the VideoMode for the current desktop.
  • -
  • each - (static) Iterates through all valid full-screen video modes.
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • width, w, width=, w= - Gets/sets the current width of this VideoMode.
  • -
  • height, h, height=, h= - Gets/sets the current height of this VideoMode.
  • -
  • bitsPerPixel, bpp, bitsPerPixel=, bpp= - Gets/sets the current bits-per-pixel of this VideoMode.
  • -
  • isValid - Returns true if the current VideoMode is a valid full-screen mode.
  • -
- -
-

SFML::View

-
    -
  • initialize() - Default constructor
  • -
  • initialize(left, top, width, height, zoom=1) - Initializes all View members
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • left, l, left=, l= - Gets/sets the left x position for the view
  • -
  • top, t, top=, t= - Gets/sets the top y position for the view
  • -
  • width, w, width=, w= - Gets/sets the width for the view
  • -
  • height, h, height=, h= - Gets/sets the height for the view
  • -
  • zoom, zoom= - Gets/sets the zoom factor for the view
  • -
- -
-

SFML::Window

-
    -
  • initialize(mode, title, style=Window::Resizable, antialias=0) - Creates a window using the specified VideoMode, title, and style
  • -
  • to_s - Returns a formatted string representing this object (for debugging purposes)
  • -
  • width, w - Gets the width of the window
  • -
  • height, h - Gets the height of the window
  • -
  • input - Gets the SFML::Input object for this window
  • -
  • frameTime - Gets the amount of time it took to render the previous frame
  • -
  • stencilBits - Gets the number of bits used in the stencil buffer
  • -
  • depthBits - Gets the number of bits used in the back buffer
  • -
  • getEvent - Returns the next event in the window's event queue (or nil if the queue is empty)
  • -
  • useVerticalSync(bool) - Use to enable/disable vsync
  • -
  • showMouseCursor(bool) - Use to show/hide the operating system's mouse cursor
  • -
  • display - Call to swap the front and back buffers to display the frame
  • -
  • setCurrent - Sets this window as the current target for rendering
  • -
  • setFramerateLimit - Set a fixed framerate (use 0 to disable it)
  • -
- - - - diff --git a/ruby/doc/Reference-fr.html b/ruby/doc/Reference-fr.html deleted file mode 100644 index ce3e00d4..00000000 --- a/ruby/doc/Reference-fr.html +++ /dev/null @@ -1,430 +0,0 @@ - -RubySFML Documentation - - - - -

Introduction

-

Cette documentation est assez courte, mais étant donné que cette extension n'est qu'une simple encapsulation des classes C++ de SFML, il est conseillé de se baser sur la documentation SFML pour obtenir plus de détails sur les classes et les fonctions. Cette documentation a simplement pour but de détailler les classes et fonctions qui sont présentes dans l'extension RubySFML, ainsi que de décrire les changements qui ont été effectués durant la traduction C++ vers Ruby.

-

Etant donné que Ruby ne supporte pas les threads et possède ses propres classes pour le réseau, seules certaines classes des modules système, fenêtrage, graphisme et audio sont exposées. Pour la plupart des classes, les seuls changements effectués ont été de faire débuter les noms des fonctions par une minuscule. Pour les classes possédant des accesseurs simples, ceux-ci ont souvent été abandonnés pour utiliser une syntaxe plus simple (par exemple sprite.left = ...). Quelques fonctions to_i, to_f et to_s ont étalement été ajoutées là où cela semblait pertinent. Enfin, un itérateur "each" a été ajouté à VideoMode.

-

En plus des classes C++ exposées, deux classes utiles ont également été ajoutées à RubySFML.rb, l'une pour afficher des sprites à base de tuiles, et l'autre pour gérer les sprites utilisant des calculs de vitesse / acceleration (respectivement TSprite et VSprite).

- -

Astuces pour les utilisateurs Windows

-

Pour les utilisateurs Windows, nous regrettons de ne pas pouvoir être compatibles avec l'installeur "one-click", mais celui-ci est compilé avec Visual Studio 6.0, qui est ridiculeusement vieux et incompatible avec les bibliothèques SFML. Il existe une version gratuite de Visual Studio 2005, et les sources de Ruby compilent parfaitement avec celle-ci, on ne peut donc trouver aucune bonne excuse à l'installeur pour toujours utiliser Visual C++ 6.0.

-

La bonne nouvelle est que vous pouvez distribuer vos applications dans une archive qui se suffit à elle-même, en incluant les répertoires "bin" et "lib" qui sont inclus dans la version Windows de cette extension. Ajoutez un installeur simple qui crée une icône du menu démarrer exécutant "%install_path%\bin\ruby.exe %install_path%\my_game.rb", et tout sera parfait. Oh, encore une chose, OpenAL doit être installé pour exécuter les programmes utilisant RubySFML. Heureusement, il s'agit d'un installeur extrêmement petit et simple, et vous pourrez sans problème le fournir dans vos installations ou donner un lien pour le télécharger. Tout ceci évite à vos utilisateurs d'avoir à télécharger / exécuter l'installeur "one-click", installer toutes les extensions nécessaires, s'occuper des problèmes de compatibilité, etc. Il est probable que très peu d'utilisateurs Windows utilisent vos applications si vous ne leur fournissez pas tout ce dont ils ont besoin, c'est donc probablement mieux de cette manière.

-

Note : cette compilation perso de Ruby ne contient pas gems et zlib (qui est recquis par gems), mais aucune autre extension n'est installée. N'hésitez pas à installer n'importe quelle autre gems / extension dont vous auriez besoin (les gems mswin32 compilés avec Visual Studio 6.0 ne fonctionneront probablement pas). Gardez en tête que beaucoup de gems ont une documentation conséquente, des exemples et des répertoires de test. Supprimer ces répertoires innutiles, ainsi que le répertoire cache des gems, peut réduire de manière significative la taille des fichiers que vous distribuez.

- -

Exemple de code RubySFML

-
-# On inclut l'extension RubySFML
-require "RubySFML"
-include SFML
-
-# On crée la fenêtre principale
-mode = VideoMode.new 800, 600, 32
-window = RenderWindow.new mode, "RubySFML Test", false
-
-# On charge un sprite à afficher
-image = Image.new "cute_image.jpg"
-sprite = Sprite.new image
- 
-# On crée une chaîne graphique à afficher
-text = Text.new "Hello SFML", "arial.ttf", 50
- 
-# On charge une musique et on commence à la jouer
-music = Music.new "nice_music.ogg"
-music.play
- 
-# On démarre la boucle principale
-running = true
-while running
-	while event = window.getEvent
-		running = false if event.type == Event::Close
-	end
- 
-	# On dessine le sprite, le texte, puis on met à jour la fenêtre
-	window.draw sprite
-	window.draw text
-	window.display
-end
-
- -

Modules RubySFML

- - -

Classes RubySFML

-
    -
  • SFML::Clock - Une horloge système utilisant les timers haute performance lorsqu'ils sont accessibles
  • -
  • SFML::Color - Une classe de couleurs RGBA très simple
  • -
  • SFML::Drawable - Une classe abstraite représentant les objets 2D utilisés dans une Renderwindow
  • -
  • SFML::Event - Une classe représentant les différents évènements système (clavier, souris, etc.)
  • -
  • SFML::FloatRect - Un simple rectangle composé de 4 coordonnées flottantes
  • -
  • SFML::Image - Une classe pour gérer les fichiers images et les textures
  • -
  • SFML::Input - Une classe pour récupérer l'état des périphériques d'entrée (clavier, souris, joystick)
  • -
  • SFML::IntRect - Un simple rectangle composé de 4 coordonnées entières
  • -
  • SFML::Music - Une classe pour jouer des musiques en streaming
  • -
  • SFML::PostFX - Une classe pour gérer les shaders post-rendu
  • -
  • SFML::RenderWindow - Une sous-classe de Window wui permet d'afficher les objets 2D tels que sprites et texte
  • -
  • SFML::Sound - Une classe pour jouer des sons
  • -
  • SFML::SoundBuffer - Une classe pour stocker des échantillons audio
  • -
  • SFML::SoundBufferRecorder - Une classe pour enregistrer du son à partir d'un périphérique de capture audio, comme un microphone
  • -
  • SFML::Sprite - Une classe pour gérer et afficher des sprites 2D
  • -
  • SFML::Text - Une classe pour gérer et afficher du texte 2D
  • -
  • SFML::VideoMode - Une classe pour gérer les différents modes vidéo
  • -
  • SFML::View - Une classe pour gérer la caméra 2D dans une RenderWindow
  • -
  • SFML::Window - Une classe pour créer et gérer une fenêtre capable d'afficher un rendu OpenGL (gère également les entrées et les évènements)
  • -
- -

Fonctions RubySFML (par module / classe)

-
-

SFML

-
    -
  • checkExtension(str) - Renvoie vrai si l'extension OpenGL donnée est supportée.
  • -
  • getMaxTextureSize - Renvoie la taille maximum de texture.
  • -
  • getMaxTextureUnits - Renvoie le nombre maximum d'unités de textures utilisables.
  • -
- -
-

SFML::Clock

-
    -
  • initialize() - Constructeur par défaut
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • reset - Remet à zéro l'horloge
  • -
  • elapsedTime,to_f - Renvoie le nombre de secondes écoulées depuis le dernier appel à reset
  • -
- -
-

SFML::Color

-
    -
  • initialize() - Constructeur par défaut
  • -
  • initialize(n) - Construit l'objet à partir d'une couleur 32 bits entière non signée (0x12345678 donne r=0x78, g=0x56, b=0x34, a=0x12)
  • -
  • initialize(r, g, b, a=255) - Construit la couleur à partir de ses composantes
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • r, g, b, a - Renvoie les composantes r, g, b et a (respectivement)
  • -
  • r=, g=, b=, a= - Affecte les composantes r, g, b et a (respectivement)
  • -
  • toRGBA -Renvoie les 4 composantes de la couleur sous forme d'entier RGBA 32 bits non signé (0x12345678 donne r=0x78, g=0x56, b=0x34, a=0x12)
  • -
  • to_i - Alias pour toRGBA
  • -
- -
-

SFML::Drawable

-
    -
  • initialize(left=0, top=0, scale=1, rotation=0, color=Color.White) - Initialise les différents membres (scale peut être un nombre ou un tableau de deux nombres)
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • left, left= - Modifie / récupère la position x de l'objet
  • -
  • top, top= - Modifie / récupère la position y de l'objet
  • -
  • scale, scale= - Modifie / récupère le facteur d'échelle de l'objet (renvoie un tableau, mais peut être initialisé à partir d'un tableau ou d'un seul nombre)
  • -
  • color, color= - Modifie / récupère la couleur de l'objet
  • -
  • rotation, rotation= - Modifie / récupère l'angle de rotation (en degrés)
  • -
  • upVector - Récupère le vecteur "haut" de l'objet (basé sur son angle de rotation)
  • -
  • rightVector - Récupère le vecteur "droite" de l'objet (basé sur son angle de rotation)
  • -
  • setRotationCenter(x, y) - Change le centre de rotation de l'objet
  • -
  • move(x, y) - Déplace l'objet horizontalement et verticalement
  • -
  • rotate(a) - Fait tourner l'objet
  • -
  • render(window) - (virtuelle) à redéfinir pour personnaliser le rendu de l'objet
  • -
- -
-

SFML::Event

-
Pour tous les types d'évènements
-
    -
  • initialize - Ne prend aucun paramètre
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • type - Renvoie le type de l'évènement
  • -
-
Pour les évènements de type Event::TextEntered
-
    -
  • char - Renvoie le caractère entré (uniquement pour les évènements Event::TextEntered)
  • -
-
Pour les évènements de type Event::KeyPressed et Event::KeyReleased
-
    -
  • code - Renvoie le code de la touche (uniquement pour les évènements Event::KeyPressed et Event::KeyReleased)
  • -
  • alt - Renvoie vrai si la touche Alt est enfoncée (uniquement pour les évènements Event::KeyPressed et Event::KeyReleased)
  • -
  • control - Renvoie vrai si la touche Control est enfoncée (uniquement pour les évènements Event::KeyPressed et Event::KeyReleased)
  • -
  • shift - Renvoie vrai si la touche Shift est enfoncée (uniquement pour les évènements Event::KeyPressed et Event::KeyReleased)
  • -
-
Pour les évènements de type souris et joystick
-
    -
  • delta - Renvoie le déplacement de la molette souris (uniquement pour les évènements Event::MouseWheelMoved)
  • -
  • buttons - Renvoie l'état des boutons de la souris (uniquement pour les évènements souris)
  • -
  • button - Renvoie l'état des boutons du joystick (uniquement pour les évènements joystick)
  • -
  • x - Renvoie la position x (uniquement pour les évènements souris et joystick)
  • -
  • y - Renvoie la position y (uniquement pour les évènements souris et joystick)
  • -
  • z - Renvoie la position z (uniquement pour les évènements joystick)
  • -
-
Pour les évènements de type Event::Resize
-
    -
  • width - Renvoie la nouvelle largeur de la fenêtre (uniquement pour les évènements Event::Resize)
  • -
  • height - Renvoie la nouvelle hauteur de la fenêtre (uniquement pour les évènements Event::Resize)
  • -
- -
-

SFML::FloatRect

-
    -
  • initialize() - Constructeur par défaut
  • -
  • initialize(left, top, right, bottom) - Initialise les coordonnées du rectangle (gauche, haut, droite, bas)
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • left, l - Renvoie la position x gauche
  • -
  • left=, l= - Modifie la position x gauche
  • -
  • top, t - Renvoie la position y haute
  • -
  • top=, t= - Modifie la position y haute
  • -
  • right, r - Renvoie la position x droite
  • -
  • right=, r= - Modifie la position x droite
  • -
  • bottom, b - Renvoie la position y basse
  • -
  • bottom=, b= - Modifie la position y basse
  • -
  • width, w - Renvoie la largeur du rectangle
  • -
  • height, h - Renvoie la hauteur du rectangle
  • -
  • contains(x, y) - Renvoie vrai si le point (x, y) est à l'intérieur du rectangle
  • -
  • intersects(rect) - Renvoie l'intersection de deux rectangles (nil s'il n'y a aucune intersection)
  • -
- -
-

SFML::Image

-
    -
  • initialize - Crée une image vide
  • -
  • initialize(image) - Crée une copie d'une image
  • -
  • initialize(path) - Charge une image à partir du fichier spécifié (lève une erreur RuntimeError si échoue)
  • -
  • initialize(w, h, c=Color.Black) - Crée une image vide avec les dimensions et la couleur données
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • getValidTextureSize(s) - (statique) Renvoie la taille de texture valide la plus proche >= s
  • -
  • width, w - Renvoie la largeur de l'image
  • -
  • height, h - Renvoie la hauteur de l'image
  • -
  • smooth=, setSmooth(bool) - Modifie les paramètres de lissage de l'image (true pour activer, false pour désactiver)
  • -
  • repeat=, setRepeat(bool) - Modifie les paramètres de répétition de l'image (true pour activer, false pour désactiver)
  • -
  • loadFromFile(path) - Charge l'image à partir du fichier spécifié (renvoie faux si échoue)
  • -
  • saveToFile(path) - Sauvegarde l'image dans le fichier spécifié
  • -
  • create(w, h, c=Color.Black) - Crée une image vide avec les dimensions et la couleur données
  • -
  • createMaskFromColor(color, a=0) - Remplace la valeur alpha (transparence) de tous les pixels ayant la couleur spécifiée, par la valeur de transparence donnée
  • -
  • resize(w, h, c=Color.Black) - Redimensionne l'image. Si celle-ci est agrandie, les nouveaux pixels ont la couleur spécifiée
  • -
  • getPixel(x, y), [x,y] - Renvoie la couleur du pixel (x, y)
  • -
  • setPixel(x, y, c), [x,y]= - Change la couleur du pixel (x, y) par la couleur spécifiée
  • -
  • update - Met à jour l'image en mémoire vidéo (à appeler après toute modification manuelle des pixels)
  • -
  • bind - Utilise l'image pour le rendu (à appeler si vous utiliser l'image en tant que texture pour un rendu OpenGL)
  • -
  • getTexCoords(rect) - Convertit des coordonnées entières en pixel, en coordonnées flottantes de texture
  • -
- -
-

SFML::Input

-
    -
  • initialize - Constructeur par défaut
  • -
  • isKeyDown(key) - Renvoie vrai si la touche spécifiée est enfoncée
  • -
  • isMouseButtonDown(button) - Renvoie vrai si le bouton souris spécifié est enfoncé
  • -
  • isJoystickButtonDown(n, button) - Renvoie vrai si le bouton du joystick n spécifié est enfoncé
  • -
  • getMouseX - Renvoie la position x actuelle de la souris
  • -
  • getMouseY - Renvoie la position y actuelle de la souris
  • -
  • getJoystickX(n) - Renvoie la position x actuelle du joystick n
  • -
  • getJoystickY(n) - Renvoie la position y actuelle du joystick n
  • -
  • getJoystickZ(n) - Renvoie la position z actuelle du joystick n
  • -
- -
-

SFML::IntRect

-
    -
  • initialize() - Constructeur par défaut
  • -
  • initialize(left, top, right, bottom) - Initialise les coordonnées du rectangle (gauche, haut, droite, bas)
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • left, l - Renvoie la position x gauche
  • -
  • left=, l= - Modifie la position x gauche
  • -
  • top, t - Renvoie la position y haute
  • -
  • top=, t= - Modifie la position y haute
  • -
  • right, r - Renvoie la position x droite
  • -
  • right=, r= - Modifie la position x droite
  • -
  • bottom, b - Renvoie la position y basse
  • -
  • bottom=, b= - Modifie la position y basse
  • -
  • width, w - Renvoie la largeur du rectangle
  • -
  • height, h - Renvoie la hauteur du rectangle
  • -
  • contains(x, y) - Renvoie vrai si le point (x, y) est à l'intérieur du rectangle
  • -
  • intersects(rect) - Renvoie l'intersection de deux rectangles (nil s'il n'y a aucune intersection)
  • -
- -
-

SFML::Music

-
    -
  • initialize(bufSize=44100) - Permet de spécifier la taille du tampon interne (à modifier si vous rencontrez des problèmes de performances ou de saccades)
  • -
  • initialize(path) - Ouvre la musique à partir du fichier spécifié (lève une erreur RuntimeError si échoue).
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • loop, loop= - Renvoie / modifie un booléen indiquant si la musique doit boucler lorsqu'elle est terminée
  • -
  • duration - Renvoie la durée totale de la musique, en secondes
  • -
  • channels - Renvoie le nombre de canaux de la musique (1 = mono, 2 = stereo).
  • -
  • sampleRate - Renvoie le taux d'échantillonnage de la musique (44100 = qualité CD).
  • -
  • status - Renvoie l'état de lecture de la musique (Sound::Stopped, Sound::Paused, Sound::Playing).
  • -
  • open(path) - Ouvre la musique à partir du fichier spécifié (renvoie faux si échoue).
  • -
  • play - Démarre la lecture de la musique
  • -
  • stop - Stoppe la lecture de la musique
  • -
- -
-

SFML::PostFX

-
    -
  • (Hérite de toutes les fonctions de SFML::Drawable)
  • -
  • initialize() - Constructeur par défaut
  • -
  • initialize(path) - Charge le fichier effet spécifié
  • -
  • initialize(postFX) - Crée une copie d'un objet PostFX
  • -
  • loadFromFile(path) - Charge le fichier effet spécifié (renvoie faux si échoue)
  • -
  • setParameter(name, x, y=nil, z=nil, w=nil) - Change la valeur d'un paramètre de l'effet
  • -
  • setTexture(name, image) - Change une texture de l'effet
  • -
- -
-

SFML::RenderWindow

-
    -
  • initialize(mode, title, style=Window::Resizable, antialias=0) - Crée une fenêtre de rendu 2D en utilisant le mode vidéo, le titre et le style spécifiés
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • width, w - Renvoie la largeur de la fenêtre
  • -
  • height, h - Renvoie la hauteur de la fenêtre
  • -
  • input - Renvoie l'objet SFML::Input associé à cette fenêtre
  • -
  • frameTime - Renvoie le temps écoulé depuis le dernier rafraîchissement
  • -
  • stencilBits - Renvoie le nombre de bits alloués au tampon stencil
  • -
  • depthBits - Renvoie le nombre de bits alloués au tampon de profondeur
  • -
  • view, view= - Renvoie / modifie l'objet SFML::View courant (camera 2D)
  • -
  • backgroundColor= - Modifie la couleur de fond de la fenêtre
  • -
  • getEvent - Renvoie le prochain évènement en attente dans la file d'évènements (ou nil s'il n'y en a aucun)
  • -
  • useVerticalSync(bool) - Active / désactive la synchronisation verticale
  • -
  • showMouseCursor(bool) - Affiche / cache le curseur souris sur la fenêtre
  • -
  • display - Met à jour la fenêtre à l'écran
  • -
  • beginOpenGL - Sauvegarde les états OpenGL internes avant que vous ne placiez des appels OpenGL
  • -
  • endOpenGL - Restaure les états OpenGL internes après que vous ayiez placé des appels OpenGL
  • -
  • capture - Prend une capture d'écran et la renvoie sous forme d'image
  • -
  • draw(obj) - Affiche dans la fenêtre tout objet dérivant de SFML::Drawable
  • -
  • setFramerateLimit - Fixe une limite de rafraîchissement, en images par seconde (0 pour désactiver)
  • -
- -
-

SFML::Sound

-
    -
  • initialize(sound) - Crée une copie d'un objet son
  • -
  • initialize(buffer=nil, loop=false, pitch=1, volume=100, x=0, y=0, z=0) - Crée un objet son en utilisant le tampon audio et les autres paramètres spécifiés
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • buffer, buffer= - Renvoie / modifie le SFML::SoundBuffer de cet objet
  • -
  • loop, loop= - Renvoie / modifie l'état de bouclage du son
  • -
  • pitch, pitch= - Renvoie / modifie le pitch du son
  • -
  • volume, volume= - Renvoie / modifie le volume du son
  • -
  • position, position= -Renvoie / modifie la position du son (utilise un tableau de 3 valeurs)
  • -
  • status - Renvoie l'état de lecture du son (Sound::Stopped, Sound::Paused, Sound::Playing).
  • -
  • playingOffset - Renvoie la position de lecture courante du son (en secondes).
  • -
  • play - Démarre la lecture du son
  • -
  • pause - Met ne pause le son
  • -
  • stop - Stoppe la lecture du son
  • -
- -
-

SFML::SoundBuffer

-
    -
  • initialize() - Constructeur par défaut
  • -
  • initialize(soundBuffer) - Crée une copie d'un objet SoundBuffer
  • -
  • initialize(path) - Charge le tampon sonore à partir du fichier spécifié (lève une erreur RuntimeError si échoue).
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • samples - Renvoie les échantillons sonores bruts sous forme de chaîne Ruby
  • -
  • samplesCount - Renvoie le nombre d'échantillons sonores du tampon
  • -
  • samplesRate - Renvoie le taux d'échantillonnage (nombre d'échantillons par seconde pour chaque canal)
  • -
  • channels - Renvoie le nombre de canaux (1 = mono, 2 = stereo)
  • -
  • duration - Renvoie la durée du tampon sonore (en secondes)
  • -
  • loadFromFile(path) - Charge le tampon sonore à partir du fichier spécifié (renvoie faux si échoue)
  • -
  • saveToFile(path) - Sauvegarde le tampon sonore dans le fichier spécifié (renvoie faux si échoue)
  • -
  • loadFromMemory(samples, samplesCount, channels, sampleRate) - Construit le tampon sonore à partir d'échantillons bruts en mémoire
  • -
- -
-

SFML::SoundBufferRecorder

-
    -
  • initialize() - Constructeur par défaut
  • -
  • canCapture - (statique) Renvoie vrai si le système est capable d'effectuer les captures audio
  • -
  • start(sampleRate=44100) - Démarre la capture audio
  • -
  • stop - Stoppe la capture audio
  • -
  • buffer - Renvoie l'objet SoundBuffer contenant le son capturé
  • -
  • sampleRate - Renvoie le taux d'échantillonnage utilisé pour la capture
  • -
- -
-

SFML::Sprite

-
    -
  • (Hérite de toutes les fonctions de SFML::Drawable)
  • -
  • initialize() - Constructeur par défaut
  • -
  • initialize(image, left=0, top=0, scale=1, rotation=0, c=Color.White) - Construit le sprite à partir de l'image et des autres paramètres donnés (le paramètre scale peut être un nombre simple ou un tableau de deux nombres)
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • width, w - Renvoie la largeur du sprite (affectée par subRect et scale)
  • -
  • height, h - Renvoie la hauteur du sprite (affectée par subRect et scale)
  • -
  • right, right= - Renvoie / modifie la position x droite du sprite
  • -
  • bottom, bottom= - Renvoie / modifie la position y basse du sprite
  • -
  • x, x= - Renvoie / modifie la position x centrale du sprite
  • -
  • y, y= - Renvoie / modifie la position y centrale du sprite
  • -
  • image, image= - Renvoie / modifie l'image utilisée par le sprite
  • -
  • subRect, subRect= - Renvoie / modifie le sous-rectangle de l'image source utilisé pour le sprite
  • -
  • getPixel(x,y), [x,y] - Renvoie la couleur d'un pixel du sprite relativement à son sous-rectangle ([0, 0] serait le pixel haut-gauche du sous-rectangle)
  • -
  • radius - Renvoie le rayon du cercle englobant du sprite (basé sur sa hauteur et sa largeur)
  • -
  • distance(sprite) - Renvoie la distance entre les centres de deux sprites
  • -
  • render(window) - (virtuelle) A redéfinir pour effectuer un rendu personnalisé
  • -
- -
-

SFML::Text

-
    -
  • (Hérite de toutes les fonctions de SFML::Drawable)
  • -
  • initialize(str="", font="", size=32) - Initialise l'objet Text avec le texte, la police et la taille spécifiés
  • -
  • preloadFont(font, size) - (statique) Force le chargement de la police avant sa première utilisation
  • -
  • text, text= - Renvoie / modifie la chaîne à afficher
  • -
  • font, font= - Renvoie / modifie la police de caractères à utiliser
  • -
  • size, size= - Renvoie / modifie la taille du texte
  • -
  • getRect - Renvoie le rectangle englobant de la chaîne graphique
  • -
  • render(window) - (virtuelle) A redéfinir pour effectuer un rendu personnalisé
  • -
- -
-

SFML::VideoMode

-
    -
  • initialize() - Constructeur par défaut
  • -
  • initialize(w, h, bpp=32) - Crée un mode vidéo avec les dimensions et la profondeur (bits par pixel) spécifiées
  • -
  • desktop - (statique) Renvoie le mode vidéo actuel du bureau
  • -
  • each - (statique) Itère sur tous les modes vidéo plein écran valides
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • width, w, width=, w= - Renvoie / modifie la largeur du mode vidéo
  • -
  • height, h, height=, h= - Renvoie / modifie la hauteur du mode vidéo
  • -
  • bitsPerPixel, bpp, bitsPerPixel=, bpp= - Renvoie / modifie la profondeur (bits par pixels) du mode vidéo
  • -
  • isValid - Renvoie vrai si le mode est un mode plein écran valide
  • -
- -
-

SFML::View

-
    -
  • initialize() - Constructeur par défaut
  • -
  • initialize(left, top, width, height, zoom=1) - Initialise la vue avec la position, taille et le zomm spécifiés
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • left, l, left=, l= - Renvoie / modifie la position x gauche de la vue
  • -
  • top, t, top=, t= - Renvoie / modifie la position y haute de la vue
  • -
  • width, w, width=, w= - Renvoie / modifie la largeur de la vue
  • -
  • height, h, height=, h= - Renvoie / modifie la hauteur de la vue
  • -
  • zoom, zoom= - Renvoie / modifie le facteur de zoom de la vue
  • -
- -
-

SFML::Window

-
    -
  • initialize(mode, title, style=Window::Resizable, antialias=0) - Crée une fenêtre en utilisant le mode vidéo, le titre et le style spécifiés
  • -
  • to_s - Renvoie une chaîne formatée décrivant l'objet (pour déboguage)
  • -
  • width, w - Renvoie la largeur de la fenêtre
  • -
  • height, h - Renvoie la hauteur de la fenêtre
  • -
  • input - Renvoie l'objet SFML::Input associé à cette fenêtre
  • -
  • frameTime - Renvoie le temps écoulé depuis le dernier rafraîchissement
  • -
  • stencilBits - Renvoie le nombre de bits alloués au tampon stencil
  • -
  • depthBits - Renvoie le nombre de bits alloués au tampon de profondeur
  • -
  • getEvent - Renvoie le prochain évènement en attente dans la file d'évènements (ou nil s'il n'y en a aucun)
  • -
  • useVerticalSync(bool) - Active / désactive la synchronisation verticale
  • -
  • showMouseCursor(bool) - Affiche / cache le curseur souris sur la fenêtre
  • -
  • display - Met à jour la fenêtre à l'écran
  • -
  • setCurrent - Rend la fenêtre courante active pour le rendu
  • -
  • setFramerateLimit - Fixe une limite de rafraîchissement, en images par seconde (0 pour désactiver)
  • -
- - - diff --git a/ruby/gzip.exe b/ruby/gzip.exe deleted file mode 100644 index a585edd9ce783d867ec5dc40798a21e5f564fa3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49152 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

)LsjHYGumukdv?iW=XZ z;D6yZJN8s*r|Iq`rQOwal>;Bo3)k#Cz^PjimeksChHg6Ro2&b-Ueor5>v+Ax8-^P7 z>gc|&Kgck=b%)=uW3K0j>UK7DIWJ7`%EM9_r!rBR&F*rWc+28kyu1pz)ReKFUSI5f z%~0<2T*@?Y=b!CN$&(4mzkDhd?oSJ)7ktG`mGAK~{&_K=_xZ%^A&<{uM#TzqlHvN9Lo~a&(UV+q zpC4npKCJ0Oe|Br_%ZYUXj#5q1`<8+Bm0jK1!)2y>y{pD{RksV?^qZ!>Jz6f^?NTfw zPcWU2t_^kjCSS}-pOb(X2V>ew=4R{0s{(5FKIm2N`evcwWsbh@O2gDh&SLX0+i2*0 z_K|Vp55Hi=vdC>h^>(>!Y>Xf(lM-5g6W<`AVd@UpEMYQXh)bo&6at(dh`6*$C``pV7;zO!p&YG7T>RQ|_?E$?XobpZ zHym+QLN)9JYa2mhvpW%Yx15&9@y>~$@w@7=ojtIh5Nd#RG2+7Xv(|9XiCbbjiM3pC z)BY*jx^)I+yx$qyIt*M>qgv25&(QAzt%TpwgZC}9{}dDdj4cl|jt%O|6+^&$ zJV(4(g%~8v@OvXB7HEY8zDJT2ejtFt{ya#^8vY#8R%!t$64AR=xa*1*ks>gqLQ6<+ z4U_qbAkUu^;YZ(52nm~na@=J^>q!Y7iDf+|Vc=iM<-!(8x&k`1yGYqhUwjfKET)wB zP#_Tr<U0>`g!MtImMO8$vuc~Ye5+O| zaUc2+)^f^P=&(&&3mw5aol3z@3$eBpN1GvLXjm>^spP7&l-6U3@HGk86t#78RBZ67 i6$08C%UsC&Pm!tiQ0Z!$1%KH8|CL+g#O?dPrhfnq1#JHS diff --git a/ruby/rubygems-0.9.4.zip b/ruby/rubygems-0.9.4.zip deleted file mode 100644 index 79c1199be8ed23b30407eb203031b50c79472ff2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281601 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�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

op-#Y4 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 diff --git a/ruby/tar.exe b/ruby/tar.exe deleted file mode 100644 index d528bd368154933c8ccb84e6b62f08c0b82bbf40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114688 zcmeFae|%KM)jxid-6WfkunQy@HIZ0XMMESKqJ#~)NQgmx?PkdaDnHa>Tq7##uHw@K z5_ebGTo$86i>kdaYG;p_@e<4QEZF0Pdn+NMnMRI?B{*X+`HMJ&(lx8 zug~lIm-~9%z4y+KGiT16IdkUBnYnYn->w)GMKR)v#}#EW?)0|xA=yu;NMK|73R5jmKbn~st zufHfKC(EjV-dla?H<_y;jt+;P6)^fTHM%N7?PVeIP+8cl1p)yXbkz=N!%t2U{?aVaBG(m@1NutkPmI|I)aJUehF>d-STq8t76yV9qnLm1JO6H!`9%=g5N0+sQu z6ve?$|BwHG=RTmaqBiAQ+wvms^{c!nQcTwHrMhbP>6jEL$~70=zWiG6wTiMg3!zkZ zO2ahJQ!zE{7s+Hw;Ch5#gLKzu_n~BjM>Og6yT|V+@Erxdqri6*_>KbKQQ$iYd`E%r zDDWKxzN5f*6!`y<0uk}bbR`(|PIjwatI6$XjC)?aak|o|h^<=`#lJ1v(MT_OA1X>? zsu+ohoqtw?NY0(#twSyYS({}gAC8-jjYa0BVV=YIi|1X#fu>-zgJAe30hJSoaEK|uM53{NKhTJKiW(WiA}u^s+=+1iwo>3@ zQs-EWYF-Trch@_do*E>rjpr=~><9%q;&~oCt2tDLI&B4>o$>e70o2NWGRr&GKN$Cp zQu8RbHvS%P^bcnF{^dV;w>Qgwa*;P}Sy^;x*Rsu^1L}`TyVS*2Q*ghxG-BEg=s?aP zk@LT%pcGlrY=5WS;gnc_r2ToRh|8lmw|{Fq$&PpUW zrG$-59DnkUdL2(K!O_eK{ydc6loAfg1g|C%oKnKT8V2xaA|BOm%=L_KMR43Rfo_Ue zt;Z%>39P`a6u5^IEYTC}MfPP&UGcnyXxOXu-qhYs-7>r0Gf3Q;-l%jCm&Nm{kjS$M zAUwVJ6GvZB6wjOVMDS!))oC?I)RPtf)6=gz?L|CgsZNWBY+7J$t`NVdHKphT!T~Ui z<9pJgln`0O#19muV;$al(x#wX`iZN5juM)zlil^A6ukhq_Yo3tAl|=iN-(-?sW(ly z$0KM01r3_a_XUtIZVlS=>_nPAS@R#DFxjbJevf6#Z%@SI{%r-~UoR<2Y=JP;<2E-k z2S6a6(nQxt6#nVu_W9r z4UCK=1FHspY97@LvSAK)C8Ov>J^a&%Ua7t_fvDo=CVJ&%9Z?Gqg`9{`637v1srFlQ z?aBk%^%(9OaeaWR2iH5eC~l}V+uQvIEv`DZT0RAt>&y20d*hz*C?`}%)Cv`j$A3>+ zI||4J(R$LJ$CCnNJDTv&u@Hapy&gMdsInHs_kuYlyoOc)S|;0<2+MyRqD3*UCqWHq zI9^?446ih{TwY=hd_l=}#LJ@HRaQ&M+QrtEA>t2jLl;1$oS zWO8PM&a+!qrPzEkQOJ1UVhv~CWBdG$Y;|ntG-Ltf*oEdTGg)S?Lr!#;`LI5d%;F*E ziFcVTe)<)$MQ+>7l$n93&kxMT6V_ql1Ga%XMyewLCu9aZ+raH#Afh0&*g8Ih1WcB) z{h*MQX+qR+c`VnU&%B7z9Bw3>B0ho18_*&3&4CwS@vZR>-fh0mkEgO7ZEH85Z3p9q zHx=2HdNG<2G4?kgQq5bw6}%%>|5TD0l(K_>*8W+DtQS{~AgIQE8{WW311QfWZvO-L z$mJ3{_fTYh|5-B98lcEJE%H|~GD6_NVs^=z9mEiw2QoW|9s2(}jiD~&j0IXougn-K z*+5CQQWArB9le!sb$VN` z?|X)52L*(4gWw@0!u`e}B6~SM3kcbnB9uXb4`tuOZ}tuf>%SO4wTO~lfC}Z*Q1BTP z%(M*UeMrG2`4ntGaHwQ60{RDGSPzxtQs^iAc!EMd#v{`xRI(564&i%D)^rD_DWc?C z@Te78_&5?dLxoS`CW)%%P!MSIh@n%>q3|)gTpqIG*E&S+1u04g#fS1JCd3%`--1Xq z=7s>Z*HaKu)RU|8Pm4W2;zl(K-2nh~bmv2OyT9uUAizId8c9SG=gUqmi zGyF`;@Z~Oz4x0$(32ZN zz$sqrkO+*Y80L5nN%LCq(}yVnTCX{njX2rpVmpKbxbx_~Go$uZ*}!HSu<8FjdY=UA z6df`Jj|u&|N!&Bk#*A9APj*aOSI0t>?K=nA|IU^9?6*`I$frIOL~+ErJmP^@f?)tb zQsceTmDv1H$(uy&yAdWe2c`dJJTrP88jKv`wucg!W05I=SXMIXRCYc9y2Kq?*>C)b za%si(pH3MyVY&;w9(CrSu3w?TG^RH9q|p<)gwikY=N~kh1AoN>fKLJNerSQ<31a6^ ziHFeMiU3JTt-JREaO+3$6s3h_=-sAStvi&H@%VIau}1;f0ckO#`Q~p33GQWQ1JinO z=3&fNNbX{oc%=1XfKUuuI|nmaCdU>_|4Y zY8-;G>-K2uhHn9VM=iiUIt=WEK=pA(_3>XzQVhPqsD6HGK?UDh(62iPaj0Xtwl42T zhuC?9*v#0m@s~7gl4SLch9Z|=E21oOjU9(Orz^{rF1gyj&C+$rX?A7enRaD1uJ7aW z;@XL;{&c&NUtm|x!8H-rqquh9`T&=`(5}qGbu+GIxK2a*i;(^gfOW|kc4am0*WyZ} zXT*=kvkTXsaP{N5Dc`QF$Mp)Xzu-Ctd7ZdE!&Qhp^KdP~bvLd@a6O4Dit7VhX(;Pq z!1w@H2J()@bq}sba6O6Z1zhjoss^kcTwmcDk9>au-pg@s!*vU;mvFs->kzI-fuoX= zYA~jyXP7dxMr7xVG+U<2->A`Ja`VQXroAO@`PxqlIDPsVXBJGKUU(MX#}%FZy>qP7 z&pq$_@fTcJJbi+eq~xNB(@QU&R5pEb`6bgYoie>*s;zR`WtUI4tMTk2yF%CP%s{i5*X`3_prh)GUcR$zyBLd&tzCTq*FiZ$bc(Poo*OQ&Cy##=#tw6ueslk8K2V6b|?yB?ERlgq6hZL_qU)wXl$JHE4k;@CDvO54&Dejn+Nruw^6 zfzXF#(OBA;DmqA-ohSw>zl>mU%JoXPm_Nps*IvMo^q4L(KMI(-*t;CyEZe=de(S-2LNEkRQ5vZ!7@2nP8? z>1>_1=M{IR(dgVMGBNux^oC>v7ky`X{M^Z?tDaG-V1$5^4X{{N$r&Mq*HyOPZR@JX zlrP(B)`{6sgQPLDHbiz7VNQa8io)md@4E=?-~bg};uQ#28dgU4pn>C_l^pmK2SPrd z=qBk^stq%gYa=HJXt_Q_JOVdy;H`SDZka1`4M-X)v;sq0SE#TQci(7_5fl+Gf}Kbz zQi=$Te2B(BMCN&F9%0zJm1isQJgXc;q3uyydB>$uc+AW?3#O36qkYgws9niWxQ}t# z|BM{vQNvP+Yjzt|y9?nC7ixG0LYWQx+s3PTl(|k_Va;bQ==?a-(5G(qi_}ma5uWtb zbGCO7Q!vs%_mYZ2($Kv`n#m0LMurUiVmp&&AqOtdi+c{COi=1H=D;Cvha7_$LJKE8 zUxTnlLU^77N9z!7)FC9w-NOk!e_A%=ESYPN13%^y zTKqxFX_h&wIPeKQ=do>!asThYsp3&0{uuEtZv9Un!2flMIrs=3q`vX`3gj)@tzOK- z^r2svgUyH=#*zIu4W(WwQ>Sohb%4@81cF4UW?QJ^fNjb*fKW^vFXNS^A$uLrLJc-@ z;FrJ9T62y>maBP1jrZIdbMQC-F$ST+RR9HP5-MK|w&VWMU&h#wR0)-Hbf;Z*l>XBZ zBeV36#G}^E)fI&W#K#jGZQwp>3^IW^4|f5}Go+nB&9ZggIkII{e4^JBAxqH{=Xrmrh<%N^12s6lzTNI0W~mElo{#yCkbx0 z!|f6&TbaT7ID7-bSzN?ADFGw}!PZR8d1Q(P5sB-Tm;*f^bB#B<#vH&J1vI;>7j;Q( z-yCp)JnA$OWG@3_j0=aJ(|UhlWI00R$mQ^?TL&2y&zm6Y5j$U;taywo=4xWwnD zr6Ahq5Z>`121PnVKOVtEjJE_J2ScIojEoR52MB`rY%m^I2W*FYQ!w*GFs;4}GP$m2 za{x~>Ux_jq3s57Mn2T^G_BgRCM){6fU5F)ufh_J`lT@S6tN`dXaoQtpzEawM`@Z(H4jJ0x~C- z0g2TvJB>QPDuQjmJ4T!2j&O?{BjIC=ol{Xbhk&1{=8&TKh@m$^YUh}(A%17|)plrg zp~`rv-IRcEr34AB*2ajLgM@}G!W?+gKuyQ0%yC~nD?pgqt<4V=)*ySRa5Da{?rK?s zg#&}XC$;7Bi9S=?l_^(NPV^2YHMQ*Cq#O?pdAb`M?$n6YCa3=xl;;ApmRBgFqf<4)cz{wO4R;HGG?bO7UDomM-XHV^ie~Xw*yZ}2X(tTtqO0L zvlM@6=|-FsNg_W5b*rhmw8}VD`Rd$3=KG`q6gs^+%Q9Dla!hzr!>x5azEH4Q_s-g z@Cfy=1k@*^#wP%+W&iZH+qVCEc{~V!bz%R8R|9{#%u{_zI zyHkNC%efM2JGF2Fgu5I<{!Kq|{RsWU;E2DYjRVw42F!soFaX%T^cFOagjbA78orMe zc(ZL^t{z>%i;FP9a@~Ap+n46>eGnhwr~$CXs zN;VpNaph3hvk3b)nEvv?1g4}a9BIxF_Y$ODZTvC^Qxh_*?LP2^Qt4&^;=2`wj7#gq zT3#q473x9`chrN;vez@ae)x!NduFqVSWJa^y+45d79qKV{O3^O2{Q2uNUXAzfH-`} zp{KQnq-YFQEiX9^Op&Quky)?2bE-SVH)Mu7kT65hYEcxK!nZbs|3D(Ot}#da=6YzbjXCN*@id+w z@(ueU#2U6PgnBE*0~~5{P}-pO9HDN{^jIa4ev{`7+7kRY#=9U^F6xjTH76D;Cq^rN z8%ndS*ZW_n?&C7&gUBhXD_)Y-&EXMkJcc#Nm$Pa@9MnNU{cn98kJlml0-4>FT<|X# z0@R`egyDG~Kwe4o5KCH?R+{h~EIxU(ha_gWV3IjN6jn>9S43!@48jG-^d5|x*H5HY zrddk;v=#)pG(Bl*yJWX_$tg^-8zuotY>)4bZS{{-QfMMOv#tG#yrv8)byTungs$i$~5fZQyB49M{KLpuI-5=d7&##&H< zXL4AfAx`e?JeFzLC5@UKB8^;Z+KM=kI2e`2EpreAhg}P+5yVEM-bISQ$wNlaV6-QV zqUqPvfsJOMnQ?$hGNQ`7K%1;B@l@e`rgDwU>!kVVk zEY+L=Sbu=H?U;9T@t?|~QVV)c&dQ%%mNb4lHTwE8{nMyQDZVsOLqqDc37C%)wGaR3n~nB9FO=p-7NS^UocGaO;W<_qX z@C~?sc)afb$3KF2Sh%5+`VXw}&i4kWVUCMvwe-# zO7v;zW{5FRiI8mt{%zz`hs^0%lR(`fWZF)C1(B0pNmasYo)lc+Rt2trGUL)kUDE2p zVCaoj(%qhezy(c6F2f|IO~E7HOFcBKcm@yyrL_PtxD|0vvw&{C8cb!8*XcQo6ba!J zgZ57oZor?C>a{X>hi8zI>?OSx>!+tyF^O9t|0F&qzKKtTnnMUVJ<0=&3N7Re$Hs`~Lp|cM+;8a-@58oriWs{@8(3H(Ih-(z zf?sk`Ea>-N7*C1KvZkXSen1vqyaaE;i>#!y`@RFFW1BXmoJWxob=aTH_g;o~GR&F-w7Ytk z{Wlc>u>bnGCE5PkFP(*G7>F@)&DBTL>2DWAOXNQ!YC@H$P zcC45ls>Q02_-wCE7tl47(mxj28x>E>gJ8-4{t_M_kU{ah$GMW0{sFX!W|s%C`qPPo zRo3Mg+{}T;(Ryq;4rWl?5^6rLlpbTW=1Bqf3E#~`V3XE-zWK6s&~&hVCpDe-lA&h1 z^Fp?zTZc85G}qtNn$%nns|ss9jAOFdo|`jvr(Wo+|AAk;rAdWaxzMwc3vC30q$QOY zvvNs|vQ#c`t>gz;V4Bw5&0$*B(0U^Gz;&Q8df*_2y;FN&)w8GtaXM>c=HNTzecfbT zj@7DOJZeORu?R2XD5%;08$5wKmP_t<5-=qnI{d_ld!@TK`6i`%&-D*x&|sFv)1kF8 z$L+`=$C_R&gQE90rb-`b0IiaU&Zi{WHjV!U;59P!*$IGm4F|}p4(QM|OeGT=mPvCZ z*>;=Vu2^tQ!sQ3Q-*>qkhd2Chzm)$i@|$s~Mx$X!J#J^69Jpx9upI%GN4`pFHK5V> zan!~k7C_BN48~7C!>aH;SRHix;shGLn zRar&83Co}0`CQJHt7oe~vAz)v6)4#p@TLQsX@pI}qU`Vdfm7JQMiNV)tqxG*?2(21 zJ|qjl_)SYrZt)U8;Dxjt5JoShB_{(ED~e_Hq~+p)ev%aKY|781IGP3;QY>^cD|9|` z?i47cKMTUKLCr}=RD*4fb*wq?CXymn*?`!CkaV){jZh4KUkOYHc&UV`=N-p-m%~$v z+`@Amipa+kjZt%O$CyvAP?8EgmbrGATFaZjhhiCsl&D2^Y^0}j4kASj)6S%=#CXjR z*$meLxBw~90O{1P{A=?=hl0*l?sQHFd1wp4mKOh{HS*+{^b-ZYVGshh;v+ z9QIp6KZgpyc+Lgn>wJKzl0)47HD|-@2&;e0w6t>9Bw=2E3e1`V=WTEn?A={M8TLJjvC1wx@ z#mKWt=9$iUW+RV|_v?$Oj3GW|wo(g;gPEH(-9~b1iylYSue8-vx#|;tr;a;{6nzmYNe(`&Ml>(im6q#KQv`T)}(g233b%#`zMSy=+8B1L-1~*xsu7}vuJ(13@i(N ziY?GPP0_GUvtS9pve@|6Zc_&;e_OXHM7D43HqDcUy39sd)d&2Es`5zm(c|=aAa5I7QoNWpJgqG^UT- zbE!_FF;eX<+YJCqy{7}h2|%b7zhnr%(;;-JIh4@Q%TPl6GDIL|D&8bq=O(w)bnNsa z>hAY8kr$nKb1%mA!C>55Q!niA;ThHpBUaW^)kF1en$JOs`_f*cfjL}tS==G^BZJ1N z#^S#a#0$zLMBi_T!McEF_Cri#g%D+7?S?T2mP24}UF)ZmqBX{~p!#ii zml(h(=HM>NP{o>`$FO2VHd&ICr2b8ig#5#rVa&>c%YLQUyG+n-_R2B6N)C1gS4z5SiI&okR z2#lscTv2fsu=jVHKqct#)C%VN?*vQ6Zb1zu%We&X7E6SVtR7YYw!vJ1;RhWthQV{F z0xM+tZkZmPYXa&2T!AXUISH8v9fpv0W3ShLq&L9`g#xx3dL374e9sb5grC& z>s25hmm4ygRUQ+v`A=Tc^xQDjz#Mo91-rzIcTkOe zWk=NG5yD2zdla)T!`^UB+_q~q?SQ1vaPD>_hPNc1u~G0b#@58R)}zpgTqtG4)EG$& zZ-FT-5XfVPEqqJ}hReS-FT_vcAG?`b z``wUpF0oI(T}^iL$YzuSDKG|9hvPIcE_zwRKA7k%U@jwb0#GHZGdD_e1FW+&U1W&p9)R?k;Vh;PHV( znD~OWhpYm&jnclJSbOOA0a+ODr+>lFQJM3=x!Yusm3om$Pa0V= zK|Mtr|0@g@d#jKFn}bGSDcU>IKWOk~irpwb_TRCSL(4TX7v&$4*LCVaYzpw1>eZ78 zRcRJ1?NOukg!t?;u$&B6Kh*pTNk=*^eL6@*3hqDjq;CZFFNCi@%-&+EFB`s+?~)~K zkQyNFJI#eX%i?$MV(wM%Y6zu^!97$T3v#GEr+S#7S@}o{8j~#Wv+g#Q7PalFY56## zWov2YF+(uAHn(*3C@6USSbEQ_2}UW!nxndr+ASLUz}N$r`<+|w7JsIfURr=rPZH8t zf^m~O&$Ggh7~q$@7DM9$mYN=hkAxf&%i`gCvAmarUlCZgW4SlPl*X-7Kni5SnJ zzJH0=@gUB?pV}APZ4SHvG%zZwUnN=^exu3lSr(P9PLzO}dsa)+DEKVrvP&V&eKB93 z01`BW=EoCZk;kzDcyyQQvCL9;8Quwgg5BsAuS0I0pH;cYcX7BmMJnAXn%`nvYTB+L zHahgAxChvw2N$3Q>emSjXN6Z>kP`gFw@K7`w0Z<>pf)ImJ$NL3L8Pl==YedamQwXe z+sl{qCA6vrghE6HOpE1D^YyS@VekkQgnmD6OQ5GdS1p0&jV1C31>buk>CSEES z>++PM*23}%vkW!KeAs$e6tRgZ77khi!Q{&t)V;75*x6oyfA2gsM^#ytc_hKE^>m-jFDyEr`%}gt|0Nj19(n51w z{CUUlYZ1NT&m6=$i4s{0Iff$h8Y&znUuH!OcDk+u92J4SSc1on?qWaK`?2n=_BBKp z+v8~KhR_w5;uG4TtBlMu;oGw%lZAW(%w^33$y}!9P=SnTC`;zl37oTIN7MA;?qfZ@Q|%2hP@OUjG)7Fl)F%bF;;zXcA2tngdy|2-Ul~ z*>T4Os7R@ZmqsE5E$sPE8bZFqt24UqqnUh)R?K~W!wW`Lr}z-3GKA~0-L>Kh$}%%M zJio~a|HBTN>5DCVW=r7)af84s_EU=D_6$fNmOg9cF*UA0eq!CtUEMSuoOA zD_SUbx5nvyfQn&lj>;5XYy6HTsF}+InvJU<~tkAv6h)5G>w8p zlaCN3j^B-yCxGIt)o9`#4nlGgO)GJGzKfFW;g|EmEwZ!CqJC3yK%mDzN zD)~r!0c7+c^*j(^T_*$xteKi+YiO=B)Vtg6r;(@aF=D0qwR6qlEY??y0Zdh1K}^p~ zI&MM{m+pwip;XU=KimqEN=pXRy1|!Q5QUNRc-fId&xI=?)etjtFr1yP&OB`EU2_R@ zSJ;&ec2ehL7-3H)_kUIdiKUFEImAT>0S`d!Gcil$HNB=b57div6sXP}1R%rb=*G5z zH5Y|^gWdO$LYN|+>DAE*-Udn;j9%+Y=ox<4{iW3 z-8ho43s%mN%r^4`lB_#{BoN6&!pK^18V?`lz<(ncI#GD8aDu>1%rPc;=)g>XUj0iQ z?0M=;lV*he+ic{Si}@OHEZ8~3ZrRdcDfafDz60)%FI&t;<fvg)fu75w09t%$kd)x3JnmISKVHgKOm9@Pv|~P z6~%kQ)$tHgH)kiiQ_;4<9*4M>@R^C!n0ouJ0446f5QOf38^xnWQs_8}ce-d!_@U(0 zj@wS@9q8hpVV;KOjh&;;HL<5f?vHt}yGu*Ua$qMX${lJ&6bu?p?4Vh^c(ofv_UXL# z)uHEVMLz{GawS9uVob}LT{_7VEqOa87$i1iOKwT~)|Px4!KhKVPSAW)YssMwf<|T$ zLGqyqNzvNL^5I4ba(Jp_ts*N=p+J8*;(1WBYj#}h+d_wGOoh}RgjAA@L(Ukmm-ex$ zb|rQHg%Y4+I6$7IJ{ktoS`tz#_z%DvB3%;Z&88t8Nqs+j$8rpKVRuTcXrvW%bS)fi zS08FVA%!F4rvG?KQ%+0MxcEe0`fR*3AL=%an>d4|OFbS@OhVYwnK+uvG6xm`1y)BP z#51LIt%_yHhjJ~#H`XmW>EwtcwRJJ|q8!o=aR^s%cc|{LIY6e(vi*2jlI=acWh&ga zlC)97`-WY?+JVWb)XK^3=T=v1YWgqmR zR}H8;i$731HQfU2YS@ZM;1#|ip6GCgo>YAU*ltX{uG=9jD3c`2e)Ih`=x#dF366do zGXZckOCsXPe}VfU;z$g^DDe&Ejl79EAzg4Q(naVDAT-ci?p?lW5)G^v!Ny*p`SzLv z8wnyv1Rh)|dGO7fB~x=(9jDR@CT6-yr)jG`Qx8dheJ;pT1AUJ8#z%>8b&piNYNdLg ztak|`CLgGKXeRA_B6&eLJPI5fVwQ%2Rv5IN$(nq#A`v>?26VO{HTG97(~9+t#)t{HSgdr2&3v3mHY0mt zX96)7+T1Pn1AEG=ttiM*2S!hG;5Z@vKg+7te<(%JOHb0jIrtP3S4^WLM$7@s2{mOi zsS9_3hKVi=y;%vbpM{{Z-Lm7BwdLi3eVmP^TCsKjeIbX|Xv6n9k;Z|OW00ZIaUIRW z^&hYIW6s)SwGYX=a1)G$@4q|(NJ2HKvRY<1JOd~L``t?g2(GlvvCeUcm^Pqg0q;=fS{WS9@U?_*ydR&f!if01z1( zv^5M3yM3E}%h29Pf+k^M055(cTv^gNJePl0iZvBoy7xL5pjxvHX~*AdB~p5 zr@Z+*Ek8_|>MMz?gU0ReN=1(%JzUvHgKwyWLdD@5bv^v5`-sr_Ew+iiQqD0$OJACt zep@2_8Hx1XzN87*EUB;0!Fe;h5?~T3z*im6hwhUu-e!8}Ir07#q@26dLe|Q$;iAbp zp}YDAN~8%K2Gc9XL$3k54s z!x?|4F*W>f2EDi7otHQBW2Z${;w5x1rBidf^t?U|&kPLPbtXg>fRHR!ugnfVoQWt1 zp});S>Uv9f{RMc3VmyP@B@6B8O!jFfo2k1jTHk|_fxwd)SG~;$^V!*CfwOh5IbEI8 zX;h~gj@d&~wfLq^BkX#AV|y%Bvh|=5*|DxtUluR>1gAU>ruuT!fVBXjYd6yDLtSUh z#|vD&hEIr4L~{->f+uF{HUiQm8j)PCa+T6kl{KGNKOE4_XuTjY2ZTPQu<4pi*6**z zF%g7&=K-UmRvf{~JzJ?c0XQg}4fk=jXk+~hG884%`pU##0E34O?`SMZ&EOf$j8N0Q z6J_yOIjWec8QdqluWflL63^*bd?S%yBxeat*cSsuys3thSgXr5eCiaK+0nv4E@~q2 z*Vj9A{DXE32grkAn(z)ay>Em<&vlp^n(zU`?Wx*l1P#b_#xetx)24b5AJm8%!E{L} z?<6TrTAw`h91di`(I92fmP(W28)@fdqoyyUsal>vGHf+sBF0WNkH{pKBX)o`Wl^jL z;A{ax(jJ<#bx=Oy>4Z#b+uHO|!hF`=de8*gqU|lX(Mp@C?1=5{dWcbrc|DDAym*!? zw!MPhw@()y#}7Tn6;@ZkR`H2B0J}5UDrmh2t65mBBTmA4npYaY2gMNM)g2P@C3H$`=AX#TCObkPr_&x8`{?VZKw)dM6sM zpsqFnU9Po-v7DwJ4@M6?WnL$!s28~?tZrHi!lhn@MZ?_U!O&&mY$^cai?ovaGtk=^tPOW=c%BRSlFpakt1UCY(@Daiojac`7iUxC_XC&xrP60qxrtyBO-47)t+1J z(gh#>M@}jQ#P&^=u2fF(*k%x&SIQ94b`J?6EH|ZzqnAQ-&}7FU7UL0-u^YSX=_za% zj4geg3_h`X9m*m=K@wQz?wS#|z9dj2>YM)vH^{o{^l|oMUIfiYlwC&MmWb++QK3R| zF9^ofFU^5c@Pj`N@6+?i;=?;odeUeYCjDx~Q)mr&ERb4WiA-{jPVw8=y8~2;cLjHJ zY(U~r&g1l-_ay$kV{mQ}CVu*yL@FTcROS>9{edV!RhCgH?AVGi=NbQ;kuLL^jqDTW16=RY$IgE%{b zO}lCdB~hmlX=h41?|fY+{vz2ysk^q2oXR#FHTBD*X<8N)PZ3yL7M|$MjP32wOv6Pa0uGzYvEA%!{ckG4AhBzIX1#-*%YsNH#6%3eQrW zycuW8-DFp+E96y-do`|Wwd+~L>mo+(gv%jpIyT}@^Cg#u6!^~UNn3?VqO}w;`ZY2= z(kuO9`4MUd|IT=EU#++kA%xJUucE0544*|sOVUsjr)n_0IBJXXICcCPg6zpPvd?x< zd`}uxn|@spYUQE#4x+=**h+O^*zRd9NS(Bu?csW02%Y&;EJ11eo6Rpk`@o2ZJ^oY& znIo~K?RqW4Ysi2^w(h0gGIXvc*}49(MDJWVKSVk3*_PptY2m5j%m1Q$IO@a=`TpuI zXj{(!Rk7tYlwZCHYFZH{o+X3JJJq&W|MTB_ASTFBM+l(jranRB(?0||; zBnaC52<6+8yR?+=jJ-w)l znE7*(HRNmb4adn3E+&ygqS7fY!!yt!P9xteeUEgS`0@e(r$v#nPXNQNdwpI=OCzrW z_n8Q#IawbQE>uoo;+n-eS$}^w!If(xz%82Ce$WbX@Ck0nzlvp7qe9cphisIA@V!oY zDHz_OLD%vV8pBM0i$>Jf7THx{0ZRB^{SFV64pp-r&q>vka?QNu9-2S1&->amSPtOx zzNd+O-k-;9nBsVZ*}+(LMCy&&pc@XHc25dbIY*?8r_xx_HI9_<5vx0|{1Z(jV=*@m zRgJ`1HI!7X8cY3Y1UZdhSt@=_)6=K8vUCGMxEAHYLaB(`Hh~$S=D|fMzidBNt-_UW zAzV%pFwe;~yz{?$w{&tPq<0JEKjqP>Cz^w$s9^tH0IKnZIk+zaFWbOXUEZV;S+$$vQoiKB~jMw@#VwQPPOTZFP* z1KNVFr!jxw+aGu}Y{!&wfOR35|H-RH&7-wAuvx9>ok&2~Ms+Rar)Xlz_Dp6QfWp}@ zr{vk7=kfI=dJox#r7sS(D*5A#G6&3nC^sQss#gGCo}av^mF6qwlAwgwFnX_OkG_BA4#T@GAK6g1NCaCzT*2BnWdV^L&zj{{$%ScD@rbsdIn2>VsWa&^D^@T$egId-|rys)Y3x; zIK@fmyI`@{#mIF~=DHfWWVL@oSy(3@%2F%d;4B4+5#ck;4@3icrjC=whi~yt1>>X4 z+Ud!tECO5~iQcHe7tT2sM zt^Y?s(NjhxKu|EBzf8l#rM`_rs2x+q^VUQE@(4Nn_Ms5q8|aQ2KvXGu|2cN5Y2S^GMRNnQ(WR zgWzh7JFoyyd4aY7fUaK+{{%3W?4s)1>YyV$`NG7ZM(A|;nj*~#gTn>Wf>qF-C$vES z(ofxlqj{M|pgaFZVh#4>#wzVcEtye(hknB<`eu3eXhLOEc zv!x$Gl-!5S>&t13=mlLMVK30wUGAcpQKDz(0ZHFWBUfQB`6Y%U^2%OVFP^1m+G<4h z659YK6a$)_0As7W-q{0EVeZYxs)ZL^3M)>np!~qr_7~q}$Y?3<#-c6ZbN@=nh<>6m zYTqJj|9zLv37b|@Et0&nW4_@2=83v|LYBv6mh+J%iD2B_@8Haq*aecnZo|7SBJry- z$CtG-2g{clSq@<~L|hm|#Ip05jQFHgu1>VXV%!)O*Cwr7_-?|QM`90Ab9I6@QRD$x z(HtNS9hO1!fAl&9Hi#dg4{=RN!Q(|(hqxb6sHfi3H+t>L5nQk1 zI{Qw$a@Q)mV#9S2u32~3m4UnL%2qrpng7`jXK80<8Zw7vGe{6doUu($8JU?TR=fQN zO|azCh(m`M7LZ?L0ofP}V5SQ`0DL1=EH`|s^psO_OyUq>*IMZ0z6yY@GO@(L9ONqbP`de6maJ{H4b=3dgA(Sq4%Wb#CMqp z8%QN>Nb+Sy_Q-zF0QbS`)M|@554$Mp#Tm~tC=@VBbz9Wx>{>n#XeA1&6R$ZE<(Qmx zVk8%n#Gx8+@92i3)#)jz-Yk@Rx-3_=nrZlStvy0B8TKYE+i|q7L7kUQ)XP4n)1lRy zhwA3(Y91w|wU6rbqr1=PtEI|skd+^=BPD$Ynf<*t6QW7Vi{{9xaUYIG!RZcuVfGqe z=Z%o0ghZfc^a3L+sltGf4P~=|82hie4#uu_*x&TswPpLU1F#9kPNi{TJt@`lc-zFH z;vwX*9W@8`;NDgpuf)E`9eAv~$d?zMpJMx5`WUsWK8c7;i0Dp-{Gtio(cSWZpW1pc z_XWm+#vP19icVfv!~%@foNWA4n>9Sk&4M^<@3iX1i7@?Ef;aUl2Xi3KPyjf3S;(|h z?IHt2^6V7f$D?jyao78sX%~kI{>IUjv|l7&?COw0)*QHsq%_ZP&=+uuXLdT&yh+=% zKu7@EPl73r+^7MQOaAJWG_zrAH~G8Kk(PuM9oICO^j{Kv%FkFA_-d|32;I{ZGxX}4 zC@iVFs56!N;_l+Vgk~z@Zr}w`FD}Mi+Zr;srk%=jom$oKaz!3BMvk6v#x&+w%CA0+Jb9w?aoQW{fTJL{~ zjAk_ZIUso;K1Ux~>KKWn)~DXt1#ZqAW`wU7O#p~)z|qu_*etLKEDD`-GPYIm_Kx)M zJW~e+s&4cgw3PS?NK_l4uehPIaC&sb;1S=RQ@zRC+u5JEid~88lUGx9_lb2;49j$4 zD?IHq_X*cGy$;0oUlJjVuGbNwdG;aAEB zIff_UgZ<#4xrhCosZMbrcm=jYi4&Dscj8-|A#_)9dDtwwil5G|;<|G=T*X%bMRpaJ zVJ@E4!tFvFg)Yubh{IeRmQdYbECa5H=>LlNkj&xD2i1XkxQmJ{vf60tzy^$)vSx30@oit*My) zc7kU}0X2n|oPbx+5;%km{9ibPY=$I)Y|ReOebwm_A3lW{U{<*9)moQOo+dOgZ}yf` zi#17}|Nd1JnrJfC{(f--g(daResS25WgtGl0^?h=!xX+*&0;S|q0 z0PnvTaz&lFb!cC)IY=v1Ez1x@gm}9|JTgln&YksegT%Pnf->Qy^lHcrSG?%C1RzwM-BX>r2R#NKG+Zgk z!+hhm{9p`fa{1& zg?B1?$M}dqk?PzJZN1Id_Sr|}V?%Vs%md9i@H;~CUL<$MM&Rj9Ji)`NR=h-%tE0Wa zw8@e8z{?_t9L*JvVH83Ec*L zJ_Ke_2ipwPH=DBqQT09bkhdr_DZ$`I4fM#Auy-VZ{u^B6)VacQU@h!+MyIyeAJ1C_ zx9Q?T_~wUOOeUaa5@S2medEH)e}oG`Tv^IH@On67q_dnFCCrYEw@& z)lgBp_1!%3d!X2yBqedRNy=On*mB^Nt}z&MbJZC}b%bHN+tyjXI!~RAue(liI70^U zFAe+*llnuG>f*6jearAwViG4Oa5Id{4BMB6W*C#bBT#;0zQ`wh$&!b09~0#_(cDmA zh|$wgz3fmqg*ZaHJj|dLId)OkZW$jjyuoz*kvz_}`C%pL5j9;eN0U;}%>ex@aGj z#2X0l{wZwgDpgae?TN3wjKiq_$zOXh`=k2TUX~JwGqL@6U!2dtrFPSQyidmE>7yQ| zoj*n*GPvJ|v#>uz-y&+ZfDh`kI{c0Je zY4Qv-e8@Pybcqj>V8+s8`Z=AyL=zb~gDAUB3b4eSOjg~0uvBcE0Q@NzuuBtPK?p_u z&TqaPPd31aqb1xsp(}7Wmhb+GD(jkaJ+FnS=`;yyt4Dj%s@zNJdVePL zogj5lN-=2r3{a!`N1F>VQ(@~q%7XHCL6xK{$Y-gImB8kZ8(y6U-Su(6qPB=OUr4hB zt4#jYj6`x)2d=u7-Ys%*G-d@OpOI`6^o{PuOa^R|3y4dB5g^hcAT8`ofwn8_xNOPQ zYIoTVpqim7(;;P#c^vH!CW_N79x37iIwXyjdb6+sC^zsN8KUBgke0Myg!v@O;%~x2 zt*wVg#|KAHNC{=8x_m-ZgBR<`@Z7w%)7##eIu6If?#A)3i&F5ijE;vzf9Rq9a3Hxq zWU4nSnCJDxMh8FfjtoZCUSHbF2f%}&xkUEB*(9Blwm8C@4HMIX@Qurx(_UMSYKP~h zIK@R^3Wz_M4vj&ARQtAqw&!st=vTlJqorvK6rP-JaZZ*3kIj5+5 z5JvdCE49kL@M^h{&hU;z?AtWOtBa8VMkwea?NEP#`qT!KG+n zbQvkUwRNr`VGSV==_6^!{#|Hw?PEO|%u>b~E$W;Agb!cGv_*qkbC04Fm;Xe3QHq>c)6)2LL94X~U}g{r%_Jay-M&2g03fos}9sXdQUslyIy1hKPyWl8&x&4JCplDh|4 zlpmLszFb3;k7DenwKH`Zo$cqw8i<_y(Fu5@(U1s@`U)WnEGVfRX+U-UmTFHL#Um?n zfz9N}0rX{e@{J16elAGm05ZUdHWwAq7CFLI*|}|Vvd7?1JD;)J9%mOkxH{#+D6WB5 z_eEAxK~qvz=a{#Qgd)M`HN-3tFM`cm#;T?^qtkx?BFt;3j_t80eLksd|RGBnwJ=TufgbBpY*LY$0?)lQtY62eE2-Y5P70k7WLqk-A7n)q+*)z3wsHSqZM}q}aW0ym$Mm}(sTjc4Pd~eVs+bs?w z01CE1f2kMsNLDXC{}P4p5(#8H4u|Mm49rRhA*jbJ__2~|wXALuPd|v1*v5ozQ{b&} zi_?CDcc>jk+n-^M{xeFTvm$l@kAmbbNa5i*`EkQ>Cu))_9tW7>7}e#IHP6LpS>i?6 z&)%!lg-!{y*Wp&8#nvLI>E^(B)cbH^2_0YVT`*HUq;CHYjw|=(C+}fytGXbC_Ax^h z|2-dv9(*2ctT)woLnlaC2Bibar4iOt9@D*}-JU+6D}K_<77Db-N_{c~PBkGNi@1HV zN=8(PWSn-IU>@mR{%w}V6s%vMV=zeHL^_e{ATl__9(E{5%tBdHD8jNa@(c+@^bc)h zNHP`7YO5NN5?(w4wZUQ$4KWZ-wZcW)b7%!u&trnlzzn9Vl6;r$eWLsvOd7=e2atzV zL^P6mRG5vR!Jt15|GqsSf86@ohKKCZjUkOzD9MxHj~PhAtIZunU>&DuJdbM*`jo19 z6vXpCTVK=J`eb=DQ`#XEHhF@xed%%F91F_@m$D;m{57OXw^vlo_5Qtbp7#KT0YD1w z_D-lQ_l?&UQb0V@V>H$K@l;7{w_6;Hc`PiHb6|jAEyGN%v_WSDfB(9P_2b=R1RE+X~D=T z{(zM1Qb(mk)syA`sh0iEQseMiS*_TBBoYU#5m|xlWTsn@DTyfwW%1L4aNkOQ3V$i*%SFwu zd1&O{{Rj=c!LBU8^8oHT(=f}s%Z?C5{DUd0Pv>)w>mB#@fU5dJ z5k7l60pa3!7(}L}v+8Q(C|`^;vUJ_YHC+Q~!LT;weNbSPt; zxG9@b6>v4sLqXTXl2_3vio&vP4Jzhr%)(*}FqP}$Py;+HQnHtJ4V_-bZ0-=3awQ~# z{}k|b8jX=1PcA@i#Wa|q6FHsYZzHsHvLO;k{8T2>EdaFsgxRv#unwdZ7$r)G<;{Wn z(VF4l1~drvc8FiVY6#e6yJ-L^gM;lKX_>8Uq}qv(t)7dSx?(tH=&PRXJGglTxHcTd zpr{mYZ#!K*)cOyKF5YY2a;W&^tng$Ut=;_3)~%#L;S2!$!&evo5N#G)pLZno0pQIx z2*+LATVA6cez6aq_M}?TFE%DzM_&XIqa{wfF~2QH>AGkBK*13p*_E@+!6SIDoa4*b zVtkd(tK4G3txkNZqL$KS+?$n%?H*^2+n;MY9Yf3K7d2PA(*%5{D`T1(_k zvaa_pMoO3cHzJM7?aH2ppKE_L(3QZBT6^^D);UCf1!~2ZTt_`8; zba4ryAaeZi)KGPi{4|Na{CRHJzX-83RFP>ktkSliP&Gb>mLrJMkS$bgrI8X{?@oQ| z&e?4$?b`|a=^wh{s4z?bINyIP^EF1SQDN5#Y+DkqG6(UrR9&rj%D7b7?6wcle|NUxlPY;Jz`b zpoziA>iNO=nm?hrSzE?F;`r*b+tMpbZ~tE9rFWfW-qPp)S83SzXOygr=&PQuet_hE zUB>HlT}b<78;mjD&xXw{`mh1=l(|Jzn_JLCb*o-jVmzYZ*?+JKN4}_qY}~5HQ2p?I za@@0ksW4REHHoN|P{wcocQ%h>TR<)ap7r?l3HcH^#a|!rG3C6>nn`NmVg^4QsQTM;{hZr8=e z(Cr7YY`U$CrO|B$tl0~!c?}Wr603t@eI==TIi#{7JinIgF(Mmb5aLDMc8gT})M*ps zxYO323G#*4(my6j*%jq)`81OWAOU(?=0wUveTVuSHc?8P`)Q7)m5jt2kT^CsNw-TuC*+@h3T#QNCnkm@?@JAhX)zkJ*(MartnSL82_fH5OMBE+zdx z`=LnCeR#G641b8+Qxtxzk&>uE2~C-O3b!>Fprw z4f6a(|2FGpdOO8G0|T###vW7s%j1#Zb<*a7C%x&k!WA=gD<$^nyFT-M(&jk!n^jYH zEi*r~^(z0zMgFa>wT@$LjuTUN4TT)-CM9#N9WZwsE7}L@kk)QARu`xVDygW-#VJaY(5rYnve*x60-^|yFOUru1y7imC=h2 zS%JgZ;}8eHTn{a6a~$OF{47(v)FRba_GMp3Scyp}(}5XwTMhTm=Mm@@g&c@a19%Y% ztFT-A5jnXKQd*;4d^nS)Wz;hBeb0Q;A4AMW`nI)$DA$2eAWQrZ@5mbahqw(-r@HgB z!;A~oBa;EEn(Qv+Ky4ssJbQprJZ}LvnT568E_|PWnii+VG>(twEk{-`@4iW4rDLN$YLOzf=5KpiR3tp_KM66^B$+fK*pR<_*=^&_E zOjynAXxoli+jgF{;fM--)1LgOH`$pDz0j8E@O5l3H^t$<08rEcK3VfiR3^V=3Z|`B zP@|QQ|5{@ft-TI5W_U`Uz=}@EzG7MbiKB$Lka0gg;kO68<4JFzEgHiKU%^Buv2gut__$}9~opJcc~ zCU`eF!FW!PWcO^#Q2$ES&24g4iMGp#jUYMI5MKfQ`&z!Sg*IxT=?X}ll3;xwC8r8_nHDxp3pV-QCI~nCeEGB3i zBCpuwJdr}|&RATI>-{Uuo7`oM4%JA}16i^QlbzORbV~4Qj;=G^H(e}&QWd#{|8vsy z{)opv1lc=a@nb+1o7s;FjEx&739Xp(6Gbb!`RUHMJwBy7!-yAlXVk?n>(2N>{IlH| z>*BfH8P~=yFrPQOI!+@`h_2=*FShn%}(H z7zH*#g4~>t7L-A&ULO5%iQ|X3R@}q5U*ev`?ZQEqWN7l^6OC6giTuCCcd zD>z!5=G)R$p5%Q&%eaP9i?zhHZ)df$Jkog}a;j|OI*irbdH=(Lz2;5)bUPQ9mdC%+ z?Hs|+`flfNepYomz5J}~c6#_(+U?Bbr>5I^2S34?)5f zK5#%vE7&}`;ndZ4czrvcD~~OF>A<$p@e8+|6F-k4TE-O)APr=U**2OyyhU#t8S2ed zUMeTw%{Q>R6uo`3k=E^Wh-gZeIp7Dl;kZ|6;`eaJaeu|R@OzWr8T=;xY&HJQggXBZ z`*kVLG@fodShW9Vpz(j`pAx-}oN?BKhsh`f78u{*Npw`NFdt0!H7qEIr7{wrN&I|A zCr{~dUn8&x;HXRKij_Nw>;1R<&IKq8>i#zpXXkewJZT=Pid7DnJqO?8pdiC^7koZ^ zigA}?1`4XGD{Bx6$n9|#NKRH**4us{$gQg8u&0jC$nG2%ngg-LxdG#Hgcd$mRRbVe zllYcVruXWY`|4;B(g-KxUekM7%zarjpRZoTeh%`+U|%8{vEe+wO|-7YK zS$GU`M7)mTby!QOi&v2VS7b zb7ocHm};H!M_9w~CRrcu_%3bS89Cc*+qcTPuR%dL@WX>p1j;Vg+fUypP}=e)6?aR-jG1Xu64^?En%CT1SgDb*`7ytrzI^+GV|ff2%}> zN(#10rYx757!bbN%*0XV9(9Du3l_DDcg3hXtteCaWKF~}-8}=q84M~pcBn~@C zs+iXtflt?D@D#-Q91;Q%WHN1hB^r}o1+(<&Z_*{~5>g?@f}R3ZAPuxBS|)nFhBWou z<@f4%HKl1%>MKxVi#Ji<$vT&rb}shuUh)9fZiOag)7#Sp=QA;M71R$bBp+dVd(}*b zq+|n&IV0UubX5gG#^O*+7Fcv@HXXEGr zbuIi_VE}7G&WQ4P9$dcr#P+pf* zTU~0}l1ffQ-V|z8)u~NzkWhi?WftRHLA>53_g6HqE!BT}eVz4LGH9DjcAl;Uu6&GLHVoW$Yv=Be*JB!(nFV@p$TZt4FT7*A?Xqi13 ziYIfxbm50BmLRMAQ$vQ3n%%z1aV8Pg5`nocml#6MyR5IMW6nGqE3E=3f|x>yqd-FA zqf)HrdQ`(c@ECPiP*r%ix(4YBH~Y(gzTaeKsVZt%j4@UlYk*X*oZsFiYSsE}a@Od^ z#%a^-`0LzDOr!C1n+i<`6t)V2;Kmm1-7txhQUNBFha1h5aCN)l8IHt7?}uC`Vd?@oxfU zhP+Q>@s)FIJc}qPSiS6Oh2tGMw4G3m<8k=I5iUI3`+I0uR-edo_R+0>kUNl$-2Q9M+?sQ>8l|R4qIsS^9nW z!`mSf5lprx9{UI8g*kl{_{CO=f!#Vx{ybAazRn~w#5Yl@t+|x(p>nJJ&poCndm)9Z>(pTZ|iBPK9JVDTq3|Erkiu_-oR zQ-JKMcTEHk^Y4RATotsQAXd;CyG#~R^O*G$JCPSMPwrk7kOF%v95)85s;rkMt2Uj3 zXO*=^c`|0Z@f8`)OaUVLrG$Y8Od<2F`t{N}H2Am5C!#kzeY+~$k&f)5{p+$SgHcr% zD@XN8Pn*P&@Jb}?s=%kLcq%FMf^S#QUAv^a%$23RdccPuL(+7YW@t|(s@%34Om=~V z7Zq1uR*pc>nm}y)_GnH&m_1sXFwLQQpj_|sF#Q=r@#JehNW!2MBVEw?+fvD-?S9I% zzKRc4qU0U$$WVsDCQ?(%4IJ-k9>ov14UGS{wg1(&zsri@uMj8c8>U`vtk!lwn&}_r zG4;;Eqy=jwa}lh4icEsmyIG06uhV(Itn)r>`@5_w?7Xui@A=i%f51>UU&h{b?OEHHr70`d0ADJR>l&k9}VbhdXDJv&-!+iyNlpn+;KsRHxE8_y677j z8>`L=&aYAwlSG{)OOjlBctFhx;`M;c2_j3cBvO4%+xfQkN*ByjzNP9q!dLLsDrnU0 zgBygv1s@v2rQEI%>el@O)khy5t3V@49#OQ-**-S4#K_e#qQub4#;f?VZ1ki{S@H*a zl%gCQ>ml7l=W196^&k$$*S8@)9G*G4v`>8qJYUrCtkN+~j!D3CgNEmygJRzh zto+)>%C~hH_fm%JPExV*8t0H;w}o*H zis;@{0=qJhIPXSlkj}P;O}NxXWqYnv!>Mz%o>uW${ZZqiKu*A&Sd|m1iIW1N$pK;Z z4qlJhM&dW_b5cV zQg!@??T(MVd%>gX^v3ztA4LFsu)~MFy<$hgR((5^tWegAsNN`*L34ZC1I$0h7@gB7 zF+-z#!f(Miq1cn6-A<)3OJw6A%TIFXY?+-4e)%!o#RUYR85$K<+V^k1B z51@Zn7mJWL6)0k*S=c+1dKK;~>Oj?_KsJ0E9fT{I;Xd6GAH+X0%S=Z@#0JVnU?P4# z?OJ6XTM$}IsVo{3)rb$Ar4X3Ii&g9;YpSeuaZskGekO)@e%AUBlq9};hnQ2|n z#a}mRTJx$0@kn>LsYi921X>2AnVFCB%DsD@P`qstDHixf(f;+HHb>`oryYonZcT~N z;f}et7wv78XzN}vGoMn4+mnfMG3zX0$+UwJB6iw!uT)v*aywhkWH-0&mgt$11)C+Y zbkAF)J*Q3lW8P*!m;2m%)nUA+O+r;I(Ok%@j-Ix+RnkYjcdFl#Hu;L**t$bvWJ=X^ z)>0A4TKosIUTtSBp+mA353-i@lC}Jnw8;~t8S=~$2+~kauFlkiMEbD(fy%Nrt!wF$ zHc17s+;~)4L2t|2tIS7oJ$yp1tf0}&zrXuKV{9nIYgKYLW*&==4XwhyV9-`xf@S6(CTu6f$70 zHmBc52rMsuJtrs}8ngVuDCTUC1FcGHGomz-45i75WUvIozoWwrlFc`VFRBVXM9Hbs z?-x|jDJ&NTdgE@%C3VhHjc5-Vkt(j)`sr3__j=Tvcps(ws>C$3QbjEviTN)nga_(lMVil>4cQ?IU|S*udu(J#S<*d<7#L0dw;&2h9&(*8r!}7_D-WJfF6w zA%4`tkl5!$js}&8{9&Y6-S0m_9kB(3Jmm1HlixqUmyt0W`S{I$;SnCEtKZ|umNBRl zdq;K$h5NT6Xx*|9KjFqA6uT;S0(6HudfEq9dIh`SY~%VCPs7O~ZG2-G2o%L)GOdWt>sE+P68k( zN$Fy;4+erk(CRM-Y100>*@uHeLN67&CgMqoS>Uy%}FniIRbrVnlJ;r3T1Eu>YaQA-hY$=B+$-Q#SlMY zSnt-;g{{onpqDCE%j*|-noYTPlQ})QxxL({|_=RcL?#<@u3X6&8+A{VYL1_~(a+;jq5TfhQ9%rvP4{6xgI5BLR?X z*Ghr&gA9~{P%ha(LCGY}Xqkd4mG6_DGX+toe@TtyhVBB3@|A731gY2Jm8R|rOGmLs zj|T-SYzhV&%nOr|ehHsD*d_aIxo&fwAlpV94odFjTn=sCxf+iphpy5 z57;Gu5!mW}>Eq;w-qQ0ew?Rd@HOYxaLSqEwuyRp`^m9~iRg21W(R2dexu|eH*N6L2^vHi?&#t`;UR$q2IETbvX2 zw3Iu`VK5y>9Cem)MRB>HOQU9oviT2nkV>)$*y@W*Jj z4W)*kW?oe91Si1j7kG0THs>xJfnvgdstes>VZ9SeF?M~7BMsM-heyF5VPkGh)=LU1hCIKk)TMm8*2mfdOL%6YId%&oG57GQFxMW>0>1Z~^#` zW}~p?_6=jwj-?$c>f8J$ebZgw7u<@xChd|^D}hDMv&b%pxzW%Rz@Zz-IN_LPF>q$H zcx_PW6gcx#cMN|?b;rf`iaJX5_Kx+vWoDmPp`I~ zhb=&t|}ehk<;lVYPLQD$A|D zbcasNuy6<*l+?vJ5E;1DY6%S~!UBY_FfL;v#3ST@wjanUlZ7fv)^>n#L^?~vqL2ui z0iOp9f}#qd6tF=li>($#!%+R~520h?^L7PE_@PlGiOmkR_08D1+4=M#v48euT-n3arzy44^=Y7H zVhA|f-+fRNLy1sR_`F1ndMBW(;0A=wRiJUD3{9#C$&ss=*nr@lPxV5JbVt$xdS0uE zE?h05rq2rwN+SK|%2MY0`WyJu9bsHH?iS3Y(jL-+=oe7y`-#FgtpZlE$n=SON*x~T z1%Lk?&fK`4%=xHRxW@Rf-hW2MpSlruExB(YQS#Y-=;(l3gA<(dvP7`!WFH69WG^zEPj#PmC%@zpv_G^>nl z&ePP;5x+^_3bFpYNJSB~`?FEI{|NO4zReoGEZ_q!AiFI`)qQRZcgtq%RXP!b5J*4`a@Ux}iT-Lv;v(SRr z?1B8gq%pNYLrHt9RnI7TPiYk^tCjb$QrrUxp5ioDppg&}1np_3}{rGuj4G5KJJNqwTxzR*iT5{17t;4Jj zbeJ6Uj*)w)0bn8>B`j{XsBgV%AZwA}k0eTaQsZvPAu(_Cwn8X9Gx$d|rQe0|OU6Ju zL|cPik7d1)8i_s3r+@*pC$f|EI+6bE;UAvf9kfoUAk+a${2|{qf1vqI4j_W$t*$dS zmGfp!U(8H~Y{3k3qg!2;KEGxEwC7Q1GgR@+sKKl6h3zP`X-Dl02=Z?BD3vyyFqj9R z91xZaXEhJ(I0|ljO@9L==4`E|tr@}8hpD@{(ets3@il#moOVj4A3H6V^(0+906o21 zGSDK|+NdGGO_$JAvA`$*YI95V-hr%KNg@Lc`+r)XmIcF{E;*@vup8Y&!ood8)dm6F zKW!WeQ1%%CQ68{=TD2%ZX}1;k97(}nczDlDj{C&_xFY(slcH(dsiu=s>qG{;yOEhJ)D0-gs8uPt`k5Klh8km&+ zJTJS3#Ndn0LSq{wVc09mu`I|iv15%gs^;gyBVpVyzM^wI2uIqLj&A8U=8KWYeu2HS zCA;M})6Tb1y2#1L(vL!^F@Ezo<}fio+8=K3nRQyQ+xrJFhy<25@y)K-Vcy|sxc2g} z2Wy+XkMo^m*<82NDgE~3?AX`jCDNXjd)oTWTD)FH$DFQF^#XlFWnIG_SNezORw~zF zktv@J7e=~sV(x2n+NB?n)-{;c*c~SaOg&1;v-+`&%Z-W3&_ikxWR8=A4+_D)8k=;!}kXd6b#4|+`j_5<%f<81%yi+@MVizkLk*=ZIyN0;ne0S&(N~sJz z%CkC%Ellh7L>Vg+FN+f|3#5RAl0lEkF`*N2ljQe8w8}%XRe4&{)E;XZd#stxnQD)P zPuSD#nz?O;GafMa7f&-rZgUb^D#34eI~}_o0|ZX0nU>T^wXZ44+pZnjH^cTdHe#^1 zQj7=Bw;mL5^b%&Y(7_OdllfJ~I5&dBpTlrmqz6uvujy7cn`V!wyEygkS9~9o+xUJsxEy80@WfU#>ciR}>?ch$X6C%mOd=k67Ee8d=V45FTD_y#ct) z8s-LpLuNo|%Nx5QTPL`DcYR9c-SQj(OYCjQhMMM)OL_{S`bynN3E4V9ZlaM-Utgr> z3>qe1DtxZ5kMkDu)NHyqL^`He%X3WceU;XIBp@c{XsUBe_jdpzSuC2VViWgJXVIxQ z1_fT`oV@-@tIkd_%&dm@acMtCSJ}SinBYd8FxfG&m{~kD=4o>j+x`h@dt1i0bWR)1 zxa1VJrN+rerHsoS7g7^6>X4~!vd(mZS)NVtWGbtJplGkj$^DYF4)9}EXUm5<=hD-* zhj1~P4I*<9s`~zt(#a(Hy>deL_D*u1%yewV)iQf@P==UKLQfp#S=XE+_ zT-W&xRp;<`hr|N3IYVRpGxhZ;Q*o(vw#fKhko!?}ej`!mrG9p5!X0!pAKq{WGk11u zVj4Le#A*r6H!ol=?8WfA$aqVG50eHhv)ungqhOHwPw`<}vu43%%od*Ex^EPos6~^X zsK`~{BL=^R)CJ{lFugd)1cJ0<#6oauM=Z)Y7`?y$3IL3~+Pk&;F5} z=0OA<`ReHPk386M#MAMHXJqFfy#pPD{W~lTUsUbeIRf*5X&p1ny^XI?RahEA@35Q8*mwmJ)hiB_ICiu%X>{#)Mm-Oy=j-ZuOg;P6)BR(KBC1`Y*?D^f~w6qn9*jqo+0oU^?|$d@fxYOL%~-r2Fz zcNE~2kYZyB5Cv=Ql9mxOxQ7PiFrsC|Hc!b6c(x}hRQ(kFS3dv+`903bQi(&sFKMBY ztrrwa&C?~^KMxDuuvS@FYr9&8!32<32I|}e)jN++8M6ms;vXmWmWtAe(Jbgf`hbBp z$u2$ut55t&evR+T(-<+xK~{w?krT+sQ8E0H%PglT(E`|s!q}ON!r#h4h3q>J&MIV zAvsj__@@6wj^_20xWTcbr^Le(sRLF;&T5RWqPg5QAj(>eNuU8EBp4E9>d(Nok;S?_ ze7%%Lh59GRk;l4Xk|^R^)9Xm^K5M>GDHNs6UlbBK)fk!W6^(zrwL>lbz%>lon9ebLppsy&oK2Z z57|IZPKIPB(*&ZNxMe$|6W@!{)<^GbRTw5QxLS^A4c_PVi(AmujxMo z(){q1KsllCaB&Hc`tI$TS&j+z=oR5C1+9;Yj-;Z)s3^+);*HO?lZxcV26EC!@Dzin z@9NAhq7f&iAna@;9g95cZn$P*_yTHHpyCzSSQ$j*@yN3-kk75SIk}T1PUKl<^a?$3 zbdi6K>7wg2>-ufu)x1Y2Lglj#>bRdRGKaxs{xksP>(HJTey zvl~uL3wukW%CBMSG~;;7Xl`*mXXFuJWZD4|HT+i5+v~^V|CZAT)g&4YnZJx*#_#0m z?-c_}W=T>jXJW=2!tr5$42zy!8!F}z+lbACJs`Wx$zPzE!yeS+?Usvzp@qPxS?T+O zBL4Xx*SY75q(XKykc~Py-lLUnGs~-9Jm|sn^HvwFgmbY>)_A=UiiS^zGh;unkSMeF zEG;Pep5>*{9S@;TbhoTVw$94tqjW%2r_G5Qysha zIOiQIh0>uR6I))aSv*BnKn@p)H?EqbiFm3Rh!;K-ds^}v)H4|{&yyRDw97D2Hz|qH zVxiPc+9CT|e5qO|XU98Rkka!tonU$?zR1_~7QZdCozX3x*$_KZ2i3;-lt!s!u48qs z%F`Ut;x1KcEZMHkc9JmM!<|IKEq87Qfg4rWUhiocW`i|GXTU|s6oA49T%dp}R?3#x;w#|0NMI14WcQZ@6d8@^v=)k&kYYD}%(TBW3s59#b-g;+# zMk!gHi4@Sw`1Ku3>xj-*_v7Mu5we|G*;}QpZ3^YRQJ$K8EqOuGkiSiK8S)&@qw!`T~en#Z|;pMFVW_0 zzB)9qRLsm$S%gnV7w@NYtJIkikamDwcWH@E9aUb@S>6-nUcaxYn9jvgo+G_Ji~)If z^N9`Tsp-H}5G5u9>L&`+ITm4WpE@MSddRmu)udX+SfP2e-hDc&yYfD0{8TW%6cG-XDBc9NN_*zBr`9LcE`yDbxqELPE= zYEx-Vq&T>Y9M33xQv^fIuE-H=F6QPMV~MpeHC8r~8SLgHh8!j2sThk=V~Fg=s@%Yd zF7zV^t;J>H&AE$HWB4Vt5WNK|^|EA`*w%v8d&0yLtqYJQhkX*&Nz|M$LM!p9MbD}v zD^ijioI#T3lJT&xx;ZzL3@2<~Y~g699Q5O9zONJoZ_Zt%q}K3(iN%pc+Ve;ma1Z1< z5@)CFPx~$V2RIOEze)R@dM}HWUExa5jBFTS*e32X=5=8L%z&0VXeRVQ*H6=()yS== zUSKWZTq@=+MBursaNu(5XTnv2AeW^=_$5%}-4IDM+_%+kK(=DJDg^4i+i_V53;tJ< zA$fM1MG``qWyz3=6CDtS*a~D7TzulibN9_}crD)0QNl(qXiZHke5x zjNCGHJ=)y+{NDhyf(7(P#PI#RKNfg8z!-wbsmOikZ9nw(X1bO-IEX;JM=zk|%g_;Q zkOas@jzXk$asgcS&3P;(@C)MUN+=6C^x5v7*^1s~mxKBy(-XbH8=Vp#ZdQ4tHD2s5 z6u!Bjny$ae`t)Fq!--lETQq?7@5Q+laAWU&3An_w?*RR~0)L*(UB2dDHa*VIU8Y}L>G- z{a#4z_fkHCmBd(U@BZeik+5O`T6|FvtmMPLoh!#&q})8CI{NKgb#AaQcXK5cg62o| zxUDV;rSLMikR~H%GNWwm^}gtp5Gg%nKUY!*3E_;quEBlYpr4xmuuFi{4655sZ1@ZS zd25p5KMYa?8uB~Rj?HX7AvQ5KzFuo~A?BkVi8)lKuOWGE3tT3$@P9CegK5W%^lj(P zh`$bza@PKmJ8^XF&wwX2k54xus?yQHwasPj|p z;-UCYjjvT9CwQ>`;;P>d45W3KdoM05gdKI#)%aTByZE59qvMo24bGI$2iiJ2`aNl# zia;0&4g6jJQ5r*pSkau{LS+AXn5SrMsM!r$ld2oW6z&TR!?(qIwXG#DOR3&2e6A&M zwF%AUuDn>n>B}XW)|eSVUy}}B9K%0BuK>QMY>9IXWT|*T8 z%v#{4GSXQRS`1zkP3uoe;RIk@U>LZBQ`&*7N2#5ewMr6c(U}=A<<+-wE;q2)pa<>j zOF}CI$FlwK>oa9JP8MaY+f*Klfrwn^BQYrXi}Y0OQUg*`oicZ|8k8XvLO|r<0#G8x z!l~yS>%iW8N$XL5iY$E<43i{&4jlin(??&^YczRul4KB7xhXuER|$SVlVIzEX!@g> zc@~;hDKx?G^rH|VOVxNml}O*LRdtpC@C*8KH2RX*gR67)_?02+fm)OmM@R*AWFuS&K7?c=7q?Ph z93G7jYAPQpoYmR@B%vlAVvz6qke!s5YW#*tkMvq!8EPuB9#dmLHbI;VVYrO=s*uFw zsN)L|qWXk0zNI=&mq6)7)NzoulpL0QNDi&XX+jt;EQ~eb?AH4Lj=>#(S^P~FUk0`C zow~?QYzHKmtPrhg#kGm0bR9=uj;+63XwLkT3!s_$l2ntTnNmc7!^6$4T@O%LJcAR} z67#*#gM0+7^JK->ThH+5!9~SBB}PC|oxdp!h6_wf8Dvv6prb_kU16+L4z0wqOmoRf zAeK6-YQFVjJzFWD6~2R3HChAYmae<`ImDqoVJBMh87^$FZGrs4!z`gfR=#bWJ6$z4 z-FsRDzD;f{DBGvx8C=nCH;k@E=J8vq6mL-%ik%LD((Fp>2&G6F?cr`ZG)%Q!I;%dc z^w#zrQ2gVw`ibbodhZ2T^QR!f*^|B4LXz2t5QE={XZs_hh4T_JSz= zQy)2I3$HD^x+YloWHrG>fsPp=@7!Vy(QH& z!@T5FJxWd0qx5b+J~}Z|r`n7d<=dGNTliB)d2ChiKzvWbHCxeIQto7@I*hiFtH489 zH>%fb*!?w0wl>XV-+vi23sQEDGeOVmMhy??qG>PbE;_{SUc$hgT);>Pw#ojzW~b`H zy3?eLKQ$j9J9agSaEvQM0hlP&R$spAb!ZzIZn~Qb@LSpytPUNaZLF_OlrT)V=?PkE zfE#Re;Y`^Iq-w0+vAZyj6&|LUi{9Nlvk?_-5We@wDR4reU3Jm5bcyI9 z&$dO*CEbqcbv-4n0Us<{PuBvgqms3SwS0p0E8bvuDN{4-h;H!hoDJ)AcBK7#!Ul`< z2R2?Sx|#xiFF_75=HLe=AV&xBagEPTVKWdP)%ff%K#6BGKC1vDy`(1PhVHteI21HI zyQd{c?ij$2m=51GpL?8>e9h-FFzJgE>KP&7@yYqLs7pZeHJwjzJdo;L?(sEo1PDIN zXQNADrfkcQ9K*vDvS z4@LTOd|#_)K7`!ZzEIWh-iiE}9T(?PblvcBcYH+)^xQWovTk^_J6_!|&*^OGh#a|2 z1p}t5WzEpHVrL{I0!r&2a&L&sB z%h@Du32rWK6VBn5Kc{-S-7fW;M%>RIFLB(7+m5>&cO&kLI0ILVn}=(W^h3=LJMB*w zMux?l@GxyjSPv4l63I-12)RO8jCkle_`|O~PLINnP2`PyfltI^Yw~XMJ zHiuK{lLeat4JWU@!-v-T8L_gC11%%)+j3NnuhT@@TiFwBJbHl9wjdTOfZ+*;XYP?$ zbC9k9^W$mxjm|pOGwb+Xa1xz+Iy%>iX0Cwd>q!ssBzPe5U#{3MC9PR?%$#)`8H?D$ z8E24_Dmqmc_4)36fRyH}W9E`0`TZCiCCb5p+0*@>0X4CQ*$bz&s}BURwqmyPxC9U< ztz9#oe|wOBS3Lp)Q7VPeT2y!XnuLQE z=|2BcDv57bVD8IO`f~zGvrHS@m6R;7 zX^C9ir_C(s0-=gul{#ib)w?xTP^nNv=Zue!oJtFik?ouXNQ1@q%(7T>98ZEUL5RZn zbg8@X*^*6{MEVQwxUg<&V3y!1Je~-%6o%Tj3|EoD6XLG$g+*JA`I>$~w!U3AoQb^U zrvK5|;*a(nG7t2&Q-?^u)Sn1umR(c$y5ppVH$f8*q~{8%o=69I=>_sCT(yDpIr7@3 zUQa`__9`v7^G>67F|&-Iwi0a5Cfil@|B`AQX3nhaH?-oMb3%*=qmkTrp4>qH)X zFZR9EcPOg8GyV8PRUqb#cyE&^t;H$vbPN?H-o0O!Oy`|eaeO}?mDbUwyf=z>b;5gG zTBr72Cf*rlro=(5torS}-p)cY)mg|}?_@g*?JZd-Z?#J!3;B>Nl&8neLZH)G$XoB* zbQFO?drKC|`z7%v3;B>Nl;;uodrKC|`(N!WBD0$nJ(j={V)JXCys1;$K29J=t*>EkEWcY+-I0qi4;Y^b)+} zFa8--lAbyCcl2J6c2JdMPgep;G)p26PN0L6P<&L+tk-FO7FPyD)$8WmezT|V5Da?B zI_55Yf(gQrzu&BSJ?(9%1(x{eI9bKKtYUShhn1x2Db`xwu9Im!n{s8Hxu9;USFbZ! zL{#ex%U2Zf=KZ~eeJuYZnMe}xoORmV+j~Bqp#oMsOInIWPHnAXKgfmhvCpm*!92tV znex;K`oqKuh?38RCjMG~iQ^Y1xtoLAi+dioVW7nE3crq1C5}AYJ-Eklm%N9beB2D& z0$e?=5%;gSM{sdm=IIj0B-{+#GF%w$NF{-ug6{sY&;bw#cIoF6K-=*n{ymaKa=oycgs2G zmyHEcTswTj?G5iuGB!56mv5{XJQg3TxWdAFOXg@>h&0E*rJiAPslzK9-plhfKTj88 zyXGuyV#${hd`$=OD$Wb1&4{NLe>Uv=eDia6yxMy`3!s!XoYH*FzamOQeA0=-pE?}* zi|cwDINwfZ#43pN5BJ@59}#-TlZNZPUMxf@%awLC(*<8_>o}_MK}g5iW-z%i2du#a ztmzH!U53cS!rTjr-dX=BDvIL|!}#@H7et^%gKcf2MEWP4jB~;+Kq+Onu4<$_Y-Qtt zE)E7xlt!--8p*e_azICk%{Tzq8@VI!cxlX-ap1$lHypVRgHb9^#Q0y)k<6}IVKpsH z_c1_JQMUag+eS}IT6I%<4aUXGxTccY^2+=t7nVQNQje0iVH2g;-EMZ}S}Lk@*Fwgk z`EF9R7;0l#8h0(yzK~o>kD#wfmhN54&W^iWd{>+u_j*}ewNXkrK028e9;Po5=B6;n z@OOttH+(hivhYY1+C4MP!CCQ}tp^}mcgcfkd4+kNXmWz@%%u+#MnQd=*b-qYB2@8n zOlI*y^J<39$GJIU%tU4`(nA*E9}3UiylT^<6e$mQMDxrpo5wzB$PJ$hhTQNOXWrm3 zXUqORsx|^*s#{%|LQ+AN*o~@y6X9R%TBXq=Q>(IeCHi}JWJud$aKQ0%3YG^2Pfr&7 zk6bPCHN8L{$#S|59`agmUbRgCmdD4y6atkRQ)(lTf~hg7HTXr#Ot^}^<_L%yl;I6OABfk zjvd2QoTMLK3BLsMLe_^ek=LzgllhnTU{&Fp)kS-1;I(-W>R1#Xh5TWGJ{y6Pw}^Rg z(R{0?i27FqnDZJt#CnUSe$1dBLPwFw6<(X3527ctOtP+U+Z!MM2R1yDgv5$Y5?T$L zjOr=WV|0>`q0vdj>M8V7bkZF46tXKiNob$wq+FiXkKRIIJRRa{8BdBRQj|f_Uf(^r zcuiG1P~Sb->Rod3-Q!j7lArG$*$%eK4j^bP;Z>8;R4(>y&$p4VZ&g)NL@|8NoY+Dq zdNPTviCw%9K2gMB(H>Bi9nP6LNgy=*QzuDTVb4?rw}E-X!hH-GtiR^r-zs=P4&ysC z6MeO4kMHh{yqaoPYpPwLd6l5UoUUlm?zBJB0)bXd+sfibY5phRl!z(l0^sm+_&bq> zZ{Xb@Amiw*wC2)I)C2iwX}j=kQx&>=O|o9l*kw8~wzJ3p6&mI5{@{)*2#n&^Y>J&R z=>aBnvdxZPAg*GJ<=`n_qNLZGQWE#oeA#Juz%}2llI57gHkv>4)N#6kRpsqT@zytOYx$h zRZA%F_&McziVV1#k2>2Hr;M7X)cSd$s zh+byFCggYX zLj?03qNH`38z;zvdo||u9zw>Z?J?JQV(yZTBWXx;>@jcSVphj%?tC7u{AUrd>fjbm zeuwEpUvX`Ir@F9}BsyC|g8HL=sYkX9>=XiI=t2V_H%5&WXJE9Kh#5RJ~7~ zz7U`AJQAK;WEr2Xw$d3Us#G1BL4nx=i&@T2QPj01+w|VmFm+Nmqv6X=M|ea@QI`T_ zvy~{PsLQA}19$D(EX%a5MfWgTbgOlqB}Kni35;{d_&g|(yh`iq!lY9mNr}nQIOEFI zutz5;RQ%q^h-S%~^g*S6#NX90jboMfY2%j9JDc|Tn%?0RWEK>@S@d_q+i-GHc-Rx* zLnxtr_~(hpO;q7)>Z;rV6rc-jHTf=tm!zVazaxw#H1h7}CX) z(oB>-S!E@XAc9OxOhA@$lT>cv_?jk4ZdF_zjr!$qloRhRPGO~}ee^TBk6G4unp@)y zrzV+Ij``v9Oth;?JybOw7_0^<;}`gLI?Um8H3?S|D+h=G;-#MKN_16|umM+X+QFq7 zF2r5iHW7Qtj%%rn0wl7*P zN{wyDj{gSR(gSM&WoZK4B9xaUptLw9PFo`9e>X>ta7lTZLe4C3C5L9 z8MR+_PBLE49pIvwob&)q zuVTka;_xttDS2VM@9{PLn1R{w-ZWp+1M)JZ#@GBNU6UFVVg8A?7AIqL3Oi{=s*G7& zAiS^$Ih*k8sgtBzp~6DOgX$vHkxt&Kl=mBRf6l!M_sF2Lo!w@re21cTbT@g^N~}*Wyz@kvED8{5r}x- z6h`z2=9MW@6*V2`F|VeBSp+^D_a}mx5cFK3CIVv>$(b0!EB=uQVefy}MO6daeN+$o zCAzvP?W#c4isu`Ogwpjj{W~pB=bSw=dfq=cCrFPjRrA8Tq%|u)d|t>i{nCi@bt{@4 znz1r;bg&UWIHTDk{R2=(PBOq(FoN~yK#aMl<0HoTHUGdkpYX(gGtP(3Hgw4)H@CPZ zPSfZ6$>Cj^9Nr9bJ*LzEs^O_dJ)M1;uUQTt8#cM7wK&6{;&#S{T1{C*C&>U>3TH=8 z5d__=djGtS?)_x|Jvi8h_WrKxb&iq0ytg#cb?p)|)>Dr?2ohai&4;RN%*!MSw~H)j zT?9;!T6sl#s!dnW7#0fAR`K*u6F-B(e~DSz9)MIorFUftDZ?erktw7>a-QKVkWjVR zQPAoAT#E;G#8}Gpa1LFxpBuy#O6TL-5TI}ZIi({J0#SGjRA<}=P?`y|c z8AZTp^7)+4=f-mQLD9V22zxA@g1LkX6cVq3Z*U3tlK`Ox(R~aqbvY5$3hb$sN2d8(8=X;`P6Fwoj}NxQ$t<|{(AL0q84S-iyfa*L9NFNK=NE9`A} zZ!zMH=akBqR6D5QlKsfke-xNRZyr)%RXKmjHkJ*kV9QH(74G$D|l)Fl%spH_zv^QIDf$Q8mFLtoCXFVeS+>{7?Xb4nds`StOwiSiV@F}2eF_hpb`i+5ZekwJ=^jFD+5IKv|td5J+{zgfgb0e|{TgQGZ6p2W#+SCN3 zg62F?wJ{SJ!+qf=K@S(xcZjH8ST35OlUB=$CbXNRTo>Km>Jk3G;tN2@$!=e<2R18u zT&|Fa9#>IH%R#I#2SQDRM7S{#AEoX}gzlDa)W34ygeIZ;>l+&M9DFP1hwdX>>9FxD z5lM1HpWr3HOxF>`8?4cr(7I_hH9EL>^daZZDpYClDH?5zDuGs0*Nr#7tpp-q#fz&2}VTAYOSN>)<4meoNHn+-s1r3HOh|*`) zJ422f|~e;b8l-3e({rLWt{&Qb`Q z3~`Ji@F`?!$q*;Oq#EmC`kCC&aHCt-IIsD{9Xa(Y2A;QG=O!i*{*WjdG%)!IZxWH^ z@dAg4#D0+eQ}DxY6|q3wpxiBx>R0!;8>Rl*0Cy5V?$%fj5t(YbmUbybJs~)cOc^k+ zlH2aSE_^(-K1>l@w?jG?a$n)EsDH~%O?!

q-UjR)ow&*>&yG9?8a`*r|e_?4Z@o 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 diff --git a/ruby/test/SideScroller.bat b/ruby/test/SideScroller.bat deleted file mode 100644 index 5f2b0e3a..00000000 --- a/ruby/test/SideScroller.bat +++ /dev/null @@ -1 +0,0 @@ -..\bin\ruby.exe SideScroller.rb diff --git a/ruby/test/SideScroller.rb b/ruby/test/SideScroller.rb deleted file mode 100644 index 59a33cfc..00000000 --- a/ruby/test/SideScroller.rb +++ /dev/null @@ -1,240 +0,0 @@ -require 'RubySFML' -include SFML - -module Tiles - Grass = 0 - Earth = 1 -end - -# Collectible item. -class Gem2 < Sprite - def initialize(image, x, y) - super(image) - self.x = x - self.y = y - end - - def update - self.rotation = 25 * Math.sin($clock.to_f*6) - end -end - -class Player < VSprite - attr_reader :score - - def initialize(image, w, h) - super(image, w, h) - @sb = SoundBuffer.new("media/Beep.wav") - @sound = Sound.new(@sb) - @score = 0 - end - - def update(window, map) - time = window.frameTime - input = window.input - - # If there's no ground beneath my feet, increase speed downward - if !map.solid?(self.x, self.bottom) - @vy += 1 - # If there is ground beneath my feet, and the user presses up, - # boost speed upwards to jump - elsif input.isKeyDown(Key::Up) - @vy = -20 - end - - super(1) # Update position based on velocity - - # If we just moved down, see it we landed - if @vy > 0 - if map.solid?(self.x, self.bottom) - @vy = 0 - self.top -= self.top % 50 - end - # If we just moved up, see if we hit our head - elsif @vy < 0 - if map.solid?(self.x, self.top) - @vy = 0 - self.top += 50 - self.top % 50 - end - end - - moved = false - if input.isKeyDown(Key::Left) - moved = true - self.x -= 10 - # If we just moved left, see if we hit a wall - if map.solid?(self.left, self.y) - self.left += 50 - self.left % 50 - end - end - - if input.isKeyDown(Key::Right) - moved = true - self.x += 10 - # If we just moved right, see if we hit a wall - if map.solid?(self.right, self.y) - self.left -= self.left % 50 - end - end - - if @vy < 0 - @tx = 3 - elsif moved - @tx = (@tx + 1) % 3 - else - @tx = 0 - end - - # Same as in the tutorial game. - map.gems.reject! do |c| - if (c.x - self.x).abs < 50 and (c.y - self.y).abs < 50 - @sound.play - @score += 10 - true - else - false - end - end - end -end - -# Map class holds and draws tiles and gems. -class Map < Drawable - attr_reader :width, :height, :gems - - def initialize(filename, player) - @start = Time.now - @tileset_image = Image.new("media/Tileset.png") - @tileset = TSprite.new(@tileset_image, 50, 50) - @gem_image = Image.new("media/Gem.png") - @gems = [] - @exit_image = Image.new("media/Star.png") - @exit = TSprite.new(@exit_image, 25, 25) - - lines = File.readlines(filename).map { |line| line.chop } - @height = lines.size - @width = lines[0].size - @tiles = Array.new(@width) do |x| - Array.new(@height) do |y| - case lines[y][x, 1] - when '"' then Tiles::Grass - when '#' then Tiles::Earth - when 'S' then player.x, player.y = x*50, y*50; nil - when 'E' then @exit.left, @exit.top = x*50+25, y*50+25; nil - when 'x' then @gems << Gem2.new(@gem_image, x * 50 + 25, y * 50 + 25); nil - else nil - end - end - end - end - - def done?(player) - player.x.to_i/50 == @exit.x.to_i/50 and player.y.to_i/50 == @exit.y.to_i/50 - end - - def render(window) - # Very primitive drawing function: - # Draws all the tiles, some off-screen, some on-screen. - @height.times do |y| - @width.times do |x| - tile = @tiles[x][y] - if tile - @tileset.tx = tile - @tileset.left = x * 50 - @tileset.top = y * 50 - window.draw(@tileset) if - @tileset.right > window.view.left and - @tileset.left < window.view.right and - @tileset.bottom > window.view.top and - @tileset.top < window.view.bottom - end - end - end - @gems.each { |c| - c.update - window.draw(c) if - c.right > window.view.left and - c.left < window.view.right and - c.bottom > window.view.top and - c.top < window.view.bottom - } - window.draw(@exit) - end - - # Solid at a given pixel position? - def solid?(x, y) - x < 0 or y < 0 or x >= @width*50 or y >= @height*50 or @tiles[x / 50][y / 50] - end -end - -$clock = Clock.new -mode = VideoMode.new(640, 480, 32) -win = RenderWindow.new(mode, "RubySFML Test", 0) -view = View.new(FloatRect.new(0, 0, 640, 480)) -win.showMouseCursor(false) -win.useVerticalSync(true) -sky_image = Image.new("media/Space.png") -sky = Sprite.new(sky_image) -player_image = Image.new("media/CptnRuby.png") -player = Player.new(player_image, 50, 50) -levels = Dir["media/Level*.txt"].sort -level = 1 -level_start = Time.now -map = Map.new(levels.shift, player) - -# Simple game loop -done = false -game_over = false -while !done - if map.done?(player) - if levels.empty? - game_over = true - else - level += 1 - level_start = Time.now - map = Map.new(levels.shift, player) - end - end - - while e = win.getEvent() - done = true if e.type == Event::Closed or - (e.type == Event::KeyReleased and e.code == Key::Escape) - end - - player.update(win, map) - - left = player.x - 640/2 - left = 0 if left < 0 - left = map.width*50-640 if left > map.width*50-640 - top = player.y - 480/2 - top = 0 if top < 0 - top = map.height*50-480 if top > map.height*50-480 - view.rect = FloatRect.new(left, top, left+640, top+480) - win.setView(view) - - sky.left = view.rect.left - sky.top = view.rect.top - win.draw(sky) - win.draw(map) - win.draw(player) - score = Text.new("Score: #{player.score}", "", 20) - score.left, score.top = sky.left, sky.top - win.draw(score) - - if game_over - text = Text.new("Game Over!", "", 60) - text.left, text.top = sky.left+200, sky.top+200 - win.draw(text) - elsif Time.now - level_start < 3 - text = Text.new("Level #{level}!", "", 60) - text.left, text.top = sky.left+200, sky.top+200 - win.draw(text) - text = Text.new("(Collect the gems and find the exit)", "", 25) - text.left, text.top = sky.left+125, sky.top+260 - win.draw(text) - end - - win.display() - sleep(0.01) -end - diff --git a/ruby/test/Tetris.bat b/ruby/test/Tetris.bat deleted file mode 100644 index d5fac16f..00000000 --- a/ruby/test/Tetris.bat +++ /dev/null @@ -1 +0,0 @@ -..\bin\ruby.exe tetris.rb diff --git a/ruby/test/Tutorial.bat b/ruby/test/Tutorial.bat deleted file mode 100644 index d27785c7..00000000 --- a/ruby/test/Tutorial.bat +++ /dev/null @@ -1 +0,0 @@ -..\bin\ruby.exe Tutorial.rb diff --git a/ruby/test/Tutorial.rb b/ruby/test/Tutorial.rb deleted file mode 100644 index d973cf5c..00000000 --- a/ruby/test/Tutorial.rb +++ /dev/null @@ -1,102 +0,0 @@ -require 'RubySFML' -include SFML - -TURN = 180 -THRUST = 200 - -class Player < VSprite - attr_reader :score - - def initialize(image) - super(image, image.w, image.h) - @sb = SoundBuffer.new("media/Beep.wav") - @beep = Sound.new(@sb) - @score = 0 - end - - def warp(x, y) - self.x = x - self.y = y - end - - def turn_left(time) super(TURN*time); end - def turn_right(time) super(TURN*time); end - def accelerate(time) super(upVector, THRUST*time); end - def update(time) - super(time) - self.x %= 640 - self.y %= 480 - scale_speed(1.0 - 0.5*time) - end - - def collect(stars) - stars.reject! { |star| - if distance(star) < 35 then - @score += 10 - @beep.play - true - else - false - end - } - end -end - -class Star < TSprite - def initialize(image) - super(image, image.h, image.h) - self.color = Color.new(rand(255 - 40) + 40, rand(255 - 40) + 40, rand(255 - 40) + 40, 255) - self.x = rand * 640 - self.y = rand * 480 - self.subRect = IntRect.new(0, 0, image.h, image.h) - @last_change = $clock.to_f - end - - def update(time) - if $clock.to_f - @last_change >= 0.1 # Change every 10th of a second - @tx = (@tx+1) % 10 - @last_change = $clock.to_f - end - end -end - -$clock = Clock.new -mode = VideoMode.new(640, 480, 32) -win = RenderWindow.new(mode, "RubySFML Test", Window::Fullscreen) -win.showMouseCursor(false) -win.useVerticalSync(true) -background_image = Image.new("media/Space.png") -player_image = Image.new("media/Starfighter.png") -star_image = Image.new("media/Star.png") - -background = Sprite.new(background_image) -player_image.createMaskFromColor(Color.new(255, 0, 255, 255)) -player = Player.new(player_image) -player.warp(320, 240) -stars = [] -10.times { stars << Star.new(star_image) } - -# Simple game loop -done = false -while !done - while e = win.getEvent() - done = true if e.type == Event::Closed or - (e.type == Event::KeyReleased and e.code == Key::Escape) - end - time = win.frameTime - input = win.input - player.turn_left(time) if input.isKeyDown(Key::Left) - player.turn_right(time) if input.isKeyDown(Key::Right) - player.accelerate(time) if input.isKeyDown(Key::Up) - player.update(time) - player.collect(stars) - stars << Star.new(star_image) if rand(100) < 1 and stars.size < 10 - stars.each {|star| star.update(time) } - - win.draw(background) - stars.each {|star| win.draw(star) } - win.draw(player) - win.draw(Text.new("Score: #{player.score}", "", 20)) - win.display() -end - diff --git a/ruby/test/fps.bat b/ruby/test/fps.bat deleted file mode 100644 index b171e23c..00000000 --- a/ruby/test/fps.bat +++ /dev/null @@ -1 +0,0 @@ -..\bin\ruby.exe fps.rb diff --git a/ruby/test/fps.rb b/ruby/test/fps.rb deleted file mode 100644 index 4f48db99..00000000 --- a/ruby/test/fps.rb +++ /dev/null @@ -1,313 +0,0 @@ -require 'RubySFML' -include SFML -require 'gl' -include Gl -require 'glu' -include Glu - -class Array - def magnitude - return Math::sqrt(self[0]**2 + self[1]**2 + self[2]**2) - end - def normalize - mag = self.magnitude - return [self[0]/mag, self[1]/mag, self[2]/mag] - end - def normalize! - mag = self.magnitude - self[0] /= mag - self[1] /= mag - self[2] /= mag - end - def vec(pos) - return [pos[0]-self[0], pos[1]-self[1], pos[2]-self[2]] - end - def dot(vec) - return self[0]*vec[0] + self[1]*vec[1] + self[2]*vec[2] - end - def cross(vec) - return [ - self[1]*vec[2] - self[2]*vec[1], - self[2]*vec[0] - self[0]*vec[2], - self[0]*vec[1] - self[1]*vec[0] - ] - end -end - -class Player - attr_accessor :pos, :view, :score - def initialize(x, y) - @score = 0 - @pos = [x+0.5, 10, y+0.5] - @view = [0, 0, -1] - end - - def turn_left(time) - angle = -2.0 * time - @view[0], @view[2] = @view[0]*Math::cos(angle) - @view[2]*Math::sin(angle), @view[0]*Math::sin(angle) + @view[2]*Math::cos(angle) - @view.normalize! - end - - def turn_right(time) - angle = 2.0 * time - @view[0], @view[2] = @view[0]*Math::cos(angle) - @view[2]*Math::sin(angle), @view[0]*Math::sin(angle) + @view[2]*Math::cos(angle) - @view.normalize! - end - - def move_right(time) - angle = 0.5*Math::PI - right = [@view[0]*Math::cos(angle) - @view[2]*Math::sin(angle), 0, @view[0]*Math::sin(angle) + @view[2]*Math::cos(angle)] - d = 5*time - @pos = [@pos[0]+right[0]*d, @pos[1], @pos[2]+right[2]*d] - end - - def move_left(time) - angle = 0.5*Math::PI - right = [@view[0]*Math::cos(angle) - @view[2]*Math::sin(angle), 0, @view[0]*Math::sin(angle) + @view[2]*Math::cos(angle)] - d = 5*time - @pos = [@pos[0]-right[0]*d, @pos[1], @pos[2]-right[2]*d] - end - - def move_forward(time) - d = 5*time - @pos = [@pos[0]+@view[0]*d, @pos[1], @pos[2]+@view[2]*d] - end - - def move_backward(time) - d = 5*time - @pos = [@pos[0]-@view[0]*d, @pos[1], @pos[2]-@view[2]*d] - end - - def init_view - glLoadIdentity() - gluLookAt(@pos[0], @pos[1], @pos[2], @pos[0]+@view[0], @pos[1]+@view[1], @pos[2]+@view[2], 0, 1, 0) - end - - def update(win, map) - pos = @pos - input, time = win.input, win.frameTime - turn_left(time) if input.isKeyDown(Key::Left) - turn_right(time) if input.isKeyDown(Key::Right) - move_forward(time) if input.isKeyDown(Key::W) - move_backward(time) if input.isKeyDown(Key::S) - move_left(time) if input.isKeyDown(Key::A) - move_right(time) if input.isKeyDown(Key::D) - @pos = pos if map.solid?(@pos[0], @pos[2]) - end -end - -class Block - attr_accessor :pos - def initialize(x, y) - @pos = [x.to_i+0.5, 0, y.to_i+0.5] - end - - def draw() - glPushMatrix() - glTranslatef(@pos[0], @pos[1], @pos[2]) - glColor4f(1, 0, 0, 1) - glBegin(GL_QUADS) - # Facing +z - glNormal3d(0, 0, 1) - glVertex3f(0.5, 0.5, 0.5) - glVertex3f(-0.5, 0.5, 0.5) - glVertex3f(-0.5, -0.5, 0.5) - glVertex3f(0.5, -0.5, 0.5) - # Facing -z - glNormal3d(0, 0, -1) - glVertex3f(-0.5, 0.5, -0.5) - glVertex3f(0.5, 0.5, -0.5) - glVertex3f(0.5, -0.5, -0.5) - glVertex3f(-0.5, -0.5, -0.5) - # Facing +x - glNormal3d(1, 0, 0) - glVertex3f(0.5, 0.5, 0.5) - glVertex3f(0.5, -0.5, 0.5) - glVertex3f(0.5, -0.5, -0.5) - glVertex3f(0.5, 0.5, -0.5) - # Facing -x - glNormal3d(-1, 0, 0) - glVertex3f(-0.5, 0.5, 0.5) - glVertex3f(-0.5, 0.5, -0.5) - glVertex3f(-0.5, -0.5, -0.5) - glVertex3f(-0.5, -0.5, 0.5) - glEnd() - glPopMatrix() - end -end - -class Billboard - attr_accessor :pos - def initialize(x, y, size=0.25) - @size = size - @pos = [x.to_i+0.5, 0, y.to_i+0.5] - end - - def draw(camera) - normal = @pos.vec(camera.pos).normalize - up = [0, 1, 0] - right = up.cross(normal).normalize - - glPushMatrix() - glTranslatef(@pos[0], @pos[1], @pos[2]) - glColor4f(1, 1, 1, 1) - glBegin(GL_QUADS) - # Facing camera - glNormal3d(normal[0], normal[1], normal[2]) - glTexCoord2f(1, 0) - glVertex3f((right[0]+up[0])*@size, (right[1]+up[1])*@size, (right[2]+up[2])*@size) - glTexCoord2f(0, 0) - glVertex3f((-right[0]+up[0])*@size, (-right[1]+up[1])*@size, (-right[2]+up[2])*@size) - glTexCoord2f(0, 1) - glVertex3f(-(right[0]+up[0])*@size, -(right[1]+up[1])*@size, -(right[2]+up[2])*@size) - glTexCoord2f(1, 1) - glVertex3f((right[0]-up[0])*@size, (right[1]-up[1])*@size, (right[2]-up[2])*@size) - glEnd() - glPopMatrix() - end -end - -# Map class holds and draws tiles and gems. -class Map - attr_reader :width, :height, :blocks, :gems - - def initialize(filename, player) - @start = Time.now - @sb = SoundBuffer.new("media/Beep.wav") - @sound = Sound.new(@sb) - @gem_image = Image.new("media/Gem.png") - @exit_image = Image.new("media/Star.png") - @exit_image.resize(25, 25, Color.Black) - @exit = nil - @blocks = [] - @gems = [] - - lines = File.readlines(filename).map { |line| line.chop } - @height = lines.size - @width = lines[0].size - @tiles = Array.new(@width) do |x| - Array.new(@height) do |y| - case lines[y][x, 1] - when '"', '#' then @blocks << Block.new(x, y); @blocks[-1] - when 'S' then player.pos = [x+0.5, 0, y+0.5]; nil - when 'E' then @exit = Billboard.new(x, y); nil - when 'x' then @gems << Billboard.new(x, y); nil - else nil - end - end - end - end - - def draw(player) - @blocks.each {|b| b.draw()} - glEnable(GL_TEXTURE_2D) - @gem_image.bind - @gems.each {|g| g.draw(player)} - @exit_image.bind - @exit.draw(player) - glDisable(GL_TEXTURE_2D) - end - - def exit?(player) - player.pos[0].to_i == @exit.pos[0].to_i and player.pos[2].to_i == @exit.pos[2].to_i - end - - # Solid at a given pixel position? - def solid?(x, y) - y < 0 or x < 0 or x >= @width or y >= @width or @tiles[x.to_i][y.to_i] - end - - def collect_gems(player) - @gems.reject! {|g| - if player.pos.vec(g.pos).magnitude <= 0.5 - @sound.play - player.score += 10 - true - else - false - end - } - end -end - -$clock = Clock.new -mode = VideoMode.new(640, 480, 32) -win = RenderWindow.new(mode, "RubySFML Test", 0) -win.showMouseCursor(false) -win.useVerticalSync(true) -sky_image = Image.new("media/Space.png") -player = Player.new(0, 5) -levels = Dir["media/Level*.txt"].sort -level = 1 -level_start = Time.now -map = Map.new(levels.shift, player) - -# Simple game loop -done = false -while !done - if map.exit?(player) - if levels.empty? - game_over = true - else - level += 1 - level_start = Time.now - map = Map.new(levels.shift, player) - end - end - - while e = win.getEvent() - done = true if e.type == Event::Closed or - (e.type == Event::KeyReleased and e.code == Key::Escape) - end - time = win.frameTime - player.update(win, map) - - #win.beginOpenGL() - glEnable(GL_DEPTH_TEST) - glEnable(GL_CULL_FACE) - glEnable(GL_BLEND) - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) - glMatrixMode(GL_PROJECTION) - glPushMatrix() - glLoadIdentity() - gluPerspective(45.0, 640.0/480.0, 0.1, 100.0) - glMatrixMode(GL_MODELVIEW) - glPushMatrix() - player.init_view() - glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) - glEnable(GL_COLOR_MATERIAL) - glEnable(GL_LIGHTING) - glEnable(GL_LIGHT0) - glEnable(GL_NORMALIZE) - glDisable(GL_TEXTURE_2D) - glLightfv(GL_LIGHT0, GL_POSITION, player.pos + [1]) - glLightfv(GL_LIGHT0, GL_DIFFUSE, [1, 1, 1, 1]) - glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.25) - glLightModelfv(GL_LIGHT_MODEL_AMBIENT, [0, 0, 0, 1]) - map.collect_gems(player) - map.draw(player) - glPopMatrix() - glMatrixMode(GL_PROJECTION) - glPopMatrix() - #win.endOpenGL() - - text = Text.new("Score: #{player.score}", "", 20) - win.draw(text) - - if game_over - text = Text.new("Game Over!", "", 60) - text.left, text.top = 200, 200 - win.draw(text) - elsif Time.now - level_start < 3 - text = Text.new("Level #{level}!", "", 60) - text.left, text.top = 200, 200 - win.draw(text) - text = Text.new("(Collect the gems and find the exit)", "", 25) - text.left, text.top = 125, 260 - win.draw(text) - end - - win.display() - sleep(0.01) -end - diff --git a/ruby/test/media/Beep.wav b/ruby/test/media/Beep.wav deleted file mode 100644 index 589a3eddad380a4c12f157fd2d5e26650bab991e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4338 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 I9y}QT2Ru$h+W-In diff --git a/ruby/test/media/CptnRuby.png b/ruby/test/media/CptnRuby.png deleted file mode 100644 index 7b6a3257f8f8b917193fc41ba7f37bde001aff7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14436 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 diff --git a/ruby/test/media/Star.png b/ruby/test/media/Star.png deleted file mode 100644 index 7ecaf328456797d3dbd42139c8a3c76423b7b318..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4354 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 diff --git a/ruby/test/media/Starfighter.png b/ruby/test/media/Starfighter.png deleted file mode 100644 index 91d80454c35526be4f80852ca19fbf52aee033fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2481 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 diff --git a/ruby/test/media/Tileset.png b/ruby/test/media/Tileset.png deleted file mode 100644 index 48ffd7000647b2c0359c7eaaf294136b4a4b2501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8683 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 JPDHLkV1gD;`ZoXo diff --git a/ruby/test/media/cannon.wav b/ruby/test/media/cannon.wav deleted file mode 100644 index 69ea21750e7193918f059911a49c5be64649b084..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4072 zcmZu!t&h807VadQv~HWqnpPnZtwAnLmShEj6-!b>-t5aONS1`;XZijENDvrQ4G9W? zLx8OTQCS71l2o>8_Bk+}>2!W~rsbpe+QTDRDS7cSy z3{5vp8+(R9;73s$LnuqrETgX!BRNFA4-IUKHXg)PMI8oRupDjgSY!hJd_M^ND2}iU z$J%5pur|G&awc_2RI%U#E4-=Op8DnQpd$Qm^VW4 zDdP_N0{|EjA4UY?VRI5B6lr@48k^(?`nGIX?+ox`d6I(w3;=3SdN7@2fbgiNBFoaA z;KN6j6nU>|q%XONpastx20F>DQ> zFn+M{M}xk}Pw+8J@!>8~7yFT#VMzXkahPqBggA5Z$Vlv<>(<04_BFpnK%aSxs>E6hXU$CZ_xr1>UE4_y%&GS4pO z^VOQ+nCU}o&hnCGA$I^xJT5=V-r9q2$@|S?;>UH$YeCulSe{;7uZLCf^-Gg@dz6Hi zvDL!z@-^w{?q19$g6aE?E^HPrQjf<4*;XHKPh!LEJB78PFDZdsPyO4|JG(?keQ znVn)f{vm1ZucG5~rZGf&d@1Eylix~%rv^xLL?bhVJ zql(*a8$1kJbBgMuW&5Sp{k=a@@ktV-k7?Puw&$4Te6e8GixrQ&3mrdlC4u9(?S>ac zNps@zb<uI}RCx`r(CX^SSQ5 zyWa1mqe;(;K#3_QL+7%)jBYsB&H0>{^{KsF`W_-ZH0dvwb5o)26p4R2{3*507<)c3>J3yWB{kW$>J- zDuyF-Yf;r>(K{rL6Svs&*7jEfGC2+=bocw^)HGF+9emG_1VQ2-F}$1s2(&2AHC5Af zbyMS3tiba;!zpl|AXr|Aev#B<$YWfu@AvjIPj08!&=hI2c>Cs@@nO2y%7z;ib=`kr z`B(!*IK$a{R2?bX{r!-AP*a*6JsLHg=sgC=B=OV-aus@qWjpA!L0Tp# z-&s+$_xr6sm$7FH+{1@2$RRZJpgR4q|FO-fI@k)gUc5x|=PEOHr`Uc}^p~%^e}BK6 z+d2syb1#VEPUMl`870ZXqM=72*|W z^p1s&6eU@X78D<-p@EKsKJ`flP12-hjFv9*{EovO=x4eHCpm7EQtQg|0!1hdu#9CY zrll!+bZ)?Ts-FQ{mNYbYYeEatz(|82Hn`Mv2SSyg{8?QLBKL?3kWfGF^ygrTTlI6ml2l9wf{ zsjK>Q>8@ROX>p(DP@hOkNP!<0~GY3v*5rf1lMFZ7?Z(KJ3e}O3R zPB2fbPqeeBPEFk$fk%DJ^8}8gSmyx2YV0^0$pYK3bk#Jh$P_t=eZ&vj_S>&2f)QgMe_uU-`ceyLAADex<&RIcq~rOjrwSgg^Rcty8@I4O?b;^p4gIkFsu6`Wy3mFi>6mn^?iohUzKWl_~g z^EUGgBE2F}USg~utYG=@PvDyHsU+2xaYB+JkZ7tuy1gEWk@ z>U6$6!SjgR;o8@kCvzZ+KgWE7sMWB!A0ToOigkr_>HC)2PF18nST>RoHG^Roe8Hgk zbUr6rBprvGG(Vny6s#M90{sE9Xv-q9?TZ)=8oVu8fowBu&qHNEz{W{>!0{q)suB&e zIup^zQ`Dvd@%YPDP}L0%b7Ku&_(`_TbLfd~9B3tSX*Aa)UU%<8oWOy_G3+{3V( zAWBiR%A!W?LC&G}T-vVfkkv_GqbKcv2g@wr$|a&m*lP|9EXwABfW7uN8hzKcs0dY- z1}(h>#6Zf}^|;_dp#qh=LipbZ*a=8`^B!G{?#R0SqGyaR2}S diff --git a/ruby/test/media/cursor.png b/ruby/test/media/cursor.png deleted file mode 100644 index 6c38da8e228fb1a36c3bc538a0a06b039a37871f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1SGw?g-n1HV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lnC*3 zaSZYBPEJr@`t$$)e2!2T4Mr&zMwb<;OH!`rI4QPh*$W-&-XgGYSysi1MTQ%0HToOs zS;ow4Yp7bavwK#fYxrh2r(N=2l`}oNW<6xxGV=r%FN3+f))U>e8Owp@GkCiCxvX= 800 - text.top = 0 if (text.top += 1) >= 600 - win.draw(text) - win.draw(sprite) - - win.display() -end - diff --git a/ruby/test/tetris.rb b/ruby/test/tetris.rb deleted file mode 100644 index abc0bab6..00000000 --- a/ruby/test/tetris.rb +++ /dev/null @@ -1,196 +0,0 @@ -require 'RubySFML' -include SFML - -# A simple class to handle a single puzzle piece -class Piece - # Each shape is made up of 4 blocks: - # * * * * ** ** ** - # * ** ** ** * * ** - # * * * * * * - # * - SHAPES = [ # Negative y is down - [[0, 0], [0, 1], [0, -1], [0, -2]], - [[0, 0], [0, 1], [1, 0], [0, -1]], - [[0, 0], [0, 1], [1, 0], [1, -1]], - [[1, 0], [1, 1], [0, 0], [0, -1]], - [[0, 0], [0, 1], [1, 1], [0, -1]], - [[1, 0], [1, 1], [0, 1], [1, -1]], - [[0, 0], [0, 1], [1, 1], [1, 0]], - ] - # Each shape has its own color - COLORS = [Color.Red, Color.Yellow, Color.Cyan, Color.Magenta, Color.Green, Color.Blue, Color.new(255, 128, 64)] - - attr_accessor :x, :y, :r - def initialize(n, x, y) - @n, @x, @y = n, x, y - @r = 0 - end - - def shape(); SHAPES[@n]; end - def color(); COLORS[@n]; end - def rleft(); @r = (@r+1) % 4; end - def rright(); @r = (@r-1) % 4; end - def each() # Iterate each block coordinate (corrected for rotation) - case @r - when 0 then shape.each {|c| yield([c[0], c[1]])} - when 1 then shape.each {|c| yield([-c[1], c[0]])} - when 2 then shape.each {|c| yield([-c[0], -c[1]])} - when 3 then shape.each {|c| yield([c[1], -c[0]])} - end - end -end - -class Grid - HEIGHT = 20 - WIDTH = 10 - BLOCK = 18 - BORDER = 1 - BSIZE = BLOCK + BORDER - - def initialize() - @rows = [] - HEIGHT.times { @rows.push Array.new(WIDTH) } - @background_image = Image.new(WIDTH*(BSIZE)+BORDER, HEIGHT*BSIZE+BORDER, Color.White) - @background = Sprite.new(@background_image, (640-WIDTH*BSIZE)/2-BORDER, (480-HEIGHT*BSIZE)/2-BORDER) - @block_image = Image.new(BLOCK, BLOCK, Color.White) - @block = Sprite.new(@block_image) - - @score = 0 - @last_down = $clock.to_f - @piece = Piece.new(rand(7), WIDTH/2-1, HEIGHT-1) - @next_piece = Piece.new(rand(7), WIDTH/2-1, HEIGHT-1) - end - - def [](y) - return @rows[y] - end - - def draw_block(win, x, y, color) - @block.left = x*BSIZE + @background.left+BORDER - @block.top = ((HEIGHT-1)-y)*BSIZE + @background.top+BORDER - @block.color = color - win.draw(@block) - end - - def solid?(x, y) - return true if x < 0 or y < 0 or x >= WIDTH or y >= HEIGHT - return @rows[y][x] - end - - def left - x = @piece.x - @piece.x -= 1 - @piece.each {|c| @piece.x = x if solid?(@piece.x+c[0], @piece.y+c[1])} - end - - def right - x = @piece.x - @piece.x += 1 - @piece.each {|c| @piece.x = x if solid?(@piece.x+c[0], @piece.y+c[1])} - end - - def up - r = @piece.r - @piece.rright - @piece.each {|c| @piece.r = r if solid?(@piece.x+c[0], @piece.y+c[1])} - end - - def down - @last_down = $clock.to_f - y = @piece.y - @piece.y -= 1 - done = false - @piece.each {|c| done = true if solid?(@piece.x+c[0], @piece.y+c[1])} - if done - @piece.y = y - @piece.each {|c| @rows[@piece.y+c[1]][@piece.x+c[0]] = @piece.color} - @piece = @next_piece - @next_piece = Piece.new(rand(7), WIDTH/2-1, HEIGHT-1) - end - end - - def update(win) - speed = 0.5 - 0.1 * (@score/1000) - down if $clock.to_f - @last_down >= speed - - collapsed = 0 - while y = find_full_row() - collapse_row(y) - collapsed += 1 - end - @score += 5 * 2**collapsed if collapsed > 0 - end - - def render(win) - win.draw(@background) - - HEIGHT.times {|y| - WIDTH.times {|x| - c = @rows[y][x] || Color.Black - draw_block(win, x, y, c) - } - } - - @piece.each {|c| - x, y, c = @piece.x+c[0], @piece.y+c[1], @piece.color - next if y < 0 or y > HEIGHT-1 - draw_block(win, x, y, c) - } - - score = Text.new("Score: #{@score}", "", 20) - #score.left, score.top = 10, 10 - win.draw(score) - - text = Text.new("Coming Next:", "", 20) - text.left, text.top = 450, 50 - win.draw(text) - @next_piece.each {|c| - x, y, c = 14+c[0], 16+c[1], @next_piece.color - next if y < 0 or y > HEIGHT-1 - draw_block(win, x, y, c) - } - end - - def collapse_row(i) - while i < HEIGHT-1 - @rows[i] = @rows[i+1] - i += 1 - end - @rows[HEIGHT-1] = Array.new(WIDTH, nil) - end - - def find_full_row() - HEIGHT.times {|y| return y unless @rows[y].index(nil) } - return nil - end -end - -$clock = Clock.new -mode = VideoMode.new(640, 480, 32) -win = RenderWindow.new(mode, "RubySFML Test", 0) -win.showMouseCursor(false) -win.useVerticalSync(true) -grid = Grid.new() - -# Simple game loop -done = false -while !done - while e = win.getEvent() - case e.type - when Event::Closed then done = true - when Event::KeyReleased then done = true if e.code == Key::Escape - when Event::KeyPressed - case e.code - when Key::Up then grid.up - when Key::Left then grid.left - when Key::Right then grid.right - when Key::Down then grid.down - end - end - end - grid.update(win) - grid.render(win) - win.display() - sleep(0.01) -end - diff --git a/ruby/unzip.exe b/ruby/unzip.exe deleted file mode 100644 index 510491f6415d2b4ca4c506304b6b67ca2703b782..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102400 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 BHYET6 diff --git a/ruby/zlib/zconf.h b/ruby/zlib/zconf.h deleted file mode 100644 index e3b0c962..00000000 --- a/ruby/zlib/zconf.h +++ /dev/null @@ -1,332 +0,0 @@ -/* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2005 Jean-loup Gailly. - * For conditions of distribution and use, see copyright notice in zlib.h - */ - -/* @(#) $Id$ */ - -#ifndef ZCONF_H -#define ZCONF_H - -/* - * If you *really* need a unique prefix for all types and library functions, - * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. - */ -#ifdef Z_PREFIX -# define deflateInit_ z_deflateInit_ -# define deflate z_deflate -# define deflateEnd z_deflateEnd -# define inflateInit_ z_inflateInit_ -# define inflate z_inflate -# define inflateEnd z_inflateEnd -# define deflateInit2_ z_deflateInit2_ -# define deflateSetDictionary z_deflateSetDictionary -# define deflateCopy z_deflateCopy -# define deflateReset z_deflateReset -# define deflateParams z_deflateParams -# define deflateBound z_deflateBound -# define deflatePrime z_deflatePrime -# define inflateInit2_ z_inflateInit2_ -# define inflateSetDictionary z_inflateSetDictionary -# define inflateSync z_inflateSync -# define inflateSyncPoint z_inflateSyncPoint -# define inflateCopy z_inflateCopy -# define inflateReset z_inflateReset -# define inflateBack z_inflateBack -# define inflateBackEnd z_inflateBackEnd -# define compress z_compress -# define compress2 z_compress2 -# define compressBound z_compressBound -# define uncompress z_uncompress -# define adler32 z_adler32 -# define crc32 z_crc32 -# define get_crc_table z_get_crc_table -# define zError z_zError - -# define alloc_func z_alloc_func -# define free_func z_free_func -# define in_func z_in_func -# define out_func z_out_func -# define Byte z_Byte -# define uInt z_uInt -# define uLong z_uLong -# define Bytef z_Bytef -# define charf z_charf -# define intf z_intf -# define uIntf z_uIntf -# define uLongf z_uLongf -# define voidpf z_voidpf -# define voidp z_voidp -#endif - -#if defined(__MSDOS__) && !defined(MSDOS) -# define MSDOS -#endif -#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) -# define OS2 -#endif -#if defined(_WINDOWS) && !defined(WINDOWS) -# define WINDOWS -#endif -#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) -# ifndef WIN32 -# define WIN32 -# endif -#endif -#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) -# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) -# ifndef SYS16BIT -# define SYS16BIT -# endif -# endif -#endif - -/* - * Compile with -DMAXSEG_64K if the alloc function cannot allocate more - * than 64k bytes at a time (needed on systems with 16-bit int). - */ -#ifdef SYS16BIT -# define MAXSEG_64K -#endif -#ifdef MSDOS -# define UNALIGNED_OK -#endif - -#ifdef __STDC_VERSION__ -# ifndef STDC -# define STDC -# endif -# if __STDC_VERSION__ >= 199901L -# ifndef STDC99 -# define STDC99 -# endif -# endif -#endif -#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) -# define STDC -#endif -#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) -# define STDC -#endif -#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) -# define STDC -#endif -#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) -# define STDC -#endif - -#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ -# define STDC -#endif - -#ifndef STDC -# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ -# define const /* note: need a more gentle solution here */ -# endif -#endif - -/* Some Mac compilers merge all .h files incorrectly: */ -#if defined(__MWERKS__)||defined(applec)||defined(THINK_C)||defined(__SC__) -# define NO_DUMMY_DECL -#endif - -/* Maximum value for memLevel in deflateInit2 */ -#ifndef MAX_MEM_LEVEL -# ifdef MAXSEG_64K -# define MAX_MEM_LEVEL 8 -# else -# define MAX_MEM_LEVEL 9 -# endif -#endif - -/* Maximum value for windowBits in deflateInit2 and inflateInit2. - * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files - * created by gzip. (Files created by minigzip can still be extracted by - * gzip.) - */ -#ifndef MAX_WBITS -# define MAX_WBITS 15 /* 32K LZ77 window */ -#endif - -/* The memory requirements for deflate are (in bytes): - (1 << (windowBits+2)) + (1 << (memLevel+9)) - that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) - plus a few kilobytes for small objects. For example, if you want to reduce - the default memory requirements from 256K to 128K, compile with - make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" - Of course this will generally degrade compression (there's no free lunch). - - The memory requirements for inflate are (in bytes) 1 << windowBits - that is, 32K for windowBits=15 (default value) plus a few kilobytes - for small objects. -*/ - - /* Type declarations */ - -#ifndef OF /* function prototypes */ -# ifdef STDC -# define OF(args) args -# else -# define OF(args) () -# endif -#endif - -/* The following definitions for FAR are needed only for MSDOS mixed - * model programming (small or medium model with some far allocations). - * This was tested only with MSC; for other MSDOS compilers you may have - * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, - * just define FAR to be empty. - */ -#ifdef SYS16BIT -# if defined(M_I86SM) || defined(M_I86MM) - /* MSC small or medium model */ -# define SMALL_MEDIUM -# ifdef _MSC_VER -# define FAR _far -# else -# define FAR far -# endif -# endif -# if (defined(__SMALL__) || defined(__MEDIUM__)) - /* Turbo C small or medium model */ -# define SMALL_MEDIUM -# ifdef __BORLANDC__ -# define FAR _far -# else -# define FAR far -# endif -# endif -#endif - -#if defined(WINDOWS) || defined(WIN32) - /* If building or using zlib as a DLL, define ZLIB_DLL. - * This is not mandatory, but it offers a little performance increase. - */ -# ifdef ZLIB_DLL -# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) -# ifdef ZLIB_INTERNAL -# define ZEXTERN extern __declspec(dllexport) -# else -# define ZEXTERN extern __declspec(dllimport) -# endif -# endif -# endif /* ZLIB_DLL */ - /* If building or using zlib with the WINAPI/WINAPIV calling convention, - * define ZLIB_WINAPI. - * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. - */ -# ifdef ZLIB_WINAPI -# ifdef FAR -# undef FAR -# endif -# include - /* No need for _export, use ZLIB.DEF instead. */ - /* For complete Windows compatibility, use WINAPI, not __stdcall. */ -# define ZEXPORT WINAPI -# ifdef WIN32 -# define ZEXPORTVA WINAPIV -# else -# define ZEXPORTVA FAR CDECL -# endif -# endif -#endif - -#if defined (__BEOS__) -# ifdef ZLIB_DLL -# ifdef ZLIB_INTERNAL -# define ZEXPORT __declspec(dllexport) -# define ZEXPORTVA __declspec(dllexport) -# else -# define ZEXPORT __declspec(dllimport) -# define ZEXPORTVA __declspec(dllimport) -# endif -# endif -#endif - -#ifndef ZEXTERN -# define ZEXTERN extern -#endif -#ifndef ZEXPORT -# define ZEXPORT -#endif -#ifndef ZEXPORTVA -# define ZEXPORTVA -#endif - -#ifndef FAR -# define FAR -#endif - -#if !defined(__MACTYPES__) -typedef unsigned char Byte; /* 8 bits */ -#endif -typedef unsigned int uInt; /* 16 bits or more */ -typedef unsigned long uLong; /* 32 bits or more */ - -#ifdef SMALL_MEDIUM - /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ -# define Bytef Byte FAR -#else - typedef Byte FAR Bytef; -#endif -typedef char FAR charf; -typedef int FAR intf; -typedef uInt FAR uIntf; -typedef uLong FAR uLongf; - -#ifdef STDC - typedef void const *voidpc; - typedef void FAR *voidpf; - typedef void *voidp; -#else - typedef Byte const *voidpc; - typedef Byte FAR *voidpf; - typedef Byte *voidp; -#endif - -#if 0 /* HAVE_UNISTD_H -- this line is updated by ./configure */ -# include /* for off_t */ -# include /* for SEEK_* and off_t */ -# ifdef VMS -# include /* for off_t */ -# endif -# define z_off_t off_t -#endif -#ifndef SEEK_SET -# define SEEK_SET 0 /* Seek from beginning of file. */ -# define SEEK_CUR 1 /* Seek from current position. */ -# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ -#endif -#ifndef z_off_t -# define z_off_t long -#endif - -#if defined(__OS400__) -# define NO_vsnprintf -#endif - -#if defined(__MVS__) -# define NO_vsnprintf -# ifdef FAR -# undef FAR -# endif -#endif - -/* MVS linker does not support external names larger than 8 bytes */ -#if defined(__MVS__) -# pragma map(deflateInit_,"DEIN") -# pragma map(deflateInit2_,"DEIN2") -# pragma map(deflateEnd,"DEEND") -# pragma map(deflateBound,"DEBND") -# pragma map(inflateInit_,"ININ") -# pragma map(inflateInit2_,"ININ2") -# pragma map(inflateEnd,"INEND") -# pragma map(inflateSync,"INSY") -# pragma map(inflateSetDictionary,"INSEDI") -# pragma map(compressBound,"CMBND") -# pragma map(inflate_table,"INTABL") -# pragma map(inflate_fast,"INFA") -# pragma map(inflate_copyright,"INCOPY") -#endif - -#endif /* ZCONF_H */ diff --git a/ruby/zlib/zlib.h b/ruby/zlib/zlib.h deleted file mode 100644 index 62d0e467..00000000 --- a/ruby/zlib/zlib.h +++ /dev/null @@ -1,1357 +0,0 @@ -/* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.3, July 18th, 2005 - - Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - - - The data format used by the zlib library is described by RFCs (Request for - Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt - (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). -*/ - -#ifndef ZLIB_H -#define ZLIB_H - -#include "zconf.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define ZLIB_VERSION "1.2.3" -#define ZLIB_VERNUM 0x1230 - -/* - The 'zlib' compression library provides in-memory compression and - decompression functions, including integrity checks of the uncompressed - data. This version of the library supports only one compression method - (deflation) but other algorithms will be added later and will have the same - stream interface. - - Compression can be done in a single step if the buffers are large - enough (for example if an input file is mmap'ed), or can be done by - repeated calls of the compression function. In the latter case, the - application must provide more input and/or consume the output - (providing more output space) before each call. - - The compressed data format used by default by the in-memory functions is - the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped - around a deflate stream, which is itself documented in RFC 1951. - - The library also supports reading and writing files in gzip (.gz) format - with an interface similar to that of stdio using the functions that start - with "gz". The gzip format is different from the zlib format. gzip is a - gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. - - This library can optionally read and write gzip streams in memory as well. - - The zlib format was designed to be compact and fast for use in memory - and on communications channels. The gzip format was designed for single- - file compression on file systems, has a larger header than zlib to maintain - directory information, and uses a different, slower check method than zlib. - - The library does not install any signal handler. The decoder checks - the consistency of the compressed data, so the library should never - crash even in case of corrupted input. -*/ - -typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); -typedef void (*free_func) OF((voidpf opaque, voidpf address)); - -struct internal_state; - -typedef struct z_stream_s { - Bytef *next_in; /* next input byte */ - uInt avail_in; /* number of bytes available at next_in */ - uLong total_in; /* total nb of input bytes read so far */ - - Bytef *next_out; /* next output byte should be put there */ - uInt avail_out; /* remaining free space at next_out */ - uLong total_out; /* total nb of bytes output so far */ - - char *msg; /* last error message, NULL if no error */ - struct internal_state FAR *state; /* not visible by applications */ - - alloc_func zalloc; /* used to allocate the internal state */ - free_func zfree; /* used to free the internal state */ - voidpf opaque; /* private data object passed to zalloc and zfree */ - - int data_type; /* best guess about the data type: binary or text */ - uLong adler; /* adler32 value of the uncompressed data */ - uLong reserved; /* reserved for future use */ -} z_stream; - -typedef z_stream FAR *z_streamp; - -/* - gzip header information passed to and from zlib routines. See RFC 1952 - for more details on the meanings of these fields. -*/ -typedef struct gz_header_s { - int text; /* true if compressed data believed to be text */ - uLong time; /* modification time */ - int xflags; /* extra flags (not used when writing a gzip file) */ - int os; /* operating system */ - Bytef *extra; /* pointer to extra field or Z_NULL if none */ - uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ - uInt extra_max; /* space at extra (only when reading header) */ - Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ - uInt name_max; /* space at name (only when reading header) */ - Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ - uInt comm_max; /* space at comment (only when reading header) */ - int hcrc; /* true if there was or will be a header crc */ - int done; /* true when done reading gzip header (not used - when writing a gzip file) */ -} gz_header; - -typedef gz_header FAR *gz_headerp; - -/* - The application must update next_in and avail_in when avail_in has - dropped to zero. It must update next_out and avail_out when avail_out - has dropped to zero. The application must initialize zalloc, zfree and - opaque before calling the init function. All other fields are set by the - compression library and must not be updated by the application. - - The opaque value provided by the application will be passed as the first - parameter for calls of zalloc and zfree. This can be useful for custom - memory management. The compression library attaches no meaning to the - opaque value. - - zalloc must return Z_NULL if there is not enough memory for the object. - If zlib is used in a multi-threaded application, zalloc and zfree must be - thread safe. - - On 16-bit systems, the functions zalloc and zfree must be able to allocate - exactly 65536 bytes, but will not be required to allocate more than this - if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, - pointers returned by zalloc for objects of exactly 65536 bytes *must* - have their offset normalized to zero. The default allocation function - provided by this library ensures this (see zutil.c). To reduce memory - requirements and avoid any allocation of 64K objects, at the expense of - compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). - - The fields total_in and total_out can be used for statistics or - progress reports. After compression, total_in holds the total size of - the uncompressed data and may be saved for use in the decompressor - (particularly if the decompressor wants to decompress everything in - a single step). -*/ - - /* constants */ - -#define Z_NO_FLUSH 0 -#define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ -#define Z_SYNC_FLUSH 2 -#define Z_FULL_FLUSH 3 -#define Z_FINISH 4 -#define Z_BLOCK 5 -/* Allowed flush values; see deflate() and inflate() below for details */ - -#define Z_OK 0 -#define Z_STREAM_END 1 -#define Z_NEED_DICT 2 -#define Z_ERRNO (-1) -#define Z_STREAM_ERROR (-2) -#define Z_DATA_ERROR (-3) -#define Z_MEM_ERROR (-4) -#define Z_BUF_ERROR (-5) -#define Z_VERSION_ERROR (-6) -/* Return codes for the compression/decompression functions. Negative - * values are errors, positive values are used for special but normal events. - */ - -#define Z_NO_COMPRESSION 0 -#define Z_BEST_SPEED 1 -#define Z_BEST_COMPRESSION 9 -#define Z_DEFAULT_COMPRESSION (-1) -/* compression levels */ - -#define Z_FILTERED 1 -#define Z_HUFFMAN_ONLY 2 -#define Z_RLE 3 -#define Z_FIXED 4 -#define Z_DEFAULT_STRATEGY 0 -/* compression strategy; see deflateInit2() below for details */ - -#define Z_BINARY 0 -#define Z_TEXT 1 -#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ -#define Z_UNKNOWN 2 -/* Possible values of the data_type field (though see inflate()) */ - -#define Z_DEFLATED 8 -/* The deflate compression method (the only one supported in this version) */ - -#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ - -#define zlib_version zlibVersion() -/* for compatibility with versions < 1.0.2 */ - - /* basic functions */ - -ZEXTERN const char * ZEXPORT zlibVersion OF((void)); -/* The application can compare zlibVersion and ZLIB_VERSION for consistency. - If the first character differs, the library code actually used is - not compatible with the zlib.h header file used by the application. - This check is automatically made by deflateInit and inflateInit. - */ - -/* -ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); - - Initializes the internal stream state for compression. The fields - zalloc, zfree and opaque must be initialized before by the caller. - If zalloc and zfree are set to Z_NULL, deflateInit updates them to - use default allocation functions. - - The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: - 1 gives best speed, 9 gives best compression, 0 gives no compression at - all (the input data is simply copied a block at a time). - Z_DEFAULT_COMPRESSION requests a default compromise between speed and - compression (currently equivalent to level 6). - - deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if level is not a valid compression level, - Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible - with the version assumed by the caller (ZLIB_VERSION). - msg is set to null if there is no error message. deflateInit does not - perform any compression: this will be done by deflate(). -*/ - - -ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); -/* - deflate compresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce some - output latency (reading input without producing any output) except when - forced to flush. - - The detailed semantics are as follows. deflate performs one or both of the - following actions: - - - Compress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in and avail_in are updated and - processing will resume at this point for the next call of deflate(). - - - Provide more output starting at next_out and update next_out and avail_out - accordingly. This action is forced if the parameter flush is non zero. - Forcing flush frequently degrades the compression ratio, so this parameter - should be set only when necessary (in interactive applications). - Some output may be provided even if flush is not set. - - Before the call of deflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating avail_in or avail_out accordingly; avail_out - should never be zero before the call. The application can consume the - compressed output when it wants, for example when the output buffer is full - (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK - and with zero avail_out, it must be called again after making room in the - output buffer because there might be more output pending. - - Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to - decide how much data to accumualte before producing output, in order to - maximize compression. - - If the parameter flush is set to Z_SYNC_FLUSH, all pending output is - flushed to the output buffer and the output is aligned on a byte boundary, so - that the decompressor can get all input data available so far. (In particular - avail_in is zero after the call if enough output space has been provided - before the call.) Flushing may degrade compression for some compression - algorithms and so it should be used only when necessary. - - If flush is set to Z_FULL_FLUSH, all output is flushed as with - Z_SYNC_FLUSH, and the compression state is reset so that decompression can - restart from this point if previous compressed data has been damaged or if - random access is desired. Using Z_FULL_FLUSH too often can seriously degrade - compression. - - If deflate returns with avail_out == 0, this function must be called again - with the same value of the flush parameter and more output space (updated - avail_out), until the flush is complete (deflate returns with non-zero - avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that - avail_out is greater than six to avoid repeated flush markers due to - avail_out == 0 on return. - - If the parameter flush is set to Z_FINISH, pending input is processed, - pending output is flushed and deflate returns with Z_STREAM_END if there - was enough output space; if deflate returns with Z_OK, this function must be - called again with Z_FINISH and more output space (updated avail_out) but no - more input data, until it returns with Z_STREAM_END or an error. After - deflate has returned Z_STREAM_END, the only possible operations on the - stream are deflateReset or deflateEnd. - - Z_FINISH can be used immediately after deflateInit if all the compression - is to be done in a single step. In this case, avail_out must be at least - the value returned by deflateBound (see below). If deflate does not return - Z_STREAM_END, then it must be called again as described above. - - deflate() sets strm->adler to the adler32 checksum of all input read - so far (that is, total_in bytes). - - deflate() may update strm->data_type if it can make a good guess about - the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered - binary. This field is only for information purposes and does not affect - the compression algorithm in any manner. - - deflate() returns Z_OK if some progress has been made (more input - processed or more output produced), Z_STREAM_END if all input has been - consumed and all output has been produced (only when flush is set to - Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example - if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible - (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not - fatal, and deflate() can be called again with more input and more output - space to continue compressing. -*/ - - -ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); -/* - All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. - - deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the - stream state was inconsistent, Z_DATA_ERROR if the stream was freed - prematurely (some input or output was discarded). In the error case, - msg may be set but then points to a static string (which must not be - deallocated). -*/ - - -/* -ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); - - Initializes the internal stream state for decompression. The fields - next_in, avail_in, zalloc, zfree and opaque must be initialized before by - the caller. If next_in is not Z_NULL and avail_in is large enough (the exact - value depends on the compression method), inflateInit determines the - compression method from the zlib header and allocates all data structures - accordingly; otherwise the allocation will be deferred to the first call of - inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to - use default allocation functions. - - inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_VERSION_ERROR if the zlib library version is incompatible with the - version assumed by the caller. msg is set to null if there is no error - message. inflateInit does not perform any decompression apart from reading - the zlib header if present: this will be done by inflate(). (So next_in and - avail_in may be modified, but next_out and avail_out are unchanged.) -*/ - - -ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); -/* - inflate decompresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce - some output latency (reading input without producing any output) except when - forced to flush. - - The detailed semantics are as follows. inflate performs one or both of the - following actions: - - - Decompress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in is updated and processing - will resume at this point for the next call of inflate(). - - - Provide more output starting at next_out and update next_out and avail_out - accordingly. inflate() provides as much output as possible, until there - is no more input data or no more space in the output buffer (see below - about the flush parameter). - - Before the call of inflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating the next_* and avail_* values accordingly. - The application can consume the uncompressed output when it wants, for - example when the output buffer is full (avail_out == 0), or after each - call of inflate(). If inflate returns Z_OK and with zero avail_out, it - must be called again after making room in the output buffer because there - might be more output pending. - - The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, - Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much - output as possible to the output buffer. Z_BLOCK requests that inflate() stop - if and when it gets to the next deflate block boundary. When decoding the - zlib or gzip format, this will cause inflate() to return immediately after - the header and before the first block. When doing a raw inflate, inflate() - will go ahead and process the first block, and will return when it gets to - the end of that block, or when it runs out of data. - - The Z_BLOCK option assists in appending to or combining deflate streams. - Also to assist in this, on return inflate() will set strm->data_type to the - number of unused bits in the last byte taken from strm->next_in, plus 64 - if inflate() is currently decoding the last block in the deflate stream, - plus 128 if inflate() returned immediately after decoding an end-of-block - code or decoding the complete header up to just before the first byte of the - deflate stream. The end-of-block will not be indicated until all of the - uncompressed data from that block has been written to strm->next_out. The - number of unused bits may in general be greater than seven, except when - bit 7 of data_type is set, in which case the number of unused bits will be - less than eight. - - inflate() should normally be called until it returns Z_STREAM_END or an - error. However if all decompression is to be performed in a single step - (a single call of inflate), the parameter flush should be set to - Z_FINISH. In this case all pending input is processed and all pending - output is flushed; avail_out must be large enough to hold all the - uncompressed data. (The size of the uncompressed data may have been saved - by the compressor for this purpose.) The next operation on this stream must - be inflateEnd to deallocate the decompression state. The use of Z_FINISH - is never required, but can be used to inform inflate that a faster approach - may be used for the single inflate() call. - - In this implementation, inflate() always flushes as much output as - possible to the output buffer, and always uses the faster approach on the - first call. So the only effect of the flush parameter in this implementation - is on the return value of inflate(), as noted below, or when it returns early - because Z_BLOCK is used. - - If a preset dictionary is needed after this call (see inflateSetDictionary - below), inflate sets strm->adler to the adler32 checksum of the dictionary - chosen by the compressor and returns Z_NEED_DICT; otherwise it sets - strm->adler to the adler32 checksum of all output produced so far (that is, - total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described - below. At the end of the stream, inflate() checks that its computed adler32 - checksum is equal to that saved by the compressor and returns Z_STREAM_END - only if the checksum is correct. - - inflate() will decompress and check either zlib-wrapped or gzip-wrapped - deflate data. The header type is detected automatically. Any information - contained in the gzip header is not retained, so applications that need that - information should instead use raw inflate, see inflateInit2() below, or - inflateBack() and perform their own processing of the gzip header and - trailer. - - inflate() returns Z_OK if some progress has been made (more input processed - or more output produced), Z_STREAM_END if the end of the compressed data has - been reached and all uncompressed output has been produced, Z_NEED_DICT if a - preset dictionary is needed at this point, Z_DATA_ERROR if the input data was - corrupted (input stream not conforming to the zlib format or incorrect check - value), Z_STREAM_ERROR if the stream structure was inconsistent (for example - if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, - Z_BUF_ERROR if no progress is possible or if there was not enough room in the - output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and - inflate() can be called again with more input and more output space to - continue decompressing. If Z_DATA_ERROR is returned, the application may then - call inflateSync() to look for a good compression block if a partial recovery - of the data is desired. -*/ - - -ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); -/* - All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. - - inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state - was inconsistent. In the error case, msg may be set but then points to a - static string (which must not be deallocated). -*/ - - /* Advanced functions */ - -/* - The following functions are needed only in some special applications. -*/ - -/* -ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, - int level, - int method, - int windowBits, - int memLevel, - int strategy)); - - This is another version of deflateInit with more compression options. The - fields next_in, zalloc, zfree and opaque must be initialized before by - the caller. - - The method parameter is the compression method. It must be Z_DEFLATED in - this version of the library. - - The windowBits parameter is the base two logarithm of the window size - (the size of the history buffer). It should be in the range 8..15 for this - version of the library. Larger values of this parameter result in better - compression at the expense of memory usage. The default value is 15 if - deflateInit is used instead. - - windowBits can also be -8..-15 for raw deflate. In this case, -windowBits - determines the window size. deflate() will then generate raw deflate data - with no zlib header or trailer, and will not compute an adler32 check value. - - windowBits can also be greater than 15 for optional gzip encoding. Add - 16 to windowBits to write a simple gzip header and trailer around the - compressed data instead of a zlib wrapper. The gzip header will have no - file name, no extra data, no comment, no modification time (set to zero), - no header crc, and the operating system will be set to 255 (unknown). If a - gzip stream is being written, strm->adler is a crc32 instead of an adler32. - - The memLevel parameter specifies how much memory should be allocated - for the internal compression state. memLevel=1 uses minimum memory but - is slow and reduces compression ratio; memLevel=9 uses maximum memory - for optimal speed. The default value is 8. See zconf.h for total memory - usage as a function of windowBits and memLevel. - - The strategy parameter is used to tune the compression algorithm. Use the - value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a - filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no - string match), or Z_RLE to limit match distances to one (run-length - encoding). Filtered data consists mostly of small values with a somewhat - random distribution. In this case, the compression algorithm is tuned to - compress them better. The effect of Z_FILTERED is to force more Huffman - coding and less string matching; it is somewhat intermediate between - Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as - Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy - parameter only affects the compression ratio but not the correctness of the - compressed output even if it is not set appropriately. Z_FIXED prevents the - use of dynamic Huffman codes, allowing for a simpler decoder for special - applications. - - deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid - method). msg is set to null if there is no error message. deflateInit2 does - not perform any compression: this will be done by deflate(). -*/ - -ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); -/* - Initializes the compression dictionary from the given byte sequence - without producing any compressed output. This function must be called - immediately after deflateInit, deflateInit2 or deflateReset, before any - call of deflate. The compressor and decompressor must use exactly the same - dictionary (see inflateSetDictionary). - - The dictionary should consist of strings (byte sequences) that are likely - to be encountered later in the data to be compressed, with the most commonly - used strings preferably put towards the end of the dictionary. Using a - dictionary is most useful when the data to be compressed is short and can be - predicted with good accuracy; the data can then be compressed better than - with the default empty dictionary. - - Depending on the size of the compression data structures selected by - deflateInit or deflateInit2, a part of the dictionary may in effect be - discarded, for example if the dictionary is larger than the window size in - deflate or deflate2. Thus the strings most likely to be useful should be - put at the end of the dictionary, not at the front. In addition, the - current implementation of deflate will use at most the window size minus - 262 bytes of the provided dictionary. - - Upon return of this function, strm->adler is set to the adler32 value - of the dictionary; the decompressor may later use this value to determine - which dictionary has been used by the compressor. (The adler32 value - applies to the whole dictionary even if only a subset of the dictionary is - actually used by the compressor.) If a raw deflate was requested, then the - adler32 value is not computed and strm->adler is not set. - - deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is - inconsistent (for example if deflate has already been called for this stream - or if the compression method is bsort). deflateSetDictionary does not - perform any compression: this will be done by deflate(). -*/ - -ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, - z_streamp source)); -/* - Sets the destination stream as a complete copy of the source stream. - - This function can be useful when several compression strategies will be - tried, for example when there are several ways of pre-processing the input - data with a filter. The streams that will be discarded should then be freed - by calling deflateEnd. Note that deflateCopy duplicates the internal - compression state which can be quite large, so this strategy is slow and - can consume lots of memory. - - deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and - destination. -*/ - -ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); -/* - This function is equivalent to deflateEnd followed by deflateInit, - but does not free and reallocate all the internal compression state. - The stream will keep the same compression level and any other attributes - that may have been set by deflateInit2. - - deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). -*/ - -ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, - int level, - int strategy)); -/* - Dynamically update the compression level and compression strategy. The - interpretation of level and strategy is as in deflateInit2. This can be - used to switch between compression and straight copy of the input data, or - to switch to a different kind of input data requiring a different - strategy. If the compression level is changed, the input available so far - is compressed with the old level (and may be flushed); the new level will - take effect only at the next call of deflate(). - - Before the call of deflateParams, the stream state must be set as for - a call of deflate(), since the currently available input may have to - be compressed and flushed. In particular, strm->avail_out must be non-zero. - - deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source - stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR - if strm->avail_out was zero. -*/ - -ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, - int good_length, - int max_lazy, - int nice_length, - int max_chain)); -/* - Fine tune deflate's internal compression parameters. This should only be - used by someone who understands the algorithm used by zlib's deflate for - searching for the best matching string, and even then only by the most - fanatic optimizer trying to squeeze out the last compressed bit for their - specific input data. Read the deflate.c source code for the meaning of the - max_lazy, good_length, nice_length, and max_chain parameters. - - deflateTune() can be called after deflateInit() or deflateInit2(), and - returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. - */ - -ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, - uLong sourceLen)); -/* - deflateBound() returns an upper bound on the compressed size after - deflation of sourceLen bytes. It must be called after deflateInit() - or deflateInit2(). This would be used to allocate an output buffer - for deflation in a single pass, and so would be called before deflate(). -*/ - -ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, - int bits, - int value)); -/* - deflatePrime() inserts bits in the deflate output stream. The intent - is that this function is used to start off the deflate output with the - bits leftover from a previous deflate stream when appending to it. As such, - this function can only be used for raw deflate, and must be used before the - first deflate() call after a deflateInit2() or deflateReset(). bits must be - less than or equal to 16, and that many of the least significant bits of - value will be inserted in the output. - - deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. -*/ - -ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, - gz_headerp head)); -/* - deflateSetHeader() provides gzip header information for when a gzip - stream is requested by deflateInit2(). deflateSetHeader() may be called - after deflateInit2() or deflateReset() and before the first call of - deflate(). The text, time, os, extra field, name, and comment information - in the provided gz_header structure are written to the gzip header (xflag is - ignored -- the extra flags are set according to the compression level). The - caller must assure that, if not Z_NULL, name and comment are terminated with - a zero byte, and that if extra is not Z_NULL, that extra_len bytes are - available there. If hcrc is true, a gzip header crc is included. Note that - the current versions of the command-line version of gzip (up through version - 1.3.x) do not support header crc's, and will report that it is a "multi-part - gzip file" and give up. - - If deflateSetHeader is not used, the default gzip header has text false, - the time set to zero, and os set to 255, with no extra, name, or comment - fields. The gzip header is returned to the default state by deflateReset(). - - deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. -*/ - -/* -ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, - int windowBits)); - - This is another version of inflateInit with an extra parameter. The - fields next_in, avail_in, zalloc, zfree and opaque must be initialized - before by the caller. - - The windowBits parameter is the base two logarithm of the maximum window - size (the size of the history buffer). It should be in the range 8..15 for - this version of the library. The default value is 15 if inflateInit is used - instead. windowBits must be greater than or equal to the windowBits value - provided to deflateInit2() while compressing, or it must be equal to 15 if - deflateInit2() was not used. If a compressed stream with a larger window - size is given as input, inflate() will return with the error code - Z_DATA_ERROR instead of trying to allocate a larger window. - - windowBits can also be -8..-15 for raw inflate. In this case, -windowBits - determines the window size. inflate() will then process raw deflate data, - not looking for a zlib or gzip header, not generating a check value, and not - looking for any check values for comparison at the end of the stream. This - is for use with other formats that use the deflate compressed data format - such as zip. Those formats provide their own check values. If a custom - format is developed using the raw deflate format for compressed data, it is - recommended that a check value such as an adler32 or a crc32 be applied to - the uncompressed data as is done in the zlib, gzip, and zip formats. For - most applications, the zlib format should be used as is. Note that comments - above on the use in deflateInit2() applies to the magnitude of windowBits. - - windowBits can also be greater than 15 for optional gzip decoding. Add - 32 to windowBits to enable zlib and gzip decoding with automatic header - detection, or add 16 to decode only the gzip format (the zlib format will - return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is - a crc32 instead of an adler32. - - inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg - is set to null if there is no error message. inflateInit2 does not perform - any decompression apart from reading the zlib header if present: this will - be done by inflate(). (So next_in and avail_in may be modified, but next_out - and avail_out are unchanged.) -*/ - -ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, - const Bytef *dictionary, - uInt dictLength)); -/* - Initializes the decompression dictionary from the given uncompressed byte - sequence. This function must be called immediately after a call of inflate, - if that call returned Z_NEED_DICT. The dictionary chosen by the compressor - can be determined from the adler32 value returned by that call of inflate. - The compressor and decompressor must use exactly the same dictionary (see - deflateSetDictionary). For raw inflate, this function can be called - immediately after inflateInit2() or inflateReset() and before any call of - inflate() to set the dictionary. The application must insure that the - dictionary that was used for compression is provided. - - inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is - inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the - expected one (incorrect adler32 value). inflateSetDictionary does not - perform any decompression: this will be done by subsequent calls of - inflate(). -*/ - -ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); -/* - Skips invalid compressed data until a full flush point (see above the - description of deflate with Z_FULL_FLUSH) can be found, or until all - available input is skipped. No output is provided. - - inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR - if no more input was provided, Z_DATA_ERROR if no flush point has been found, - or Z_STREAM_ERROR if the stream structure was inconsistent. In the success - case, the application may save the current current value of total_in which - indicates where valid compressed data was found. In the error case, the - application may repeatedly call inflateSync, providing more input each time, - until success or end of the input data. -*/ - -ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, - z_streamp source)); -/* - Sets the destination stream as a complete copy of the source stream. - - This function can be useful when randomly accessing a large stream. The - first pass through the stream can periodically record the inflate state, - allowing restarting inflate at those points when randomly accessing the - stream. - - inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and - destination. -*/ - -ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); -/* - This function is equivalent to inflateEnd followed by inflateInit, - but does not free and reallocate all the internal decompression state. - The stream will keep attributes that may have been set by inflateInit2. - - inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). -*/ - -ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, - int bits, - int value)); -/* - This function inserts bits in the inflate input stream. The intent is - that this function is used to start inflating at a bit position in the - middle of a byte. The provided bits will be used before any bytes are used - from next_in. This function should only be used with raw inflate, and - should be used before the first inflate() call after inflateInit2() or - inflateReset(). bits must be less than or equal to 16, and that many of the - least significant bits of value will be inserted in the input. - - inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. -*/ - -ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, - gz_headerp head)); -/* - inflateGetHeader() requests that gzip header information be stored in the - provided gz_header structure. inflateGetHeader() may be called after - inflateInit2() or inflateReset(), and before the first call of inflate(). - As inflate() processes the gzip stream, head->done is zero until the header - is completed, at which time head->done is set to one. If a zlib stream is - being decoded, then head->done is set to -1 to indicate that there will be - no gzip header information forthcoming. Note that Z_BLOCK can be used to - force inflate() to return immediately after header processing is complete - and before any actual data is decompressed. - - The text, time, xflags, and os fields are filled in with the gzip header - contents. hcrc is set to true if there is a header CRC. (The header CRC - was valid if done is set to one.) If extra is not Z_NULL, then extra_max - contains the maximum number of bytes to write to extra. Once done is true, - extra_len contains the actual extra field length, and extra contains the - extra field, or that field truncated if extra_max is less than extra_len. - If name is not Z_NULL, then up to name_max characters are written there, - terminated with a zero unless the length is greater than name_max. If - comment is not Z_NULL, then up to comm_max characters are written there, - terminated with a zero unless the length is greater than comm_max. When - any of extra, name, or comment are not Z_NULL and the respective field is - not present in the header, then that field is set to Z_NULL to signal its - absence. This allows the use of deflateSetHeader() with the returned - structure to duplicate the header. However if those fields are set to - allocated memory, then the application will need to save those pointers - elsewhere so that they can be eventually freed. - - If inflateGetHeader is not used, then the header information is simply - discarded. The header is always checked for validity, including the header - CRC if present. inflateReset() will reset the process to discard the header - information. The application would need to call inflateGetHeader() again to - retrieve the header from the next gzip stream. - - inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. -*/ - -/* -ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, - unsigned char FAR *window)); - - Initialize the internal stream state for decompression using inflateBack() - calls. The fields zalloc, zfree and opaque in strm must be initialized - before the call. If zalloc and zfree are Z_NULL, then the default library- - derived memory allocation routines are used. windowBits is the base two - logarithm of the window size, in the range 8..15. window is a caller - supplied buffer of that size. Except for special applications where it is - assured that deflate was used with small window sizes, windowBits must be 15 - and a 32K byte window must be supplied to be able to decompress general - deflate streams. - - See inflateBack() for the usage of these routines. - - inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of - the paramaters are invalid, Z_MEM_ERROR if the internal state could not - be allocated, or Z_VERSION_ERROR if the version of the library does not - match the version of the header file. -*/ - -typedef unsigned (*in_func) OF((void FAR *, unsigned char FAR * FAR *)); -typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); - -ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, - in_func in, void FAR *in_desc, - out_func out, void FAR *out_desc)); -/* - inflateBack() does a raw inflate with a single call using a call-back - interface for input and output. This is more efficient than inflate() for - file i/o applications in that it avoids copying between the output and the - sliding window by simply making the window itself the output buffer. This - function trusts the application to not change the output buffer passed by - the output function, at least until inflateBack() returns. - - inflateBackInit() must be called first to allocate the internal state - and to initialize the state with the user-provided window buffer. - inflateBack() may then be used multiple times to inflate a complete, raw - deflate stream with each call. inflateBackEnd() is then called to free - the allocated state. - - A raw deflate stream is one with no zlib or gzip header or trailer. - This routine would normally be used in a utility that reads zip or gzip - files and writes out uncompressed files. The utility would decode the - header and process the trailer on its own, hence this routine expects - only the raw deflate stream to decompress. This is different from the - normal behavior of inflate(), which expects either a zlib or gzip header and - trailer around the deflate stream. - - inflateBack() uses two subroutines supplied by the caller that are then - called by inflateBack() for input and output. inflateBack() calls those - routines until it reads a complete deflate stream and writes out all of the - uncompressed data, or until it encounters an error. The function's - parameters and return types are defined above in the in_func and out_func - typedefs. inflateBack() will call in(in_desc, &buf) which should return the - number of bytes of provided input, and a pointer to that input in buf. If - there is no input available, in() must return zero--buf is ignored in that - case--and inflateBack() will return a buffer error. inflateBack() will call - out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() - should return zero on success, or non-zero on failure. If out() returns - non-zero, inflateBack() will return with an error. Neither in() nor out() - are permitted to change the contents of the window provided to - inflateBackInit(), which is also the buffer that out() uses to write from. - The length written by out() will be at most the window size. Any non-zero - amount of input may be provided by in(). - - For convenience, inflateBack() can be provided input on the first call by - setting strm->next_in and strm->avail_in. If that input is exhausted, then - in() will be called. Therefore strm->next_in must be initialized before - calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called - immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in - must also be initialized, and then if strm->avail_in is not zero, input will - initially be taken from strm->next_in[0 .. strm->avail_in - 1]. - - The in_desc and out_desc parameters of inflateBack() is passed as the - first parameter of in() and out() respectively when they are called. These - descriptors can be optionally used to pass any information that the caller- - supplied in() and out() functions need to do their job. - - On return, inflateBack() will set strm->next_in and strm->avail_in to - pass back any unused input that was provided by the last in() call. The - return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR - if in() or out() returned an error, Z_DATA_ERROR if there was a format - error in the deflate stream (in which case strm->msg is set to indicate the - nature of the error), or Z_STREAM_ERROR if the stream was not properly - initialized. In the case of Z_BUF_ERROR, an input or output error can be - distinguished using strm->next_in which will be Z_NULL only if in() returned - an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to - out() returning non-zero. (in() will always be called before out(), so - strm->next_in is assured to be defined if out() returns non-zero.) Note - that inflateBack() cannot return Z_OK. -*/ - -ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); -/* - All memory allocated by inflateBackInit() is freed. - - inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream - state was inconsistent. -*/ - -ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); -/* Return flags indicating compile-time options. - - Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: - 1.0: size of uInt - 3.2: size of uLong - 5.4: size of voidpf (pointer) - 7.6: size of z_off_t - - Compiler, assembler, and debug options: - 8: DEBUG - 9: ASMV or ASMINF -- use ASM code - 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention - 11: 0 (reserved) - - One-time table building (smaller code, but not thread-safe if true): - 12: BUILDFIXED -- build static block decoding tables when needed - 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed - 14,15: 0 (reserved) - - Library content (indicates missing functionality): - 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking - deflate code when not needed) - 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect - and decode gzip streams (to avoid linking crc code) - 18-19: 0 (reserved) - - Operation variations (changes in library functionality): - 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate - 21: FASTEST -- deflate algorithm with only one, lowest compression level - 22,23: 0 (reserved) - - The sprintf variant used by gzprintf (zero is best): - 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format - 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! - 26: 0 = returns value, 1 = void -- 1 means inferred string length returned - - Remainder: - 27-31: 0 (reserved) - */ - - - /* utility functions */ - -/* - The following utility functions are implemented on top of the - basic stream-oriented functions. To simplify the interface, some - default options are assumed (compression level and memory usage, - standard memory allocation functions). The source code of these - utility functions can easily be modified if you need special options. -*/ - -ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); -/* - Compresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be at least the value returned - by compressBound(sourceLen). Upon exit, destLen is the actual size of the - compressed buffer. - This function can be used to compress a whole file at once if the - input file is mmap'ed. - compress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer. -*/ - -ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen, - int level)); -/* - Compresses the source buffer into the destination buffer. The level - parameter has the same meaning as in deflateInit. sourceLen is the byte - length of the source buffer. Upon entry, destLen is the total size of the - destination buffer, which must be at least the value returned by - compressBound(sourceLen). Upon exit, destLen is the actual size of the - compressed buffer. - - compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_BUF_ERROR if there was not enough room in the output buffer, - Z_STREAM_ERROR if the level parameter is invalid. -*/ - -ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); -/* - compressBound() returns an upper bound on the compressed size after - compress() or compress2() on sourceLen bytes. It would be used before - a compress() or compress2() call to allocate the destination buffer. -*/ - -ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen)); -/* - Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be large enough to hold the - entire uncompressed data. (The size of the uncompressed data must have - been saved previously by the compressor and transmitted to the decompressor - by some mechanism outside the scope of this compression library.) - Upon exit, destLen is the actual size of the compressed buffer. - This function can be used to decompress a whole file at once if the - input file is mmap'ed. - - uncompress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. -*/ - - -typedef voidp gzFile; - -ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); -/* - Opens a gzip (.gz) file for reading or writing. The mode parameter - is as in fopen ("rb" or "wb") but can also include a compression level - ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for - Huffman only compression as in "wb1h", or 'R' for run-length encoding - as in "wb1R". (See the description of deflateInit2 for more information - about the strategy parameter.) - - gzopen can be used to read a file which is not in gzip format; in this - case gzread will directly read from the file without decompression. - - gzopen returns NULL if the file could not be opened or if there was - insufficient memory to allocate the (de)compression state; errno - can be checked to distinguish the two cases (if errno is zero, the - zlib error is Z_MEM_ERROR). */ - -ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); -/* - gzdopen() associates a gzFile with the file descriptor fd. File - descriptors are obtained from calls like open, dup, creat, pipe or - fileno (in the file has been previously opened with fopen). - The mode parameter is as in gzopen. - The next call of gzclose on the returned gzFile will also close the - file descriptor fd, just like fclose(fdopen(fd), mode) closes the file - descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). - gzdopen returns NULL if there was insufficient memory to allocate - the (de)compression state. -*/ - -ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); -/* - Dynamically update the compression level or strategy. See the description - of deflateInit2 for the meaning of these parameters. - gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not - opened for writing. -*/ - -ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); -/* - Reads the given number of uncompressed bytes from the compressed file. - If the input file was not in gzip format, gzread copies the given number - of bytes into the buffer. - gzread returns the number of uncompressed bytes actually read (0 for - end of file, -1 for error). */ - -ZEXTERN int ZEXPORT gzwrite OF((gzFile file, - voidpc buf, unsigned len)); -/* - Writes the given number of uncompressed bytes into the compressed file. - gzwrite returns the number of uncompressed bytes actually written - (0 in case of error). -*/ - -ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); -/* - Converts, formats, and writes the args to the compressed file under - control of the format string, as in fprintf. gzprintf returns the number of - uncompressed bytes actually written (0 in case of error). The number of - uncompressed bytes written is limited to 4095. The caller should assure that - this limit is not exceeded. If it is exceeded, then gzprintf() will return - return an error (0) with nothing written. In this case, there may also be a - buffer overflow with unpredictable consequences, which is possible only if - zlib was compiled with the insecure functions sprintf() or vsprintf() - because the secure snprintf() or vsnprintf() functions were not available. -*/ - -ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); -/* - Writes the given null-terminated string to the compressed file, excluding - the terminating null character. - gzputs returns the number of characters written, or -1 in case of error. -*/ - -ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); -/* - Reads bytes from the compressed file until len-1 characters are read, or - a newline character is read and transferred to buf, or an end-of-file - condition is encountered. The string is then terminated with a null - character. - gzgets returns buf, or Z_NULL in case of error. -*/ - -ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); -/* - Writes c, converted to an unsigned char, into the compressed file. - gzputc returns the value that was written, or -1 in case of error. -*/ - -ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); -/* - Reads one byte from the compressed file. gzgetc returns this byte - or -1 in case of end of file or error. -*/ - -ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); -/* - Push one character back onto the stream to be read again later. - Only one character of push-back is allowed. gzungetc() returns the - character pushed, or -1 on failure. gzungetc() will fail if a - character has been pushed but not read yet, or if c is -1. The pushed - character will be discarded if the stream is repositioned with gzseek() - or gzrewind(). -*/ - -ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); -/* - Flushes all pending output into the compressed file. The parameter - flush is as in the deflate() function. The return value is the zlib - error number (see function gzerror below). gzflush returns Z_OK if - the flush parameter is Z_FINISH and all output could be flushed. - gzflush should be called only when strictly necessary because it can - degrade compression. -*/ - -ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, - z_off_t offset, int whence)); -/* - Sets the starting position for the next gzread or gzwrite on the - given compressed file. The offset represents a number of bytes in the - uncompressed data stream. The whence parameter is defined as in lseek(2); - the value SEEK_END is not supported. - If the file is opened for reading, this function is emulated but can be - extremely slow. If the file is opened for writing, only forward seeks are - supported; gzseek then compresses a sequence of zeroes up to the new - starting position. - - gzseek returns the resulting offset location as measured in bytes from - the beginning of the uncompressed stream, or -1 in case of error, in - particular if the file is opened for writing and the new starting position - would be before the current position. -*/ - -ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); -/* - Rewinds the given file. This function is supported only for reading. - - gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) -*/ - -ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); -/* - Returns the starting position for the next gzread or gzwrite on the - given compressed file. This position represents a number of bytes in the - uncompressed data stream. - - gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) -*/ - -ZEXTERN int ZEXPORT gzeof OF((gzFile file)); -/* - Returns 1 when EOF has previously been detected reading the given - input stream, otherwise zero. -*/ - -ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); -/* - Returns 1 if file is being read directly without decompression, otherwise - zero. -*/ - -ZEXTERN int ZEXPORT gzclose OF((gzFile file)); -/* - Flushes all pending output if necessary, closes the compressed file - and deallocates all the (de)compression state. The return value is the zlib - error number (see function gzerror below). -*/ - -ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); -/* - Returns the error message for the last error which occurred on the - given compressed file. errnum is set to zlib error number. If an - error occurred in the file system and not in the compression library, - errnum is set to Z_ERRNO and the application may consult errno - to get the exact error code. -*/ - -ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); -/* - Clears the error and end-of-file flags for file. This is analogous to the - clearerr() function in stdio. This is useful for continuing to read a gzip - file that is being written concurrently. -*/ - - /* checksum functions */ - -/* - These functions are not related to compression but are exported - anyway because they might be useful in applications using the - compression library. -*/ - -ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); -/* - Update a running Adler-32 checksum with the bytes buf[0..len-1] and - return the updated checksum. If buf is NULL, this function returns - the required initial value for the checksum. - An Adler-32 checksum is almost as reliable as a CRC32 but can be computed - much faster. Usage example: - - uLong adler = adler32(0L, Z_NULL, 0); - - while (read_buffer(buffer, length) != EOF) { - adler = adler32(adler, buffer, length); - } - if (adler != original_adler) error(); -*/ - -ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, - z_off_t len2)); -/* - Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 - and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for - each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of - seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. -*/ - -ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); -/* - Update a running CRC-32 with the bytes buf[0..len-1] and return the - updated CRC-32. If buf is NULL, this function returns the required initial - value for the for the crc. Pre- and post-conditioning (one's complement) is - performed within this function so it shouldn't be done by the application. - Usage example: - - uLong crc = crc32(0L, Z_NULL, 0); - - while (read_buffer(buffer, length) != EOF) { - crc = crc32(crc, buffer, length); - } - if (crc != original_crc) error(); -*/ - -ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); - -/* - Combine two CRC-32 check values into one. For two sequences of bytes, - seq1 and seq2 with lengths len1 and len2, CRC-32 check values were - calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 - check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and - len2. -*/ - - - /* various hacks, don't look :) */ - -/* deflateInit and inflateInit are macros to allow checking the zlib version - * and the compiler's view of z_stream: - */ -ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, - int windowBits, int memLevel, - int strategy, const char *version, - int stream_size)); -ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, - const char *version, int stream_size)); -ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, - unsigned char FAR *window, - const char *version, - int stream_size)); -#define deflateInit(strm, level) \ - deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) -#define inflateInit(strm) \ - inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) -#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ - deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ - (strategy), ZLIB_VERSION, sizeof(z_stream)) -#define inflateInit2(strm, windowBits) \ - inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) -#define inflateBackInit(strm, windowBits, window) \ - inflateBackInit_((strm), (windowBits), (window), \ - ZLIB_VERSION, sizeof(z_stream)) - - -#if !defined(ZUTIL_H) && !defined(NO_DUMMY_DECL) - struct internal_state {int dummy;}; /* hack for buggy compilers */ -#endif - -ZEXTERN const char * ZEXPORT zError OF((int)); -ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); -ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); - -#ifdef __cplusplus -} -#endif - -#endif /* ZLIB_H */ diff --git a/ruby/zlib/zlib.lib b/ruby/zlib/zlib.lib deleted file mode 100644 index a70eb59290ce86cd01f0260af5cfe263b669717a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104750 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 H#^3(|*lUe1 diff --git a/ruby/zlib/zlibd.lib b/ruby/zlib/zlibd.lib deleted file mode 100644 index 49d4e2ddb317b8a566ba02b5208ad6632323d7a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272438 zcmeFa3t&{m^*=t@4Iw1aBoYx3?Sd#M5E9;qNM1__BoKjsk7(FzHpxnojk_COB^nGU z%YwxgAFWnxwXLnTrLC>lFSbF^prt5c#lOwIbAzxA(Asa?Bux94 zJA_@^#I!2}?A*Ckg?UvuIfaYL7Zv2sFU*@eCO)G}XkA%+H@+R$Tbb-L{_xWQ;7M3iSm%p%JL0+wwQFSL-lvgyb zytuTWxG=988Swby6O}DoxTw5rK~W?%k;tmnJNY20)>nalW1tQ$x2vJS=cc39@9_XO zc&iJMXQX0YgR3r}Fw0fWMOBLwh~E={M^%kC5Ug_hY7nfd!P8V1tT{wi04x2_2u zaMm`o1nR4*5zi`x@HTma$`uIu{GJ-CUl0jeC#t+nwGFPI2Mn9n`Mq`Zpf^xK7fQp> zkbDkac&Ptg3l(vpI*vXbI_YXCFj-2*JhD<~}}C|q2&IIpE?Rg-T`)7)tWIm)gs zUM?2o%`bA6mlrRdAIY^$`!toZcwrXiAz9_~3JNS?s=bh{kr}_I+2e{4S7~0!{Ds9u z`A%mfajeSJTvlOJ{9wH=x}Fx4<;|Nnue2PQilnZ=8}#^H4Rdpi*t(0lEU%=btT?}9 zQP08RopjQSsu1k=RsqFg4f^inU2BSe)l9EHBGPgBA&AXbzO#=bJmN)&*Uy zcE#u%8oy$c?>uBMPm(pdn$|_ch$ac`r_w+u;JU`@JhRT3jzUyN^TF9vW4eny!TGY1 zn3xh&^2t?EkCCTxzqb+1hOW{}JkWRZX{jezWVYiG?7Aj2Q#!y>Je2#qO_4xVwXQ(q zsQ`I5iTPknDxaCSDx(dVTv}FETwIvHAaCxJxznQR(F|w7qJ@j*Em(wpsi>^B1_WaY z=Rt3Z7Dv$)%*&g%AirQi(Yzv17S3}I@P~a~Ro!}bgU97Z+pOHa07O)`zQ)V8M7n&< z9<-@->pi|&2~=}lw_die#MF6$kdlOGq3hNg0h;{~mJHL}q9_0*1^O(MV%>Vbhbf0nj(p{_9|%7r%V=A5&+*=?Ij^HNmP~UYlxRk z2k5kmL9|on*j3Zu@spKyn9K$~cAYk5mN9lc1%ubG4-?{Uj68qr#0a)hh;4}p;>Qyb z#IWZQ#OeG;Ga!CDR=x|QmDT~Vf{Nr zoFdZXU#dtIDLwwBBF6sxC5dGD7cU)y#9%Q<*v+&sMZJ#`d#S;_4_a2HY4?sbeh;nt zb#u({-!|@u8Dacaj{Wp#JZhvJ^$>s9ZH(go?@lJ-tU5%^FN|@abvfi?FRr9aidp3B zYmIZt%v`> zmnYDJAJm}_Z!YQd9GD{R*_ZR#9(?Q8dwo54>1Lt_U)i+uIMr1v^Ig)2bP{)3Sq&&0@S5mYHl5m^&zw3^4YoGOye33;1e-j&Vya za1<_Iw!~>lRuf8)ATj`vwl*u4DP>x7;^2osVDmLGWoj7W824aEdMe;@u~byy*D033 zRU#IPMR+d3?>x9^9!q@tpNz>Sd9~>5Q8*-WeenH_EUeP4#z|AWf zga@3PFaz{~)-P#t#8jkz7VK1{fhnpH=OC;>UxY9L;g)=w!Ox4ZO){qS;O7<9!hsMj z__*M5!?#g1gPNfNn%bc${h;xSbqGBHbIwQ{%R%iosmVN7WTTX`#T2-wVosSL(;bv_ zP2kc1`M4012mVGn7^Vh34Zv+c3<;tX{&kYN5b0`0%#=o*s7Gpr7$*wF1xRx)az9H< z6B7|*j+BE#EI>#X@;MRQe4+(m9ikW*%CG@^9O8V~GGP2-6$oU= zrq_@spL$OBg_zwYh;oGWfny8g8MNdyl2=57lv0M#w6T)3%JBx|F#&mI2{8pt;2i*; zBFL!}c?igSHpAZ!9|ua7`OHV!RasIVH8N!ml!i-|bu;{e`16925-HXaVh9Jc+9&13 zkd!#%qFyeSax)|n(MTc2K%0eFhFBOTfY8*eh|Ud3d^0hRt1H>wnz2u95FdTS8l6{* zRo?8JoCJhb7;7s@tUZD4WVErikf;ivVcSOPh_SYgti<*NYh6}!W0vGd!zW22(UT_Y zX1u@ce$LeCQzY%ml+uI|vfcl}X9ToWnd}-a^{uADOYSlae80H_sxFLG2Vy!K}UXj z`$5NYKG2OWqg#H-@8{jZOW5Hxpd zI;Pi=QNA*^e2)PC0BCk#C6ER~1(BD*{y)0hl7N3)(~yovm2c2JW?9)43d7z+i2a~D zplKPeNmmk0_X=o!8A}(FkELMnrlv9Ch?kH1K{o>(?CWPLDl;E3{HDVDlo3MY!_xF5 z7uNTMpqYJ^B#X!;hTqljZUoKGG#zVjy!5egISQIH&sO{f14uc?@MHg81)6VYx}NxD zf!~v$`NcUg{M7hvnZiN`;P?#M0jpvCMN=^eyENWfPas%>ZLX#oPm_DyMWea3IcKaK z@sD*hxf=0c4sx=W7tYMdF5(=ZaLKZ<4!vtVXY9=Eoa|{i({ljFIxu3xMq|L|&&Tl! zEaba`Eq-uWJ99exS}@LYFZ8Ti=3C`ynlm=H);+U&O7$#Pt|xb?;9BJUZsb5 zA8WL^Le71Vm@1j?%Jt^_X5NrtnPL=2Vy7a)u}`UAQ&@6DxVSm!ZS=19Hq|)_(d%IA z+b`T}YChHgShyQRQDgv(;qr1hG$PW(<+x2R${xM(%q2lS?dw*#u_nk zagAeQ(Tb8qQzipe6*&tkis@jPR#lW2FUc=*&dFJeQp|BoEN*m6bj}a($L*N7WLaUZ zV`5nm7|d(_WTlCjWOlQ=9*ljTC}S|J`Ggs+nBtfSVO&w-n7FLaF|o1%?6E&Ya;8c#n0K~{mL8lK|7+$bkIcSb+L`0DB=uJ-w> zy#a*5jH;YiMxQxQZ5+$@yE35wtQldul(D+f(p<1g-Y@aAqVo zd&-n-C~Nl;SQu~x{a#mP=?eZAqh%{^aILE>u0VPAMcuGw-rC-%R$Y@{UQ)T#*WyRZ zSGnq%MJ~2^eTP`)^ECvP`rVaCN|Psukjl|_$VgmeIH1w6-0NB6@%I)iI@`Tb#%87v z=V&S`u&RURpl3nF4OQj}qH6a)&h24J6FKw2TEa5bpW1dl-Op^Lwot(IsBegtoDJ!Nn}>tXaFlTZ8rKz{JVf)3Lgv zTcgUx!0L|?91)MkT8>^)a?C>u8K{hO#6|Ly!)1=8MGGC{7Q2JKYE%{UlG87!M5@{N zj_ya&mlm-tv^JolEvox?_?_g**g0((>Bl0+~une$za<rny!=w!oXG?BJUQ-_dw%DfKmB?t2{0nHVbLA4`It zn|s=}vIn=_*>$+7{rtu=n}wJz@mKBX4Bd9=vOoJCpH%exnHd1?zLytJ-Kto`>8j-gR$u}i9eCl^6H2!zC#ml%=~Efj0bNN;u?v+ z{O{YBmc4k+u*AnNTePPA?N@}jN8*3;(oNyV{a+gO_R8m8u3GSBmRgR@NO;rx`L8|L zaoq*a-Skt(%jv2Ai)o>a@m{j~M)w)}Za;MSb9+j@HD$p>EG|j>8h^%ZBcJ}OXV?7o zg|iE8cS3p+-*NoigTA7YHI1hvyfyc4gWPJ#mP?T=e2i}7k}Y&yEyg+mmJ#P_Q)w%4 zToohU?0Rb;H4Limah=ytG)p}F3o@`+INlss2)D1PHabY3`Nxp3$v40-n1yvqTb~gj z5OyI37*hjgB*DM{1G)W}CDsl!RKV3R@OWH-fTwYQ!B*oCtxVmRWjT&9p6X`D8~|^# zgU?eP;~iH^1n@+thk$yR311MGN}p_Z^-|YrPt6if9mWX6mrFc};HOTHF@X3_Ma0~! zm1)SGH62Mp+D}5uU#nu-5jPqsIfReZLA9jb(-8EXGoxk zoQ`*>!|{SkOxjx=an}!=<7lTaJaF`nC-EJTgZM~7|IK)iCdt*QvC_polyjvk4ZmC< zNs@asT*gTfXj#P>(uE}@F;u#6Oio}i6uu7pa$PS8>&*t2itw?G$2#!1boq+ykL7*z z(MONw;A!^(n7=-_8%|Mm^_Ahbu6lxTT?DIA^B!D9u!iBfU5D`i_y8K_bFkyXHkfOD z4%iM@!(?KCC=0zF4HrHtU~@%=+}|ROhCI1U#QX+Kp9F5>8prQPiqkSW;7v=T7%De6 zi<0Pk7nYea4Ea(%NP?6E@sLs*n!jm+554i;;*D-}B|3YQ`%8~Ub-Jtj`> z{ozTOxd1W&@{!U?5>npJ!ztyRLwQfdla_a<^8{%-H`9ZnYk!O`TQEyG5`(8GM{+Q| zYk1dZ!p;-z9SI@liLNZ^w9z?4I_+={j89^OPjZA$+JO0FMEE!&d~*8DXGGVzG6#7K zJRHtJZIA>XQu)xK9^ll9Njb%;BbQ$(Wy8d(V@ZtvcIbjt9UBmEdW<@fCsm{rFc__l zdXY@MA3~jE+#RqPu+ci1AyP9>piD=@N4^vwwUjFQ8mwU$*Kj=09?-~9T1CeIo(CLk zTPfiAfQtapK(t*Bh^6+n8o&zx8v)UTwCx0(0C*c9hEr`{0n7$`2oP;z+YbSA0S^IA z2K+T3HX+-N0zyCAjss2u{0HC+z%fYQOu+L2X94B{qH$=u1aLMW<=YHMSzQa5hHwjE zRaK%(RVBJoWDXUMa#OfI8YVO^V!SgsoVXbdqlrR}WeXp_iDEtLfTh0B#Oj36gc<&^ zP1H(+nGmBB3fH@Q+gp=GFfHuN81KxmJJANfotFMxXGZvV`A4UN ziD=)KIQ#e!x=;-_?(2YK_A&X)&f;P`UICkg4PYUzgw4YCr{SW6V{7cyz;(bD&&#i7}-^o|M!A*kP=S(j*wKc=cX9nYws5XY)0?aKHn#IW?2eD z0Pg{$14G8da3+T}^;wzhC2774AK3-HiwD#e(=c5uRmx$4#$uyImMUse8#Q1GAk#e+ zka4nRtJ*`CDqXr##Ba23s`#CDrHB(I?n4vTdx?jSqlEiaw&#PR8#YOHs;X@B@T^?% z%62|{J7AMxX=2Ov65u*u4gc7(ZHHfM%_C2iEo;b`*0Pmv?G3nSSs5v2mUeT{FUxTZ zo@rjRmLto?Fib;i?VP2{@ghK`?P6Vi)o`owqf3<^T`A&c_*J;)v@1otY2uEUI7+rj zoPPTLmnNUS`r?a=?sI=|&y0%iwW5g~$cz=!;XY0#nQI*Hz7sig(AdkNgUA*=(_**1 zir>DBbwk$%V!Mr7_H;$e@>egWN?VL|d)E%U-6k6&xF!$3A5B1XcuPQ8*Z9m(HeuyM zx!P@~&=ck}$*oWJ#%Ho3ll-Fj41$l{mZklduPq$b8=n=Lj-jIYBuPH0+W(=YiBN`~ z^R-FSF;q04!IF=WuRlA_N4wNBpKoYB3>D3XwbE`g(vwp3Cp7Lo^EsgTFjO?3A(9U@ zBw~8z^R^~psAxVZz(msXo^SQjy`?8fN61joe3&D<&1gDGu08Ur-uPUg`7l&8AK7f! z#sSYbBIe*-7h-4>YnEs}3m zsYx`aNLSWvL#|WL*567U`zgW^lM7Tn@SzsbeEG9w7+UmPI$q6(p(u^WVG7FAZeyL& zBsx6@GP6s8j4?N9A{k2h-E9ODDuv*zk6&vvog!xoR<)_i0r>Af$Svqkc! zNzNQ|({zkEZH-F(_uu^HDupwCt&->T+HT_k4ny*%NmuINRg(<*2z*I%KTXJdSz>34 zVYjibAj$Ncu06`N`75;_M8eZ$jh*eD-S!v!8nI_d*O!yuI7r%vFfCaYWQXr#c0 zBNDcZm+hZ)vx@!hYnO5mVKLU&&j8+TsPZ;8S5-CYYa=9=LS7Ew3^XIO^ps=Llu6TY(A{GCIuk!_ z`V4)Fo@XPI<=M!)&{mDpY8QJpG9UP5tQl4l=WOIk^gXx6(B<*$yroehi}9d&551Cu ztvn37w|Hm7vY_UhKy!zl0JDqi=`3Cn+ggh;&)CJB#Y+QShNfjwO}dz~cq2e_PAr|J zvN9@G)p44J&os<0isF+wwe=tdDOLZDQ(M+IPv(DmZfn5rT*U6)a_RWfb6cOD+cI9* z`SjeDJirz27>RN2Ec&?2s%t(yw>1!HeR^&y&f%(_RO{1oTb6eT|NnVz%NX$d`%i8? zg+U;XWQ_)thpuX|D4U$=z+=HWT;sz7S;j*xR{oPS2V;?9eU;kRZ^p`ha^^@2Ml$2- zu|D6G8RK6Sz(KL(%<~Wg7Y}*-O|Ay;!rQ-+_XwalNvNuY1O&sL0gRkdC=}DiO@@{d zT=5ihSWKQ4M6)ENogPk+@*`tGN{{tA2> znGN7nQ>5eu5J-;4{-twG|EY5+_6bRLCC`b$N!1L0);3QeOLgyb0O!x zurn*<+#h!CpY6;FrtJPZww8}R1fsALoA}RTPbZulDmzG6c5rsGL9rDSoz6G$3vh(s znwiuFvE8|^Tt2t&!>-@%_SW4ZI4JDg-F4+Pi55Tbre8wvLJKkx7+Ww6zkhEzrM-2( zXc@fwA4m_+DeUeVA=B_$DA^hUY~Z&f{PXhdav@(vec2UqOOYA3Y$6T%^kq-^4E`fLY>o)AeV#IAKka?{{-i2McJ3k_$&! zf(u8ef$(*}#R+iyO=ZrJnNZTw+zD$v_cAKRKM~K?g9h({J||||l03P!^*-z8im?Rgja~2^*~urMO^?d!bB7 z0)7JWbpd1|HIrgy`>9YQ%QY7vMC&#{s7UVoyOHba)mJtN3lN0L}({3lMR)QBmgrQu17aS6h2@sjWS_ zQUtkDcT#1Z=t>bk#V@1*+!NZBB9Gy+$Wq0N_@ygFuH-0wmq9j)U-bDRp2$jqRfZB$ zI{M$SNtkaWyccL)(6xciZd)0x>T$zb*Ri-{Y`0OnQsDaH>%Tw+rK4dJVSW|(J;siYrV(*gm^Wa5=nD{dxTxvqZn0Jrk93=qQ7c zf_Wk@FFTryEv{HNUWl7uX{fb%BB#Sz(}`z``Y32NpbMa(#>HE)&O^Q14Vn|^B4{K( z`Sy53$BAdnzAzgbZ?H57*5gX_Owe2$OBb`EejdWl(=_Bq6EA&-fnNo>h3L9y%=E?Z z`#t^^3jo&!X{d9>Cf2io4UpC@BbGZ=3x@l*d7%zRv$nWi-x#x1lk8+MDzh47C>I&RG z0!u@=#N#&~@#bDB#JWmJ)}#LI2Hk_2Mp4G+w-)JhW2pD~%HH{%jRc+ILLIJ+(8WvN zLGY^tO^#R5^`w7Esi+gzC>rB89=~yjH@OA;)+?&>0OHB-QsnompT+A+8x$Sen|SEJ3r3X$~8@I{Mi0g+=909^S$$X4c_0? zG`;Z~34S+yL5TbG0Hmk<&IR4epvk&Taf6!0EsvF;8wZ*#w<|i6pJn_)pCIgyHI1T# z9(;N$M!)Z1i`@^5T+a9Dtr&e>_|W~_Xsk3p-CZ@_VUD*&6!S_scA`JM6{E+S6hFNc zKaT(&%~`5*Jc`n)TpmvodK`r zh*#vJS;Mh$(P(<$VnDyEssUd%3gBFBT4qCxPmT0B6FyBbKGiDF>G1NIUeyg%K0m%$ zg_Nabt}@ZwgY~+r8Ymm-RUhkBBfX;2R*fT~I!`$HY)zZ=VU}=CI4$#yJ zMeTtzvP}qU5}4jC?)qBnIt_4(JoZWyrgJpX+0syl4UXi@t%%DVtdfg=G1sN^u$^9t z5OKECEsT(-EU+e_zWG{jyECU+NNVe!lPmd6AV!VJyKyxOB^V_Iurwr$&$wZ`CONYJ z>`e(bOUX2Y1FwEj%*ij#-aRE8RXTWmKYrOr(KEe>GQzTiMa;xF=;N+eH^)|cmeZSU!Kel#cNiklxm&L#cO+lJX|o?P{{GyXC%VfM&pkK-aviSK@+ z%nK6V{Y-%!5oaWHKT|MW;=A7{qi&Abc;58m!!G*m>f~#3Qs-T{p%ZVQNc!$K&Ace_ z-EW#1jJb72Lid|y)Xg#7Z<^sX(D81XxnJVD-!${O#K*sB=I2~TvmATq#|0<@ziEb* zFp%xG#?#kLGg{%JFD215~$V(S@5Pfa8P)H%(|4Zkm7#yJD~( zYFCOl4cq!@5;sh{Qp5zfxQ&=9ay3D*dTp+hCW&z5+WP_D8U*VgDBvb6jyV>>}7_VY6Ys1KR}qXILH_y&Lvw z*k8k50{au#>tO#0n*h5JHXn8`>?qi;z`9_63yYbkxCQo7*cV`PVZR4^E$ln6LtsO& zC9qG!UI6<|STF2RSgZ?(FT!39`wQ4vu#dv7gMA-%5bS1HC+w53=fQpr)&u(%EDpGf zTVX3;Uxu9q`$O0k*!N&Du@>85%V2*FI}!HVu#K>Pf;}7d%dl6${t9*u>|?O4u>XJ^ ziX0407$Uv^_yxeFfJ*^i0(=Q@3g8sL9{~OUFaQ_;{43yJ0r@f3RKPG`7;qurLcpH^ z{tR$D;CR3X0Urch1-J^Z3$P3DEWon>?*zOP@Jhfd0bd7v9dI__Y{35k{2##20)7_o z?|^>?91J)Z@Fu{U0E+>O0XqRZ0mlN41^fo!HvsDZ>j3`%_y@o<0M7ut9q@L*6@V)M zUj=*>a0cKEz()Wd0bB#P2Jmlye*;VhOb7fN;O77r11<)94)8g^Nr008zYF+XKp&tF z@NK}i0Y3xy8Nho0?*Xg=tOEQE;BNru0?q~eDd0~5uLryy@FT#F0NE1c!8%}9!e+ph z!{)#?!zRPdhaCr74?7(8GT520Yhe>%i(tpV*1%@LE`yy48-%rkLpy9C>=Ur(!rlk# zhW#BZTiXn&#e=|m5cmxOk3ndc2BGa4g!W|++K@qLCkCM{7=-#hNZxC3D&RS=39y;4 zLtxK@<=^SBym8}fSRR5L3Y!Xh7A!y7dj_mXu-Ow62MtPs84Q!G%@A!;VoYj`N$bO$ z(uXwp~xn*%!&HV?KOb|q{xY#Z#oupO|6 zVXY=MUdGAz7#HJV91d9W&VyYE+XmYK%S5;RD-0MGCIMm3fsGx(oddsE9LKW8IEjAh zC_hJL>RMN(HA$wHDNn-KNsZC;m7*PZjC+Oa5qR)rpg}tc%aTJIhl42)ooxp z2dv@04*u4+a#q4GJLat%@?^n%7j_v-Lz;xDpdTmoy+J5yZ&%T#;YAoqA`2k{s0c~& zR@yejME;ULm5~GQpu|Y!lW)Lm#3gd)0@n^W6>t+^KH!ajO8{|=Qd<>Z2(TG&DnXC+d)lt}4P7Y8fc9y}|YeADj$9%UV#iZ`YnrAPF& z!1`ui-uJt)^#mK1*3)neE-Gei=cbLU-$Ha9(su}3h}%JIrDR<8tc3sl@DPl9H^oK5`KXj$YdyN(D zpr%Vv*Gj*JN2x#Ks6W&36wx0@P3&f?HC`&rtc`4^({KI>F!Bx3V<_Tq#j)@f;$M0L zPw9_rVY8n4Ot>PsHnf%Q2zKLdKVry=Ch!&}A^glsQn5oDb;K%V;ffR6i&Fj~`y!Hc&0?e#S$(Ek5!lO4 zFl}2I^qK^`KwBOzOS=@PB}b4Q+-aL3dnXFg^5$s)Y8nNVB`V+=EnQUC_h5@)4a2u5 z7?io7iB)A@FlY6@7EG+Y4*A7iI!&HbWnQT4F&GQk>jZ-MkWP(7p~<@gb~r3mC}N@& z+PLeq8S&$;drV=}+nvmrX4;_N<;((#dhhX(%x<=!r|V?Fi`%HD9MqLjbPH}gR`Ptf>!yQ)%Nz$x%=0;F7gfXr_`tg13}sVYNP z3cg>ed{Z&~R<0Crp^4*L5&4qtG84xW_X;PQW(OW+)jG_Vu;+ug&#LuP5Oq3_v5$~C z`rlW#W+UA{mg(=SRp?&3(jOUQL)nF#hjpuS7q4) zR1l1p%~SjPL(;bwLHeD}{g%dizeS8n!}gdOw&&!@a8EyFxIbEk1J^LhRY}m)uw7ci zc3DIdrD69=4ZHv3N$384N@rKJbp90$+hxipM#DPWs9~I8$}Wx#nx%`wt<`cynk23; zT_d4bY9@LmT)Pl5OWX-nRJc8+>pE0pg?kJxMfWSXM#~Uzbn7VjS|AfZKbqK%^7R=1 zKjGQhQ9g>WlVYZ4^2%L&h+@b#;%y zzmKlY%9SbMktogeugr1yVk_Dn7BJk++8NF)5QJE#QoXCy=&rF4^`jQ8IKo3NqLO^$-klJs)jO)HwYO%;kE@s^q1HrMoh@DRLa_KM zY?fGw-{sQ91q9{V2-jMPV*`~hT{);68E_?uX>h47`4YJ9l)h*vv3X5?--1iwegqen z60!uxn2$);>u`;hF0`KAx^BLKZ`_Rp?`~c9FJkw z=(nw0WrzGO_{bJtaukB)!MXPc*h3n3H@Z=l(Y=7@0p15V4e;xL^8mjA$dzd5R$Cq5 zcK|m4?gk74{tw`n0nymVmFLF+ISknc$lN~#_$=T7z~2DA4EQ17F99jQLx7WzmtO%o z0e=ff5xfEDL3-Z=M3*n#0{kA}p8+2O{0ra{fbRfOzfJ&BF&4wB;Q(D~I6xN;B_TG2 zTc}+rqRGVhO&k{ZG#!@sq$@@2GjaP(++R%GaT6!k6gXIu-S-i8-xQ+mzV)ST=ttAS z^OM7wA*{-m*XQBezMFw<>Dzw*g7(%uwpOeH?vZIgJbOahnboe8&dr2OBih>V z4KnhM1jHHIC?hwJOvSAv4ei`0?L3 zVu`XkFW+9VYRDC4=f8QMzc(K%A4xF&B;XnrCoq;S7D{_z)1V39%z^9a`7 z54N`+OxQ3CnMYH9BC3(^dL3Pc?ku;gguvv@dq|OyD{$Smg*gdrrFSIvM#(+nrrE)pU2}>Q06Q#78OCcO3>CQ*O%a`k-k5GYn61N zwdVWj-jAF@+yKb&RV(0)fY$+Xd~`kFK0r)8+nxeM)7SPAU_0Q;fLj6I z0t^G@A?|H}rGVQ3F9*CC@C$%D0Pg_21(5y6ZGgW3yc6&@fL{j8hBjfE-gXh-y?`FT zuK*&fz-vlvy8yoqn2Iv}2H*vN-vzt`5PogtfZqpP3HUJJEr5>#egzP#hHcb^#{gN9 z9963RkS^69(v>1Vcd2mYNSDIN{_8b($K7ti?2awBYO_NX=*Kc%K(mNW43+uVY}p#7 zf36VRqA=TU1w%~eR9M+Q;+unyr0w9o6oT&5eGqV2J7zz#VP*emTjs>jCa3>sTZU@P zqId(pQ{rbob3MAxW3uZ41@@vC?MBUJlj@F$OWZj7`3(#EqG%b99M~~aHJZ>KW3_cn z)bc~FTafG9WPhPMK+d1B&vs18^XP-JsguI4IHCKAOjG7(Wu23JX{;~U0 zUq;y2c7;6IuG|T@G}5j#U&~Le;Dys>*{+al2kdZIBX&6Dll5GL(XK=_0G!eUVOPmE z#n?l-Mm`xEPpfrPAor2hlCd^SpAl<=#$mZdj%5!3W&`(g!0CX`0?r3~0r2;Lc-64& zZNQfSucmAOuLFD?5GOChA;2);uK=0Di@0S7YM zq*`xlZ{3!DJx&m8Lyf};f_!#(AmDDl8aQx#qWedVw&Xa^^uz=>RJM!kc1d=-Hn#5K z=resgZ)K9Btw1<hxQ}3kaDOLrhl%A*_TD26htNz3L?@saj75@E0rWv zaesU3{UUfh%bt|GI8-#1CFHy#?7Tyj)T?kA1wXrDTksOgGnkHlJY04M##deo~A0? zN5CmK2U3i+15|gx_NT#%8c1=mA$lNn2QX{`8|ApkXaaj4H*uuYro*h2*CeoI-KH@T z!A*bb01PRw3)agE8B#I~<;sS7JZz1|{|OB$WsOyFIcR$ua1x#|rEcT0)jNRm0I^ms z7a#BqIXQTHAFv+yzXN_A5OK;y2OHokc(enuflmZv+c*etB;rg091l1Ia2jALAax)O zkR^HwU;q%`b!)>BJdqBF^E)B~@D;#JKy(h`G{B>PX96N^Vgw*)#aV!p0I{Oqwg~WS zz$U;^fUSU|0Wp9S7XW?@@It^J0gea6fK5yQd>L>e;BNpiKx}&(FcM8K(l z(*dyz*ftw*Iw19R1|YSO(-GA{(WN>lx^OlPsa3c=+NC=v?g7aTD)s=xR}fB2c{1eu zu(s2AfZa?7NM$$EA^U}n_STN{>(9dxp9A5tj&MZ=+RX+3wC{c4aBT>vijLZ_^FVE= zsN%J*1D(!?$&O9X!!q#0aLjh5U4J>CY%|e+geo3rZ+$?t*t&iZc0N!WE_J?E8`}N` z$3hi&1fyE?K;g0nz_jc&;Fh4-rnj+cfl=tgXsv2PiCepFi+A^Yxa`9zKR?2hY~06; zTjqL}Tj*bd$~#B|(*(U&bC}QI$p@Q+w@PpsBW#xZns1ZD9mVgp5_bZ>&C)-c(iW4er%g#)>9Xyr)DJ+v_~{@g!3M^nE8|C#Wg6mw>d zJjcP01D?wx139*9oSUgT=NV}S2v))xk;94kXNtHe^Fs(^80uQ@7tY7{vSDKTY!3N2 zGbC@>-WfAPA~_Bmg`D6j6t}MhpTXc2^elw=@QD-v8Fm26@MhC@0EkgQ$Z000rVne1 z=<`Y(cx{G-;d1Q*nux7Br<$~!Y_i-8L%FftLboVu4)Iu^Y@;lT0Xe`#U6<|DVn8pR z%K=vbUIxhME(iPq;1z)EZ7Tt}@VXN4*MKfSiiBZQy`@XlTe?!@ap(q#`ze0uO2Hd$ zN}Eyz7gniPDR`@kXBZjwSK5^#xL>LGwP;t0;8Z~2?lN(`pHY?L!jY+J+hgP7JHg(% zb(bdnxr@RTvyG4Q3~H?ZAf7JAii^4Om5dXrr-2dMgA=mfKY_EX_6^t{Zc*febcw240d#|;f*;$+>>P^&3Y!|RQZfQ+9S&X%PTmgYRW>Y1_R z&~^!)F9f_A5WP=Z01&;8T=t&<_;ozb1bhJSBEU{SEK#&EKXU<@+_kVuv*}WrO;?II zj9-O&Q@i@!{pJ7(qgl+(=i9IZixX4`ik?YcUEb;3#nQnlu4p+GxUJG_7n)Fvaxs@q z<3uOvqmR0uj)vyUc4nl1j#XZ+ogW59E(|Q&m?Y<5`(>wviN^lfWqVpN?KnK!d9Y=0 z*B<>z7JQ^-SL+y{WnZ>)BhOc3Ema|EF@q=KXq!wP<{Jf)!Lgu26JSY&1ZuiN9!3yU zu3GHPNB+%PKcDde*k<4@F*b5|BrwyUbg6}g`rEeFm$B|a#y&ZcIg&| zYsYfTdk`x8=t2;i=WC7);uA+C-ac1HPV9@YPOhC|(IvZ1Q_~f0MU>nh&QxnIc zPfcKwuCjpO{XT7S3|+B0nTh>Ji+He~6LX{_Lw4n8_5NEA;xGdP5l!SE4%$X`K3a3Q zFk@)WUa2`*?MMFGPum>%7f;*t(BEdIZ@&bUsndBsduS~<9;h`0_q-HbobjMshJuRS zaq{XPmcIH`|L%{jf80*!KE54@#$kO@SH`2?=ET^U29@Q|I_}XV>a+6Xusmu@TMm`k z5L$-HKSW8W!SH4%vvTnW=XR7tmaw7jE7$38sfjIhK6a?gZ!?fF8&R6rj(=#3|F1B} zu%09uf`yOR7yihTo!Stm>j@q! z`B~sP2NtHU(?(ZD$czz0Z(K1`HMkn1oY=Jf6a=dyWX7=3dpQ20Sq9PrGQLS1>iGK+U0=H z0bUMx46qWAx^*=mwcNy#kK;s6klz<~=Cqqu)>FjQB8idw6ILF<|#5 zeG@z0NNh^H+q8JO>11@l@xu zqEbkv7&|vtLI7x=^tewxTJ-McQf|;>duVexMTNR>t8^GO;yQJ_X!}fhQ;^be z(gZ1E@1G!zA~#dzQbU{nLN8WR={RXJld<|==XaTlqp-|Kaen&187z}T26#?DngM5$Z-FGm?#=c+$JGZMQ!x)>o(L@If0LvUXv@2tZA|~O=g{3TDfvKj2WUq9_)eZb0BDq zkZ}yh$a~_N1FpBA--e+C*rCTu>(Ai-!w4BiIlXaZTA#;ERdZ#}7LO~_`ay(@oo;Vj znbuR;KB=^_{g20$X`LJ)W4F{BSEjWP6A;anO=3K*OlxC=jIDKVT$$F5SkBU1*>J?; z%CvqhLdNzimTUY?71rO_O_k%=Y+#-KU%>MKPXKaL<$XYIs(b**O_jd`76JYfkeez3 z>j|p?5&*XX+5o>sG~l-Y69HLE1_6G6d<_O10>w=Rq@E7}q-Lf8K84~u6_BN$4tNPf zmI+7+p9c6nv^QCRoRpjn$R2AL;6cDM01p8U2mB-8nSjRtM*w~RI1-TU)!Be-Zn(~; z)<5V{>mPKb2tQJ(aNM*}xG$PGzB{FGd{0Wz9WZe?=B05s(530lK`s>?4oPVoj#+42 ziHQrExV0wkP7`;JiF?MxVS`Kad&k7RXW|@?s)~1vcHs>%6SvUBtu}G%P287F98cV< z{NnvK&F^^=_g545HxuVTRoC%qm)?}x2l2}FnTw(SkLKdZJSmKY0A9F-=|K2~`{BT; z$uzvZGhdEJ?l62vvb7>(OBPOs>JT_@E9VgO;tSX<=cyy;I7TY36;m6|*c+D{&N~t3 z(R=YD!}Go`BRt(|sX2rr$k-}3&uG-*9Pu56!2kp`YGNy2T!hN}y%Oo?N3%7yfGTfV*&zATHLh6H?#(CYs(+C%G*U?alD-eEzW zY(5qM)-h^n$5}y1X)hXy*I3ysV!7UFn!Nv1T zYhew;G_YAC>jsUqC8}o44mcCIL_iPVAi!0Cg8{>U$$&cmhXAtqN(KB5U)@&?QQ`|Kg=tYeohlM(fh-!EoAU>TsxRKNfSKz&y_>WqEA8 z;d2a2MR=7!>!Wos_9sdoL(Vp-i2r>nusiEy` zDcGBwu=XZIhNYK$R~N;H^U191a!FH9!#UDNr7~*#3sS<06z`L$Ra#EPIn+OC_5Nco z*BTibfZ9ec*HT3d{nVPvT|TL~Crr&nySqOmS8}yO5BfR|U6RD3aAips zJi84Omtxk%u?lHvVponzV*D?~vvrtw7^#RoZ^3Hv`+MNZ zb)Xj`WPPnJaWO6lGd0b%r`4rB@IN;~*4OINTyVXDDx|X3+v*aJ-DtADR+laS*A8f? zCTCkK%PU5%`{Dn)2w8ttm;R1XwdTrN7LO}eY|e|U1I1fi;@S$QActWML;dCygtxyR z)X1rrDp2QV0G5ZER{uoUxa`b1AZN_9B>!lrGS+062PO72x!|VnM%M} z$j4QHtfyB4vWD^X4mH)GOHFm?N)dTTox&AqR|-D1kMXn02Yxc-R05a}?rApC8O!U4$^m%c)kjdIsAE6hFleG=YdgeK)dT1-tu?lcH zU;`j)StH;Az$U;YfIh%$0CCNhyzL1$2DDv=XFnkG5CCNIz6z_fo-U>Jbfw7pt#Get zIz7Q>4&?-YDjJtKm*Ha+(0(`})rre_IFohrOxn zKH1$-ltw$t=MxYO3DE0XmvhR2G7Qtf(q$`Lq>-&C6{Zarx5~D(4KNqa8v*kHZvZ5Z zc0i_o6Ck7hCafw&x>PCBl_GBsQ@CTAPM2Z_9%U)!u@rOg6j`lo-_2W-Gg^WuK8#g) z&-*8Qxic8o#{D=+*Gj67j6Zq9GPrrq7M4v5vhch0^Gu3fAC11x9xu_*uXgWIlE>cf z+%B=|416!@#`irbm!2Aqzr)Y!zb>ZXSPB2^n0Lg;lSTSZSWCkJb(1&f$u^?{ezY_! z&WMR_GmI|T+DMRpY$FkdS}@LSfENO82W$tt8Sry}p98!ba0lSG0I|u{_5$GN0gnQH z0g&mv6_DxK1*_DHE~Q>{sgIB-+&)d$Z}m#P?#h3gdUZ`PwMbkyb^uxwS0{VX7&eU^ zusvzavoZd$8smb0?DjKxvh-LY(HgS`*BiE|ds{l-NlVk0%7BDj%Vnh1hH(ssWkXh~ zad)A#8Sj??sWo>4vH`sZ@D{*(0e1s_6_BNUA0X5C4L~M=?-nU7p-X8AUATNt`{IkG z+NHIG9zAWD81IB9qWIJm*-R{N=uF@A6}a%)dd7Jl!NC#1rRZUj!zEc;5>r%bf!F@C`Xl@M*UBl{K0loSrg~4LECc%-A^bkZEfNvTj@HPut*6Cn z)6(QCi)metK>s%Gqo^z={m;cCg`0)X3ifuEpK})m&48te?Lj#Yv--zwhTMuUu{|hx zQc=bOR%VhbO@iCkyv{PiCD#tvMA+Um)aX7jQjy=h;4@Rp?vrQEd8j`NZg#J@wy4JA zxAv&krjY5PQm4SOccuA0l#^-w0U(w7VZa%HKLX4Ld<2lYdAOju?G3;Vz<&Vl1>_9v zaX{wt2|(uJC$LJ%=~7Bg7e2SEeet8mfkxadCj2lvdV_+Bd* zikgcmoBh5zzpJs)74-U=DyzM?ztk73f8v2_TRefv^$p(Ys@&|!*;7b&jmI4fRIc_0 zT3ik8>6K^+rcACPMUAJrrLJ<5Np1)cOeKt9Tk`VzPr+slgKsW3bzvz%Mc&p1I|gdsL~m48J+L;t6XBlGbkH z+?L^K_|Z(kQxAqo+k&(k4Z+49j= zmHMW$_H+N#VyrTxBHL|;@oUJCA0QQC&FmH51&A?cXmJdI4DG^Nf?U_M+kUU<_dVtR zn~MGQr`PaMip5xCXW`mylFMd#> zV*mN5XN+RkysWWv@@}_r9h0)7;m1~?v5(Xrmyc0DQ*`X7Aa-brMe^yOv)lNV8u=VJ za61qro?kK>1A42m#?BtXZrg+epRP&LW$eo)UT!q~mY_}@dwRFn*`nBOzeA;?6khV~ zI8DX=&MQ~Tb}qui8as#(>NUj9P&EAbEXtwy4MXW9R{gN;p~>tP`%qx*Hr|TK+W6Js zAD*jX?<#ouQig~aYwTg>OAzf`r(-{(TkKrHwA*-J1Y3t!lJ3#<{k4V9 zz8KBN8v6(tD%n!*{Max?8z*YN936^Jn|17G%Gk%0F3QaTmRrU$c0o)oFvFuTlYz-F zF?f)>6ofRaq4HC85(;oun4choGO_jRETHYSU*nf4U2|Whu3x7nej%hn7{At>js((f zn-8vrocY;gjDPm*eAl3lz?XIGXCXb&I(D|?!)p#`3ZB02E>+4CT9zJDIOEqEJ9~BL z7_w%>&W||bYntm5-ZtnX@J-GA>~67tM)KkNh79d~>2Et!?0*`z<-SOGx~#D~@NBo? z`UJCW`HT$zt>4{lRCfl^hG*hvKGQAsQNY@5JdH^6#GSK2N#Ze+-fopB^T!(dXkek? zNbq^uf0T^alyJmI9!&}O@X!!@;&1HY{ZS-#@A*2L9gDHXJ_dNZ ztrCQk7|prT6?}7Qxq7z#rYPkDO{~^2?RFdY3)rtGj!xOGVt@0dac@~UL`(jB8OnhK zQ*UU_ld-SL9P|hEZ2i^eh(QyZ_puTho_p#k#zd-Uax*>P zZJY;^Da;&Q{rOTWN`Xl8k-ouL^${9g0sCI`&B_b~PtjMjy82 zc3Y6nJ`Ao66IF7nwW>khgr*;AtPj=N3l~ZG{G9e0-^Nw@z{Zo>1Fov#NkVneT@}BM zfh!~R6R(HV7*Qo3m zX?;tO_X?ZSfM~R)D#2%73y>N~#UZ_-GSGr?Sik=(Bh*U@Rm#)yVNHoqUl5Z{>laC? zEZ3)3S*|>;vfKtL-RhQrs;a7h2N(HxgX|g0Nx8XG9Tt>JNUK1Z>;gkhHQ zGIH`v6_r>;Hy$*TV(BdPpQNn)vowtkD)S4$PHJ>Dd22m^V2!64`rv7Due)e8_YLQa zmCHF}9ZjxAJd}CeeqX>>8_Zr_h*g~;F7OmCSvJ-%^5p0J12Wu&h#9>u?{Q_ zxpB6{=g;@M>%Bp&>$Ld6W$n!A@N2=6l6#?N-7?=Q4+7@ax@T5Tsh;J^_2kaqAfUFmJAWjzUG`>L-IB}0Z~icuU=aPm3! zDfMg0%Q0@r1&+ndL2sjXy|<~(QHc8FZ9v26UQ@&6wtqQQ!rdT>BH^((w_Gm7IhF=n zYP>$jfD$0wO zL3{XW0n)9mvHFM{?rHU}LOODyH1mQ#Dy zI&YJ^p{2&tk3f)BpsA)7N`#fzob22g{Rrc$tDCsm=dbn#5C-eFP~rYYw;1h0ekp?u zAW)&Np}|$-Dq377SBrCupq07VQ~QzJo`UxyXtmFWAxCcZlquOz*6t;+FyIRMy{^jA z75pzo<5u3_T31u$qxuV;hE~edEvv!5Irp^-#Oq`rO9eYW-HL7e3to|6m5%K6kvqyBy zLkk(GjC90BUhXel=2%*^&@pbYJLs!MRY5N~{enuQnvL)1ek6Tq5!*s*13KE$%Jl`wMe$l&v4UM&KLoodghIS)Z>+?4vj{^(K0IMfwn+-K$yi5fAZjqf`iGOp%;}+b| z`$W4`bDNMuQ;yrd1beC&oS7>}ZiS1BoJ+B!t)3G^sdLd%?DU?JIbV7+5K@PHd*och z@2#s3B6xBp#$;lRyWZum3L3CpNe2^#RdiTYmG8l3B zoWt^rgwM@AZClxc+wSZ-+|+)49693{; zO`CE%f4<|a13y`?YxDP);4Fj0U-aaX`)?mKZP)vbzj=m+yfx~qMMlC+FIErVv*DNT zgbv+$Uh9n4_hHzNh%*v?c;j_1yVsso_vFqU@2B4U4#v7%rpZV+k<{|)h%LTD6K~A? zX!eW;Z^SV?iNE~s+n1KTc+RlI$1hv7rv2?#u(U7nzj^7V@Z$II!d|0};|0RETkzR`WgzS|F7{@k9DZ%tW%wUxP;KV>AW z@n_sN^69^NcFkX3IJ@9>r@G!PBcbE?y9a$mC2JZ_NqB4S-v+sbcu>+m^`~=BG+&kR zgVsA6=lpRs7a#u$IXq>@57Y}oD7g!b3Z?d!9RbU*cC}eED)IR+46C#2t%3U5y0&Pu zC91wct#3i+H?WB0xOPBETkrNY)ka6srwB0gZ1N2-3?_UWb4R7E&xjDH#xu~=HDKlw z3=A+Pw;vPI+JS}&xMIqu&m18hS0LbN9ANTRiSY2Q|ao(m}NPRF`nvX#~c7} zvxCo59pfEWO9b#lsE2@hm(clA=&YER7)PaQ@u#FtAviQrf6!tsp&1Bm}r zM9j@vnTBb(m{v0FsK#Arleo{2D&E$v6yeZqwL=~v!ECsBooulkxwB?Xo5(q5rQftFM><>}b89E!!0v#`B!F1`RWMa&k3VySS8fM^%@ zi6_MGgbi&NO-9ULCc^UXH2pUeocNce|4zsD3jZ?jb$2wiXya`<4TBN?DF}HcCi}S} zU%13Zu~#G{Y)nY7CD;=Z6Os~=6Vehg5{4%@5^@sq5>{H{H{vwnVjRQpcLx53)_SWO+ zYjCIh@!HN!&f^FO-#0p)=!X>95lMC=>^y>7>H`-7s&|s}@sfN6>D9~kNANy9KDV@> zHngdX*sdqT&f($YP}#mt=kr)clTkh|&rd(!-uirkAD{BXskLn~%FR#9!}Y%oJNM0Y zKEE0tbbmhN+y^qza^+K-OL6Wj@2SmY01367n-}pI8eZ4R3gg{K`h_y(L;K#ua79)q zr8l49ow7Hc(sA@S7VA5mhgkeP#eYcV@=$y0q4YIK*`c^8I}||54k2Zo&U+aU!ZgBL zg^4qp_wq}6_d=)!pK!&!<6j6>+`BHheg8*C*C6t)XWCou71w38w6xJW^AJ^-R{1)QoR?ECRh8`@UE!2Ik@4~19}DMY;1;EX(xk>pu661O}Y z!7UH@5l@ykJ-e4Tv0Y!nxxmn7YF_(e{1w4e>FksNl@|kRFFF+mmTA{H5e|_6${&RI?!p#w&@z$5 zcwA~qXgd#)L-Rt;-JQ;dB+=#?27!@#zu~fdFQGVhhMha9znd?E2TCoWW$4D%ox4z6 z{uD`f^j-`~P%`744{ed!DrGkkA9&24eJgX?IzlNkh){_j;;ejpDUSNwby+O!b<-o5 zuoS@7wDK+6sqa<~3avJrR*p{|k^iL{q{v53)mZ`irp?tBOl2Xd7&w&Jt0UvJ|FjCacn?KT>Tu6+?kcIQs$ zSzO&JlDUCUnc9#{t#0V3t6QDBwH=oZ|?lBJSAK6&r^HZ+f6TliK6s14y$ ziANXzDt2y%P|C7Gki&4);!yIGj^01a6@KfgCw6dZLBqPnJpvjknnSv9%**2T z)z$_uBjootg7w}2MjE)z2sVjd!jKz0N&LnHMg+v+LM6HSpCpFD#a=Nqbus=6kS6Q*yq*O86p>+0pUHzf#{pghIMwt?FlN?4S9ODW2Z<4Pfbe2K z?sI8_*79HerdP}-zG5DYSDQFRm(z3O@;ZLp3wz1|jMXBCv(?rqF__4T$qXZt&Onq` z3j&#+`C@^R%Nn1570NF)^Lc0nmkDqMo_r&Dr+#h;cxog8s~8FR9YeCDDsdq}>PV(Y z%Pcl!_y4hXCU8|&dEG8a}H-D}&aTxkxrmdaJ!Ue3yyMo~riQq_=(%S2kGiN!a38YL!l>umMH>iOo3NNL<+@n1cWw2~%Y zG<5a>ee9s%$s>p%DXJ1pfk)Tq8j>C)q3@D>Ea~h;#M=4;P)goj4Be1%81EFg1eU-u zco{qsUJWbYJ+Kn)gv7je59A@ee}l{5TW~p)p4bZbDP-ccH-=(y7VHnthBBG&9GD8v zg?aEicn0+HUj}PnHCzKXz_oA_Wa!3w3%n5C4e983?}fGSDah&;(*atohWisS5@C3+Q9d9ap4!Ys^uoxoqvLwU$3d%76 zU&EK-H}Ez1J$wuP0G(8rKf)s*-CXY=$he+YHbv?Pr@>Be7IeZzunVk&he0olgLROJ zncf><0=yM=g?Gbl@FB2ZA0bhqb;d`(*l-H)CV01^?3U~xO2ByM3@I-h# z%z!LC@#aAe#qgd2hrqe;1h^bBZNhslOo40QFn9@My0v#R90l)!C&I@eQxLt+Lz)z? z9NTdcd>^vWqxTEQ)G2QSkQnO~Tjtc$52Zbhkvyd>v(ws->`2x7#Fja&Z;|y_OWc)hMmnJFXqJ_|_gC$d9nc_WiH0l-DR^L@84V_g%I-}633Dg;t zjLwW8ofLF({W>W03~QlWCdTeE3Vy|Rxo8>eOLPLKKS}NlUZ!K7EBrE@w`^C`mdX#< zI>xWS2~z|ztjpn-=}`CTrM6T?t!Q5w<|3H^l{7=N9Ei3}v81N7m_Hc$wQ8((!Q5k0 z#*X#f)LyIGJ=#6m8e2*asMVWA(ur#Q?m?{j17do}KhJbSorU=GOuRfHWkjkg;5yW7 z!4WB`$z~#<%oZG>vjwNuY4fWI7jCxT2uZuZE6i*`*`_q6bD$y1a)+5M_KQ^V$)~N&7EHlRYN)w@bx&gd zD#TdZjHu-b7rxne^jC3jh%w_2Ux<5Em|K9E*M}N&Ql!GUH;}ra&j~c!Qm1f9l$+-b zSi*>&6!x2JGf4H)=MC{UhdZ}o?o->WR6XJRO(J~J!#GBLxN)ns=Wz6~tY2fMPz$}K z2mgk1?~Vkzz^C%MP-5IW4TO6RsklEbHD-LjCf$Ocw>vjGF7cT#3};S;7<#qAoOB*W zx51pe9ZzY4IdN}s8_bD&tJ`2sI#t)U!CX(wJxQ|6GJXQC zaOsiA{iHUSljlflgE?_;Y8%W+2b6JvpetPXB>(B=R{}qJ=r?#V$95~Fy^GZg)2wB@#r_0xwFcclX^qTQHXo@p#M2${!neq zNyjXld$aKONz5Fz+?Z=Ee7Trgj+rNTua`^en{e*!#oUjW`R7?`OuJv96wKQo>nmo#DF+>_Nf$DYR?W2@B|FB{?G?^rmgbm?U0k&*^IXZ=MZ*JNbRie`q$m%)Zje@HxLshSzN~LgqUj zblZ$yCd0SbTg09%*@o$uzf6Wd*s7LaCd2rlgZe)^8D2X)|Jk|lpVBuyhj*Dn%!K#dj%?bidgSmS+~T?EUI!)H9}K@cqFU?r6!%OTNh(WhX0Z zN?x94@(jNLhn15xEsJj*#z1F+mNjESw*S6UHT=pLYsP8$9>4KeRc24|Yjm-u&zLgJ z(`^4Re9S-1AHFziMn-0CbAaMyjesr_NU%eYfQ4+2YQ@@GUB!^!i*BOgDg9we)adj- zV|P`G0f}#kvBRyrj2T%u4B8v@5mxSm=DR(ttQ=3)B)|JT#r^R!a{TTeX=P8D?D5;~ zWo43BKDT;Xd7eDK(W9*Cr%le{qrD^H)Od!{&YEL(oSRcg@;MS*Bz5M>s$y(6E9Mh& zM?xozpT*+!isFJL@~z&H&^thfM`^i8BB}%5x64b4md@uhe6V@^6GxB4iTSL4oio3> ztWXUdfez;ll@}VVL~)iF@(pFn;`w5x*g7=ce7Z|mZNVe9V_8O67lPJmNQg5Dj6aH& zY7EJ^K=lM>^0Zj#AyL*>?&g-4EzqY6ieX*pA+Nps^Og11n-A|)v~TX0@4tKDNv|FF z>SMlSs(#BAATp{KAF=C;*k0b*Z(sY+agNt2o<8DX%eq1JU+Ghl^Tz0Yr9D%Jop^cU z>A&Mu-srbj8PXY#<0D$G43SM+!mSLE*#zNMhM1KeEmww^l^!iuhQ#tJ9UswhWk`nV zw_F*rT=iS747pYHTdoXgRQ;AKL%LJn#YePU86pR##YYt0cHj4RUbFS=Z#zE_n?Cc( z0cOR>(=r~=j%6HV!1*OBii_Gg<^LzHGqD?rc80H@vMM-uhgw|l%i5G*)~1*>jI;mE zwJGh(shYk2S1)K8mYilUX!)OCOp`KtLt-^d9D4xb~}$4gh)bt3l#Hf5ZS2rVqe^wjo^c4=gn4Pr|HP~ zUgH>p`Zb=14{r{7h>pRix4~G%dPFYj1K6jt<6s7nqbvU3g#Z1J^Bv4FjQczBpAQ?3 zd5FHKw?H~mj`I5D7a+!=-j97gG&s&c@Ikus zHTYkMoNrZ*lTp8c|Gkj&ozO89^>%m|;$p;P)Zf|ZKNWQX&tGGw|Cy*$xc@lrOLz+q zeNf*B>GV2QBQj9G&3y?EAKe{%Snd29JN;Lp9*z1HJN-*gABXyGDB-O|OhEk^_9Z=M zB3K3Jh>S4l&pU)8mHW@w>0gYxKkD0{#MfGc2lWTom-Ig!!3X8eSJ~;m3iU~-|7NE@ z-9*X%IL>B7zu`lWW zYXtG!`Eon`&qke&`p3{`4Z>Rr!%p8mPKSGJ`3lQT_e~5ia|1%IrqrTQo|8r5FjQa0(`j?>| ziuw_F7~*2YWYpguqWnLB`x4#)L?6uG1S1fu5gDl8;l70DG(=C-mxYx7-FEtyaQ`^& z-vcGQwTKC*|Al=?&(_NSvv&FyW2QgmZ-)|JYY`sQ`>-$Re>&nQ)K}Z-zY6t9s9(3! ze+lX#s2_%15E~GAsK3R&q>gbp z_UFb&cM$tgiP0%yKe=mk7qK6Ec=QfqpE0ejQl&6wyfc$OoJ{P9VV-O(gQQ)oNJh;f z7)Uz!(PO&ym(|CPniajRYUegquKd{a6prc{8@=_+sRIpeDhRal91R(XDx2wO$RzWq zu?9EQmo3xD${b78AUe2#Rr07UqxP_6iI&%vx%_$q{j$M+8T}~R95tdXqi#}JbTU!M z!C18!rE(A{hh^oI)=td#$@6O`<_`Crhc03G0+B6t?Mo&%K8IYx2fbv@qlrsVQ*LD~ zM9}>v?gt)owvzk9Le{23j8E!eXXZ>A`h@;V{FeCYhS*~3mhe~-o>EAgsOyN_unhGX zupBOgOJN11@8YHW>AIq|uo5--UDp*|39C`x1nFaW{|J{u%B8L=+5w3Z@3W9P-1{oT zE$_FGIz^8KITyNVr>MoBcbI0KF;RK3HD9}y*=EwW5u4<$*xik~Iyk=86EEgw#@FSH+5I-ssQfg^ zd{fi>*2#Ib6UQ7h&s~M1&mnwi9-8MihTIR$bJuV`G|!2f5*L>ts^a<4%a`Z!D@vBM z^++~V|d(;v4Xm{*e>CaTNB|>6am2=xSQYZGpDXA=db)+nxBO^6eel;sxR&}Ck zxx@jL*_9f#YZ5k9D@kvDzA%}9En-Ce;PPVLy`33%QZV4w)Yy;-r~3^G{;Cb&x@_iNm6em;Uql%Q>OHg zCCSKjgW6B(&$iGD{*>W|@wL|L6>%T7au#B-EuQ(Z zduTaY6mmbb9Q_@;q3eppP05#YVT{jVf88ycEDxL0-padsKtW=YTDEx3WQQRdZBv{& z!RE*oU||Z{VbP{{VNxTcE`Gt?)f~JNzfS1AYnbgmk7X-f_IF4Yclt(v`Revi8oxZEptT9nd=w z(&l()z->^{>p>WcJA)CXP7s-?6GY~;x?{@dv6fI}POHCP?>N7n+pm}H*V7GvOiNRb zW33$f7*An}ow_KFqC8FGy=G^;mI|>GQYs`QiI$sRQv$-}@f_~fBVrM9h34^-(W^)J z?ib@oVE^PY?uE7$;-;jx6kiV=3Um3|3d!Rpi`R2Qgj_!NjjBceMDns23C+u7L~Skt z^RoY#R>_CHOTr{-x>r_`tw~>7^JP7huFLVTW4JCSwl=R(CGoX+yF|j?L;F>uLv7w3sX%kmYV)?MWK3<|*5UQl4RxM9 zwVo|?o?W$`%?)ewsp@eJ=MG?bg9MqqO8D&^cj4_vp}$EKKPFLb)lkg}8YJn!m{2rb zikX^KTjMKFs#&$iVh577V#%{dH$5T*`{VA9uglxI`|YTi+iPbMlKr|92!Y&MQ}3wt zNRXb~_XxiaYA78wZ$(yBtzNbL80zin#fvQYvom+BHZeUe@@!wXHk&}zdA9G^>sYte zgM3ls2GyfT9H^Vx!&e?`D>(mjgJ-)uLxX3l0G*HYDM&1<>Dk`;a1CzBLlPI#v{rS| z5V;yMlJNlFh)seQQRTwp{t|0D8fhN4bAoBqj^VF7NODYmG=Gf#Ns#)z>usP*Wcx_99wFUDK6#5R~p4(D>=;p0~X= zN4vW@@#aX!ny*`lB$xU_crhqF_V7{p&5_N?Ncoa{!V$-sH(a%m`n+PFN39z5^X4a< zl!$Tp3q+L$OAnrHqGrI9p#{&++Yx8_lkYR%QyqdoqO zC!|uS&2i&Hi{z6ow8^?ZZ`RuQtGs=;WcDG?*hhXe3Tk(uDb){>L_edx$noufx65dzSjV| zf+y^QaM>d*4&kWv>{mzKgLpi7Nj8b$wyL6=-aT9&t-wBI@saf3iH|oD!^Vep2nkVxeme<_`?xjd6E8va;AY(T z>5X1a5868V5u@|Ahi}D3;C$FBSxb6f6Sy5;ccxRK`OH@{>Kn}x3qSE? zfi5^%Npo2I>Q6g>20$+bbn=V-O{lVgHXN~61w&3k96uQLzK zug#vgR6NaDShGW_)7ps(^~s`qafHNV^8)Qx^GFN3RUT)ou-|E(I^;Ppzacw+sm3xM z_*(Ua`(D6c;0Gl0cvDMj^K-e=;FhgpzISb=zwlNff{2^&G>T+i6 ze!J#_h<@_6j?vt@#7k>8Rq@Pm_phx6>7K32Blr2<_cy68?M#Tv;vQJL45w-i#K&#e zjHkBKqdi;wd40@Jargl$_j}^*-yq>6^|V^H-43Xi*>hRanK+nVr{OS(uUW#MVoleP z5CP#_`$BU#Yw9BdgL)|gGVQL$?j@*O+Z0qXnpG`rV`w$pBrmZ3XNh|tdt#YyfIwP+ zntHMggJ^6O7mRK#)5H1i59oV=TBi zh@Aq182>*P#Pb*w@x^K)Yw&8j-qpQvO|c^wFsLH9k@l>D8JOVys&3c>_>r#NI(DIQtxM$gKRRMm@@>OW+SCM&@n~Sv#GcxcpvK?ObG+vtS z3U6v1DW&cm4=&XH0B1JW7*Dgex^1n!M|ArF9Cee&~Mnmgs1MHi- zKad_f>6=^E;rv>41GkMet!<-rn0CQ!zc$NuY3;2wnie;QCZP5fUjl3ILsy!1#YTYX z?AdX!w%#7MK7v?i`YXB9zERWYsxl+m+Ua^M@Qyot(|UEFnK<<(M>4%mg+NlXB8Qje zTFrwLi>>K7IsSI72)pf#n0?!5Ebhf&J0s=zQU|T5e76K(sv9|PSamr$yFbv8cJX*n zPL6pMkqHD1`lYkkm01C<)aB$Kyq*7J^iK%(Wj}xZ%Wq@;`<{WW_D1v1m;X$$t7&W{ z|NL4;;Y=4uGf%cZD+XpJ23mN8gJz~9e!^28JTql$X39QfW~$2>9F@0u5TBi99vD3_ zJAB{1()24EbW_fnRlDQ^k?dki1v^Mzp~RbsbJ znOHM!>eyjpU7q)%gmrwOXw=VFqUJ3@om#J-y4F|!6<2FkxGnn|9k2IRQziW~`>~g3 zR}G5?E}H5NbjhvQ(N4cLYlLncjhF$+s<~u{=jBpeX|UXbH5RC$GqN zf&My#^pXx5=@8Oej;NQpWq*h35%rQ8VJ3dfC(HDyJ;K-BZ{lVv@Be(&z&oB>BK~}z zf=E~ylma*Eou8HhWWw#~IlZgG_6Wzf5-z?VS>{u%yrAvtZ{(a~@Z-LoX0px}ZkVse zS0QT}`nL27e{%1K7#OJEqYu=i^;k7bUD}+U6JNy`c5u&VZGDxzn>H{_g#geS{jo`A zJE)BlmR} zqq2^S92(z_WnAi9)w>rN1~B)%Usf2eGggU>^N_93yYpx%Dpht2!_h|eJhGMOC0b3$ z%Jr_B?tsyojcl>%y@YJOn)@5Q+G5o^lG(Nm3@Hhab$_s*~j>7T#wAy7~o<*aWyv>*}ZD+WMsotmW#}Tj5J4`Ikgk4y%RI$B$hU7@mD zko`twcObh|Wm}O+k?3gMi|i7WZ9}$JW!sT?RaTGeJeBQ4c9zO^A*)i^bI2B`>?LFc zD%*o>uF76R_G^{Bf$S8OH6oj-vUicqP}yE&Q&hGe*+i9nf^34yK1Y_LvIEFAsO&pr z>s4m;p;lE{2V@r+8NXj3B(8mzEc}q_gsiTYm+}%g$NUFZ@cp+s1kd6673v`&bIip} zGKMt_yN8i)&E=cJr85-8%X;*8A}AjLSICJa|2bv66`f%F%O>6<(uVUg=GS39{G8Ha z4hCd)qhC{ur6z~!3~!;6!lbq!Tf;}Eh3bqN)j}uKo#Cl1Y>gNhYHL^vos2+>F#9ilN}RH#O3h{mu`D=DFlrVJ0ULWH-Ng(wr$C8tXTF~79Bav|{) zx^6;FxYzr z7}T?LBrMVcaHFBEzi4bnqc8p}EH5?Z;K-K&30ws$K*Yd))Z(%K*qdEwNXYyL<7~Ax zbOOGFT}B>_i87k9n1n61+CIBxkF8uNptOJE;TD(!Z-W!yRyYwp1ask=a5CHr zr@&8PKKv3+gPf;f&44l-J`)zhQ{Xl5RCp(x1s{N?!R_$Z@F_SOz6d$7!utlC2RlWw z2{ufCMes;i43B{e;PG%Flnq%+puFoXf;_8L3h~S0Rnd!Cs|?C{7v=CgxD>8~oQC1u z0C~IAGixy8tw+5K{spq*jJFA{fFD8nR(i(FIq+oKgH><}JQtn@aoal&df@_iKCFf{ zP|lcH1J}W|a09#$UJeP1o;6bo_oKcD{s8NsEEFV+-pTM{C}+l80t?|rSPw6SufX5H z*Wqtr-)PI)1m(<^%i$P!1)K!0gd5>i@J4twyd7Q(AAx+Z@pkCQTyfY1UJnn4H^9E| zMz{dp1XseF;TrgRcq#k?yb9h5?|`?#`{3>H33vyTvsmtgZ^OIbSMY8)nO^3-P);nn z53Ypw!}H+-unscmz!@J=l@L~8Ed>)dP-q+v`_$GV;eg&U`N71l1z-+h+ z&V*0HLih~y!e?PEd=CBwJ`b;lFT&g5OK=-}89okQfzQG{@bB*mwG>eonbt6mlO7cG4N>E1s21@;F&NE zUI63aEie)O39_@3_a4YOQQpVkk#HC61)qV(z}?UVUxj_)o3J0;3;V+#;IS~O3uo2A ze(*TB2p$j5hlAjHI2g)j+ad5O$T?KrTi`JG5F8GlfT{2~I1;`BN5Mvz20wzM;n(m) z*o8Nsba*%%1CN0x!GVxE$D0DjLN|0n56ps-VK$r&$HA-Mcz8R^fji&?_!685--nan z7cdvb@NP93x*&C$_js5Ohr_8b4e}o8&4j1GNpKcC9a8ssx4>V)7vZnrdvG@V0GWfkWYfzeNvjyv!1-`Jq)zo-3Kzkv;bOQ2E`i%&Is6CY zTrcl_cqSY`Gg<+UgN&kjrI%0zFM!m|-do@@_#9jTUxq8;TktHH!dvCpa5`kCMDJ|4 z3eJb;!g5I6?yZ8W;W~Ie{4K13x52gWF?a!t>qfl~Qy^`DHyzf(@$e#eI$RIuLD~rK z-SA?#2VMgI0XM=A;H8jPOzSe(6aE(VgPY)BNZaBa3OB~Ji6pn(AK@Y5lUbq9E4k&%t%@dAJF_0I!Fyz+2&Ncqe=nJ_P>)pMbByUGQ&k4}2Z|1HJ+O z3I7iF!#Ck~un|Txi|uXL6}|({fbYUp@I81n+zYqBeefx`AMSx4!nmHC83z;K$FLv# z1fBr@1((3j;Tre_d<=dGcfzmW`|xWh8#jCd6XCb;X!so*0KbQW;g4`Mv^tP~U<8~7 zqu?Ca0p1Ry;WMx!+zaF2caU@Nyd4=kNq}*%D@=sl;Zcx}F5ZE#2TXySm**V=kAyj} z7n}}z!#VIMcqTjsRziBj-nFm~lywyS;MFh*{sH!fTj2osC>#hI;BoNJa1i_q4u;>u zAux^+o}n-iCc|T33LFlH!7*?+lr<(J;6ykQo(f07>tGuE0~`(ShbO`(VLFr*GAF^I zM^T@{5ikpGgxT;a=z%xEaqt$H10RC9@Cis?(EC?71-cke$cKaARG12OgINt!UDJo7QqW)F^iLG`-eGI#=94o`+FU>;lvXT!7MlaTWdyt{b ziRwl1{vUFnePOBfX^{O|(mN~6dWOb@H+Lk%xO;yM2VysEF%qee^Itm%1 zCmyaha#7GN<(yWOG%IKEBGF(ks_d%^2x_tITPAjqDUPN1s_`PU-dPNN0@n zb5-V)o~w>|#z@~)WlrgJ>gZ>Tm2AtL(nHj7&=@PjmN}(2rz4^<)-+q@l%AK4jmAh{ zOJz=J1$BHqM%q1&#$v(T+a`0mrB&~p{{c>P33 z1;eN%o$lsK+@w{}>U5C*PK0i(tH%je>X3OoMnuSE95iy-W5Ddl(!2pnH^vG3`<)_( z;h2OYp|4+4vY6;L53}X?+=CLPWJE{A7=&CjAzlgRXK*0=7aRsZhhpXnI1YXZC4dhj zO!Fl&(|n1{X+5E8(QB|}PU|&fVk<_M{)@~knKpK%F*0^F+22K}$=;g*!v{yBvX@ND z$KxE|`sWoRtm^E#&t(e>-$baS-ETAXpp^|RWF||-2>ou1O{cDhZIZ?Os>K&>S(0VX zsKOx>wfO`2ZE#CeiKzznU?byGdaQoJ-j6N|Oww}(R-7zSdnXNK6EPs$YVf^ygl|Pf zY>;a*H(~0)+Wf&y5@G5P6Wj+5nwnfYv$4+8nC{sxOAGebdPF5N5cTu5y+Ce+PI^i9 z&%VImAWtJJ-Ku!R{Vhxfn3Dk4=ID2AUkLW;1fQJbDAte5RCnLa{N(hh17+KgfJl&F z=MP4|GESeEc|XR|VBL9U^-f8>fX~;bq8yG$wEn{HRVw3{V_Wtszw8-g#+;Nca+`K& zfL?MEnmEk(lU|`Eb63dy(<%LdB~x-2!}k92A&!WflH(tRC;RV2R4=6oC^og17ESTD z9+8BQoZEcKD7S>jzj2L>a*L5_gbeYw{0QJ1dlwV_@q8H=7Y!-3x}C-p6mrS-8vacS zEW+u#By36npfiO4EPT?2kwP)A+>@v4}J{`q3kSI1f`S6pt)DNgY#h~TmZA-LMWZS61WH= zyvrb4t$0_!CGbMX*6iNjLAr%Hz+M3*jp!U|&GR^Znwm#srsffu(~82B(UY#M(d+Hk zbNTfSwHc4Ys_IHTq8l?XYs~DPWADr~FSHV3PSodG5=KzmnTIma6uzV%UkTXF1`|?s z9mIsRW4(C__96(km(3EngGki=r;*+6*Xw{Rw8-3p-g5}KCs$~ZxfQ*@`%N@|2oJ4DO<#XMz2T42Q0dW4h&5zSYN0@Jd9$Zj&lwhh@$M${JusQtxZ zZnLu*F3IZB513)=ujM^U!g?Vb3D?1sU@eq}>>_w3tb>=q^-$hSE{5`amp}>q(+HE@ zL}s#^$ejAtW%PF2=A71>wk*ba$FC>Nn=$vDUr)23w2Io$4U~pX0vWhBh{<`)yW&NV ze}glh$)`-qa{6`&`8#fq8PTaeDR?cTE`m0D#K>NDzKc2~SK1*9{8}AFesmWouq{s;d4RS zKYy#Y?>M%*qNv1TLmEkLL}d&dgq|;G#_d{N#M`H8L*gx~O?(TW=F3M4ss?I0{}3-S8SX6uiEo0J!!7W7cnf?0-U{pCZBV+9cfeQRolt7IyPyKwR zAC83Epv3osP~z| z8=BpvJm^+^iwW3s2nRy0&`el>Uf})E>RX15m^~6yeT$otU`2?Ecz*QqWy0~rRXN24 zGU=e5TSQ8Zl=zk9s`3&SCXY40hs?5l6-aoJ5%P?=2)Q05u_TO-!x8WaDAo2(DBYq4 zC~oY6^Wf7^p63}TfskINNo0|kL>8IT`oz8)qdg|0r`533%32L~kZO1=s)JR-MdT1) zIx|gMH))dHns(K!7~`mPZj(H_&_Ie=xcEsj@=)GBe;MN`w(&4}KELZ_b}P|Im-JcOII6Mb&k z$}#(PaKCvyZT^P5Jyf~7Y93!0P%o2hJ4j_;7fF@8t7gYS{|f{A0P53r7(`tz^K?6i zl3BZ|k}UATC#7Vku67-sCqXbdka}d>-Wg+RlRM<+JlheMgXbOe-y`G@$SQ+q{bY9o<3tv~TAc`L@c&z3ng zNgGvfC%+;yoy@mXPdb?*<4ibwFz)5pGP}8YjoV>6lv-xlOu50cA0t#K`_nz~m9uMB z9q3Sb3N2EUY|X}Yod+U&y|Vi42oiMl<5Gs$g*3)r&+O~tH@Wuds?K)hv@eEsmd{X( zmq=A%@94Jg8u5}L7s~d2dl*iPN&B6R@Le|{kx=_`acCiu@&3U3p?xh$^yH8idvWt< z#5IUafANZ_r1Vr47gR8KDGi*sT94>~@cE9E%U3M;@?+_2Hs5Q#3k_eUr>)bjm1O$B zLa?B`d4io33Y}or-281659~|ADFq=8vBuVWoeV8ue-j=H8{rW67EFh4!(YL7pu8r% z3oGDza3y>no(=yAFMxaDC9nxz3O|4nr~9D9&weORFIA+;s3J2NRb)=xG~VdNlG%)& zHk&VTTQi$%i1(nh)nS`Wy8}eqMN8ouyi4m+-JRS~vvQ189ow*0T)=T_A4?=ej+CXT zB0EUdk$OPFK%(dsnspYS8+iZaj=}ZsD(;8&ki<=ietD$`U;pNpmvBCwWFT?79ubcS zpMm`2LM>l&O^%S!R?Cg>UE+T-f;S4?BvbVJQI|-Vj)fA-1EBPX20{tvaZvo%`b_H@ zk(neEnNw>LqxY_D&aN*$L8(a?FG(n^NnjH8Vfl(x)l0VTl`Se65<%j!s(3L)A{z>u zMMl?}&LYmGIl z8m;Q%WE4gQK4TeGWfU0WK^qF2G@8jrR$as$Ce!nJa-{Sev8MzhI zk_Vy(_a~5f2T(6(y}tiG>!1g{wBwsd0F=6?2n4>FP;&PaZckm+!?T zOXfvOi4C8xXNC#`hh;N?ra{aO; z?)c_4+hfKuVpT>6?BGCqlX~at)=ZOFWE(9ykh4 zfoX6SWPYp;?VbcTpgtM?7LJA2!VLH<%!Dt)EGUtd4ZndCpw#jcVIPF`VzlPYa=pKRf)`L$$CMfca$x2 zTF3eIhWPblfZ3Rn`3AbJnqG+7rw#@E z{K-~1OpFEi&ZKDEk$u`FtYfu5DRFn*y?3m)E!hb4UEbECA_tNkB^+|eIWWA+^?bCq zDuaF=vsH|_kzRAoDwG3~Z9Q8@4@fpzCgz)SuT<($k&;GoU3+#OU1KQ+;jb5LZLwuc z?e`m0mjj-?3wNR-b8M4Qr*)v3lxI&l@pm!1niARJ5$CQmz85Zy_7x`EZlLe+YU>Ufr_=1aESN$z?7OAX zXarny>=R%_D^7i9wOeZPNM;7P%=<@_r8=q1XA9OD!A!Pb9p2CLgLTrFh2z(;xH=Of zGS^O?tE0Hgnkhcu1?fl+Lgwu?o53qfX7(AKz*>t(Bz}(ISFY3YzIff2qDCk9SK1J{ z#8#yE&LS@c5|0Y!a#!v|MRw;`uDPpLopmsmC)zHHEp>SW5oXEkN&i!@N$b#DlSp1_4)ad$gs%?fj;zCyOKb(Z zLxkWCNubx?;@`+Um^(64PcE@#awaPwEt&n_@=2u#M@9My@)e!Vqnh+blsFP}?X+)+ zc_TgGH|(D;`?NPy}_RNF%B{Ko#5?jVE)}UIluBD~Rk^`e6rF6)3)6n9B=0ny; z=q0vnmw5_VQPcbstckT`%}uio>t-!kofDu#xsdfcew|d--&zM;Mn~(_;i4mJg#2cP zONA(_hXQnnF7?_ zt7g9>1!dJ&v(6~OEbGvW&YUI1OA2|-GMCGChjq@DtdVQB#ad`fR^j<|M#z&gsuiHa znrf?)UnlUnq$X_6^N+sShjjL5W83d$u%baPv8B%?>$fdg<7kJups2LCVmSWGC1DQq z>lpN!81(f9`)Z%$=IdTu9$>|m-fjEd*K!e_K;M(p z9hv4NJ(~J+Kb~!TKjF&f2L`(n=zD*))tdlI4_2-uwg1-Vi!L(iz~9Gg-;-MSek{hK zBJYu3#51+2-x=TUN!)vHpbNZP1-y|BP+Riu>3jBL)%P6*SH2W%OH|L>z8{P4!7(on z7!{d|JJQoV^Pz?;L6^dt$R{Ey zBkSwDtM(e-w^nsOIoO>*--oCzSw&3+s@Guk{fu+2-EV6IfR9AB8Hsu6ol@%^)pdVXSS+6eSro-ZoW72tca`hH{l zh^fK0M0KR?dosQU=T(W7s7M*Bk`lL~|IL>g-}~Nnzds9!3&ACYiV0hR=`~D!_ndsx zlWI8VXRz)2Fyp%^aWllo2n27eL8ikiM&rgHf8MCfce*M_h|QMYpgwGx|O@S z8-w1nU!{yK-;0$wT64~vX*06sOkY@C#Yt;r{=tY~ZObU-u&d01%3?Jo0}H|0md|B# zfTB-j9|Jdb?3^t3oaEH;**O_m-)j@L@^ zZ+?+?jcK`QtK)et%e5?9m+YX1PbOUlZLq*`ECT@lygU zX*Af$73h)w>2$4u@A0xcJl=%yUY4)_7bZAZ+SvBJJ+02~m&K;kTkv)FO zq~;KtbtI&nEF|$cQyCoSY|tjr17+0E8$(2CqK_^7KMrBR``mE`)lrYKVaeMNnjL*s)KczW1X80b%9D5k-L#}&5 z&ZP0#86How4*^SA2$-&A3AU8u&YeKwP8gqo7xo&L=70qhD7V%cT3n}Bk^4_6sHk+O zS#tuaC~Hp8taM+Z%7j~=Ja`JBPq%qamrqCMkjx4A79M!ReBAWu=y#P9Qbwh^0Lq5w%?I_+)peIT>R3ybb2$WyLA|%Ye(c*F1DBx1@(O5OafV zvl2yqbM`>A&)i7NoET~@pqUhN(nx08W<)KQ#2-m@0;RuXK3~O(SX)+BR9sfL^2EMU zDo+}qUpWT2$_kdC$SWzVD6cG^Up4fUEIxK*%Xg2gX)^}6>@!498jvs&D{y5++DPtI&nqn{oK(DWM)~66vXcg+%r8uvH+$&{&D1JfUi5DT$|@|ivYQ`@M>s`4Pr0U7RTq_%yM`qvr_MelYxca7 zve|{DLyK1wTZK!CtRYj1Ttl)?oiKU$FgPdMlR0y|NF-I~%*-D@EhF1=Qt}GYG1)a_ z{1Vp?Pfn%$6uO4cze#Zo$;-xpaZ7*J_>{;Wy0ma14wwI|4&z|a&+Oo-!(Bs&j9*P~ z4VjVU8d6qXTE3v%HKe$rLe`cpEw89LkqoqCX_afpgn;xpRHmbuD6K9kZi6M_sG0u0$*e6?U{Ym4RYgg`?A%l3e>`FE6e*n6==?KA6eShsk2O@a&mYC8bmctw&T?TX_YnwQh%{Q_Cw#sbt#j zi$-93EaWd-Sy@upt|u8^QLuC&cCuHDZjVnsYwfYqzFZ~=(;n9|w0USp>}DLaXauMD zgfi;JmI)Wq*e+jjYDv+8;;PCa!-kF=I^177EU8@fZ&=6UzFGbj(KU`5vT}BFL!4bA zvo2=2re{xb4V+R~RX&fRLMu7)xY>kSD&M|s2>SGFsS5)u(7pk+e5j%OYJPde5}vVrcE!T7VMF~DH9pR=Dk}=Dp+jf$@9XdsS~AP!XKhja zb7xGSP4)xnVs%RBL9Z>wnsHjbhuK_4*~`kz$Y!HVN5ZMR4=gxqj(O3WQ;9)Gf{Wf) z=E|yKj5jOhGqKB&AoIM=nqv+FU&{EmBSH4?^6AiTb0pA#vz8YwEU1`Mh4+qxDEg4g z%1ert&gV;VuzCCwM`iYw%wL!@znY2pVo2tD>HGzwm55d!p28k8!he<)vlFdDpUtPc zgnC-xOg*I&J_v8?9UB|VqQL|M^a_s4JQ{+_n%p_K=w{w_BC!)whF zp7@AY`jq6nF}h!A&(vWjUfy{6?=0(jHUG*}WouFzp5NH(xko2%U3>R5cA--J6Q7*6 z<%;OktzWyoD(+TWQp6Z29>+&q_{zK<+t2yir?qcv>c48#>pRVQx%i0tE;#qq!WF$1 zJo(#=U&mbhDSi4J@1vH5AX2!tjWu3 zKK?Vi7pnf7yDzMJyyB`pAJ2X9)j1R2O(cIYW*i^!Zpm+MzP)GFS zejqk|=9PRv_!seWg1o#?!01Ej%L+A$nRe!?4CvP{^H&YC$=1AA3|$y#$#gd7wfctB zT$}@ZYOAGo`E*t_J%;uLPG1Jv=Sg9C+5BKn4jFCq*UQS=X@{3&c~J=p+aW!|Qc-bx zLs!b{VpU~3eJZTrC4PQ;ZB-V8q|YIr2!9GHD~p%3GkD8bUKkp>HsrY~>e!HHYJ)A> z!D7OfG$YxSR6K8~>m*RJ)FtW>u0gIdR0Dm{Fp5f}NaHSsbM?;9!gOCfx+gqH}&D=BSQ44M;XEm3rq|^R*0Vj3a5B$k)!{&%^(sm8ov|~fc0(1jsZ}$#c7yB>t@3>P0B!#a zcXQ-q?WTNV!rqj{98gueDI49IN5rML%2~{J*F})bdS?YwLY?}s`|YTi-rAX7bGlhg zy~7+));_b|etJenoe5{+>e@|d;^qBoM}yk6gZZuVcrW z5ix01_mp#}>N%Zv4@VMTwCO}N*CjONFdSK@R%;sL`krBxU*2>M=wJv^r_u`CW zRV&T2rK^?7!R>jpZR8Tm4tFD`4fXSQqtp-Er$ao{|4h_NBG;L7)&Kpd_eCBNdrWjd z#3r_k*q~^g-=1gwzGGjVoS^qYfZsHAqOcs<6+hpqQm>7MOz=fC)s zw4YTtyTg}*FfvH9lI(w@k{yjvrt>gpm+7Y1&7@e{Z8wwB$ZLN?PWocsIcdlB&@a4F zFB9ZY!My!7JEChhNFQupH~LqDW;Sl4)v*RWUb|K_Whb{yBB`Cq4hRy&%EY?7?Su06 ztlkkpUDs@N&!Cyxw~1C5tFpxo=ML89u$qwr^(2_JIb*_YnjkwMZj?4(F6ocR>!nZ!8tkum!ky)JxBm2YPqt**#i$P%q2WDGT+myAs2goWQ9LB7OF zk5ndd$u*JIC~!B$6GHCa!~MYh5t4az=A0Pu-hYXk@&&aA9Ob{`TL@^TaL7tP@wZ-V z!C0aHYUc(C{sU-=%4MZ@!09(d<+@#)Z?U*8B&@1ff|2Gu;27_z2)7HInAuE9$oS0i z3cii%67oIh$cIbWXF)dQ(dG~nqO<6Ir z)iz=lD~c;#boydRPlgeVM4v0N`JC91^4AMTN_Ff>*0#%OG7>O84yy_2my5@xevc*l ziH`rU7^%F}NWh*D;sl4qh#y<*+sk!*z39m4GU98I`YHiyL`SUX`7yH2a=oo#CTeJu z?XtDz6)#|7T1Q<^&CW3XOY%z(RF@-UJ6O5KS!NOCJjjTPRS0DoTM^8J#c(p559h!I zumUolO_$b}!ZoOuzzwhriu>h|kuQt)F7NH|O!xrAuJ;L83I7WD60dtttb_+pp9Q;< zPtS(3l;|9o0U0IIy(i9t3sJ9z)$n{MeWDt;2@)3Xjc_fz9Wr~+yA#&I-Eci@goM@m zF}xVc=Ej#mnYgzR%9Pnl;UIV!oCtplW#PjnxCm~BGW>NVJM21AYXTUwM9KH(AhJS_^KxW8zFM+SY8{psIQ}A{87x)HzA2!0h@GbZ~d>h7e zWUB~x6nqb6!uR2H_)jA3g{_g#Uma!4Kib@H6-c{1$!+U7gI1vByD% zF7@CW`cB^IsK0{q;Med%_zk=RehXiQ-@!)sJ^T><0KbGk!d}v7u-{`6qyh9!fKhM~ zWT@DC3S{3F?`qfyUI1Bi=3NJ!P!76@fmg#=cs=X_Z-jC1k1!s}0XGToP1p^704a;! ze?j)L^nL+*z^@?7%DfQ_J+ma<>xAqqg58mrYsa!n+a0k* z5#YK9AuXK5hRLt>$fS*K)_D#cbLo`%fQ9K)CHO9Jj0L?+T7+Mi{*G-%ZK<4k)V};K z+w%dbJi@vheqp*S(v?eXsf-%TzSQL+nc$Z+L$pX%T&}Y39tS&i-GQYN` z&aeGEpGDesqJ*1Y%aJ(2SD5*=dntCieFfh(?UwnqA@gBn>xhSs2zJhGx!r+vl-wOg zJ}7X}o9rVhv&bdfJlqbHqbD)*bU$NGN?EvhxKhsIl8hPOuYW$Qz2$@G%OiBhTu<99 z!Dw~fY(LBl2sIb51Ww%B*_}-QF!RM|QJF3G!aav9=FA(zZcI7G+)NPeIgUpE>`BIq z@3*!2#8% z(FSwfFn4A+b0O)Qhq*PFd)YQCHGH`Al_ibuVW!Vy3~))Usp%Wy-g)SsjhSz3bFH~Y zFV8w`3iGxpyK?#SeL$@%`cmh5Z8M^lOUfk`z%TQ*f7-llSz`3dyzQT99{ex!wtchg z+AwqQmwDR-1u|_LvO15V@-?5B3!pikbp6}LnfHAH7Wl$uCTPpNZ#h)Cq|B)Q zH_sxMhnJ+00a-oP@86$R-onW?%`@N3tB<^vw?5Cj{)?+|V<+`4k5Yv}*g zdFHp?e0Zm#eRIEj|J@5udhNhhAM-JcG8S(Bd86vLoPXY(p`ZAOmh;a!H68u%^Uvk* zw7{w4hnx-k6X&1X)zUBX&)YTC|Np}L^ES-x*4+`>IsN>XS?m8l%vv9ooMz8j|DT^R zKRk8hf6ecd(LTSaUgyeqpM!BdN4%BjsIN}vs_XUV?sP|)^0bs`&2nO^!UxWXJ$oUB4I2rXD z_}>e88G_DB=k4$?#KnlosK2w*e=6z(p1;OU|1(jiaQ|`Km+%%K`k=lM(qnS0Mr5FV zoBI-;(+~`>cm9o?{wq`VIp8bLgFzT8g#vr(s` z{Jv~u3MD^Xf|!E(heMSA9k?&)KNsP`{0-1TcoA;Y zZ*gDJe-@$#>PzkPUx7Le^~-kpFGM{M^`D@m*E&QF>QAvR>EBxUf7(v}BFrRV{#GdF z*C4V{H(_7gn~ms=`bsnpS06|9%lMt z{$?17I3JOT`aSGRdi)A;BAwi|@u=^E5}y|#CZhfV`;z{xmH+4M z^q-HJV=@0nDDiy(VjSuZu`lU=2I6Sc*V^fSF6xs}|J_diGSov+KLQU!T#T5E`ujta z|0i%?!drmogZZ0a1Y$KJ1NA%Hm++j1=!yEWkn+FVPX7|_AIJTBpoF&;F#+|zurKM^ zTKRw0PXA)e^vC?|P~vMX!h?Dr_9gvKM;wLvYCHW`p*{)q>vsAtK|KWZ!>|it10oOg zx7e5TZ>{_{*y&%0nSPl60~GT$h%D6q#J;5euMxdaUty>J*{IV||HV%K#i$3NegMWG z>JXDqe}#Q{p4Q6$i+1`iz{~*5-v!0L3lZZ{e~f*JPha`}ot^%^^8cot{^giC0rQW+ zIK(B0DX4$6;+e&EM07+%HzpYOijIg+;AFC%(GeZGM`u_^MMt>fqob@I(Gih}(S5Am z(Gjk$(Vf|aF~V_p^lHmZ(Bq>cvA-JoJ;i>Hgy>FUzhn340nc?WA09h1iADD8kKyBaEK^vzSdk38L@?;0s|ugPn64@u!DQP9 zsh)kS3Tsv+T2)8Xc@pCub;Lc|of~pqSjU=GJ<>QzmgN9HHvJX7npJX6ZOy89t16Zg zg&gN#A~x<^`|u!=hLsl0v-mkr(PdRLhaW8$_sq?Kw#*zmq&JgPtNFAc7AVSTL!7`I za@x=Vjy1D5hf`0iorGOEmMo{YtRrwIT3+#ine-gZnPjH?=f%pYj2sp}P;bQ7=5Ux! zzzOK~G4SEfX(qSpzStebVcmDUqjfDZiJguz)l_$~PLxT1wv2Mv;#4%5JR#AZh>*)m z<`0}Y&(y)7`!ek{aO(U!*ad=oVrM9TDe@w*-oYYSjs zIuRYYf4aNx^w}yj&BW|XmMxRJ%;~c(9?zby-4!i)pw98^t594~$qrmZP)q_1n11Cp zn={POV|8RkI14|54k8?#AbCYD*=0cw(E1ETz3AANJfk=#v3;+tNBiNG=ROuvH&~Qs zJv-+(cslCi;Q~lKp+^f2hO{FVDXG)EslUC{+j16<_Xao&J_RWV-rX=2z5(esdf$hm z;Kz`5*!v?K4W;s?UGjF7xQD$V?W9-Ig8I@c@hnkerg@6YO!E|(QznM$-55(IR~fx* zzg~`CPq!|^hPhmzqb;|r{;JaQJQoXEp08&O%7e4G5qRiV=&939_$Ot?KDw>BpxUc& zv}i~kmSSWV4KeTF&`&w$tLiYd-Jy1acqa$E3Dx{2k#Uq&gJ-*_8$7(Gn9`WT;^9Uq zeX_uq#m5J5PVLvJoth6~YK`O(aUwqM!d?hm8NwhWUSj~zKR@KnDysdKR zs%N__)!oke!J5WS=&{%*Z|m^-YVoW=3vSaJ-K5I;f9$;pcvaQe{=G?Jj7gM4qoSf7 zF$flk82~|44k3Yn1j3|PsUajMB$&zMgh|n(5j94vvsP=Z6+2m5?Q5&H)JBVft*zFf zgZfr#Z52aX2UMKO|97vo_s-7A35d4!y1wsS$v*e9pY^PH9`;)IB)7G8ta;XHAJ?^g zow-*mYtGIEnY~xK^Zl;TKghjOano9TH(@S+y$u_%vs)hs@f9T>`s#MYES%Ga$s0Ns z;J)|OG9Kwp>nxQYuIjmr-;42M#}+;-q5|UcpbfwE{41Lz)?)7$yFcFZvqP)vQ zPj9FBR1_e z249>)iQ%QIEX-H#pEg%?;-bRVv1T)8vKZ_7<#I0l<+}6j+=9#9Zd+*0hRof$Act$+ zCT@R?baA+XeQ+S7jk8wX-Br4NV(GKXQ^|0hrR&YxX1#5;Z{}LNt_52H_xsH*R!WuPDO{%nQ!H{xUq#)-Ig18&JObylRV^jh{uyJ9YL8n3>jvMSxxn~v z!H(L_k{K=XX;~fLXPfk{GqI5D#R7z_0`y6m34YxHZO2+8gYVBNcY|8HsidOCqzDdl zJi-@}J31@sdVT|XS1EQ*Zjdo~p`o*4CiJH8{Jm{V?WM1Ubg5y-!}H1eJ31a|n7fSn ziEFM~Dwa8>1axd1(rIeij-RQ%brP5EA^XKALfK+0OrAj&*fF83Zg2;8)+=$`qb2Nt z6Gy9JCKhIPi%wJC>{ArSFYZYM|e1GYc9XqlHuX~v2 zk!L29-t+0pTl%N;O3zvXaN*z|m#-sBn8s6H2{fIrm^iB=dO0rPN}HEV4)Zg>){%5i zz0j=vmm8Xn?xfEYpb2!EK26;ATvXIOcJMdnU>!p7rE_F64ai? z$;GxVZJE1l&>mEw&!yQs?$*@0sCH9$p#~K4Pp?}Gy_(v%Riih>Qu&T`^C#nE(jGXu z#5!sFs8qSBgD<)d_byzsIZ37FqHh_;8NP4nEaQuN2)avr2M@7L_l$$jc9x~cBjp?1 z597=4;j4Hu(k8>DB|dKAoRMvVjb}%WVr-$_&2jb>zo&V9Bx7A!rWuCl=p!=>v7;I} zRF=|NPPd-Mg42y`t8tPYNo?AB3(Xl?|KXMx{_ZP&He`$j9j6L~bgV@i!&iN0@88f?5F6t~*Q)!xrU!13goZJI;$m%g`}zOIKKeCG))6B5=v#2(@;Twl z$gx|@0Z?1$b(;Yqy>548w)HH;<%^CjA&s29{`NGV9ZuZiImQ>B*C^Odh*-j(De%lwsZrzIba{5L!YjYYoB)O+>rKtKzWt9FH?u5jv#29_s_gUz zezld>=80t^+X{^nrn%m3I~ZdaCJtdjuJ7CklZ)OYT+iW_{#ce~Tbdb+ojrSPy}L(s zQGBPtm`rqh&V?H_VLEY}>B#6TopsaAXTJE**@lf~?h{(4lX$caS@CFde2F=brAb#~ zUnO$`s?J0Bas5ZmX{i@Z5 zcOjIO`v~eR!}}7oh2`lm4NEzA{)@(J1C-@0poP(7ajNqTD9am6bIrICo_dCsdI)O1 zG5b8!Jfk~@&WbhhqEG1v2Fsg34|cYZdjQJvy6FE~Y950dt2>AhpSAgLs8fxJsL#6! zYMSBY;*nyg9Orvb)|QKy5wO%^rcf;P1k_|>LT5o+-p4+*iODs~TgI#;v-E^=Bb4Q7 zj+dEzcw3%$ov_g=`FE(b{wng05n4w_Q@+FkH057>1(9e&QH_?k#t zHFnsAJ9pU{8xgm)5_e?paaWR;Hf zl8I+s6XrxJF;t1m7p4N2quzm3Eu7D_pEDu*6tbw4qE7ECsZ)dR^QljR?>gX2O7ST9 zYCJ6Eng0s)YVciW!Uo@;iF;qKghYAfe?aXSe7}e~H28jpDrl4^zlu6B_q7Jo)W$?+>|Y>FNKJ+A%1yv+qf_8qvF1zBR{nnVpbU(0pvK_1mpHW>y${ zkM&X27p$SiRHM<4iLu6Nj`<0LI@V_fxF4w2M#uYTU028ZsNU1@KFuI&ujZI89rJT5 z?>XRlP{;k;4eGcb_KBI}ecl9htj`A^bN;bIN$DfOqrniU^>-cbvmS&Oy9dk#9|ebl zuY$*dZ-C}_ACM2eWB&qK!;S4tPRR%N0mp#*gJZ!Q@C5J(a6C8yJP|w@oCp?!lfWfl z82l4B8GIKk2Guc{0`3Erfct?{!J*)EFb|vwP6W%r5^xrHF*qCiJy-$$6`TXU4bBC% zS%~gvEDM|u>Nu?h;4ttsP{(SW4xR`u1Sf%C1k1oP!E&$?d>o`=H^*dEfp74>1XO3K z8r1PvHDE3n0Z#;%g0sOo@C>jXTmmiwmx3+eIp8^92iOYk1lzzb&;yBrVXz%61($=f zz!l&Ma3#1FTm@bYt_E)b&jWu2t^uC~&j)oJ)&=0JU<}*_t_9x(F9G+XgkA=Y20Ov= z;N{@A!7lJ_@CxuJ;5u*uCHP8k0r+KbIe0aAE_e;7tGM-VROzzX6^K-T_vDcY?LxH^FV- zw?J*8`Zl;f_#N;F@Vnp`@Oxl6csF=D$V_)^G57;;33xBK2K*s-2Y4U&ZSa2ZN8nGu zUw}Uap9D96e*_-__oIdSIe0MG4ITwP41NK81Uw$x2u=ha1xvwA;Dz93@N)2R@H+69 z;H}`Vz;A%R0q+8z1|I>R0Y3zv1^1!Gd=4A}{tg@k{vNCW{{Ys5{|jCQ{t3Jmd!IFYyuAhZv{DOF!p`$ zaPSCP4C=br(I8(B#wLMBfoFolz#8yqunEisSAfI8^FZpx*d^c>z-z%#;Mc+9z~Qt! zqrnm|4_pEkfL{R%!8^br@OvP)5XbHXPXtqFp(cU{fG2_4Rzlqy%LPvXM}uMTcyKZ} z5u{FzO$JNA1z;&y15O1S!7{KDoDNOb7knL@4{ifb z2j2xbk}UMaN$tSG>_nGJSIcHbIvHxi z43+Mj1yyV0XlD$St`@_LelpZH7%JVl2&%@&QI8ucT{W&5b!Dh-HB`E4Lo@!$P`ziU zbmsx6DaI^ymZ8#B%a}1)hUynXr900MpH+5w+2{Su=e_0g-t~D&^ayMmq`FkPv%k+f$mb37dB^y?LZ7E&K5e`d`@E?> zZ?4Zf&F3xgd9^<8Jf9cydAmN)u%E8Jx!t2<6Wc;uF+G5ZzIqI3LiSecki9J0Hzh}1 zEo+3Uo4fzK$>Xv7&AoLB}JDo%3j%LpiU(<5UN5uBx5puA-c!V+2gQ^eQ zErrapZ3@rio!LC7`Sd?5RpIj%(pPgT&pK06Yq^lr5X`Eud(sU16CW*Ij&3&($zfFd zyu=i^-8`QDpCN+t64#(t;0&e}>Q%B+nVRWfg{0YQ1xUB zD4BCWg`pLc2itgTy)Vkv`=ZjFUzm6CHn~)~4w*H<%Fwa0hDvv~Ls_#sTq@nYZ-&=| z$!@oNljI#MhdNQFiXn2f2ir`+=4pqUc9d$twX1j}bGd0e+-MhQeX)An6iTw^w36G~PfavD&GD3VtX^+#7&nTW2@CFJ#6%O?`%&}mzUJ+J*)luEiwY|_Es41$&Y)c6Ul91# zo8f9M*3GN08Sz-7qYa+PPPjHw70t`fm#dZ&JOfeO&fJwfhqzvqslN88*-TD4#I@(fy)U5h7&u(BTrHWhsJXKXllPZzxL#cfDxCR>bicQ6CxBr*AGS_ zIq3p^<@(H&!^wwoy}PsfNg$wtuB)GwoOB$5UR!yvaedm+qoxInxa2(7^@DMpQV=-B z^$=rEw7-#loNDZtWQPgiNd=Q81;!rX@PzOLXOcTy7(mx7sTn=@YGHlVXH9xXa`%4c z=bo=Uc3Mf<s+IEC{^{WIij(UvoaPpB=C6M{+A8kL>2-8kdCAl%#nURn?%03QSZ`?EHfbzlc^j>se0g~K^zvzwr_Y+wE8oC9 zK&@2`lM3u;K9R9g!^P$06;q3g%X*D5{+~3~8kscK&H(gvYeu-Nq_m=9+U$TKO$~Ua zf)4qii&iaZhWGo}pw7&mrI;n*<&CS(D(!jBsl3KdN#99Lwtbl&=8bKbghky#Ej{)=;W0|K*=%b+cnBKQg2)l_v6GT$0vu% z==|}!Ncg`aa})h@DfM|0g@aiGXC`g>eeUQ(;Z0;;ChiVn$daci1(e#tMD}S?J&MdL zrx-EQGf!mS#mLQN?DM;@l~Zpok$rC<7n{tq))XtJUQ#0aG{u`&!hA!Sl^ZC$-L$Pk zrn78EUsg)J-bD6Y3BQSs%17#~pp<_S`A_|V@w0Guwh}$Q2`V`+{D%MB!x_)p-V)TTZuf z$_I(!Z#(=yBlFxsD>qO%x(EBFoWZE^i&k#m0qnaLe*2kBi!8Eo1Eog^_LU%WncJTn zC_gJH-bJSLENdUxB4PSE*jJ5Ab)}UXC_QdK`+8(XEw*w4mEZZ;HxHR_Rav=#;_pV} z{*KJW)w{OuMdZGR%w_atr3SL^F*3++kh!kT$_@y*VBbf`Wkq*w-&fEsM&^ZpTq6Hz)U$6p%f`!hZQpm$J{OtX z6;^Jb@-ZI!79(@h%3a%slg=-ZnY7Bv4OBj4-BW^LX6k?G>iTALSx4zUEUX=+jHZdN5s%s5^7`u5=C);ObQ*MvrwoIZV4Q6X4aQd+!Vnuyb;jL)xJP%&-p%?%AzHB}|E z%T0OA--FoszsoxQ@3M~nyR3sV%oYuJ_l9X6M*rVs9ZMpuY9+@VyJ&h-bwhhiWY{OT zD(U~9mvxxl&VTl%4!f|!u3Q#V_RYQ`%j=}Bu8g#{HnuH=otd3uI&#uly1KHlYH58n z?6mCRNY^(pP2E)0P-*u#Wx>{l6>SZ$cW7k8(FuKKYk*}9fps&ihUV(3h6q#s&6sX& zua2_AC@njgG4t}~`kEHLXG+U{2ss?JrvWD5^tqyAU)T83)l=#089&~H`Icy1Yow~C zaY?n@GLD1@OYy2`q}EueeK(#PEzAX_W$P0_k3$bLEt{^Uv!c4Ls)D0dFh!;yB=x1 z`KW&`e)74>8L#Bn4N+Nx9(n9r5B$%0Q${>ryJSjc#aEevx)uAf20i)ltp#5l`}VxL z%5ytUNxI=BhWv*A^kYpI7i{|VRfj$C(2RT5{t)@Sa64{>EA7yF`B79%0$+nGd^55 zul(sF4oZ1s;j9%M|NNcV5e|PvYt{`zAAdV?Puc1z6N_&wWrv-S?|DkiMaZKYOEnL)Y`0FP&JX-#Zf4#f;+Jb_q=PqKJ%-+%Qqf5?zu6pHROCP=N zs`oRle3S9i+r-aKFu0fM6Wqn|DK3a;VAK?C>wBBR?sjdtRaIc0*C+8?RqN6{b7pmW zw7y{vjWE94Llf1_O|^ZEe3HO0GOgRA#Nh&pnn-P2MDO0Es<;T)y@_ZI?(Dhes@mEj zjeBTpdDW*0QnZyp`X0K}wxR`7(b~NFriML=b{e)OCDniHzKQ>uL!sQrl9eF^tM_t= z|5hM--7Xq8CNw&9R_Nr4(ZM`7Z!ewkzVB8n)BbU*a|gw`#B|eVWC&ZoQ?DW51>z+;cRxPbms*qE#+l6FS%5@ zb0qIwJiGoRXBmgzWa^WPIjaJX=y4=j#FE0-t7Y**HzO^(@`@D5Z7kEcX;^Q5_q z>8zgwPpUsLPG8@S1;4~$#mqS_?gIp+n|ds-kra zj_mmsVl?V2tllqeWWT56rrx#ulj|~{VHhNTJPS(iIWQC4pT~YUAzD_%9PWNRb-P519_=jsXjAEHd|0(}Q|XIh zk$#<}Ppwa; zN;hr_ha_Vt6K+F|^m!$QD&NT0)Sg(G$C|9jutteoD8wdXt;-Ah)Oepd$){?3s?Mhr zpqx-vE)6 zNm9!Wq`KzJ51jkB@v-nCbe`f?i;nkO+c`8|oK}ysBFeE|RJqtaJ+V*`&NX2IlhlyF6>I{$ZA^VR!-dw{|hU^*IWsTc%(EM2R2ofp2Ybi)K=VDQ=zL@%Kk{7~7VwU76U5Iz`J zVoJB;{T1!!EF15p%!?Jv(w4osj1#k7Zyd(XU^V(-&@3H5K>*?L9Pj%KpSrhA_jyJsT`@F}Y@(k}8pZ6Y=wI!DXR7;)e=#&&ose)$03EnACYHL#+ zot0wU_!1O5nFwz))JUVd%GbRHYJ}n42z9cN`zDmC)*R=5e7SC@V~pGrP{R!c(eD#U zZOl~KW}+vh7JMY_xnz}_WICvy$NLek^qc5EgxS$?-_puX`TJJzVbeD7q87Z;Z^C6| zH_UJIcuqsIttZ_%FnTE~C-p-rEnL{9XGO}NE-L^`Zzj(M-!(rNd_T{9|E_CZ-{?#Iz zSS#2FUI4OpE7l3NfY*ZOfSMUbCUy_l25tn2x!51TcJO6zIk*jE?^5hta3$yvW9&VO zrGu+MZN54e90{HW7J_R)ZKA^MSPdBCU!Q4R2&%p506AO7Sqt6_QWeL(2VMqpR*ZvR zW1QvUTn_#nq-P!50bT(PB2LzUoQdLG33B#{^JP$RcojGTyc#?fyawb<5a&9u4ZI%I z2T3=Aw}M{<9|ms&Uk7go-v_?|s*kcB)HzOfg5$t%fwRExgF3tM2Ve{MLvS^CANXbP zN8ncQeo!YYJOJ*M!Z|x&Huw-Y6Z|=N8u%!<5PS@*0XKo2;4i@|z+ZtXsJT40_bbZw zenq7_5Ar+Q@P6h}>CR>-)j}EOzA91aW{bRPungw~enqA0^dw_*hR#beRJu+$a(PN0 z>xRzXu?1;JI{PV92@g)Mcq9`<~#Wc3KqGoe6!zx zd$+;Z-fQNZbqh9oeX`8mwc>I=(25g2qjX%JnlP!Rs>X;JOWHPEZS_o^RA&mmD&eV4 zIls28Itxm1kYif-X-1b4?zT&mJ-1z=)VL;Yf||;cs+{eV8Y+d~cXJaspOe4FMn z;@hP=;`G0ZCBb%y{7Spj_tSmZIg*Du#d#--AERiOYW#LdPImL0#G~x)s=Yo#yQEe} zp-`JZtJ7~pDuxo^F??hqUzPM^*WpKDno9aD7-5$wP+0PL@R>PF2GD6drjGtISjhX! z;2iK3FarJ+RG<{kwhW81WmuFg!=;9&GAzoLVWpTY!=h{%R%+WaEGpg1QCRy9CSO_m zv`yaf@_pV(wKXRWuQ_Emw+oWHJ2@JdyZfRX_P@g&mPFk%B+fR+24^|#vvfAFPE;=I ztjJV>(W%6Al*3vVG?x*S`Ca8Kx2t@zbff9WZVHbl;&n8+H!h$%&t-r*W!NuMW`5)e zf*2?`XY;y%Cspl~o3n3+n$MGC?w+&dBZc?)oV@{_tn;#$a&~aegqpmMzRq?J&Y9eW ze*CGbvQu*v-{yHQn6vrxtfh*LI&Eg+M9y~e$Z5}cNR-!k(qeqA*3#9Jk%)4w?a8S7 zBdf*f)BVv+eYX3foLi5!)Z@XNTW5LZSAJE_Rqt|<;W*Ae$eHs0Kfzp(o~1d&VmqiD zN6R0Z3%&=&z#Skhv-1IX9r!V*u>T8`ujldD94^Y{a8c=IRn_va%gCiWndD8&%W^6A zgcF>%)paI8eDGx6dJncSmq2XkShFQ*aK}UFKsixvmf)5MbFN9r<@;QgmT;Wuo_`Xa z^Alx6j@W+Y11{%~$+D7U?)~ycYF>Wr$`HS+Q{Iw+XZuX@h^9J@G(-;B^U-bZkxPbtA3gVe=-Rc;oUE%5dLTZUx+t){e}!;ahqw96sclTA^jg~U7u}$@B_+z0L%m$0Dfs&EmbB#3Er!WKR znhJ@IWfv_6JAP)Us4m3wec!QTXEdqjA>&$F^zfjTdjViHjhjj&WWAL2NraN3$0Q78 zQvXnrkSD$O$HN})`18jmqQ{%cNZB$_8O`8T1uE51Wq$xqj=I0@0pFMUyxX9@#FOfL z$LGBdm0@`4#E7NBP!V`JIuz8UuJ@_Cd`jIdE63r2E~V1|ERO^8T>eqNtmFTVR`;)x;&A*yZPbpkV^P_okUH-5^wh|o$j(|_&8!G@u zgQ`UHz%#+)L53~n2-=^51-#SEcNjLso&$@(KY@Jn5PKaQ3sNzgBWP7YGORL3;&OUM zOhtAQh~4H$S{=tXh4&d?33vur3f6;D!8ULjs5<0S@M~Z>sE$1Y;n5fXi<>^Eb z%hO?mmUn>9Qz$L(XrDLU=V_Q}&6+;`Ml3ab{F6xc2bBQ5jYh}HlN_py%{#X~4xjo& z*OLxjdxc&SO-cGSzTcza#H^BjJsRqFb6u#hjyp@$6v$Ut3Y}>7uWyTihk7PTvbUX} z1)<6e)b30@Uq6WuNsOxAXr&MS@mldrt)y@VYNar*%Au*|SbkgTm+^j<;i)`W-dCY) zt@KTwmxA91t|!!7%dvs#iKICFBU1ZzpsvDfUR*sPJ5^86v2fN?=&TyFG!m^`!nQ$E zN65`?9=W@#Izk2b6lA2l0`7HyyaIl+)pooBuI_!zYH*e_!xwa6gdYzd0KFXJ9t(n?dq-Om!yHCozTlKv3aQ{cX#O zC|h1canz-&o8fG5DLXu{a!>fYKlpMl`n)%M-gcj7%8QJd@-l{;6ue-3Q>lDK$12Tf zcdrXq^+E>hSXtpj4{R4IQ>+6!lzAo#PC`&9czgJ>@ zKMAuEc#!e6UrF@F%8o=sndwAv3s0))0^3q|4)4u8Ihx+mQG-z5vP=lPV%U3{P6Vsw>(q$d^M zXILGlA3vCS2{ZB2*RoUPtOX3z1>AEGZEaq)n}Jl{?t-R}z2;w2$f_DNT9$e`%eM93 zwXdcskbbxO?o}NhyYHU78Y3z1UF#^pcbYx_-S0cxV|nIR;me0o{H}NT5z4;8Tni2d znV*l11($)RgAL$fun}wk&jHtfwC848Hwxaw`wH+OP{*l14W0}B5nKcIfER$&OXm1= z`XSDRywlF>0A4da+W{)x@uR7W&s6DYZRsh7>>5jXF2J#1QI)ewPRGh-NYGHZ@5JaGHUk3-qEki+TS_Esm#SzZL{ zEG$XY$*wNXjD8GHV`eM&52#h}a?D}k6AYyVB=tO*FYu{Os6~eNHK>(_`W}=u@tRL* zA=uiSs9hchQ$fq*k&17ZkBig4Ij)bcMlOD1nCw&=H4OY+ma&!}rtkH!k7<_WVmD7d zkLNNZs^9#kT4sr8!qa|pV`n$xhw>rx`P8XZUjf;++)e~&HdI4@>Fe5|O0GiUi<;zY z;~YP#-i8wjls9Q0yPM2-UhVwPtfu1)2{fdY^4fh)@HfiSzutZKh72adU%_vH{{Zg*)!MEH2NB>qLA9^n0f&Hhfr_QOLCqn2A1nrc z0G5IGfK}kVAbk;YeF%LH=YM$DGVXmKVRM)_Fmnm_gWux)LGT6er{JsL22cxoM0!jW zFxwW)vMr@7b~x`3gC~H$0B3?5!Bya+pw6Lu47>u|1bzqH4E_&D*^E5^J^}s${0;aV z_$2r$_!Rgd_*-ya%FffEF6ev~JPu@0GBz9hJ-873BiH~w4=x7@Lu@7ZB6ulut?RYGk^9OR={)LoNU__(WQ@H*WtM%w86bNvV)MWZ zP??;`;h0?3okW`O+7DD531t}mD2(kyeQZI-y_&(wlm-+lI~pvJ;vV{zAlOtVopv*Z1AEl8=NB2$_L zDbbKDNEwRW=badO%;b`ZrJ3#f8~a^D5@e~2UiUgl+ltQgD;0o1y{7VI>#tu!4cu>g z4qX}bk~uz${VGmBzFzt=`tkLW>{J$enCHVRevGp9l3kaUi`_iZ^jwBS4cKqfe!5`4 zP5D4eFkUas=$opj-z^IAPd*P-s#C%v6(Xz1k4J&Za>KwAK(_Y8t^tRGH-X213I|)f zOxBW~&03;t))JL&dcT&pop;OIU44^q%Y!=`pk9+I7e@DK1{vJjK@H=`iyy@eQ?oGM ztT5W2W=}*WCf%`M&vHZC-O{Sl{-fhSJIKmY7Vh1F(N#Rt8(8uofIBoZ1Md`f@bmfFGu&EzjbspFcXWi59Qqi)H-MW7O0S?p!R_#&_%PCveu{W@mjcOJ=3 zWiNG&UI-R}6|EfmyPGM+0n5N_Yzmfvc3cRS0bA{Atf2}@%G;Fj7W8Jru|M*kio`)Y z8(h9_NRyu#N|+)s4h-`?9xMYHub5_=L22wP-cJUXf|I~DFbv)fP6qD+8M2z2HcPCS7eZichXrD$z1Y2{K}%GCT1sN*DgTl)|FC*95oR5fn5^LFW&Z*m?hea~4}n$@{> z8zM|188mx`>Qs%byM71!x!!z>zm;R{7TBANu&nC%nckiAb1t+5CfBfJQTiV1bJ_!V zXqPciv2LBLV|FCX-H|3puz;E*8n5E>2P^o4Y)18J= zy4sQ=8O0ZS%=ul0Yh#tJ4rUsGMEGA=Ug1?H@ER~}7gU~71Gc=%tQgF--sdWY z;EwIZE?1!N=JO~u=krJ{qFg8rszB*20Vja$LXOpeQLq(U0jk+v30?~_>^0?dHK=$| zp10*nlr2}H(zTb^QMzWBcovmz7J`)O8IC#{qU^0w$}#ptW#KrJ0wNe)yjn4B`o+`V0lD%?BX1D0~U+dw5dKn9CLgrK2qXF{mFH-7EP0 zzM&Eo07d#!Ji!7G+z{9qryt+vQso-o=aQYOyp_-|W$|N_3PAgRVJxU@qj=C+HGz?# z9U7Ycm>Kt2PdW0dGN|H48CHrp7Ss5A7tH1Td!R<%ce|PLZfKh+McGU#%8n5g*LI93 z%8n705_XIz%8n70c6N*?%5DU-_GOXw);^N~yU{kofiPW^zBk-udVQ1>Q~L+2Xwwmw z(LgyP|Hif%{rK!5JC!|D-|vje9=1!~ zjgB5EC17e3lU9^X zT2bkykXYWcyjz}0o)>vF$&;((If1wMWwzi{5xs2I+_pK*$NI-*^3#&=#XPM6`ERF)3{sXUt3$9QtgUU^MSq?(B%o61-6K5%-g?<(sC zO7AP;^amptoElO+9N+(xol5VEc=}WawGHiUb*4F#lifT+d3KZF!M(xO0yS#h#y72V zd!w-49_Xo9E9K8#_ZybUkIEx7?@kGi)Zg7a!s3Og2L1^udEW$!!MDIO!M8z$Z96E> ztKGMGNR-V(qSBq$UEK`rIW}_Xj(UJrF3qLfS%B9NG5KnU^3{pFx%p~S={8;%agmqI z=3K2oZSgj#yCb%fung{|uu8S42c0k{g=^VxM|7UD-4=J@(QN!II?;^P%b%^8SZfyTo>PmI@Zb%L6gcv1l?|E?76BE9)pPM#T^8*2U>}As8%J_hBl2-nQQ0jIlu&vupn{&36J`F*a78KV9`vm|1Py z0oJ5a*lFZw-YD`~%V$m9-{5AqoNRM!0KP?pAU&#dTW4uz&%LreT(k9RxCDc?PmJ=+ zU1lzSoK$Q>gVSh;Mea5!7+s2HB_|`F1R_wPR z2*uc)xmDG()tOjUcOG8?*oc*ndWHl7mf~6Uj7bD$Xiq@aoH)RpvnKlbHSwBOD)XdF zR4W%Ny`rZWHZ%N8+6DsHcl%4Gne$aF1t<0Ku(9L(shdi-^iP;ARDd=*%Hk4ci$3(Y zz$_`SVUbkf1BT3=`>?(%TxaS-<=8-dsIsSaDLCcT&HIx)Ip$**+r?asmwsd9w8CcV zNY*T!-x<00psX#*Xjb)zv9?&UR%4VEb&;m( z2$lp__k#=hs{Ve>gYqh4)xA1>({y%&vWl2mJdKj9>Sej%%LeD-Zp84K}Ex1;IrUR@GsyI;Kv}V+Gb^+;}y&Y*~7qt@Y~Vg zQQ)!Q2#~w~Vw#F&^*c5h%mZhD+&~i3u)hF23oHcd!6NWFa4h&ukdL5a>=JNJ1X<;G zCW4#5lfd7DCxb76lR;Lywc91ef{`-?9150#qd@KpjEx1SfhAxW$kd{ypJI!_Q$Z!= zOt29w2hRgpt&iORR)DvIb3jI^&RmdDs>4lyG3DF&pmL_-%(hgbY)d67-BG(|d5S;F z8;*}H?^u^g*Y^`HZ@SOZB(#+~!{^w z`_aNR7&4Wi+ac^-whUB|{ab(mcUdj8?W8|~Hg?zGh;^mTP^S5y&0B1@==C0b;p%(HT27-LOQk@?*KM!BldSZl;_J5O;RW^MmjW(C zKYnUbcB*cBibqqBR#CULM!5Id?qiaj-8`A@1Gp;T;Cn}(?q9bns`?~Qe_ZBS0m=`m zKlbA}k4NfE@~ix{2+Re~0#5-KgJob9sENoW;3BXZtOaYpbHE6=7OVwt2A6{C!8-8! zU_GcXF9Q`WwLG?5h_dBEl$}DfJmpu*laDR$HJ`WZnVDsS)a~f)^_X1Jjp0Bp8NsXE z$T6+o!1@+G4ZSDx4+(?e9c`PRnrHuG+IpQ;Yg zipCM9tHiF#y&s@La(dLA>)j!tJ&^xBEeMDl!)G z^eK#y=30{maE7hd792_?!VlqfqtW_fC$E$>q&6k`ZFoeOu7AnF(?eo}a(;uGX#ctQR6 z1W~OKUpvZ9B}ka3PlD9cw??X?|Bf`V`zEp9Q*u*@vKP-7mw6?TEq`#7ib<5KK_$vH zU>Lj>RATh-*u)TJ6GN0e4AAoa;L5p^N_sUd??{a~$MM!X=JZ>_xbLRT$ILtWF|(4{ zgH1B^R&yzKZgZz5ZuC94_Czxbe0a+cPt<+{Bu@k?!lQYO@Z^}Yv@E4)v6QNNOI-~$ za5br+hAbW^Lwq?-zawraa4!1sALGbQCB#~uXR`P)N+0H#Gwk*4uAJ=V8N#D9=~XI{ zX}sFG5xsd+Db+~Y4*xLpSK5YBrFAinr{uOWMsQW_J0!gP^IdQ>csHnO_WR)J;19rB z@E&kEcrSPnNRwci$NvH4Nx5Y+jwqXPM5UX#U(4IVyXAe-QrzyIkD)QS_vPEnWhsFS zlE%t%-;e2;1EhB~)9YQSePutT*<(^x)1T|Ns40p1T_qTPj3>t|LpB&nznY85aTF1j zx)Q?b-VQZzmii95Pw)(srEZJUkFR4|(2t)Cmz_$&>v{UrG1U#tZF{^K!^=lDkEz;M zlGX8eO71BerSqsLN&S>;AU|vXbHRte0YDAr zK;j;O{G-f~%H#D2ZXr?S$6GgZMfq|KAQ84-%_3@m08N;)_Z*U1rPE zP{s1zaH$NlYryhMhIkPT(=a7mMKeogIyE$NlfxYT&f5u+vsH`tu)6pzhsk@E8ZtZh z#wPs%xv^DKJBG8f{kXV~Wywoveg^Uu+&ayA8f$E<9TX3-Z(Zx;8&*urT&y!m?(mJ>L zHL1>_P*yHa6c0y!@vG&w9J6sv-)*vt$?rZqIr=u#r8F~d%_b_wUFga`0~O;7U(IN%QiH8h-q$*6>!seLSZG$ylsDeJuXL4EQgO3-UpGwqqcACz6`bo_{+}q~ z3g;Fu7knA~0{9oO2z&)pd+|3=73{0v7s0LI9bgZ*8T>o=I`|JT7kB;%jsf2QHT(7^ zs9CqSKuzwy4JvN8gNi&YjM^$jl&xY!r8`?)-3;gNE@fx7tlY;wPkF}jl#i_0Lwug9 z3d@tPtlW5?cVfsr*8B;q+s&+1ds2_Sd^8J=iTBtK^f6?jMr%F}9)>?s%{O*7k82<~ zaBf#dkT=OUM#VQ;4RC|{@r_mo`uTCgRN1Lqu!QHgWH779?bQvDs#Yzys~;>|yLmF* z2XK|wZYAR>zuoFPYos<=>TRqyEtP7E3d6EL@`G~c-aI9i<$Or)kiR|xl{^0h9tZ9O zCrKv7iA@Ivf%1D2DBr2BvAIc<%}t`xb{y?l1g*4@1o_^U@K>`56@PF~=SdFdo4mGCQnyl~4e zp0?q5X=nQNFaj#*=e^)3C#4WzQBo;}`q!MpGVHteTj?I-Z)HNp6*~`UCB(^VjaKK* zFIP22xidENtJsvXHb0S_H`Bfce-C$Gj44B_HMPpOdAhY(`4~U*+t=o=t-eYf?l?8Y zeK)2IZMbU9W$p=vbb}5;%Ha}(F?T_WW)Q_{RALj#~qj;85OJbFY z`9LX9W=l>|>Py{vZuw}>ZOiHVtGxhHGL_`$%E9WERfgjbtCpkf^i~;8b!&A|q02Bb zqP3OPQ`Uzi{W$71StWa%6~l%p@BdRd)?5h7nM~ z*q{}|^(eNg#7Ye|v9YT2E1mW|_}lHeKG;!gNd4O7*qk5^U*P(xuMgE%*77QE;hm#1KIrN;Wx3`$v?@QrX6bCtmvQaQhzo;~#NS zt=C1y#i4pD$w`@*P;C70pdS}mAKrFNZVX011$~$UKRKxdQ=ShGFh0y)^A4>-ygI;j z{Q%>`U<#_nNKVrFqhe}7csshcEIK9)MzgyQX+4!+;Md%u)QbB=+P@qEZfF0K-%k_$Q;ICtK%45u;D*tgaS z#{3}&CMR9Vuj<6rL;v?&>*w1mhE`cSyx*XoRmmhL9Y@T2>3)du^RG9ZrOsYJ;b-%a zs91+M@{d<L%-IsghkeRB(TeN0NC34Wzkey`VrM}5hS)x(URgE6MIH#zA!ekC$;!#9t%uFtr3>t@fi z#h~komgJ;x!1cq8>lcq6_ds7$Hpbcv^YDJIA8G8-$5;x*_iufY#*Y_g>P>IQ#eC59 zkTJCxL9ebm(wM();{HEHE1+=QesBiwNaH$XCoV??W8)~~l9RUctDJD@*hyp!`Da1W zxn7~=9P=#hC2P8{es;wq^zH9&K%w^#zq)>Zs3;+(0S#G zv>n#)Ip}8vZko%yRM0=_NGB($CHMSutntquI&XNy2>1E9+I9U{{FB_L zjv8g`(Jn0Ig!Y^7BD-R#bIFSPy)5tA6murbreQnT;$t`A=gt*7|bG^XWQ|TI+cmB_RZ(X0>v*mf0=|a$TMN4v$#sr@01%|4+ ztxH8Tphz8U4=}2rpX){Nlar>o@{gZ8{xR$Nx}j;`cbP5(T~|jaIVmULdXaJcrHrET zzNYl1{bf=`{ajZQnVj?$eie%Q4r#s4y8h%D6F0&LsG#fW*e56Hdj&7-V-0o7X@_|X z*JP!)@XGsGT<=>hRDC5UeTUyvp6cJeOs>IF=cRxBy%`9opzGt|Cnt>$xPF3hJ)^Yl z)_@U6V&1ONL7#x@ee?VTV^6z&c}iPm{>-|5*vSVlW(caF>nEaNUH9_*1mpUvi?;ty z&gFb>0Tl9R^ZAumlQnK=C6{%79X*OcDa`D)Z86Ne&?>gyjnJ2ziClX)0dirkGV zzz$NVvaxDueKq}&x$~z~PSLUBrEM+l>%6-5Xif8qCV#@qN_lKoYI;+Bw79A*Vx%;A zWu-heul0>Bm6f%oM)Y3X@0=%1s+Iq$;m_pBVb7V$ zT03{(Ib?25abGI6cGB#RQsl$JO2_MBy05O6#!f3Kn>=M|d2zU4(wM?YV~Qr_23%>Z zYG`OytW~x}s@pjuVO3>ybMx8t5homEnN!@YMtBTbejLw>R#l&UT2*TspDwwcYwH^& zCzKY?I(6368MBCxlJeS`NqAt&)EZu9yFO7H>|LJWg`vXUrQrqMcBbiS22PXr^lZ`e z-ptTWm8U&U+GE?=%p2B~vi;L@$V)Si8>x$-2nN=~X zcyiek;?^YUYUPZ^wxzZLcb6<&NBkv>^y3T16@~(;pkRE#xUpjj$BqdwAq(>J$Bi2o z3XLf&7;g^B(s$O zncNY2v+GBR{Ku9i=c~xfblV}#<{1CQ*{3<1caiyqtD+V3IrH%2j11BG`X z_I-fN+%v7*K=!Re?qX!JzhvdqS5D-=ZzETZ%sXdUIdvKnh4=e-sEgswge6u^{l-N0 z)gbp%WR8sN+P-19`y*t2?~ZW>@}KhQ0ZaLEpw8MiPkMl)fhrz**;88SgideSDMati6!gxr?pT zK>p*HJm*qZW>@xoo$y|N3FExWc5UDJl*^^a{PoLLj^dm!{`j)QIp-?k?^-LTd}_iQ z=wC}m(L4J(QN2p-FHQgPja5zcwM_TdM7RvThA;P4oj5GIswHyr2(xfMBBUGiP99NS zU)|c=)?6FSJ8cT<_a%`f?MtW3oj)S9Jkr`$-`sTai1B&(d1Ld(<%1(aYy+r{w6!(2 zPHwHP<3O(JXnQNRtQ;&LFj_+QLxL+PsvD+c+`^|1K)7#~01fx?g1GQ9 zo~bn9UgS>k<~1)_=9KMoP_}cF#zjh{5s%qlKe|FA=N=oH-4d;DtY2NV~|?%7|0l zSmTVIT@xBza{BaHMTKBxNonzdX(E)Wl?y7S&7E9QdUF0s(lI|YdRk*>bZJ?eeyT&G z84DDIMwgdh!PJ(2YkVs5^IEFwu( z(xs!9H@7aSZ^I0^e9E?oPU4#nhF%k~(|Y z1Ak^&-5|6p3Qe61z9q>sEPlO{C$p`pAk% z>#mIT4fd`i;{!9LxizwALA1Vs>R{lAN@%LQDoWA**8 z_0@Y6l4-3~Ep?bFSvg@(T=I9`+!1C-1Uo^iA>UP1KG36E3c? zU9s}?`WmKg+C~@VjmspX&CX4 zlbOw-HLj{|ZmO+c+TLn90hQ6JC0qx5u#=YkWhAgCT3=nsgkOZ2N_M2Cqd|Ytsc3G) zduiFHBgCw?y;`%fjcp-`4WhL#S{ER0-D4>=Ejxrw#ky}#Rw<-5Oma2i3$$0))iS8+ zm9FJL)3ofp5nrtpkVsWy3rnnN*+T;y`n%SnE2`_NS}UW*m)yC|>aLk0Z zWl1RD8n)%Qws|RTEmIJB;|DRtkQ>*vCib+}rL#o{PNE1C?_%8cQwux1^wP0!3Rf}u zetNZ-Xl=n(MN+MCP;RtOZ;Bc%6Jh2J{uG}J@ zgk*Vjo%s@}g5f6rPS&6=Pul;A^1H6MrDsc1$1#nE;2+JHWevK&=hAzdpFZw4Gul>U zTz&7UFF5Ab`K&<)+;C8G&7)`EdGH%U2TdIMo9#>y8TqFlYr42#)32{O?1_hF+_UzF z%)>ro_$NL(cm0ifjlJjn(0h>sI_qng8o=SKL6<(gWXOi|o`19R#p{Q!IpKwkc1kvD z(2p)T|GDawhb?{dx~tyLxbjWLX$?kxM{4`;5527U#nG2!@0@tTT@00PH~cd`TsN=$ z=_3wGd1T?N6&?Tl9Y+@!{!7nX+Vx25%}4!n@srP0&Uhtl}@K1T*lInvu-uU7fPi~n0-J%(zNo*s(qBZM=p^v{Exu)Ga#=_?xd9rV{p@9kC1Zhpc$MDq$%g7ovvfRb8&xgC481;$>>{px!W zMToIqUR}_T9S|%Ta1`2Gh{cYX27;*j;K!R>&R}SjWJbI^B$UE zB1418K7QM+Ll`2u_s~!SL;7gj9vZ4{Wum2aPffK|#ih?~Lxek3ZEcapJ@npku5UKJ z%blMe%8e{(37rhow}kXQCNwH^mSMmb!@jiHm+|N#Jk#jpRWF%WwLDTYH?ovYw)ho> zFCp~oqMr;n|1F0Unw7>61rx^MCH($5xLv4Om(R=XF$}#wFSiRm$8hJ5|NO#T$Sm6D z6z4^SpJRG|o^Fr(9OL}+EMsFn$9z8C%WIqI8?mBINB0SrN_Sp@y36qX;!^3(2Tg0x}HmV3$gFx}fxNOosDimr8d+Zr>>z#drN3qReeLlst{K6Q7J4+rJ02(El=&GafZ=PVWVA$KPky%@h6oAdVJ9_{wzNv zir%P$e#~LdR*I#Q20)87CVF7)YtB(O7od+H~M;{tc{k|wqSc)jYhI`!W&5sd%Q#xiH6AXNCU$>dvc}D zT6fp7IL9|5o3VshH?zavO8>w~*l+RV^LR@B9Ku78oLrarTgQIL%lOC~`t}?szsXwr zp{^+Vp{^*#ZsZ}$(=xi{p<&da{HD6JJ~YsqN$Xc2O7rC_aj*#>P92uPHoX1UFnfqM83B5y|^9aMxl=Iz#!7H&z(sDV6 z`o!UM+U|pN**4zpDjUg}5@}tMJ&ugUNB5Eh-R@sVOdA2&&s<7>-?^0j+c zd767G)V9tt&cx+7#-TE1v~oJj@*#er815>|f97RgIxCKoUfFTpO?6|sN{4iG?=2g3 z)P*Nq;Y!am(lb5j`FagkbaW>bJ*{geo%i0oh4o6LpmN#eLw+yMt59yUiej_74w{cw4>`Xy$ozcXYWnY z=I|pU{_vlZ6tEfggkKIb*G+&OE5nX^Aasf2-UOKDv>%HWhhN_8rp>;}ktQ{Ik4!SD z*R#a;&2P7I4Ews28OE>c#~cLjEI#F?YvAiE%fE( zS(laNk|DffNbK26DsF+waSX3ob5C{J`90Q9*YK;tk?Kq&)>Pt{AtV5nD)6Z@ed=pI z#i9GA@l17gLTQ6Sj!t`Y&)qy1%G#2G&O1CMJf6~?GkGuMGU6-XRdM(=Q12%vMg3G~!zze{G!E3-Fpe6%3!6J4yco^6X4h5eCal_n8 zd?c7n42D21Qge<1BjC~Cx!`c{PVg8|`@A?oIo1t+0n~o{QQ$woHV(O@e1pEG>S zeZ%?S2;K`oPD0itc(GX^dl6$_1jmBa;0d70&3I5n;us#=@Qbnyzo>NQG<>gGB*Xcl zOQq{JXk#Kn_dXjcT{k(qydV0!hkV{6KJPa^?`fa+C!hDS&)ebiKJs~{Q$bd-or)}V zAW!1WKTnZ{dfTSbXJMH>L$ru0vSZ~?CrXpe3Gb>gyUK=ktQwLOrO|ZhLG1^5bjla# zcIdFHtxdRTxg14BjoYzuh!Z{h|1tL-06lO2|M8iJI233I90m*kVm)YDBycz|5jX;v26O`c z3LFXi1Ly)g1at-d33LNq1-b*#4)8pH{{Tk=!OwZ%yJ>2Oj~9^EP)`KH4G-s4rIiA` zf#-le!0SL?Amxo8kP?&9o#SPs;&>UUlz6n4m!l!>O!d9%e`)AJeL#+l;8GAa-k?4p z6g0Nr*hMA02kEqx78E@2gVWXuOhq(GSI)F2ICc}ZB6L7i9W_fK(-lYRF=jKB-FxBC z`gIj5Q08#z<7bmj=S=#Y1L?;mGb(j+!I`AvTQ)s%J(Jxq{8;NtRO+9z8`Cr0Xp|rt zE4>ji9`aPA7Szjf#9ORho+B+@E#5u+ay1k!D?3?Ei`qoqTxN<^>Kk>H@|HZ7#Y>N5 zT}7MM#GFpD5wELMs3iyGn+%)`j0MsX;y7RiFdn!7 zm$8KM1#{a($W^z~+cYI_uAK)q=#r;W_>ok&VE zvBru%hEkuqGKo`dgFXna7OzTVS}#)3>JZKzhH(Ow6;#^H1x4uP|8b+H^@&aUDULEq4aY*Q~$@}4U$g?%fCoILA8WL3$(n4t!kqC9;sJJ zwFK)P@SWmfg~l%BE|?1+ia*tu7I-%Zh#OE7=$keHI|H`>hXDTo5+mFR^Z@P#@_`si zvQyRf0<)pt2P9cM_*B|H;6dOC;2~f+un71Nco_H|cmzmI;!z-m*1TgtQy_+;tZR83 zNO|Upm#dki;%X+TlvqcCqZz;*M`MikER0#rl)O;qi;UJ>R3C*^VlLb>HA-)qP_30Y zXMs@NI@4jwH(72hY*H+=@X{k$=t4mgH#cwAwEuJg=B5%YCizJj#K)VUfgkn=TTG95 ztTm(}N8T3WRS~=Z!Sfl%rP&IyMnxw$Dk?y*GLlKlC;*~I_$GPteN&Q~Ol?Gl`UeUv z)5wR)lF%}itA$2>sT5Kx?1NYM(D#r-MZ6vY;#p)med7fx1i*6OVBkd{G2u%HOIT|Z8*I>*F&F6PPs6ZNjtX2jh z0dUOpW0uG2x^w4Ovx#+eR?FzSO#d~=6fZ|*czBiHtXakr9bs`alxqI5tcEVsCdDx zNaSxZ-qv_2y&Ip;3K^9TveF4}EZgCLA+tpJps6%sYGj8_kRuz6b4ivNiXVk3US^&k z&neC?fCGWAfK*og0geQ|1yVl01BL?s1x5lt0_i(H0V#r$@N#8_R9u-Ml@duXnW-|n zo|dDrGD9s7D>KEAOdW8AWr4hll?$AU&W%m!W=Pp-n0La}lY)MLyBe_=>VGqd6YN0< zrcVxVW;@qukmbc=Q2S(h5}U?|*CkKlm^@6Cat6~G+yGaB^NL*v%NgqmjOnuUx;jV* z;SCAG*iq*W-I&-61eHvOZX|F@lI@{B(;cOQXf>Xg;%(O0tKJsXylIr zW`A)eyw)jMsSfNUb*=OgOqM;#bj3_x6XWb}8)M20=dd?%O#(snnU+XZ39r!cm9#4! zk^i=FdLdOVMY=Wj1ah8wO^*j6is=XDKq)=7HIgX(AlZ?g0y|VXpk`O|k{YSY%VyL} z=AL~VmpNKlj50@7>Dynd{JAmayJ)Cdmxk!DeMt$Y%eLxXtt#z{8Ui~ko>p3Ow4^?d0{P%3JN+(wtsn>C z?KdqS`%B>`?Q8s`{nkHd|Nkmekz^`A7)7LSda?#DZlWN!+_Zk&A*$L>rFD98PsWi@ zEVLm1MwO=vM=*hGBD^`Fktv+E(nF3@mZK2bK_$2-7H&<_>lBXNkxf5_UxiFuEDeTJ z$kh^(u5*blJylU4Y<_GiBFZr$cmeM*=G6r@<>JXEt8gTrmSLe*9IKI2ru$i$?@4?% z5nPjAs>dibm>2H=d#|4t5*U`q2(1cg45aG#vL|A9M1Uv4lU|HLn;fgtpzjxcHOfEO zwh1m?K`C!y@D+{;{%WT_6B1LdO0XPM&#)2dwKAPc@p-K3PTX!c8SUkh93L2CD=pYb=~g6S{LsL+4UKM#Bpo%&m68-XN+ct^W%RKQI;Z9 z?DQ_P)+_LT(wnYfcrpQq{su~a2Bf=8-O5Nnf>Tn0#08nJP4%XHpA3Q+<2 zVybRvOw|pdRNe67soFFMq$=b);;CxD;vz`ZJWeA_G**Cxy_T%ed0$G^ylsOI)5<3|C12Z|>%-?}DDF?WGN z`Uz96q2SSvjbINS&x=P!saV*(nI_(wZPH!EUBcwMu-Dr`;84)^mi*BPlB z$BS=Ey=?UiX|8+mRoKLj{|8t8lFDr!4G75NWUMiI*Hrq>?^b<5H6_Y1SMSgb0E5~NP zI28@+xLLvv7>sbL3XA}wLC0P7A{8yhdj2IK*hN@1XUuVjglAAUW-(U3PRI- zs5lqS7`SsPZ>Tu8iWp#Xv_Pmh+6@s+1?##w+6bt)*e8foWl+)BU5-}?6(=j{1prs!pB=`{+_y~}9Qlxd~EA ze0~%{(9iDCB0t;1x1~Te8sW1?D0^YDJqofIw{M8@}O` zT84ZS9z67!b77V3cIGzzk`#)T;$7fu@cfZ6oJ^g~D(>Rahq>}}X{bIxC+KnOL0S^f95@d+5V##U2v`6d3_JoH0z3`0237!v0`CBAfvTN5b`meD=->um>Y0Da1?Mk z&;v-TO+A6l(d=RkYMLd`3rK6#aEgB#u0-Tb0$u>(T(C4da27vc4A38#3dFf*Xlf2b z0Cxg!0Cxjr!OU=)b(#h+AJ_)C7uXe805k^f1DXJF-DBEl;6Y#l@DMN!SOi=KJOV5R z9tEBP76Z$H$AH&?CxADBCxH)vr-3hlr9i63XMifebHKL1^FUKzInWb$5f}u#1dIY+ z22KT505gDBfU|(tfOMEw6_B0x1%i*KbphT1b_3o8_6FVu zS^^&cU4RdPKEOvnKCl)z6<7z{1pEtF0elRs1!BWO+6!PkumSiC_!0ODC=b^153mLB zHBcA$5!eOz31|ewI?}XWKzX1&Pyy%#Q~^!~ssd*Nu>~WIm|06;HLx}CFJK#B15gJ@ zEr%{p5!epc0@wlA7T67F0PGIz0qg-Z0~!L&fjxo4fjBuo%@v4~mD8pH`vS9p{eX*s zX28`zoR^oj5jYsQ2RHUdl4-{M4K$4Z5GkCiD>skv_~RZGjLMQKShBGlbIr#fr$3)RU;V8;ErD= zl4HM)S|l~5T^U+TGy{P>q$VnzAyA@aZ&<=czhAP2UgOu6{?J12V!WuE>_G)VCxzSp zhVskqA}B&6aB38}aX zH zaCRWt(PDE>%ugyvy4j8jnGPCkR6(C6HmdN3))cQ6?-72rnTisZdLy=Yg-<;c8!P2Mv@aqv#fWM zMJdH4&pqNy@oN`nh+oIJ&iI`W*8#u5ac%HBIj+U@sc+C@;R#pfGfu-wVR|xFAa&+S zB*ZRm3bb8Rw4Kg?w$llvEu5wFWNhCOb71>@2UblSSbg6Cwv35|VEzpU5EM~DKu*-S z$IXED&51=?u&u98F(rlil47jNORxFxrK++C*}_#2;uf4r5sd+-8YoiH6ahz@DN=o@ zN@0m&lPV)wrP3wLC96~^Vj+30E%`~sI2ri);#@ib|0ma$&{#@1+N7aWJh#PZ4Z@&@ zPG+KURXL{>>7@`pJwo%|5_%6YJ+XSpDoWoWSw$zJ(Wh_o0rm&_0fz!1nM@-t9tNa^ z0Fl70Kn!Tos47JRRpH-cAgvOM1^NKvfMLJ{Af;C#kg8}ZUapFgimRfeQesP`IT{V# zI9iQBrOZ~RakOV5T7$?QbwfC}G$7~fX^3bv=;LVJM6{kF8tXvZhgYmklHBP_lF~SJ zAu~{+$#>zR`H862=sQq*;`}5GE2Kznsvw*pQ~BvlvZ~BKYWA>6mTj;l2`IFUUea5E;vFWA#_l2{N4A@} zSW_=O zFqd3E`Y+r_F6ARX+k;MxX9_qW_XtIObSwp9x0F7`cn$CpgK2!k#eKA3iixhs3OlcW zt+GNdMNG0sNBlLe3k{$H0y&XhM|`tzM=CMoNI@XNJ*Z_8`d1SA4oFaXg!Y}p^sFyV z99ls@B#ZRz#G&c?sTR;P9UPSOS-?KPY#=TBn+LQ9E&z@LE(DS|dl4`PxEQz;xCFQr zxD-g@w>;o2;Bufm!d?M11+D~60ImYklm|psX>)*Ufs28^0apVz07*o<5qJ~$I}ppp zc$N5d9U0d1&=HcUjLeg0T6wYk!=VnwlnY#s_ zo5=~xT&KXsX)8XoWcRd{mq-;SQYEn%&^|C9L0nE-(Xfwm;Xo?Ziz|jgj5~Qi8;n;A z>*BcTD909PQhv(u)`@6GM5?w(U5+PF+^OQ&;uSufU|I|fnb9N3S6WM$OOC8*0A?gH zFd{#x9?=#(k4C=2kHED?p>aPosutDVITSg;L;h3Ug(QWYF+=2=DAN??EnrXJZQump zJs=HB?gJMA9{_g(9|B8(wZKcjIw1A7{sKM(J_f!6J^@mX=P8iB=OvKRdM;kB?vRSB zJET%#smak!2psr|H#ZC`dwTvpRpo7P@R~4<4-`GdvDzwpAGAQCJGI9lS6; z7cTw8S|fGNfraxE^%=z3IISU8RnRz}yvP=8I7ZlByeV2tqC-p9Wn8^7m(YhjRysYC z5Ux=~$s9G*nr~?1<(i#C2GpSvb^(|efP_N)Ojj@RUDUagWjb1B#y+iw;A3Fdm2c?A z>wrgo>kK2ICvdBps#{tO8zoB$)~3LzOP;7Y$NEDbb=GwX&^Xb80Y9BdW~zs$q0kUm^g9q zUU6eE>~>mWOvG;Y3h0xYaf~S**cr4WAayR1ftJ8&K;rfpKw|DQfyCNp1CxN+K$6tV z1uh282d)J!02Trl0#5@M0n34lfp*Bl%Bb5@JguzUe>Ff)p5->Cx6EcRzBZg)L%c64@sG(+S`oJ(yWd|9$5%Vx~ z>7|gKjFnE!>Q+;H>?#Clgin@n3~N?+zr}fk zs~qBCk2}jvxDX+cozF(&DdB1cc9c6g5Q>Aj-72*Hfd)&_j0e%EhI(kihvG{NNDnVn zTY4H~IR^9w*cJMJfrEe_fmT5517M>X93q(J1HCjb2q;Gk0;mei2C4%$12usAfttWm zz~;a!KwJ!*Rt?kzJ_TapoE_HC0Z0vv9*{-^oq&UZ20$lZ7vLmdS70{K5V#a*1Y85` z1;nmD-Vk6V&=N?8bl3pvfkT1R^RWf?208;NzeWNnGpNzy7#pcL#zrb7#?Ckz@ez*3 zMj&Tl{Pp=0S;isWSlDSK$l<&f;X!QF16u`$tggr!3MM*OKZczsBNdO`@7$b4J96Nkpw$2k!DoLiXJKrIVTI`E7d_(>Ap7QG6xof536U;h>tjmF%qD7 z9s^RnIu7gygye`gMJQ39iDRFQQ$=&eb*)64Ip+Eu=;cb zNFT5cFISF9#g$`HDY3KiIocb6z3(;97;(TR6;&Zmrh|}#EdiBTA-!>Q5#EeBU}KJE zb!U*Autv>;`iykWuWvL4?5rTM#(-K92i9uitRSrF$BZyve`H@$BnXcS8VUcImwbJ< zzNB`*i9uR!f~iXf2i6>+l~xGK9>vG;LJpV$;l(8}n`q-{ZZg}Zrx7(d7NvmrR;GHrYw(^yMjhn5Rd+Xg?=-?GD?zT|@JC;1>XQlte;z$d*< zW{&eca!k!6#x2o7=>L#@&f1o+gb2={Gya0IM_14XFcWsNADNJqtkL(_LUDl$wwPQY zGmDIZ(5MF)N%4Zv-mCAkyQjX7l~|S@8CiMApP*(^JoSCfFv(@P?W_=#nUPB->ig{~ z22-mwwT1eAXEnscseodAndjj zk}^3G3+7vS?+_=A8!v+1wwUzsj%ai9aAmGQwIkkL9`r?iHDiW9<)E0 z>J=COlnq&CA-_;P3U$s?QWBw ztVsoaVXPnIizx=0049Hn;k^~!rp^ENM*70l$JF{a9*`zH1T79!KW;&?_~K#e9ZtiG zN7zH}2sPc(gdTyi<~?M;9tgq(8{%%4g8o(pKeS#$S+h)F)!(1>-^G>*S#bd{o0JaJ zjqi-NuYkT4-C0VTZ9t+I0I7?%4@i>~`++XNLf{zSL0|x|7&sY-^`&VIz|%mI09^u- zRP8d57F}T7eHw}65q4S(@H&t_x*E6$Wv2$X5%>s*b&|YV;8oyXzz4v`zz}?BJun0K z42TI5-g6)(MtBWCOkD6@0WlH5`v-U$_!`&%`~;+gl9t1oUzAW8;A)^Oa63>A*bV6- z55&-brvTgwR0QJNcuGJj3)H3Jx=Ezsx=EzsCN(%3O=@s7OMyz6&aM;CLPRvah{lEm z9?-I3!8V8>4vdDU;_{9uLcswsahc(KPOO^kkR*_UuyZ@u=07lc!NHHPIbb+HL61M=fdY0h+5tpBN+!10XP>~IK&B-g~bV@Y%YVX`m}Sl z27apVQ&8WxgnYtr+=GNPhfnJJMyG?)0~A=nw6FR;X^T>l^wbEBmV^j}j;DlygOtU^ zxMp>W5m)GOay0c3oNLg!3pVH$L-Zp?84Z`xkhs9TMY;M+>en%M-?UXj=|;YP)7HTs zvPBH?dw#{oeAkBScWvO%t#8LT9s@l{pysO2s6dIxwwr5c_v8R&x?w3DsA)IXh?M~9 zb5%f4l}f#PcG3bQU=^8mrHouOMf$Nd{P}7TQPH={%XZ#?PPcXDXoQF@bGs5Cyb*}A z)Mws@@P_$Zit>`!4AQN~7!fOETg73Z`L(s2ba^$^q^~s`MiS;5B;+(fa4WeKkNhO& zXabCA95eExB7-q4?Tssw{X-)TB4y>bS`KO_$eh{<|M(bz4LP1+GcEeAV}h6{=;(#8?8$nIHUr-;>nLc>tbj&Pd?QRt9DLT52irPG5x78bmPt~P+k#6mHF324}rHPa<*nd0EiMp+U&9Y=U{4tYv) zCS0IC7!0hD}Y!2`xa4xVdzH=V12M~=>8kMUBKq?Z{?cy33 zQgICosg!u7hy_PGD^Ll>;SDfm4TlPn`2e-n;thwWyKl%)HfMSVjE+FCk+LYo8c2KsuWl|PKoymkDpoW-!LD7_9)SWz$Wg#%F|S7)8Y^O& zFxBtbszDIU_iy^eG1c$+wfG18BBuInf8xPZzheVT^*c7e;vm(l5Hi&YL%TO3rdpFe zwMJ&DJWE|V9YVxTp{OD5rwo~Y<`T-_$M6Tua$IH(>9S|i?>G3N8ZwLu$k+Ixtc1B9 zEQ(K>kqp*cq9aXyvN{R;8b9|)>n zREHD5Gr&_onh+}m-UdRFl_rmH{sdAuG??P*H>tS#O)4c`H`wNAJq0R3{U#AStKYR~ zjStwva^uWCG^i^gdD{2oY+7jV;6NZ}JAtk(r~ChpoQ;Y%I*)EXnXXAfb#$g{0Mrm> zAStoq`we!#pW{AV*wIXbRz1B?KxE=HChic5=+tKm#OMD7F|Fv1TWyhT6PM#8^?`L`!3mO> z9I%ocK3M_3D1;V*N z6i7w+F^K|8#YKTc&0fNOB}IWk;*W{~DOpIYhr}{GhBA_A&54CT#_&)|Y1=|9iqe!Dn#sO;1XK@NXy>8)7TIpo>)tK?$HEYVdvhZ;HKG`eX1% zh_C&8Ee#p`M`ADRs^rxLgJmH)=}94|sIl9S=|=^JN557!Q67&X zcO?XejPxUdLzYJVET*5YH~QaBBgw+nRA7l2Yr$$H>TW*nhDafYp%kQD6S1_Iu(R&N zTUH#nwEj(GUp%eze^QnS|?Ivpy#rfxgdcPClK9?c9)}-K*iDY&@ywh zflzU@1gNx`TR8n}b!93{Dav2#+r>$kuafB7(E=VxAu0Ju{hu)47lfp-{HR1W)TMBX zVQ(DXZ}sXvUk>#j2}!piIk9Dt9vT!=-;PGVv}P(aGByy4ro_dfw1l_=XPXASH2mxc z+ai%_B?x*T2)l+PC>3{414x>J#6x1$qXO#!v8traesUt4`Auz#31IUOCE>&J4H^@? zG?b!88v;g3_m;rUKs_J{U^@b7NY@ES{ZD-$31B+|1AvA=62SHZHULe5D)6&6uq65HJi#7b)<8l*BPWAJl+CsNKM{@CHb;vW(I|yE+8Pnw)-Ju= zTRUOUAlvo+@7DAmy?ZJw{LHQBxN7nTwA>Ftd>zr6zj{o;eY68z0g zjH3hmcrTt?`A0=W8;1sTJr#i&Cc2-|Dk#u5&e()b4;E0217hG`LLdkWL_$9ZCwKl!tzV%g|nE_`*_$&Th zD1vZhjzl39J##Q7U|IC~OB4zG+f#fnm# z9?s{pn#N9?Ui_CY&@fj_oh~vK`RvH~jN<-9pI4_WXpD}?^+JJ)xngRX)ZiZGvsfBZ z3nU|*j-;l#WMY$}!^J*Z`N$E069I^)p(1m&3$8Q;rV1<#N6c$3{46oYG_<2fL6nB4 zIRg8Y=6R?12gL-kq6!Md5ENfNKgyr8CK+ccSu)bkkjRJtujAvA3NFqW=W?iN5qrer ztPHx0v=)krFyED!YQed52QeoCeeE!(>#62vAz5)Eem_EH5DdHuQ(o#mc zFJeexc^8c}=3?mF%PO36A^a7Op(=BgCU8YIRG9mue|A$>LgINO(5tW*k_N?J@UR&A z$M_55$EB)x3~9xZjI@`){>L{rwsSG;xxZ_7p)VYY$55TQG7yWQ8jIoI4XV4Fx*{DL zp8(ZZ48=po_!*&xk|jJ_b3w)ykd5EVu zPqOrCfhr>%%S^G7ZTsQ-TsEL0g#biAQrk73;k9PcOi=scPR*6>$A{X zGJi8e|!1I-E)mD%+BRja+<&Xtle|xe)$}$EOX5$O|wyDiidyX7LIA*hWwzIV$R& zU_$_Bht&(z<=8-B8$uL%#x;o{QNo%~#7l2mn94{;ktICs<`qCmmZ$A~JDrh4KjLu) zV}&c~;R(x6Tc$eqT0KSNK%}6a2t93idf;;6p;I==NY~?+Vy<^nZY>x3zhn73KoEPx zLvIJVj5K|vFmzp}>a8)aLClFjIYSV-?q{J>Pgh2ocCk{sHNLkUB0`q!$I+D^;*WUf z9bh0My%`qO1y+wH?Rk==MGsUN=^glRswx-uMxNn9uUfEwKL}!v zc<3ELmyr&DD`Dt*EOedD>%NfkzY0Rv`z-WM%%4s$r*Bstk>kOIKI}}Cgg@e;>oZrx zZGF8ec(NtH36D8W;Mycg^gNFoWjLN^MsTZ zxomvI3tB}|PjOtt6YL%5fG$^@ZzVet_Uy&LoA1%9c&6?5GAJQsS!LI2FA zzKDlTO&j{O@KqRkH>QdjvWg-m@mv#x-tDu{d%&iQG?v7$Uel;n!!<|e-^q4=rYnYR!6hK zJ3s9f$|HSy??Z#KnG?~Ec<9vhqep}k6E?#pEc6`Dc27kPL<%E8=q6m~+_(w+faEgd zPn^i+*A*7l^kom_Q=*0E}^1Q{j{&(zTeZ#}Wc)YRP6tY6>W{rZX#p)@ryF*7sM)9c;G#KeRd`6xMo zKmWZd(tZMl`L2S}DK0J`QYGHL0_GvGf)TPtlct5}rD*iApo4c=!1Ae9Sn)J$#6<$k zy&hHw3hXdFvu9-`&NPTljP+4pbnE(&j;pqM8m>O#6_x13FLhu?#*B0v!?4nza2to? zM5o4~AM6Ye*dsPzrD0+vD%xZT57`?EJHsUHi4B#>o*_Qa4R)rGi~X-bZrYP15LOvVL9x=!-`4d(Ph1 z{JRhTLL6{H;qY(!N20M**r^}E+56h}Iv`zwop7YYNX{Oy&@aVr0_dhLoE_osm%f+Q zW6g!V8bJa5+V|3Ey15&^881DE#uw9%hOD`;Q!t8IV~m}}PmFPs39;=*0y~^dd1ZLSRfR82aF@=Ef$*{Y=bEfL-+<`SS(NdgPL4JMJ2|_LK}fa| zR2L`Pk=D+3?jYOQI(k@-v>oa)(!+7&XgfVB_RsNdQp6#-JSk23aOP!9TyrAnu7E3^oD|?heE=_^G^);A4Q4h&*#}TeiA-l zOlWMpFJI3+Ev{o{{ZX$B}({1HEnS zY(@_w1?8#tXxCw*tZnTEn1ZV|W{y*R*Dmd6EAu7f%G!|}9#=U+# zI2SMlYbSE{6OM*P@%g?1zP2vTtVWp#oqCxX_x*wBe$Dw0IQ5H)LRZApxKAHr6xPpk zU_`8MTui91m(y7K9|q3m%J)t78a5jF`90hGMEj&~*$NM{c6Ib}XXil0dWDCL#QA$M zU(8ZrEI1b)QBnL@_ZWXKL?tpX4lX&x&xGZS&KG}7XkcPs%(t91{p@eql>C^XICsKp zbX+JO?BMGO^+i|CzHzA9KkjI3R16q5ePhCBtHTqeI}vHfg}m zgd}wKGj4valu^d~jPKU0dH9Lcwf<(+Xqw}Wk>HJ=XPiV+o0v2!YPy4^xo{DCFx&B%bx=<~7Dw=~a{Nf&jERYl^^At4o zK(tAY3&i-OQ4<8QlY%BmQsVof6Q-bv-WV?tOa5cL;~?|kjA-jSwB!l1=@=QuJn2Nv zoUm_#tx0x8cN+gVDPg{4^SRDj=dOHQ6Pey6qD?doS7-E1uV4J}m(;7k;0b+0w*5JD z70xqd^h>8AGfYpPTcC6H$nae=_n@l{Blt7$ZZ{w z%}*Bnx6b0^_!?5<|IKlCzSO>@Y{|HhiRtxMA(dkGZ(p9BT@tgRW4+IXE8fHJV~AS8 z==VbxZroa&+Wo@pqk31=mH)x$7h?+zsUd~4{9Bz^c60oNBF8`a42QsM5Thr?Xe`w| z^D=OkL&{JKn`L$wt}%LX!;6Y2TgSu*RjCJ-ubcU^OAp|W?Gl-tmmSNK|In&Fw{)d6 z?7zhK_N8$S3J!WktOJgElEC#=W5s%_38Dh;g$*L;EgOf3JL0-feqZgi3k#`OINx)U z5|0M$=R#q9)t`!23dy~i2J+qSM|UzZ>L=Y`1V{boCUN_2KyU<++fO=TTYO@F(vg1* zMwmfA>nhe)B7eU7MF__?Ha0NgC!?3(`+4lXSA4h<7s4~}Fwrvz^o!OT31Rz<^PK!RV3@-IdYF63kqgoRA#w{#yaj*Ceqx zm<}*Qlo0p-gRpy>nE&5}-5cZI|D*5j3mGUE_6hKRWw1_VUa3H(1RYLXHIYy3>8tkl zK{v(aZB9hU&u<8e?zhpuZvB#g)xGE3P}@*=Gr4`;m6|zKmzEhi?NdBFWp}E)QQ@Q9 zc1ITkXzXwILT^`?!{h@mtF4b@Os%-y_VN8&5pD$)4X0;bP9KxUZ&AECJRs$*--jn> z0<&Daq_nE|a{m5<)!)5RRmdsTi?o=e5$bf`+UH8lAtRv|m$!%Wpn;RQ+? z-)%1F$IshibM?%j8&+?Nw%y}j>mBcP+wOwu)tlo7U);LQq^iq6UbS1ATV-iW-}0jc z4SPH4pU5Axe96HJ>KhLit}c}BrZA_O_ns=1QwDX)yJt^{>ZR!vGHz=--(!P~g7z)2 zzL_95`G!=H-le=A8dvHwXYQWdpmfeQA+1ngTjolC)8h^s@fIk zTDQOXUxi1qr_4F<{&u@tevU@hwO>xTJU7s(;@@$;dz{a^6%35y6|KK(a;U<3#;_%wh!9L^zn95`s2(L)mwumH*@{N zTDq%-hVqeFdMal+7le$>pBbg6SP^t!&3)hVYHzD2<(;YO-YKtq*WS&Qr&|rqA3t4n zud#*K;r-kB2aEO63!m=GKe|HY?mn3nmv+Yu7A{g$h@IP_P4q+Z-0JP$r}F?ejz@3-U%EJv8_aky@%dd*2kY3Dz~Wz2k1WUY_a``jLVJ9u;b zyhzjJBcb+l^L@+OrUw~6@YC5b9$WrisqI?z(OQ?D+~Mjx>_c(R-F;XMmI z_ZrHE<$G=VR9Rwrp}Zh_byd%HJE|w_DhXKG<%R!~RqMmzl@>)vZ;?}6Wof4NcxJGC zOpCF+W;2E#U80pzcz1{4?qAGx_NlC#cWI&Okt+}O*WaAd@%9bnic6Pg+1#yo{wDuc zNM!o;4(D1PnLeS*fq(8K?utqrw!ig5PlY+rVd|g$w2%w(QkK&Ev^sEp=nlU(mp_I3 z+FjtcOuDPI_U}uol^*G`BTMpS2KaUf-t@YqPr383P{$jIkwb=uUEFcg^J-O)@@=bU z7T5Z_?F~`aNiTsIw2Dm8%Fi$e?)ojZ}U`+>)dYUnNu%~o*6DAGu3G`!_Tbuad#s_ z*^~SLyN1N6vo?8-Ila`{MIo!I)bUWs#jM);cV$%#_f%X8wmGNnD41uIzWRc0-fXw# zCBrrJtK2U~HzX~zuJ;{Xxx-lNVL|`Of;`=&8R^Z&=jqI7y@j{(#yg{3E6U8aOq`hb zP?yjDblcLpVzrv*xpf8^OYUi}nX6~NXOnN@mLtF4seS&a{AH~{diC+ZJtwdKv18)I z$7}3uyPXY>3jGkBup``bK)q)Vy`GBl$`R(e&0m_?-`*oX@zi9G=%*%u;SH}}_Bgb! z#B^PJu5M=Ewek!8En3s+U`~cwa`l$Z=Jk69eM){Ad&HqOY^u&l>p?xL$2D_FerB8M zS2x?prR0>Z#|^10?ZsAy)N;~m^?xs^GC!(%a;>>j!=aAzH!W2oKd-~G5J5Lssy?fCM;h_bATVYT$6@FKzeo?)Itwh9m~w{U_P7*M0{Bvp5~a zcKv!Zmwi#>J|aKIVN`T=V6tg_s?W!l4<8*Z`S5W{ZuynLYs=2QGs{XpB%iw?$)jlZ zfWS?gN93hjC~e8>bmm=w;+(P_8ZHy-z18>)_UA0CBIc@<#0_ok`BGZn`mbZr{9|d> ziPwfznk|!iXf*F+0dHeQhE7r2EbGY=4ta*;)g}(Ds^WXLcQMlTPBl|mWu(*fmM(8d zb6(y7chmH>3;cFuUvw{6*z#nYutI`5l{cboYl>o383n-(%*} zgYrhDOz zllR}Qss1qV?8~dae5k!p6uu?xgXf;*LloESnP#4`b(eu|&*$3m{d(K?XdjzsD!=zm zw8N|Na5uAb`;^2z6a7b4zAICIc<0jDg0pXPGAe6^H($C_SwClAY4qA(Gp!G0*iY1# zk>{JYJz=SBI#W%pn@yfeu*?>Z)Z%x^qoUg`t=X14&N!#dSAXt)iOP+OX{9n%L4}G(QmZNLM`kc+N30Ym{1TNc(cJX^<;lV z_rDX&9bWI=p;-8AP4nOSoVCn~`Czb!>VN;R5~;|F44Lsq?4@sRR+N8SQYN=&N{;Nz zmM+Z--CC&4x45W&b>=eFJN2Vg0^YV&bYFB$LCI*f(%@lU%F*k)=ngw`zg_#pbsf65 z^J%|LxtGpL-=}R$Zf|Y5G2NKjpn{@q3runz>G~8d{!%wDnCsYNgC8Z0USI zrB#i+vw3CD`2*%HJY#X-jq<=jf7@CrXUrNhYGCo8Kv(I(<62EJi<-KszuEEY{iL?E z?wfIRtZDw0B_@A`U+#TNO0&;`2jK>r=5Oiz(X_tnnF&T+oSgmif9blmQ>Wz*^|W6a zbnLb_sYi$EgNF7#@4HV{8q%#nce2s(g#4Z>N?#doU)R4^an6e9*N?_c-Z8#??D9T0 zV{|(&N;GtFONe>iD$Z`@mH4EanW--OMoep|pgOgq--Rg~;?j~AwYN$7bFFO3hd)pK zvdg%LKif7nqWYbARNaDik^ET&;S-)DhDnby4e4k8GE`yOPCrZS2>+n1hQ4mc>U=6H ze-FHOI3VDlOsAln(3)VqvPy?mziB&;?BG5kIX-vzd;e;eGDY2y3-^0EZM>D|oVVhH z{my4{!~Pj*Wp~VAhOKSybJnrr)UA3vbhK$VH+!gS$a9Zi={}=}6vdBKyt;qP+~POx zhyEBi>aNxl*DI+<+-e8h^}Ow_H(}P(pz*tBZy47%_whuTf4h5m+C@!@=(XKDO{d?T z{gYqU{C#2f-KveT_q_54Jq)k<_^5Yq;e%$XDfi8Xcd1v`yZ`r?)$5-4HuyZff45id zUQMpf zUXy?OQpZ=f9*pRJ^O{O{Wqr_=tNX6iS4`hybVYW9UwNPNYcGaHKfFA#t-&RYkCRSz zUA*c zW}Rz$x%h(70qOHrOLyibzK>X7Y-6~vO}Dy5tA_l(bgM_evKN1KT5>Y2X7QWTMQbi> zPhGvVh54%AlHdJm5LJ-ZqFLhd;fG9DPQCbYg-O569C_~%b0^(Vofn#YVg8d})3R>7 zw#lC1D4SWJe`?O0fEDRS)yB?2%~p-MGHY%5-7U)w z>TNzR8}!H9$PHVkBt70SqIvh7&9_Bu?|f?ew${_1Z|e29&+iGN<2P7a?%#N#`o={35CuTSzk`m}EzTfH6_TvV7{s`$s>I}4hRUFJ8x_p|E$ zH@(97CkjW>|{Cke$8PPAHw%x**s>shl@^PpG+TFBR`6%kDlKKXdl72ZJxpo)x&aX5cMP zm-!bgyY)$&rE&kSdx_&lsa|_(6>`+=&2MiEpPg8<%%O)#Cr_8LtMC33`WciwYhWqt%PPSgUX6>{dUE2)%aBzyAwe-UI4H~a&9X1ahr?qmNhs5LS)K$w)hwP5+ep=SoX>DQEtGp=N1)nazPjwCYTc`i^G0t5NsCBbyw(nH^ zt_|zwsOYxcbz}Op%HRRHNtX;8Iz%p#dELb#Xu*o~IhMV0pN?D9-NVOruc`bSmD`)0 z+aJ8}{P!of7ks~NJtb{$e=(4nrQb<*hNJ1c9l z|J>!($70|3r;{!|7`-dib=Z|QPd@QGTKFm2&%XYsu6OB-dGn$xRzK~w`>opo?=kmh z3^W}#FkNx}riYPzIw%~Qr5f@3z=92TtPUTW^}boJ?vAa7k9@WBWkRRkOEp(#B^@!$ zYge^QZ^W5~B;y?p#l=z|E^Q354%3~q^mX!p9xlt4u9^7ax&DJ@ZNi;>QY&B0yXg1m z@xE&BQS%f_`qvetRN3=FiaHjR|7Ci6&ipa{Ccba4c9LBkw&L*bhvlywlR9b^xp%v} zqJs8{kumK)bw9sRbJj2WmbR|nGGP0Mvy(LK0dC2?-u7+3$ol&3F78LK zu6SH`>TUkq-|UqA)Sk7G4|V$Oh}+6RH_WFI|Oa%=9j_{VF)hw*iec|%4&?2u)19}eWzejW$=8SUtd8pGc;NElXVYaBmpm-o{fndO`u4`V zbsUCV8fr8?^55hC+^G9KH`uMimR)C4&a1>N_B{~vT&`I)wf~9oCQJWT^X<7@(e0po z#ECZ1VGZ-^{5SSn9k67*+KoBAlW!JosJT+te%Ym}Ig0z73{!VcIsB;5NPfZ5cDe2L zYXpSt(tGjpz+{JvBi7YzuUAZsxOM+=Lq&mG`sJCYTk!M71cYxc{^0jEB`fgE6D=t( z7k@c^)jRdU{y7S&uPh?Vvzj;;l!q$s}$9JhR+2&Tw8(3QDmUgt%JhP!3j657f9Wh zESGmluc-ctMvuw6XJ*RnE9kK1=>3hgg%y30h+L6`6AH#5-W+6zD4NWR>Xr#ey_f0?1saO{=(iLrsZs!lcEU+0>A zr0}oz2j)!iyVdTt_H`r2xtFKB{I|j>(0PyVxPb+3=hqkU;wlcA+#P;9 zJP~pEYQw)nL+ir&MpnJw9z4hXx=&%bt*lXOADMO!{!nuAzNI?ljBB&WgStvv|8YcF zL*tB!-mI}91)cSxX67FVs!%-ddwbGj$tIp)@D$nb5x^na0@%e*W8Shn{zW=b7 zMe#xY_NRsEdMl3R?~~bgS0!%ur4@f&88+b8ONl#WZ*su5vB zQo=kp-&eb!yh!oWuS&cfU8l;g-u+B{k?m}S^_SX9y$A`FEBW}^Z|uahz~Hhre6z`s z;c|~YR_G*TUN)@JxSrw}d~5jGw+C)V%{x;6w$=V4Lw$D5yK?pF`r6+vE=o1OR&v7S z_KQ&$4+TH}y=ZK(Wr5r+hdpK^uBjSc->IbIWF|BGA8XkZpW8n5$2SMx9&H*quiifN zNOGBP{@kLV^tPR&F0CCEa@XvvO5&13%EM$jNw+*Ox>=WACl6X2*>hOAo8ey1g^pN_IW*f6*mAZ2c%&Rx`7Vkq^dQ0%Kb& zIXZmC-NF>DUv?YrP}!$rzVOn#l@G2QQJr$Le!udK+Z|_JzEttN;;v1|t^79~uBS&% zKhpBtKL@%@h}xBSr}h3}iE|V@AAV8~iw=^r_)}9#*=v5_>Q8U{c7*zdf4ba~f5C38 z(%qy=)k}Ymluh>-Ad_FRDY%Poxlha2j-kVxheRgc*l{szc-2+Un^w1#gZf{yc($cz zhkNy*)hCDTxiHP7;8WeU$fJ5}cm1m1qxnH8 z#wUD-7fuY(k?s*?xOlJfk^aY3=Kbc`?6!`PbbSuh|28_N*1gUAW*8c|9}nQ4l%1N` zU^m8d(<~S3rKd})vJ@_s9CCbDUz>HWp{i_Kfs0DPj#TH>=|=Nr=jmP;Ueesny-Hsr zsUiBZZ@u+G;~kZw`xiXa(# zmbcG&s;ypr6}bW$Na} zFOXl`x7C`Wf7LQ_4tCyBojhnyy?N}*4o9p{>P#J1-DA+RWS3@jeyO%4E=IF& zc<7#5teqv5qjt#Zcm3M*qvlm5=4(%?c0APJq_lL?{1!P&&wHKaDcV(~E*26DQleN52v7 zMK4A<l?o8w(S(Z#-juNF~dc`mL*ZSG6Y=0pFo)|WoUk3M!S(K>CJS>>>K zMi1pS@(NBC>11R~w$5rB;(2Jo(8St2PkvREwvkJF6|+?Dt~y4mhVXQ69mwM~Uz={~ zp1s3w!NLOfi?u>lR-AD#bqC z%zxsZ#IkplBQM=~sQwlLfSSsToSjRX58s!gul(!U=+cZs)|oQ;6YblY^W{yoEl+e) zQ=1v=l4q0Zu|;Nd^1EUuzq0Am%};j7({GrRueRyeKeU(LeBi;;dGBKCS?TAu{Cu+e zHOD(Htz6%wj`^k1Xo=rh-3p_etQLKj9vao*P;IW<+N$zNsV|=l3oO~rcgT&5cVF9U zU~{uteMR{#3I-lwnwEivOE)FopI_v#aYL?7(BZ5eU0;+H)jTfG`K|avwO`f4dVQ^; zJBL*_mA~(jm2PR7yC*fe+~7cHnf4o-hxQf|J|w2x3=A(gnd;f_x4UBh*AC_hg^D|N z|JHoXvnp>-19I*7m9I z%GO(Nm$V5jc-6e$i_#Xa^FC?r?((}vtW&P`AWto=k0$yp3+JV@O1bZB?rdK(V1Ca^ zi!%%74OD(}z|!{bK|^L`C=V(gIBKx8YoOVrR^$4wni|#b`f;b-G(SlHkz#4&@(^bxbdsf6}|ee+aA3lr+D(XN3UbskKYkrlX`oUz+#x+c{0aKSJBm*Kli)Pu(%Mz~3t?0s;=-3+g0u zFt{c($Dy)J&r$ogRwLXyj2xaDpX^fY|9+&dVwscY{)NtYw>H|JSdlkO?%7T|tC9cM z&M-J;eXh5ymHN0?8^?z|hGx%g=kYwmb#x!;;IZ*VL&ogCs_6cvcAM|wAxDB&+Pkfx)*Q@)#GLxe0JiWK~in!BHC#~l7tyArr6s<%CG5w3s&iiu{5xbFh)mVk<3ic6_!nTY$oATGIe z0XIb46)pE%OH(TqS`^IG%r#3*OVL~)u+&PiQorXpXJ+o)%gwC*e*M1x$NBwco_EeZ zXP@)VdEfXo={{MDK9AhG@z9)4S04Oq!v4=Zd~P0Y=@xrr+Rzrq(odE?>YP?<-qyvT zbBF#uc7BcKwHIVpEwy-kvt=oLI=#Ip;QLz(GcBL4{OCa5ipg7!Eo)SK@$z3^UA<(- z@QO>v7ApQm;D^t>{?my`$%*yr&T13oHoM5h9&?T*4V-CN4rQHp&Lz6Ej-Ro=!j6R3 z`^<>%T6B-4?6#|M-<&-$Wx?T2Q#-EjJ-wt~lWAYY6xnp?_^OTmAEdn1&*kXbYlq!^ zCuiKmt<{RP*)n`{vCUidSK4qh&ToBiPMx)*JC9knD~j=%3(>e|lG4ZC;6A4z=o$T`pVytX&p-rB3zwxqtDKRg{U;DZtoQK>K7c1@eN zEbycAGvEKXOlHEKmwKGty`Sab};>*Z_F$)SlE^gU)=Ld0}jD*WTV;I+S{GW!Ad7zy9jI(zp5M zypb0sq#x{mV8fQtG3FLWjt;N9Xv=FOYWet;2wA)9x9NVzSCl@MRb|bnInB52_up(D z|LkY0g0?pEn|<(Q_on@KygOYvUZ+E&fhoCBo>RNsxb)1Gl<9q^O+WE%lg#&z&1wJA z*x;%m-(U8g_I%f|--TX3QzWnBo&h&%7AY`5Pm$?!4jK^_dDAL%Ie& zHFsy?>N_WW#~d59`OrqM-LJV_bp52~lpd=_d~vl*$z4BhO6}IR#D%9%?7cR1;ABhY zgwN{~{bX#!;LnSAtr@j_z=3F&1J%AxUDdYb@Fl`V@h~^ZoheTLS|H3(DnNJEqiwI z%ySDY8@chq`kTi-xIh0wZmZgs_?;}>}w-t&yKHp zeZ`k^JKo(Mf4NIkldgeHHq0rUP%e1b)gsd}%sZN_ANq0V#kGZgpO#Uwb+tNMe`)tz zP{5d>&)TF%yi@y&drs+t!uqYdv$#i@_SGA|`pU}1DOW1o zycIdPRH0u^PwsiG*NNFt=Xd7pEj;`A@jJ2`4p3TseH%7`AY(d$2FI3)sHs|$Id)~XdKieaG^{i4iiuPLFcA(qSZ*<%}rAmWyi{~$` zU%U4G4wXBlEnSgy{`Xn0j4W2~;uB*xHK={mXJ+fSO(9pqKTL@8|1NXhn3ucXF5Wu3 z+r68en=KgGr>PQ4b^XxJx}Uzs>2@x6VAemK?bsZ+x*uHNqc zlW*C}Z8p9dSN!vVr{5l1^xd?*tGhc*-rsoHru&wPC6-=ku&RN_>@ppPP3!l>hGu6+ z?yWiee9eU?(^?mHiMz2q_3ENGi?p8bh@d@%rK7$*qd2J^rH;@`+9YnckN`MpX=#l$%3J%FQ9=uCQ#R-A5|L z_mrk2z*T#IJSjdsTsM-ghB6mF*701FGBrK61vJf&gcP_uJU$71Nl-*ah0wYVNYCsK z;UlM%L#I`6qA;=>4-#>o%ttLNgoWT=@6ktO%{Wpj)d96q1DCHd822DS zt-)P(ze758OQ)!&R=PIVDT-#0cJp|!v$L3kS!*JF5m3_x9 zZ|9zF*Ri)CYz@1P%{bYyO9D;SjxBzG6Vlh1U^*@)swE5(h8iQxzyMtEFP`bc3DHnN z72O#lf6Jx#GovuG7O=yqNg9d|*HpvdnA$){3+GT_5NNhhdK7o&mjed7JAcHbxu6ah znZO!&##u`XBhLXg1?B>oAXZqG?!X^_J%B#~#{yAz77GwRvB=JxlA`=TNtM#6$~x6m zr=oO<2d8C-$vU-7r*`QSC67yglszsfGe!+bQDKv$I2lQ*wodibss1`eRm#%eG@YVw zdTF;ur%ve9d7bh$Y5q#;R5hKV3`rTwM4h7CIB7>!K9X9aQ)hGv!&g2Ts66`4F_}X= zjs5id8$ui1DTC6uu3m>Q_A*czC#T>02x~w6LY87|EF@`gS+9&aP*ic8|*h#GUzM+FVWVQ|;ZIE;&7ulG8IOcg2hrE$t}vO4|MDRGg9J z2T{dhR-^zqQwA3CahFJDTr!*X!c9)a85jLb8TRvb6LsDW64NIl!qU|z7=iLKE}DZq zr&4gcn1?-~r%vdu(WdQmIc;Oq5d)Cz{GE`FF$p6c)MDfXL(enjUdQt{qUQwdn{WO` zWn1TOd^O2=t03NjazJx=-0i{P{Qa2Po^k$Gldw+Yf4N(ZK5Cf9#mFGn%i740XEQRW z%L6eosFVI=F(h%5;#-}%tW)?BQ70{vKKb$(p$F_;m8W%zTMN?eWu2l3JZZO3r`GG# zdpdPRr?~$iL)_OX4}J1|MyFcpR2QA90`>LCm`0f_w)iv`#MI1ShmcpexIyasFq%mzLS zyaj}aLQ5X-IUpzaHo!{AcUxdxU?i{+5WT^|vThG#JqF>D3jk7b0YJ)KaX~wmc3cWb zJFx)B!lU>W_ro?*+IVaJl9)e=gLRnREo zKdB@hF*_&D68JagJ z_D-!a%HngGYPxO|m)I<-Nk_JYFUW4Lk)Mf!6_Qqry}sApjB zs?-A2O!z}{Qz{Ay4MTZaxbh3Asi69R;%e3LUOK;u_#%JQ{i%J#=$?vZW?b`AIjsF& zI^$$F3I-O!0!$hwvE@d=a1iVx7yXPl9j<&SEd$bX5getLl(_$;N2)2nevP(m7bv~~ z7<~XPWCEWk>c(9$SYYEWNPJ^ZGZuZsKq~`1uo@d8_oB-95yHBp1?y4!$cRM%xt#~% z7OqTOnqfKE4>4oVMOikJfUGloi;8cGI3Rbx;(@H+1Yl?26ksplRNx@sG~f_mA}}5} z3%CS`ZCA@Xzy-jaKum!`NBtrohqoobQ^2J_4)@D|*d|mUTh+pjy#nZo{NfD0h1+y% zfcSn<)&a`_F_BsVfE$1;%f`6m5JO51F{Ip;_i$&+^H6rFl)JJQ6x*POvR|d#l@p-Y zRy~xjRLWhH9^c+Wxr{q0cVz%lm1zu7DOH!(VK|E+s~&19Ef`O>y1dBdh^;KXKb&Gc z(2ey?zi`hJS=h>el~@p&bD+6T+mt~2&NoNC3_GUARz+h!M{=$(y4&wd&xCseyE&3^ zvLSTB6=dxs{rd$`g=NgZaZ!-G)pyjRZc!uK2&QjQvmuY^E4Qq<_sr)}qlc^~4HeD&bq7`gz5=WP>;Yt1M**7wdjeYlqk$A7*9*w<=ndq%VfYaZ zhQpU^Fr;LIA?429YcaTaC^uB<5i8h!(kU+{9nU1+IB2x-?2v`nl!Se(c6_lWy3EWu z?uY@xOz`qmdgIPM>6ke&7%s+2wr>Q{cJB6#U>4jP+BE{k$wGb+SAB<#VAROb(J^wg zWa8<#Jk<-J8gdxKh=*372H=22j{$1K$Uk7Q5j4_b05UIZ1PGwi#6<(Pj%Wl!fgGKN z0h!m~K*rt{m#kD$vQkOON|ko3RB6YU|C=>)Q1qrV-qC7Kg)S;&eIjKP!-*9gw9i$tY_Z9{E^?(C)_kc)-%+de!p&Qn%2g%ShlnL!AWI|^>Aq9A`5bb3` zhr#Y=RF;i#AQSpBdRBegnMnzyOlZT9$T+GXu2Se(q3TkE!;&Lez*O0@7JgFM%3wGU z3E8~{wNtd`AYYkn%3yR^&#H}0NN6McoMC%~VV83xBe@am-AmAi)i{ce{ku8*HAkJ%=iJlt2diS;g#h8!1p0s+DXH3R=o1qf>^p2sUgSV|GzkA)!R{ssVrY~OxZ zTU+G?;|tmP&=0@Pn0?%^3?C0AI8bmibOiVoW}h+!8xffa%j+@22lg4!55FSYx<`$| zPs?VXN(eG=SZv>zVbMbnS2V;FGw#x`rW(+wexrx=7GX=mMyLUmRu7R$j1LpMLj*1^ z=DnSo-#&M&%T%{7??tqK(RFnKzVRCh`}|Ud2MYWAQigwm{XItZ7o_BBT8L`*{wtyW zzM$OyEh(q}hDg(f|DHHit0-4gzhGD67d*-PxdEnJT1!~#zm9t+hVM%X_e~5x2>woD z_;IiTlJKiHSUjFdkzY17$GWHf298Mf>j-op{4(wUZi51H34tz)osq3_Y22c|NMOp)x0)I{-^BoIwK&6IJe>8EojV!G zMusv|tYdeEgK=`>_zteJ%!DvbTJH`LOfn{#4u=l7u-{=Ye~WwUkC*EM-9jiPD<_2( zZNb4O!-e_aNsv)OYX;uI!-wz8p<7zfqc?0>3$eI{fRj7~n~5Gisi-d6KvuShiq*$q zTdg|%AlWwf(G1IghV{2rQ21d~k?a|NU`5!K2UZ7S6WLN1SOv&tQ5DEN5x7}i0M-D$ z1gr^+2G#~n0M-Fc0|o+9fI-0Jz+m7eU_IbrAhtmTQyFnvzQc24;8h@YC@m~{ZkS58 z5GlzPBIT}Z#hq=(L$HZSxhuPI$IHWRuS&Tq*sT<8(L=C_*(%-1Nfa@A=o`20iqLul zS82$%aMd0ZmWX;3E*+#`6^Ejv(^xd>a53lshKdeJk={7x<_WH$S?kiif>p?HhW>_f z5jpS`#}Q?}Kr_kL2UynWxcF8y%WxU{Kyy5&#Y@Mgw7unKOq?fL-YWFKICme&F* zdLIy7ARTVJXjl(cqx}=%kL>>QR?P-_3z4%RHN*VTkoCfnr)h!qz&y7EGT-59`#}3s z+XpGxK1gA|5hWq*TvSTs1*gN=VGW|rGO|2P!JV_Q8OJj}4Q9Xt#t#Ed1)^k|GF z9jTUdJ0SDXUM*?#V6~)4$&x1Jt{lf*+I^`~_&W^L{|yFh7;^e&#>m)khG#IVY)jo? z1japamaxg0BQJNt3%$G!11TPqC(JcR*akMH#Zr`N?LAaaCb1Lz+N7*JWbwzMxbw!CX}X9zZ!#^b7D%RIa^`#E1%#31bJ(Z0Hi)S9 z1ok)@5lT=~#GN-i=09W@%a~V;pZkg)NGBGk6!>zY9HDGkcM~xixC-o?CTC`kZ)g4~ zc)ZMg)9q!h>45}cYzf$fN2t1ZO_mgmWEkgt<2Fk^8}DiAgJc*R+aX(@$yw|7Z@0TV zU8a5^FgMH?135&33CBquy`7<0$Xe=>JzUy%JYUDoe4;*+Jq!lFfn&i=^JvVxFW^(x z{2HV;LZk9lsR}nFB&tPdRNeZ|wu}gC(JHceXkbXappbgOAr-^ILREgAt|<49IBYY06H!Ap#sLSf zEh^z-JAa`LICwkJtqOCgWiXC7Ra4N6_Y}hnt#Y;4LL>*z+D{n;d+BKSc~$ktEc_8? zE&+a~+xs*0A;xzd*F4n^pJ^QBZ!Hp<3=UZU%8o|QpP^mSo~!6isvkbnuv}1K{~1o& z+vvklkAssI-3PifgM$PkEuw&tR=`Lr(8Ou0AM1})X%=YWl**lKc@_nlIBhkU7HHyh z#80%_X&57HHypESfmA1<&K3013+QoM~OX4GvaXZqDIY8Ju=34#ERr6oqT3Ji#F9a%JTItFL ztvUdMf}phfU($saL_PH)ZNahn25mrWU{>T7G?|||#|j&mkShdv3PN~-StTh%&1rNS zu!tZS%@he1mN{;c`6j%@@Gw&?QsQ`G9yUJ_GHz0y=9s5CQYu15rnd(UZ&tyVoRItG z&i~hy?2_Wy+k4ay9EePu%1mJwJR#dD5%-VzsKojk)5iX|CZR!1Fz3@h$WQPWY0Sx; zn^G==nuB%NtBRZCy$xS~Uh$ie2_#&LPdKg#&Ku8h+oTt+CL=5(oMZ{$h2+~xTW5#1 zCWp2z4s8oLv~_i8>*ml_tsA?X6?W*?-Jz|ALt9UWwnZG;7IkRrmESfY9ehk2e1l94 z2!_k`nwkjaBwCZ9%5dN{&+wR+{Vcrj6tLHnuTe*!yuIRajFI)1kcH^H3#v_YK-nZ8 zW3^>lL}mT$?)vb0*2jv6uur(X#DR=kf;4a7GBUO{+qsj8V`OZtf&W@|j4j4V_Q_VD zL0Et~2@1XzlT61|2A7sJNEq^0xtSS&ON0>oRr(=o){&4ta>5KJB7+d2hY!#Ga!H^a z<-G;kg1l>nd8EOvxDu<{KLan!cXMD(U<)9J^;ST*aZB9N8W;h59thgPUFhe4{eW$N z!+~vq*iBX_Y2BoQgSfIP|D8(0n47dXQifBFFD0s8}20kNX7Yy}Pk?gkD5egYf{ zJOUgBJPpJ!h>J`Z~vhP_O5 z7VDgx>9sW+Vg+(Ba2ovJ(Np-r3De|-PB%CqQxcIrpF`SFMz%MkBf%wkp_sdCbj~z& z&V|51b-Esdxm=&F9oywzdf=qcUv4c@$VS|xTu!jkPObx(H8IgX>>M+j1>c{=N@L%B zzk{98on64#efPq>zFqfaoa_cyaTyN#tKHY;xId##$5j!RmIaV7`TDzky;I?5a%?3B5{)xdec9l-g(&w$`IS-u4>1hT9a0r`IAaLMLP zN^)pPxl^o{aP<)K5u}|9T>hImwB&RAnK5$4u%-lWN*kVM?SCs%a>l0I?^xJ29wTRr zrD$>{4@BdPNj~B9A1d+t&S0XnX$W?bL#s2IV8hUl&dFq|G$NFs?D?_ay{Mc_SGYTh z*)b=xx`@rlBMnn+z+FL`HgKFg_Q#bHzSSgRjON@q3+jD+;$=g~#>hVAO5y}030LXa#%>V!Z