summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt11
-rw-r--r--demo/basic/main.lua19
-rw-r--r--demo/fancy.bak/container.jpgbin0 -> 184939 bytes
-rw-r--r--demo/fancy.bak/example_sound.oggbin0 -> 1089524 bytes
-rw-r--r--demo/fancy.bak/main.lua319
-rw-r--r--demo/fancy.bak/suzanne.dae69
-rw-r--r--demo/fancy.bak/suzanne.mtl10
-rw-r--r--demo/fancy.bak/suzanne.obj2977
-rw-r--r--src/glfw/CMakeLists.txt11
-rw-r--r--src/glfw/bind47
-rw-r--r--src/glfw/bind.bind439
-rw-r--r--src/glfw/context.c49
-rw-r--r--src/glfw/init.c58
-rw-r--r--src/glfw/input.c586
-rw-r--r--src/glfw/monitor.c250
-rw-r--r--src/glfw/setup.c33
-rw-r--r--src/glfw/setup.h419
-rw-r--r--src/glfw/window.c588
-rw-r--r--src/miniaudio/CMakeLists.txt (renamed from src/audio/CMakeLists.txt)0
-rw-r--r--src/miniaudio/audio.h (renamed from src/audio/audio.h)0
-rw-r--r--src/miniaudio/bind (renamed from src/audio/bind)0
-rw-r--r--src/miniaudio/bind.bind (renamed from src/audio/bind.bind)0
-rw-r--r--src/miniaudio/engine.c (renamed from src/audio/engine.c)0
-rw-r--r--src/miniaudio/impl.c (renamed from src/audio/impl.c)0
-rw-r--r--src/miniaudio/setup.c (renamed from src/audio/setup.c)0
-rw-r--r--src/miniaudio/sound.c (renamed from src/audio/sound.c)0
-rw-r--r--src/miniaudio/sound_group.c (renamed from src/audio/sound_group.c)0
-rw-r--r--src/modules.h1
-rw-r--r--src/opengl/CMakeLists.txt (renamed from src/gl/CMakeLists.txt)0
-rw-r--r--src/opengl/bind.h1818
-rw-r--r--src/opengl/bind/a3
-rw-r--r--src/opengl/bind/a.bind26
-rw-r--r--src/opengl/bind/b35
-rw-r--r--src/opengl/bind/b.bind350
-rw-r--r--src/opengl/bind/c31
-rw-r--r--src/opengl/bind/c.bind354
-rw-r--r--src/opengl/bind/d36
-rw-r--r--src/opengl/bind/d.bind331
-rw-r--r--src/opengl/bind/e7
-rw-r--r--src/opengl/bind/e.bind57
-rw-r--r--src/opengl/bind/f11
-rw-r--r--src/opengl/bind/f.bind115
-rw-r--r--src/opengl/bind/g88
-rw-r--r--src/opengl/bind/g.bind910
-rw-r--r--src/opengl/bind/h1
-rw-r--r--src/opengl/bind/h.bind9
-rw-r--r--src/opengl/bind/i14
-rw-r--r--src/opengl/bind/i.bind127
-rw-r--r--src/opengl/bind/l4
-rw-r--r--src/opengl/bind/l.bind24
-rw-r--r--src/opengl/bind/m7
-rw-r--r--src/opengl/bind/m.bind66
-rw-r--r--src/opengl/bind/p50
-rw-r--r--src/opengl/bind/p.bind521
-rw-r--r--src/opengl/bind/q1
-rw-r--r--src/opengl/bind/q.bind9
-rw-r--r--src/opengl/bind/r6
-rw-r--r--src/opengl/bind/r.bind61
-rw-r--r--src/opengl/bind/s21
-rw-r--r--src/opengl/bind/s.bind202
-rw-r--r--src/opengl/bind/sigs445
-rw-r--r--src/opengl/bind/t16
-rw-r--r--src/opengl/bind/t.bind204
-rw-r--r--src/opengl/bind/u37
-rw-r--r--src/opengl/bind/u.bind382
-rw-r--r--src/opengl/bind/v76
-rw-r--r--src/opengl/bind/v.bind742
-rw-r--r--src/opengl/bind/w1
-rw-r--r--src/opengl/bind/w.bind10
-rw-r--r--src/opengl/data.c (renamed from src/gl/data.c)0
-rw-r--r--src/opengl/data.test.c (renamed from src/gl/data.test.c)0
-rw-r--r--src/opengl/drawing.c (renamed from src/gl/drawing.c)0
-rw-r--r--src/opengl/gl.c (renamed from src/gl/gl.c)0
-rw-r--r--src/opengl/gl.h (renamed from src/gl/gl.h)0
-rw-r--r--src/opengl/gl.test.c (renamed from src/gl/gl.test.c)0
-rw-r--r--src/opengl/glad/CMakeLists.txt (renamed from src/gl/glad/CMakeLists.txt)0
-rw-r--r--src/opengl/glad/include/KHR/khrplatform.h (renamed from src/gl/glad/include/KHR/khrplatform.h)0
-rw-r--r--src/opengl/glad/include/glad/glad.h (renamed from src/gl/glad/include/glad/glad.h)0
-rw-r--r--src/opengl/glad/src/glad.c (renamed from src/gl/glad/src/glad.c)0
-rw-r--r--src/opengl/notes.md (renamed from src/gl/notes.md)0
-rw-r--r--src/opengl/setup.c23
-rw-r--r--src/opengl/shader.c (renamed from src/gl/shader.c)0
-rw-r--r--src/opengl/texture.c (renamed from src/gl/texture.c)0
-rw-r--r--src/opengl/window.c (renamed from src/gl/window.c)0
-rw-r--r--src/opengl/window.test.c (renamed from src/gl/window.test.c)0
85 files changed, 13112 insertions, 5 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b6a46a3..3b96b55 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -60,14 +60,15 @@ set_target_properties(test PROPERTIES
target_link_libraries(test lua5.1 glfw dl)
-add_subdirectory(${SRC_ROOT}/audio)
-add_subdirectory(${SRC_ROOT}/gl)
+add_subdirectory(${SRC_ROOT}/glfw)
add_subdirectory(${SRC_ROOT}/glm)
add_subdirectory(${SRC_ROOT}/image)
+add_subdirectory(${SRC_ROOT}/import)
add_subdirectory(${SRC_ROOT}/logging)
+add_subdirectory(${SRC_ROOT}/miniaudio)
+add_subdirectory(${SRC_ROOT}/nvg)
+add_subdirectory(${SRC_ROOT}/ode)
+add_subdirectory(${SRC_ROOT}/opengl)
add_subdirectory(${SRC_ROOT}/options)
add_subdirectory(${SRC_ROOT}/test)
add_subdirectory(${SRC_ROOT}/util)
-add_subdirectory(${SRC_ROOT}/import)
-add_subdirectory(${SRC_ROOT}/ode)
-add_subdirectory(${SRC_ROOT}/nvg)
diff --git a/demo/basic/main.lua b/demo/basic/main.lua
new file mode 100644
index 0000000..0950690
--- /dev/null
+++ b/demo/basic/main.lua
@@ -0,0 +1,19 @@
+local glfw = honey.glfw
+
+local err = glfw.Init()
+print(err, glfw.TRUE)
+if err ~= glfw.TRUE then
+ local err, desc = glfw.GetError()
+ error("failed to initialize glfw: " .. tostring(err))
+end
+
+local window = glfw.CreateWindow(640, 480, "Hello world c:", nil, nil)
+
+glfw.MakeContextCurrent(window)
+while (glfw.WindowShouldClose(window) ~= glfw.FALSE) do
+ gl.Clear(gl.COLOR_BUFFER_BIT)
+ glfw.SwapBUffers(window)
+ glfw.PollEvents()
+end
+
+glfw.Terminate()
diff --git a/demo/fancy.bak/container.jpg b/demo/fancy.bak/container.jpg
new file mode 100644
index 0000000..d07bee4
--- /dev/null
+++ b/demo/fancy.bak/container.jpg
Binary files differ
diff --git a/demo/fancy.bak/example_sound.ogg b/demo/fancy.bak/example_sound.ogg
new file mode 100644
index 0000000..5f97755
--- /dev/null
+++ b/demo/fancy.bak/example_sound.ogg
Binary files differ
diff --git a/demo/fancy.bak/main.lua b/demo/fancy.bak/main.lua
new file mode 100644
index 0000000..54472c5
--- /dev/null
+++ b/demo/fancy.bak/main.lua
@@ -0,0 +1,319 @@
+local gl = honey.gl
+local window = honey.window
+
+
+--===== initialize audio =====--
+
+local result, engine = honey.ma.engine_init({})
+honey.ma.engine_play_sound(engine, 'example_sound.ogg', nil)
+
+
+--====== initialize opengl ======--
+
+gl.Init()
+window.setHint(window.hintType.contextVersionMajor, 3)
+window.setHint(window.hintType.contextVersionMinor, 3)
+window.setHint(window.hintType.openGlProfile, window.profileType.openGlCoreProfile)
+
+
+--====== create window ======--
+
+local w = window.create(640, 480, 'hello, world!')
+window.makeContextCurrent(w)
+gl.InitGlad()
+gl.Enable(gl.DEPTH_TEST)
+
+window.setFramebufferSizeCallback(w, function(_, width, height)
+ print(string.format("resize: (%d, %d)", width, height))
+ gl.Viewport(0, 0, width, height)
+end)
+
+
+--====== compile shaders ======--
+
+local vertexShaderSource = [[
+#version 330 core
+layout (location = 0) in vec3 aPos;
+layout (location = 1) in vec2 aTexCoord;
+
+uniform mat4 model;
+uniform mat4 view;
+uniform mat4 projection;
+
+out vec3 pos;
+out vec2 TexCoord;
+
+void main()
+{
+ gl_Position = projection * view * model * vec4(aPos, 1.0);
+ TexCoord = aTexCoord;
+ pos = aPos;
+}
+]]
+
+local fragmentShaderSource = [[
+#version 330 core
+out vec4 FragColor;
+
+in vec3 pos;
+in vec2 TexCoord;
+
+uniform sampler2D ourTexture;
+
+void main()
+{
+ // FragColor = vec4(pos, 1.0f);
+ FragColor = texture(ourTexture, TexCoord);
+}
+]]
+
+-- vertex shader
+local vertexShader = gl.CreateShader(gl.VERTEX_SHADER)
+gl.ShaderSource(vertexShader, vertexShaderSource)
+gl.CompileShader(vertexShader)
+
+-- fragment shader
+local fragmentShader = gl.CreateShader(gl.FRAGMENT_SHADER)
+gl.ShaderSource(fragmentShader, fragmentShaderSource)
+gl.CompileShader(fragmentShader)
+
+-- link
+local shader = gl.CreateProgram()
+gl.AttachShader(shader, vertexShader)
+gl.AttachShader(shader, fragmentShader)
+gl.LinkProgram(shader)
+-- clean up
+gl.DeleteShader(vertexShader)
+gl.DeleteShader(fragmentShader)
+
+
+--====== set up mesh data manually ======--
+
+local vertices = {
+-- positions uvs
+ 0.5, 0.5, 0.0, 1.0, 1.0, -- top right
+ 0.5, -0.5, 0.0, 1.0, 0.0, -- bottom right
+ -0.5, -0.5, 0.0, 0.0, 0.0, -- bottom let
+ -0.5, 0.5, 0.0, 0.0, 1.0 -- top let
+}
+local indices = {
+ 0, 1, 3, -- first triangle
+ 1, 2, 3 -- second triangle
+}
+
+-- buffers
+local vertexArray = gl.GenVertexArrays()
+local vertexBuffer = gl.GenBuffers()
+local elementBuffer = gl.GenBuffers()
+
+gl.BindVertexArray(vertexArray)
+
+gl.BindBuffer(gl.ARRAY_BUFFER, vertexBuffer)
+gl.BufferData(gl.ARRAY_BUFFER, gl.FLOAT, vertices, gl.STATIC_DRAW)
+
+gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementBuffer)
+gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, gl.UNSIGNED_INT, indices, gl.STATIC_DRAW)
+
+-- position
+gl.VertexAttribPointer(0, 3, false, 5, 0)
+gl.EnableVertexAttribArray(0)
+
+-- uv
+gl.VertexAttribPointer(1, 2, false, 5, 3)
+gl.EnableVertexAttribArray(1)
+
+
+--===== load mesh from file =====--
+
+local attrib, shapes, materials = honey.tinyobj.parse_obj('suzanne.obj', 1)
+print(#attrib.vertices)
+print(#attrib.face_num_verts)
+
+print("mesh face_offset", shapes[1].face_offset)
+print("mesh length", shapes[1].length)
+print("#attrib.faces", #attrib.faces)
+print("#attrib.face_num_verts", #attrib.face_num_verts)
+
+local suzanne = {}
+suzanne.vertices = {}
+suzanne.indices = {}
+
+function addVertex(vertex)
+ local pos = 3*vertex.v_idx
+ table.insert(suzanne.vertices, attrib.vertices[pos+1])
+ table.insert(suzanne.vertices, attrib.vertices[pos+2])
+ table.insert(suzanne.vertices, attrib.vertices[pos+3])
+
+ local tex = 3*vertex.vt_idx
+ table.insert(suzanne.vertices, attrib.texcoords[tex+1])
+ table.insert(suzanne.vertices, attrib.texcoords[tex+2])
+
+ table.insert(suzanne.indices, #suzanne.indices)
+end
+
+local start = shapes[1].face_offset
+local finish = start + shapes[1].length
+for i=start,finish-1 do
+ local numVerts = attrib.face_num_verts[i+1]
+ for j=0,numVerts-1 do
+ local vertex = attrib.faces[(3*i)+j+1]
+ addVertex(vertex)
+ end
+end
+
+--for i, vertex in ipairs(suzanne.vertices) do
+-- io.write(tostring(vertex) .. ", ")
+-- if i % 3 == 0 then print() end
+--end
+--print()
+--
+--local indices = {}
+--for i=1,#suzanne.indices do
+-- io.write(tostring(suzanne.indices[i]) .. ", ")
+-- if i % 3 == 0 then print() end
+--end
+--print()
+
+
+print("#suzanne.vertices", #suzanne.vertices)
+print("#suzanne.indices", #suzanne.indices)
+
+
+
+suzanne.vertexArr = gl.GenVertexArrays()
+suzanne.vertexBuf = gl.GenBuffers()
+suzanne.elementBuf = gl.GenBuffers()
+
+gl.BindVertexArray(suzanne.vertexArr)
+gl.BindBuffer(gl.ARRAY_BUFFER, suzanne.vertexBuf)
+gl.BufferData(gl.ARRAY_BUFFER, gl.FLOAT, suzanne.vertices, gl.STATIC_DRAW)
+
+gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, suzanne.elementBuf)
+gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, gl.UNSIGNED_INT, suzanne.indices, gl.STATIC_DRAW)
+
+local size = 5
+gl.VertexAttribPointer(0, 3, false, size, 0)
+gl.EnableVertexAttribArray(0)
+gl.VertexAttribPointer(1, 2, false, size, 3)
+gl.EnableVertexAttribArray(1)
+
+
+--====== load texture ======--
+
+local texture = gl.GenTextures()
+gl.BindTexture(gl.TEXTURE_2D, texture)
+
+gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT)
+gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT)
+
+gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
+gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
+
+local image, width, height = honey.image.load('container.jpg', 3)
+gl.TexImage2D(
+ gl.TEXTURE_2D, 0,
+ gl.RGB, width, height,
+ gl.RGB, gl.UNSIGNED_BYTE,
+ image
+)
+gl.GenerateMipmap(gl.TEXTURE_2D)
+honey.image.destroy(image)
+
+-- connect shader samplers to texture units
+gl.UseProgram(shader)
+gl.Uniform1i(gl.GetUniformLocation(shader, 'ourTexture'), 0)
+
+
+--===== generate cairo texture =====--
+
+-- local image = honey.image
+-- local surface = image.surface_create(image.FORMAT_ARGB32, 512, 512)
+-- local cr = image.context_create(surface)
+-- image.context_select_font_face(cr, "sans-serif", image.FONT_SLANT_NORMAL, image.FONT_WEIGHT_NORMAL)
+-- image.context_set_font_size(cr, 32)
+-- image.context_set_source_rgb(cr, 1, 0, 0)
+-- image.context_move_to(cr, 100, 100)
+-- image.context_show_text(cr, "hello, world!")
+-- local data = image.surface_get_data(surface)
+-- gl.BindTexture(gl.TEXTURE_2D, texture)
+-- gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_SWIZZLE_R, gl.BLUE)
+-- gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_SWIZZLE_B, gl.RED)
+-- --gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_SWIZZLE_A, gl.RED)
+-- gl.TexImage2D(
+-- gl.TEXTURE_2D, 0,
+-- gl.RGB, width, height,
+-- gl.RGBA, gl.UNSIGNED_BYTE,
+-- data
+-- )
+-- gl.GenerateMipmap(gl.TEXTURE_2D)
+
+
+--====== matrices ======--
+
+local model = honey.glm.mat4_create()
+local axis1 = honey.glm.vec3_create()
+honey.glm.vec3_set(axis1, 0, 1.0)
+honey.glm.vec3_set(axis1, 1, 0.0)
+honey.glm.vec3_set(axis1, 2, 0.0)
+
+local axis2 = honey.glm.vec3_create()
+honey.glm.vec3_set(axis2, 0, 0.0)
+honey.glm.vec3_set(axis2, 1, 1.0)
+honey.glm.vec3_set(axis2, 2, 0.0)
+
+local view = honey.glm.mat4_create()
+honey.glm.mat4_identity(view)
+local translation = honey.glm.vec3_create()
+honey.glm.vec3_set(translation, 0, 0.0)
+honey.glm.vec3_set(translation, 1, 0.0)
+honey.glm.vec3_set(translation, 2, -3.0)
+honey.glm.translate(view, translation)
+
+local projection = honey.glm.mat4_create()
+honey.glm.perspective(math.rad(45), 800/600, 0.1, 100, projection)
+
+
+--====== main loop ======--
+
+local transform = honey.glm.mat4_create()
+
+while not window.shouldClose(w) do
+ local time = window.getTime()
+
+ gl.ClearColor(0.2, 0.3, 0.3, 1.0)
+ gl.Clear(gl.COLOR_BUFFER_BIT + gl.DEPTH_BUFFER_BIT)
+
+ gl.ActiveTexture(0)
+ gl.BindTexture(gl.TEXTURE_2D, texture)
+
+ gl.UseProgram(shader)
+
+ local modelL = gl.GetUniformLocation(shader, 'model')
+ local viewL = gl.GetUniformLocation(shader, 'view')
+ local projectionL = gl.GetUniformLocation(shader, 'projection')
+
+ honey.glm.mat4_identity(model)
+ honey.glm.rotate(model, 0.5*math.pi*time, axis2)
+ honey.glm.rotate(model, math.rad(-90), axis1)
+
+ gl.UniformMatrix4fv(modelL, false, model)
+ gl.UniformMatrix4fv(viewL, false, view)
+ gl.UniformMatrix4fv(projectionL, false, projection)
+
+ --gl.BindVertexArray(vertexArray)
+ --gl.DrawElements(gl.TRIANGLES, 6, gl.UNSIGNED_INT, 0)
+
+ gl.BindVertexArray(suzanne.vertexArr)
+ gl.DrawElements(gl.TRIANGLES, #suzanne.indices, gl.UNSIGNED_INT, 0)
+
+ window.swapBuffers(w)
+ window.pollEvents()
+end
+
+--===== shut down =====--
+
+window.destroy(w)
+gl.Terminate()
+honey.ma.engine_uninit(engine)
+--image.surface_destroy(surface)
+--image.context_destroy(cr)
diff --git a/demo/fancy.bak/suzanne.dae b/demo/fancy.bak/suzanne.dae
new file mode 100644
index 0000000..0c70072
--- /dev/null
+++ b/demo/fancy.bak/suzanne.dae
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <asset>
+ <contributor>
+ <author>Blender User</author>
+ <authoring_tool>Blender 2.82.7</authoring_tool>
+ </contributor>
+ <created>2022-09-27T16:47:46</created>
+ <modified>2022-09-27T16:47:46</modified>
+ <unit name="meter" meter="1"/>
+ <up_axis>Z_UP</up_axis>
+ </asset>
+ <library_images/>
+ <library_geometries>
+ <geometry id="Suzanne-mesh" name="Suzanne">
+ <mesh>
+ <source id="Suzanne-mesh-positions">
+ <float_array id="Suzanne-mesh-positions-array" count="1521">0.4375 -0.765625 0.1640625 -0.4375 -0.765625 0.1640625 0.5 -0.6875 0.09375 -0.5 -0.6875 0.09375 0.546875 -0.578125 0.0546875 -0.546875 -0.578125 0.0546875 0.3515625 -0.6171875 -0.0234375 -0.3515625 -0.6171875 -0.0234375 0.3515625 -0.71875 0.03125 -0.3515625 -0.71875 0.03125 0.3515625 -0.78125 0.1328125 -0.3515625 -0.78125 0.1328125 0.2734375 -0.796875 0.1640625 -0.2734375 -0.796875 0.1640625 0.203125 -0.7421875 0.09375 -0.203125 -0.7421875 0.09375 0.15625 -0.6484375 0.0546875 -0.15625 -0.6484375 0.0546875 0.078125 -0.65625 0.2421875 -0.078125 -0.65625 0.2421875 0.140625 -0.7421875 0.2421875 -0.140625 -0.7421875 0.2421875 0.2421875 -0.796875 0.2421875 -0.2421875 -0.796875 0.2421875 0.2734375 -0.796875 0.328125 -0.2734375 -0.796875 0.328125 0.203125 -0.7421875 0.390625 -0.203125 -0.7421875 0.390625 0.15625 -0.6484375 0.4375 -0.15625 -0.6484375 0.4375 0.3515625 -0.6171875 0.515625 -0.3515625 -0.6171875 0.515625 0.3515625 -0.71875 0.453125 -0.3515625 -0.71875 0.453125 0.3515625 -0.78125 0.359375 -0.3515625 -0.78125 0.359375 0.4375 -0.765625 0.328125 -0.4375 -0.765625 0.328125 0.5 -0.6875 0.390625 -0.5 -0.6875 0.390625 0.546875 -0.578125 0.4375 -0.546875 -0.578125 0.4375 0.625 -0.5625 0.2421875 -0.625 -0.5625 0.2421875 0.5625 -0.671875 0.2421875 -0.5625 -0.671875 0.2421875 0.46875 -0.7578125 0.2421875 -0.46875 -0.7578125 0.2421875 0.4765625 -0.7734375 0.2421875 -0.4765625 -0.7734375 0.2421875 0.4453125 -0.78125 0.3359375 -0.4453125 -0.78125 0.3359375 0.3515625 -0.8046875 0.375 -0.3515625 -0.8046875 0.375 0.265625 -0.8203125 0.3359375 -0.265625 -0.8203125 0.3359375 0.2265625 -0.8203125 0.2421875 -0.2265625 -0.8203125 0.2421875 0.265625 -0.8203125 0.15625 -0.265625 -0.8203125 0.15625 0.3515625 -0.828125 0.2421875 -0.3515625 -0.828125 0.2421875 0.3515625 -0.8046875 0.1171875 -0.3515625 -0.8046875 0.1171875 0.4453125 -0.78125 0.15625 -0.4453125 -0.78125 0.15625 0 -0.7421875 0.4296875 0 -0.8203125 0.3515625 0 -0.734375 -0.6796875 0 -0.78125 -0.3203125 0 -0.796875 -0.1875 0 -0.71875 -0.7734375 0 -0.6015625 0.40625 0 -0.5703125 0.5703125 0 0.546875 0.8984375 0 0.8515625 0.5625 0 0.828125 0.0703125 0 0.3515625 -0.3828125 0.203125 -0.5625 -0.1875 -0.203125 -0.5625 -0.1875 0.3125 -0.5703125 -0.4375 -0.3125 -0.5703125 -0.4375 0.3515625 -0.5703125 -0.6953125 -0.3515625 -0.5703125 -0.6953125 0.3671875 -0.53125 -0.890625 -0.3671875 -0.53125 -0.890625 0.328125 -0.5234375 -0.9453125 -0.328125 -0.5234375 -0.9453125 0.1796875 -0.5546875 -0.96875 -0.1796875 -0.5546875 -0.96875 0 -0.578125 -0.984375 0.4375 -0.53125 -0.140625 -0.4375 -0.53125 -0.140625 0.6328125 -0.5390625 -0.0390625 -0.6328125 -0.5390625 -0.0390625 0.828125 -0.4453125 0.1484375 -0.828125 -0.4453125 0.1484375 0.859375 -0.59375 0.4296875 -0.859375 -0.59375 0.4296875 0.7109375 -0.625 0.484375 -0.7109375 -0.625 0.484375 0.4921875 -0.6875 0.6015625 -0.4921875 -0.6875 0.6015625 0.3203125 -0.734375 0.7578125 -0.3203125 -0.734375 0.7578125 0.15625 -0.7578125 0.71875 -0.15625 -0.7578125 0.71875 0.0625 -0.75 0.4921875 -0.0625 -0.75 0.4921875 0.1640625 -0.7734375 0.4140625 -0.1640625 -0.7734375 0.4140625 0.125 -0.765625 0.3046875 -0.125 -0.765625 0.3046875 0.203125 -0.7421875 0.09375 -0.203125 -0.7421875 0.09375 0.375 -0.703125 0.015625 -0.375 -0.703125 0.015625 0.4921875 -0.671875 0.0625 -0.4921875 -0.671875 0.0625 0.625 -0.6484375 0.1875 -0.625 -0.6484375 0.1875 0.640625 -0.6484375 0.296875 -0.640625 -0.6484375 0.296875 0.6015625 -0.6640625 0.375 -0.6015625 -0.6640625 0.375 0.4296875 -0.71875 0.4375 -0.4296875 -0.71875 0.4375 0.25 -0.7578125 0.46875 -0.25 -0.7578125 0.46875 0 -0.734375 -0.765625 0.109375 -0.734375 -0.71875 -0.109375 -0.734375 -0.71875 0.1171875 -0.7109375 -0.8359375 -0.1171875 -0.7109375 -0.8359375 0.0625 -0.6953125 -0.8828125 -0.0625 -0.6953125 -0.8828125 0 -0.6875 -0.890625 0 -0.75 -0.1953125 0 -0.7421875 -0.140625 0.1015625 -0.7421875 -0.1484375 -0.1015625 -0.7421875 -0.1484375 0.125 -0.75 -0.2265625 -0.125 -0.75 -0.2265625 0.0859375 -0.7421875 -0.2890625 -0.0859375 -0.7421875 -0.2890625 0.3984375 -0.671875 -0.046875 -0.3984375 -0.671875 -0.046875 0.6171875 -0.625 0.0546875 -0.6171875 -0.625 0.0546875 0.7265625 -0.6015625 0.203125 -0.7265625 -0.6015625 0.203125 0.7421875 -0.65625 0.375 -0.7421875 -0.65625 0.375 0.6875 -0.7265625 0.4140625 -0.6875 -0.7265625 0.4140625 0.4375 -0.796875 0.546875 -0.4375 -0.796875 0.546875 0.3125 -0.8359375 0.640625 -0.3125 -0.8359375 0.640625 0.203125 -0.8515625 0.6171875 -0.203125 -0.8515625 0.6171875 0.1015625 -0.84375 0.4296875 -0.1015625 -0.84375 0.4296875 0.125 -0.8125 -0.1015625 -0.125 -0.8125 -0.1015625 0.2109375 -0.7109375 -0.4453125 -0.2109375 -0.7109375 -0.4453125 0.25 -0.6875 -0.703125 -0.25 -0.6875 -0.703125 0.265625 -0.6640625 -0.8203125 -0.265625 -0.6640625 -0.8203125 0.234375 -0.6328125 -0.9140625 -0.234375 -0.6328125 -0.9140625 0.1640625 -0.6328125 -0.9296875 -0.1640625 -0.6328125 -0.9296875 0 -0.640625 -0.9453125 0 -0.7265625 0.046875 0 -0.765625 0.2109375 0.328125 -0.7421875 0.4765625 -0.328125 -0.7421875 0.4765625 0.1640625 -0.75 0.140625 -0.1640625 -0.75 0.140625 0.1328125 -0.7578125 0.2109375 -0.1328125 -0.7578125 0.2109375 0.1171875 -0.734375 -0.6875 -0.1171875 -0.734375 -0.6875 0.078125 -0.75 -0.4453125 -0.078125 -0.75 -0.4453125 0 -0.75 -0.4453125 0 -0.7421875 -0.328125 0.09375 -0.78125 -0.2734375 -0.09375 -0.78125 -0.2734375 0.1328125 -0.796875 -0.2265625 -0.1328125 -0.796875 -0.2265625 0.109375 -0.78125 -0.1328125 -0.109375 -0.78125 -0.1328125 0.0390625 -0.78125 -0.125 -0.0390625 -0.78125 -0.125 0 -0.828125 -0.203125 0.046875 -0.8125 -0.1484375 -0.046875 -0.8125 -0.1484375 0.09375 -0.8125 -0.15625 -0.09375 -0.8125 -0.15625 0.109375 -0.828125 -0.2265625 -0.109375 -0.828125 -0.2265625 0.078125 -0.8046875 -0.25 -0.078125 -0.8046875 -0.25 0 -0.8046875 -0.2890625 0.2578125 -0.5546875 -0.3125 -0.2578125 -0.5546875 -0.3125 0.1640625 -0.7109375 -0.2421875 -0.1640625 -0.7109375 -0.2421875 0.1796875 -0.7109375 -0.3125 -0.1796875 -0.7109375 -0.3125 0.234375 -0.5546875 -0.25 -0.234375 -0.5546875 -0.25 0 -0.6875 -0.875 0.046875 -0.6875 -0.8671875 -0.046875 -0.6875 -0.8671875 0.09375 -0.7109375 -0.8203125 -0.09375 -0.7109375 -0.8203125 0.09375 -0.7265625 -0.7421875 -0.09375 -0.7265625 -0.7421875 0 -0.65625 -0.78125 0.09375 -0.6640625 -0.75 -0.09375 -0.6640625 -0.75 0.09375 -0.640625 -0.8125 -0.09375 -0.640625 -0.8125 0.046875 -0.6328125 -0.8515625 -0.046875 -0.6328125 -0.8515625 0 -0.6328125 -0.859375 0.171875 -0.78125 0.21875 -0.171875 -0.78125 0.21875 0.1875 -0.7734375 0.15625 -0.1875 -0.7734375 0.15625 0.3359375 -0.7578125 0.4296875 -0.3359375 -0.7578125 0.4296875 0.2734375 -0.7734375 0.421875 -0.2734375 -0.7734375 0.421875 0.421875 -0.7734375 0.3984375 -0.421875 -0.7734375 0.3984375 0.5625 -0.6953125 0.3515625 -0.5625 -0.6953125 0.3515625 0.5859375 -0.6875 0.2890625 -0.5859375 -0.6875 0.2890625 0.578125 -0.6796875 0.1953125 -0.578125 -0.6796875 0.1953125 0.4765625 -0.71875 0.1015625 -0.4765625 -0.71875 0.1015625 0.375 -0.7421875 0.0625 -0.375 -0.7421875 0.0625 0.2265625 -0.78125 0.109375 -0.2265625 -0.78125 0.109375 0.1796875 -0.78125 0.296875 -0.1796875 -0.78125 0.296875 0.2109375 -0.78125 0.375 -0.2109375 -0.78125 0.375 0.234375 -0.7578125 0.359375 -0.234375 -0.7578125 0.359375 0.1953125 -0.7578125 0.296875 -0.1953125 -0.7578125 0.296875 0.2421875 -0.7578125 0.125 -0.2421875 -0.7578125 0.125 0.375 -0.7265625 0.0859375 -0.375 -0.7265625 0.0859375 0.4609375 -0.703125 0.1171875 -0.4609375 -0.703125 0.1171875 0.546875 -0.671875 0.2109375 -0.546875 -0.671875 0.2109375 0.5546875 -0.671875 0.28125 -0.5546875 -0.671875 0.28125 0.53125 -0.6796875 0.3359375 -0.53125 -0.6796875 0.3359375 0.4140625 -0.75 0.390625 -0.4140625 -0.75 0.390625 0.28125 -0.765625 0.3984375 -0.28125 -0.765625 0.3984375 0.3359375 -0.75 0.40625 -0.3359375 -0.75 0.40625 0.203125 -0.75 0.171875 -0.203125 -0.75 0.171875 0.1953125 -0.75 0.2265625 -0.1953125 -0.75 0.2265625 0.109375 -0.609375 0.4609375 -0.109375 -0.609375 0.4609375 0.1953125 -0.6171875 0.6640625 -0.1953125 -0.6171875 0.6640625 0.3359375 -0.59375 0.6875 -0.3359375 -0.59375 0.6875 0.484375 -0.5546875 0.5546875 -0.484375 -0.5546875 0.5546875 0.6796875 -0.4921875 0.453125 -0.6796875 -0.4921875 0.453125 0.796875 -0.4609375 0.40625 -0.796875 -0.4609375 0.40625 0.7734375 -0.375 0.1640625 -0.7734375 -0.375 0.1640625 0.6015625 -0.4140625 0 -0.6015625 -0.4140625 0 0.4375 -0.46875 -0.09375 -0.4375 -0.46875 -0.09375 0 -0.2890625 0.8984375 0 0.078125 0.984375 0 0.671875 -0.1953125 0 -0.1875 -0.4609375 0 -0.4609375 -0.9765625 0 -0.34375 -0.8046875 0 -0.3203125 -0.5703125 0 -0.28125 -0.484375 0.8515625 -0.0546875 0.234375 -0.8515625 -0.0546875 0.234375 0.859375 0.046875 0.3203125 -0.859375 0.046875 0.3203125 0.7734375 0.4375 0.265625 -0.7734375 0.4375 0.265625 0.4609375 0.703125 0.4375 -0.4609375 0.703125 0.4375 0.734375 -0.0703125 -0.046875 -0.734375 -0.0703125 -0.046875 0.59375 0.1640625 -0.125 -0.59375 0.1640625 -0.125 0.640625 0.4296875 -0.0078125 -0.640625 0.4296875 -0.0078125 0.3359375 0.6640625 0.0546875 -0.3359375 0.6640625 0.0546875 0.234375 -0.40625 -0.3515625 -0.234375 -0.40625 -0.3515625 0.1796875 -0.2578125 -0.4140625 -0.1796875 -0.2578125 -0.4140625 0.2890625 -0.3828125 -0.7109375 -0.2890625 -0.3828125 -0.7109375 0.25 -0.390625 -0.5 -0.25 -0.390625 -0.5 0.328125 -0.3984375 -0.9140625 -0.328125 -0.3984375 -0.9140625 0.140625 -0.3671875 -0.7578125 -0.140625 -0.3671875 -0.7578125 0.125 -0.359375 -0.5390625 -0.125 -0.359375 -0.5390625 0.1640625 -0.4375 -0.9453125 -0.1640625 -0.4375 -0.9453125 0.21875 -0.4296875 -0.28125 -0.21875 -0.4296875 -0.28125 0.2109375 -0.46875 -0.2265625 -0.2109375 -0.46875 -0.2265625 0.203125 -0.5 -0.171875 -0.203125 -0.5 -0.171875 0.2109375 -0.1640625 -0.390625 -0.2109375 -0.1640625 -0.390625 0.296875 0.265625 -0.3125 -0.296875 0.265625 -0.3125 0.34375 0.5390625 -0.1484375 -0.34375 0.5390625 -0.1484375 0.453125 0.3828125 0.8671875 -0.453125 0.3828125 0.8671875 0.453125 0.0703125 0.9296875 -0.453125 0.0703125 0.9296875 0.453125 -0.234375 0.8515625 -0.453125 -0.234375 0.8515625 0.4609375 -0.4296875 0.5234375 -0.4609375 -0.4296875 0.5234375 0.7265625 -0.3359375 0.40625 -0.7265625 -0.3359375 0.40625 0.6328125 -0.28125 0.453125 -0.6328125 -0.28125 0.453125 0.640625 -0.0546875 0.703125 -0.640625 -0.0546875 0.703125 0.796875 -0.125 0.5625 -0.796875 -0.125 0.5625 0.796875 0.1171875 0.6171875 -0.796875 0.1171875 0.6171875 0.640625 0.1953125 0.75 -0.640625 0.1953125 0.75 0.640625 0.4453125 0.6796875 -0.640625 0.4453125 0.6796875 0.796875 0.359375 0.5390625 -0.796875 0.359375 0.5390625 0.6171875 0.5859375 0.328125 -0.6171875 0.5859375 0.328125 0.484375 0.546875 0.0234375 -0.484375 0.546875 0.0234375 0.8203125 0.203125 0.328125 -0.8203125 0.203125 0.328125 0.40625 -0.1484375 -0.171875 -0.40625 -0.1484375 -0.171875 0.4296875 0.2109375 -0.1953125 -0.4296875 0.2109375 -0.1953125 0.890625 0.234375 0.40625 -0.890625 0.234375 0.40625 0.7734375 0.125 -0.140625 -0.7734375 0.125 -0.140625 1.039062 0.328125 -0.1015625 -1.039062 0.328125 -0.1015625 1.28125 0.4296875 0.0546875 -1.28125 0.4296875 0.0546875 1.351562 0.421875 0.3203125 -1.351562 0.421875 0.3203125 1.234375 0.421875 0.5078125 -1.234375 0.421875 0.5078125 1.023437 0.3125 0.4765625 -1.023437 0.3125 0.4765625 1.015625 0.2890625 0.4140625 -1.015625 0.2890625 0.4140625 1.1875 0.390625 0.4375 -1.1875 0.390625 0.4375 1.265625 0.40625 0.2890625 -1.265625 0.40625 0.2890625 1.210937 0.40625 0.078125 -1.210937 0.40625 0.078125 1.03125 0.3046875 -0.0390625 -1.03125 0.3046875 -0.0390625 0.828125 0.1328125 -0.0703125 -0.828125 0.1328125 -0.0703125 0.921875 0.21875 0.359375 -0.921875 0.21875 0.359375 0.9453125 0.2890625 0.3046875 -0.9453125 0.2890625 0.3046875 0.8828125 0.2109375 -0.0234375 -0.8828125 0.2109375 -0.0234375 1.039062 0.3671875 0 -1.039062 0.3671875 0 1.1875 0.4453125 0.09375 -1.1875 0.4453125 0.09375 1.234375 0.4453125 0.25 -1.234375 0.4453125 0.25 1.171875 0.4375 0.359375 -1.171875 0.4375 0.359375 1.023437 0.359375 0.34375 -1.023437 0.359375 0.34375 0.84375 0.2109375 0.2890625 -0.84375 0.2109375 0.2890625 0.8359375 0.2734375 0.171875 -0.8359375 0.2734375 0.171875 0.7578125 0.2734375 0.09375 -0.7578125 0.2734375 0.09375 0.8203125 0.2734375 0.0859375 -0.8203125 0.2734375 0.0859375 0.84375 0.2734375 0.015625 -0.84375 0.2734375 0.015625 0.8125 0.2734375 -0.015625 -0.8125 0.2734375 -0.015625 0.7265625 0.0703125 0 -0.7265625 0.0703125 0 0.71875 0.171875 -0.0234375 -0.71875 0.171875 -0.0234375 0.71875 0.1875 0.0390625 -0.71875 0.1875 0.0390625 0.796875 0.2109375 0.203125 -0.796875 0.2109375 0.203125 0.890625 0.265625 0.2421875 -0.890625 0.265625 0.2421875 0.890625 0.3203125 0.234375 -0.890625 0.3203125 0.234375 0.8125 0.3203125 -0.015625 -0.8125 0.3203125 -0.015625 0.8515625 0.3203125 0.015625 -0.8515625 0.3203125 0.015625 0.828125 0.3203125 0.078125 -0.828125 0.3203125 0.078125 0.765625 0.3203125 0.09375 -0.765625 0.3203125 0.09375 0.84375 0.3203125 0.171875 -0.84375 0.3203125 0.171875 1.039062 0.4140625 0.328125 -1.039062 0.4140625 0.328125 1.1875 0.484375 0.34375 -1.1875 0.484375 0.34375 1.257812 0.4921875 0.2421875 -1.257812 0.4921875 0.2421875 1.210937 0.484375 0.0859375 -1.210937 0.484375 0.0859375 1.046875 0.421875 0 -1.046875 0.421875 0 0.8828125 0.265625 -0.015625 -0.8828125 0.265625 -0.015625 0.953125 0.34375 0.2890625 -0.953125 0.34375 0.2890625 0.890625 0.328125 0.109375 -0.890625 0.328125 0.109375 0.9375 0.3359375 0.0625 -0.9375 0.3359375 0.0625 1 0.3671875 0.125 -1 0.3671875 0.125 0.9609375 0.3515625 0.171875 -0.9609375 0.3515625 0.171875 1.015625 0.375 0.234375 -1.015625 0.375 0.234375 1.054687 0.3828125 0.1875 -1.054687 0.3828125 0.1875 1.109375 0.390625 0.2109375 -1.109375 0.390625 0.2109375 1.085937 0.390625 0.2734375 -1.085937 0.390625 0.2734375 1.023437 0.484375 0.4375 -1.023437 0.484375 0.4375 1.25 0.546875 0.46875 -1.25 0.546875 0.46875 1.367187 0.5 0.296875 -1.367187 0.5 0.296875 1.3125 0.53125 0.0546875 -1.3125 0.53125 0.0546875 1.039062 0.4921875 -0.0859375 -1.039062 0.4921875 -0.0859375 0.7890625 0.328125 -0.125 -0.7890625 0.328125 -0.125 0.859375 0.3828125 0.3828125 -0.859375 0.3828125 0.3828125</float_array>
+ <technique_common>
+ <accessor source="#Suzanne-mesh-positions-array" count="507" stride="3">
+ <param name="X" type="float"/>
+ <param name="Y" type="float"/>
+ <param name="Z" type="float"/>
+ </accessor>
+ </technique_common>
+ </source>
+ <source id="Suzanne-mesh-normals">
+ <float_array id="Suzanne-mesh-normals-array" count="2829">0.6617073 -0.7218625 -0.202628 -0.6617073 -0.7218625 -0.202628 0.8268342 -0.4724767 -0.3051412 -0.8268342 -0.4724767 -0.3051412 0.4076249 -0.457034 -0.7905453 -0.4076249 -0.457034 -0.7905453 0.3790667 -0.767937 -0.5163151 -0.3790667 -0.767937 -0.5163151 -0.08588171 -0.8485118 -0.5221611 0.08588171 -0.8485118 -0.5221611 -0.2663503 -0.4569736 -0.8486652 0.2663503 -0.4569736 -0.8486652 -0.7824203 -0.5284768 -0.3294401 0.7605702 -0.5531419 -0.3399518 -0.4767313 -0.8581163 -0.1906925 0.464927 -0.8634359 -0.1957587 -0.464927 -0.8634359 0.1957587 0.464927 -0.8634359 0.1957587 -0.7655678 -0.5567766 0.3223443 0.7683498 -0.5488213 0.3292928 -0.2559869 -0.531665 0.8073432 0.2487366 -0.5076257 0.8248918 -0.08213782 -0.7939993 0.6023442 0.1016523 -0.8277404 0.5518269 0.3328619 -0.7846031 0.5230687 -0.38606 -0.7445443 0.5446204 0.4245669 -0.474516 0.7710886 -0.4059141 -0.5014233 0.7640736 0.8250747 -0.480799 0.2967895 -0.8298687 -0.4742107 0.2940106 0.6887994 -0.700474 0.186793 -0.6617073 -0.7218625 0.202628 0.839964 0.419982 0.3436216 -0.7815718 0.5437021 0.3058325 0.2073903 0.5184759 0.8295614 -0.2036532 0.5430754 0.8146131 -0.4056161 0.5070202 0.7605302 0.4380629 0.4122945 0.7988205 -0.8642417 0.3928371 0.3142697 0.7861462 0.5240975 0.3275609 -0.77825 0.5188333 -0.35375 0.77825 0.5188333 -0.35375 -0.4380629 0.4122945 -0.7988205 0.4380629 0.4122945 -0.7988205 0.2036532 0.5430754 -0.8146131 -0.2036532 0.5430754 -0.8146131 0.7683498 0.5488213 -0.3292928 -0.7683498 0.5488213 -0.3292928 0.4000391 -0.9143752 -0.06234371 -0.4000391 -0.9143752 -0.06234371 0.3069375 -0.9354286 -0.1753928 -0.3069375 -0.9354286 -0.1753928 0.09451156 -0.9784727 -0.1834636 -0.09451156 -0.9784727 -0.1834636 -0.06235319 -0.9976517 -0.02834236 0.06235319 -0.9976517 -0.02834236 -0.06235718 -0.9977157 0.02598214 0.06235718 -0.9977157 0.02598214 0.09956103 -0.9798906 0.1729218 -0.09956103 -0.9798906 0.1729218 0.3035711 -0.9383106 0.1655842 -0.3035711 -0.9383106 0.1655842 0.4001634 -0.9146592 0.05716615 -0.4001634 -0.9146592 0.05716615 0.1366916 -0.4647516 -0.8748265 -0.1054092 -0.5270463 -0.8432741 0.2302893 -0.4446966 -0.8655703 -0.1915565 -0.4693133 -0.8620042 0.5787932 -0.6403669 -0.5049047 -0.5787932 -0.6403669 -0.5049047 0.7763028 -0.6271709 -0.06332993 -0.7763028 -0.6271709 -0.06332993 0.7470849 -0.6550199 0.1131947 -0.7470849 -0.6550199 0.1131947 0.3746549 -0.4039526 -0.8345395 -0.3746549 -0.4039526 -0.8345395 0.355697 -0.5848173 -0.7290188 -0.4177436 -0.7033636 -0.5751261 0.6947315 -0.5841416 -0.4196746 -0.6947315 -0.5841416 -0.4196746 0.7028484 -0.5938889 -0.3915356 -0.5537071 -0.7776508 -0.2977713 0.3126936 -0.8859652 0.3424739 -0.822669 -0.4395081 0.3606221 0.5090584 -0.5662559 0.6482391 -0.504141 -0.5744863 0.6448315 0.5977159 -0.577105 0.5564941 -0.5977159 -0.577105 0.5564941 -0.04859292 -0.7531908 0.6560049 0.03713905 -0.7427814 0.6685032 -0.7103534 -0.6493535 0.2715478 0.7386325 -0.5589652 0.3768024 -0.6013168 -0.6013168 0.5261523 0.5773503 -0.5773503 0.5773503 0.5070232 -0.5902658 -0.6281034 -0.5364082 -0.7796863 -0.3230413 0.2226453 -0.8544765 -0.4693604 -0.2226453 -0.8544765 -0.4693604 -0.03484123 -0.8144149 -0.5792362 0.1073484 -0.8587875 -0.5009594 -0.0899018 -0.6138126 -0.7843162 0.07701516 -0.8139104 -0.5758634 0.05466765 -0.9840181 -0.1694698 -0.02788555 -0.5019403 -0.8644527 0.4259846 -0.9026816 -0.06085491 -0.1686746 -0.9347384 -0.3127508 0.335168 -0.924251 -0.1828188 -0.4349679 -0.8820183 -0.1812366 0.3578878 -0.8819378 -0.306761 -0.322277 -0.9054449 -0.2762374 0 -0.8944272 -0.4472136 -0.1598238 -0.9066929 0.390339 0.1598238 -0.9066929 0.390339 0.6818851 -0.6708869 -0.2914509 -0.1853964 -0.8485455 -0.4955791 0.05854284 -0.9952285 -0.07805711 -0.05854284 -0.9952285 -0.07805711 -0.006617546 -0.9727849 -0.2316154 -0.05851191 -0.9947026 -0.08451718 0.1008231 -0.6965958 -0.7103444 -0.1008231 -0.6965958 -0.7103444 0.1321637 -0.7929823 -0.5947368 -0.1321637 -0.7929823 -0.5947368 0.3128082 -0.9351661 -0.1661793 -0.3142697 -0.8642417 -0.3928371 0.3288394 -0.9437008 -0.03596681 -0.3288394 -0.9437008 -0.03596681 0.3232635 -0.9428519 -0.08081585 -0.3232635 -0.9428519 -0.08081585 -0.02321916 -0.9984245 0.05108213 0 -0.9977853 0.06651902 -0.004338562 -0.9978708 -0.06507849 0 -0.9977853 -0.06651902 0 -1 0 0.8446531 -0.0444554 -0.5334651 -0.8446531 -0.0444554 -0.5334651 0.9256246 0.2848076 0.2492066 -0.963518 0.1605863 0.2141151 0.06926429 0.4294387 0.9004359 -0.1018289 0.3869501 0.9164609 -1 0 0 0.6904563 -0.4707656 0.5492266 0.40711 -0.1791284 -0.8956419 -0.4319342 -0.2591605 -0.8638684 0.2873479 -0.766261 -0.5746958 -0.2873479 -0.7662611 -0.5746958 -0.6326428 -0.5596455 0.5353131 0.6326428 -0.5596455 0.5353131 0.08620607 -0.6249942 0.775855 -0.08620607 -0.6249942 0.775855 0.7532497 -0.591839 0.2869523 -0.7638854 -0.5729141 0.2970665 0.3416045 -0.7686102 -0.5408739 -0.3416045 -0.7686102 -0.5408739 0.05021667 -0.9708558 0.2343445 -0.03745025 -0.9737077 0.2247017 -0.1304348 -0.7826087 -0.6086957 0.1304348 -0.7826087 -0.6086957 -0.5059133 -0.8596048 0.07163369 0.5059133 -0.8596048 0.07163369 -0.5773503 -0.5773503 -0.5773503 0.5773503 -0.5773503 -0.5773503 0.5459861 -0.7184027 -0.4310416 -0.3319135 -0.9404218 0.07375854 0.3230722 -0.9458619 0.03113949 -0.2815465 -0.9572582 0.06624621 0.7356952 -0.5530576 0.3909988 -0.8752544 -0.4376272 0.2059422 0.8479984 -0.4239992 0.3179994 -0.897301 -0.3938155 0.1994002 0.8505471 -0.363756 0.3798041 -0.8505471 -0.363756 0.3798041 0.1783314 -0.8916575 -0.4161068 -0.2524265 -0.432731 -0.8654621 -0.1296407 -0.9723056 -0.1944611 0.1296407 -0.9723056 -0.1944611 -0.4472137 -0.8944273 0 0.4472137 -0.8944273 0 -0.158235 -0.2712601 0.9494103 0.158235 -0.2712601 0.9494103 -0.6463437 -0.209625 0.7336875 0.6463437 -0.209625 0.7336875 1 0 0 0.3051412 -0.1181191 -0.9449533 -0.3051412 -0.1181191 -0.9449533 0.02165228 -0.9527024 -0.3031325 -0.02165228 -0.9527024 -0.3031325 0.1352925 -0.9277203 -0.3478951 -0.1352925 -0.9277203 -0.3478951 -0.4681222 -0.8548318 -0.2238845 0.4681222 -0.8548318 -0.2238845 -0.2710385 -0.9621868 0.02710384 0.2710385 -0.9621868 0.02710384 -0.1717156 -0.9851052 -0.009037613 0.2594996 -0.9601487 0.1037998 -0.4332243 -0.7581425 -0.4873773 0.6684096 -0.5848584 -0.4595316 -0.1599437 -0.4478424 -0.8796905 0.1599437 -0.4478424 -0.8796905 0.3899756 -0.7073975 -0.5894979 -0.3899756 -0.7073975 -0.5894979 0.6546587 -0.6006662 -0.458936 -0.6546587 -0.6006662 -0.458936 0.5377842 -0.8352819 -0.1144222 -0.5377842 -0.8352819 -0.1144222 0.5656854 -0.8158925 0.1196642 -0.5773503 -0.8082904 0.1154701 0.4082483 -0.8164966 0.4082483 -0.5213825 -0.5440513 0.6573953 0.1795874 -0.5886477 0.7881892 -0.1795874 -0.5886477 0.7881892 0.1881442 -0.9219065 0.3386595 -0.1881442 -0.9219065 0.3386595 -0.08702963 -0.9573264 0.2755939 0.08702963 -0.9573264 0.2755939 0.08290266 -0.9533807 -0.2901594 -0.08290266 -0.9533807 -0.2901594 0.3015114 -0.9045341 -0.3015114 -0.3015114 -0.9045341 -0.3015114 -0.3765946 -0.4034942 -0.8338879 0.06311941 -0.9467917 -0.3155972 0.08233869 -0.6175402 -0.7822176 0.2015739 -0.3695522 -0.9070828 -0.3706729 -0.8839123 -0.285133 0.3706729 -0.8839123 -0.285133 -0.269181 -0.9613608 -0.05768162 0.4567587 -0.8881419 0.05075091 -0.2797135 -0.8041762 0.5244627 0.2797135 -0.8041762 0.5244627 -0.02132976 -0.831861 0.554574 0.04867923 -0.7301886 0.6815094 0.3777924 -0.6746293 0.6341515 -0.3378225 -0.783134 0.5220893 0.4987838 -0.6858277 0.5299578 -0.4987838 -0.6858277 0.5299578 0.5425201 -0.7685701 -0.339075 -0.5425201 -0.7685701 -0.339075 0.8304745 -0.5536497 -0.06151658 -0.8304745 -0.5536497 -0.06151658 0.7814038 -0.6139602 0.1116291 -0.7814038 -0.6139602 0.1116291 -0.4337956 0.1481253 0.8887521 0.4337956 0.1481253 0.8887521 -0.8515383 0.3670423 0.3743832 0.8515383 0.3670423 0.3743832 -0.2663518 0.4127252 0.8710423 0.2197156 0.4557065 0.8625873 0.5932461 0.3063166 0.7444657 -0.591352 0.2991008 0.7488936 0.3714273 0.3283632 0.868458 -0.3653076 0.2937924 0.88331 0.2900823 0.2833362 0.9140967 -0.2900823 0.2833362 0.9140967 0.8872826 0.4412432 0.1342914 -0.7964468 0.5900586 0.1323001 0.5107806 0.5450229 -0.6648709 -0.5107806 0.5450229 -0.6648709 0.3694844 0.3600708 -0.856639 -0.3694844 0.3600708 -0.856639 0.361678 0.8487375 -0.3857898 -0.1649085 0.7289437 -0.6644142 0.19518 0.9759002 -0.09759002 -0.3011077 0.9535076 -0.01254612 -0.01072961 0.8261798 -0.5633044 -0.2562453 0.9151617 -0.311155 0.1532956 0.2134115 -0.9648607 -0.1532956 0.2134115 -0.9648607 0.1260295 0.2406017 -0.9624071 -0.1260295 0.2406017 -0.9624071 0.9395648 0.3041002 0.1572932 -0.9395648 0.3041002 0.1572932 0.9278163 0.3245921 0.1838397 -0.9278163 0.3245921 0.1838397 0.2192214 0.972662 0.07662105 -0.2192214 0.972662 0.07662105 0.1210663 0.9912303 -0.05296647 0.1496834 0.9194838 -0.3635168 0.9093759 0.392745 0.1370653 -0.3705765 0.6348635 -0.6779538 0.9202126 0.3672108 0.1355182 -0.9202126 0.3672108 0.1355182 0.9172859 0.2006562 0.3439822 -0.9456937 0.185027 0.2672613 0.900405 0.2380051 0.3641765 -0.9337134 0.2214577 0.2813111 0.8945093 -0.1084253 0.4337015 -0.9501479 0.1921647 0.2455438 0.1596174 0.239426 -0.9577043 -0.1834971 0.5898122 -0.7864162 0.3692765 0.8010123 -0.4711837 -0.3726855 0.7966327 -0.4759014 0.2985938 0.4821331 -0.8236441 -0.3262702 0.4445879 -0.8341999 0.2995353 0.1368435 -0.9442206 -0.2995353 0.1368435 -0.9442206 0.3286553 0.2290627 -0.9162511 -0.3286553 0.2290627 -0.9162511 0.830482 0.4463135 0.3333227 -0.8641914 -0.1696376 -0.4737049 0.9165619 -0.1414447 -0.3740427 -0.9165619 -0.1414447 -0.3740427 0.2950267 0.9544076 -0.04544794 -0.4189025 0.8793254 -0.2265115 0.1271882 -0.2260337 0.9657806 -0.1119178 -0.2468149 0.9625783 0.1319618 0.1787508 0.9750048 -0.1319618 0.1787508 0.9750048 0.3877995 0.6827532 0.6192412 -0.3877995 0.6827532 0.6192412 0.4951004 0.1100223 0.8618414 -0.4951004 0.1100223 0.8618414 0.2561333 -0.720238 0.6447116 -0.2561333 -0.720238 0.6447116 0.5965515 -0.1479053 0.7888284 -0.5965515 -0.1479053 0.7888284 0.7124531 0.1899875 0.6755111 -0.7124531 0.1899875 0.6755111 0.7104427 0.6904168 0.1363668 -0.6304094 0.734323 0.2517019 0.6822971 0.6933375 0.2318485 -0.6822971 0.6933375 0.2318485 0.6573953 0.2040192 0.7254017 -0.6573953 0.2040192 0.7254017 0.7289322 -0.1261613 0.6728605 -0.7289322 -0.1261613 0.6728605 0.7791181 -0.4764304 0.4074176 -0.7791181 -0.4764304 0.4074176 0.3669272 0.289789 0.8839609 -0.3237903 0.07195335 0.9433889 0.2854303 -0.7276712 0.6237182 -0.1548168 -0.8473082 0.5080362 -0.1702333 0.9792801 0.1096864 0.1781741 0.9799579 0.08908706 0.292531 -0.7697092 0.5674271 -0.292531 -0.7697092 0.5674271 -0.1615719 -0.9694316 0.1846536 0.1615719 -0.9694316 0.1846536 0.8680965 0.4883043 0.08925992 -0.9339511 -0.2772905 0.225489 0.9276127 -0.3656799 0.07624214 -0.9276127 -0.3656799 0.07624214 0.9749749 -0.0489673 0.2168554 -0.9749749 -0.0489673 0.2168554 0.9816547 0.1882348 -0.03036046 -0.9955896 0.02880197 0.0892862 0.746645 -0.02849036 -0.6646124 -0.6374072 -0.09146648 -0.7650792 0.3722676 -0.08472293 -0.9242504 -0.3720037 -0.08454626 -0.9243729 0.39859 -0.2733785 -0.8754373 -0.39859 -0.2733785 -0.8754373 0.6327885 -0.1246607 -0.7642242 -0.6327885 -0.1246607 -0.7642242 0.7324889 -0.2406749 -0.6368169 -0.7324889 -0.2406749 -0.6368169 0.2637323 -0.8532518 -0.4498963 -0.2637323 -0.8532518 -0.4498963 0.5880637 0.7482819 -0.3070104 -0.5236076 0.7858749 -0.3289924 0.4693537 0.8497774 -0.2399703 -0.5396378 0.7726849 -0.3342889 0.4462593 0.2941254 -0.8451881 -0.2143616 0.5082443 -0.8341085 0.6973409 0.2770684 -0.6610211 -0.7365212 0.2808087 -0.6153723 0.4972049 0.7473325 -0.4407737 -0.4972049 0.7473325 -0.4407737 0.3690983 -0.8844432 0.2855289 -0.3244428 -0.8111071 0.4866642 0.4467081 -0.8893553 0.09746354 -0.4467081 -0.8893553 0.09746354 0.3188384 -0.9266241 0.199274 -0.1816593 -0.9833299 -0.007898211 0.2076135 -0.9746302 -0.08362209 -0.2924779 -0.9532612 -0.07582759 0.3397551 -0.9369006 0.08236485 -0.5847051 -0.7809149 -0.2197549 0.595688 -0.7049408 -0.3849861 -0.595688 -0.7049408 -0.3849861 0.4843178 -0.6738336 0.5580184 -0.4843178 -0.6738336 0.5580184 -0.2675267 -0.4864122 0.8317648 0.2675267 -0.4864122 0.8317648 -0.857614 -0.4637469 0.2223443 0.7885024 -0.5677217 0.2365507 -0.5256732 -0.7717329 -0.3579051 0.5241765 -0.7741684 -0.3548272 0.4663101 -0.6508912 -0.599079 -0.4389761 -0.7290139 -0.5252036 0.7103582 -0.5355876 -0.4566588 -0.7103582 -0.5355876 -0.4566588 0.7507172 0.2460684 -0.6130857 -0.6302015 -0.1282387 -0.7657682 -0.1788077 -0.9394505 0.2923365 0.217521 -0.9370135 0.2732956 0.9041857 0.2332351 -0.3578402 -0.9041857 0.2332351 -0.3578402 0.03998398 -0.9396243 0.3398641 -0.03998398 -0.9396243 0.3398641 0.2734082 -0.3220974 0.9063671 -0.2734082 -0.3220974 0.9063671 0.4479547 -0.7737399 -0.4479547 -0.7177406 -0.6755205 0.1688801 0.5533716 -0.622543 -0.5533716 -0.9007817 -0.1501303 -0.4074965 0.5723839 -0.7582229 -0.3122094 -0.5815153 -0.6242738 -0.5216534 0.5596814 -0.6169216 -0.5533214 -0.613754 -0.7464576 -0.2571132 0.9551076 0.2469593 -0.1636477 -0.171249 -0.9807899 -0.09340852 0.9227122 0.08254653 -0.376548 -0.8716733 0.206296 -0.4445534 0.997202 0.07252377 -0.01813089 -0.997202 0.07252377 -0.01813089 0.689496 -0.2883347 -0.6644234 -0.689496 -0.2883347 -0.6644234 0.7814988 -0.0882337 -0.6176362 -0.7929823 -0.1321637 -0.5947368 0.7022469 -0.1170411 -0.7022469 -0.7022469 -0.1170411 -0.7022469 0.1240082 -0.02066802 0.992066 -0.2407717 0.1203858 0.9630869 0.9434564 -0.1048285 0.3144854 -0.9251321 -0.1541886 0.3469245 0.6213365 -0.103556 -0.7766706 -0.6213365 -0.103556 -0.7766706 0 0 1 0.6197241 -0.3741731 -0.6898816 -0.6197241 -0.3741731 -0.6898816 0.2752409 -0.3853373 -0.8807711 -0.2752409 -0.3853373 -0.8807711 -0.7929301 0.3089338 -0.5251874 0.7929301 0.3089338 -0.5251874 -0.8096172 0.5343473 0.2428851 0.8537656 0.4656903 0.2328451 -0.5621402 0.08030575 0.8231339 0.5433054 0.4656903 0.6985355 -0.007070839 -0.1414178 0.9899248 0.109559 0.01565128 0.9938571 0.1046042 -0.99374 0.03922653 -0.1737772 -0.9847377 0.009654283 0.2461057 -0.965492 0.08519041 -0.4134492 -0.9095882 0.04134488 0.3009453 -0.9491352 0.09259855 -0.3009453 -0.9491352 0.09259855 0.210358 -0.9775462 0.01237398 -0.1220272 -0.9914714 0.04576021 -0.00991553 -0.9221491 0.3867077 0.00991553 -0.9221491 0.3867077 0.3786653 -0.9248172 -0.03641009 -0.4244213 -0.9048982 -0.03203177 0.2529822 -0.9486834 -0.1897366 -0.2569888 -0.9637079 0.07227808 -0.4870486 -0.6262053 0.6088108 0.2981424 -0.5962848 0.745356 0.6693122 -0.7207977 0.1801994 -0.6693122 -0.7207977 0.1801994 0.4388195 -0.8758624 -0.2007554 -0.4723203 -0.8587642 -0.1985892 0.5786098 -0.8046292 -0.1333515 -0.2975268 -0.8639723 -0.4062386 0.5001965 -0.8182405 0.2833483 -0.5001965 -0.8182405 0.2833483 0.2979641 -0.757979 0.580246 -0.2979641 -0.757979 0.580246 0.09292387 0.09439885 -0.9911882 -0.09292387 0.09439885 -0.9911882 0.4687835 -0.144241 -0.8714566 -0.4687835 -0.144241 -0.8714566 0.9308896 -0.2624169 -0.2541301 -0.9264149 -0.2850507 -0.2459712 0.846495 0.05951917 0.5290594 -0.8266631 0.003473341 0.5626866 -0.2510706 0.2145223 0.9438983 0.214568 0.3156626 0.9242931 -0.4840985 0.03612673 0.8742675 0.4195818 0.2011693 0.8851453 -0.5256307 0.8507076 -0.002993285 0.5470265 0.8369916 -0.01439541 -0.1466462 0.9891346 0.01038569 0.1466462 0.9891346 0.01038569 0.4046244 0.9140966 0.0265811 -0.4046244 0.9140966 0.0265811 -0.8073093 -0.004097998 0.5901144 0.7330108 -0.04717391 0.6785793 0.419982 0.8781441 -0.229081 -0.419982 0.8781441 -0.229081 -0.06868392 0.0817666 -0.994282 0.06868392 0.0817666 -0.994282 0.6713447 -0.7144586 -0.197092 -0.6713447 -0.7144586 -0.197092 0.8325802 -0.4645556 -0.3016595 -0.8325802 -0.4645556 -0.3016595 0.4257578 -0.4289832 -0.7966831 -0.4257578 -0.4289832 -0.7966831 0.3264977 -0.8049858 -0.4953759 -0.3264977 -0.8049858 -0.4953759 -0.0649296 -0.8181129 -0.5713804 0.0649296 -0.8181129 -0.5713804 -0.2737893 -0.4833564 -0.8315083 0.2737893 -0.4833564 -0.8315083 -0.7605702 -0.5531419 -0.3399518 0.7824203 -0.5284768 -0.3294401 -0.464927 -0.8634359 -0.1957587 0.4767313 -0.8581163 -0.1906925 -0.4983428 -0.8478299 0.1812155 0.4983428 -0.8478299 0.1812155 -0.7683498 -0.5488213 0.3292928 0.7655678 -0.5567766 0.3223443 -0.2487366 -0.5076257 0.8248918 0.2559869 -0.531665 0.8073432 -0.1016523 -0.8277404 0.5518269 0.08213782 -0.7939993 0.6023442 0.38606 -0.7445443 0.5446204 -0.3328619 -0.7846031 0.5230687 0.4059141 -0.5014233 0.7640736 -0.4245669 -0.474516 0.7710886 0.8298687 -0.4742107 0.2940106 -0.8250747 -0.480799 0.2967895 0.6617073 -0.7218625 0.202628 -0.6887994 -0.700474 0.186793 0.7815718 0.5437021 0.3058325 -0.839964 0.419982 0.3436216 0.2036532 0.5430754 0.8146131 -0.2073903 0.5184759 0.8295614 -0.4380629 0.4122945 0.7988205 0.4056161 0.5070202 0.7605302 -0.7861462 0.5240975 0.3275609 0.8642417 0.3928371 0.3142697 -0.8519428 0.3975733 -0.3407771 0.8519428 0.3975733 -0.3407771 -0.4056161 0.5070202 -0.7605302 0.4056161 0.5070202 -0.7605302 0.2073903 0.5184759 -0.8295614 -0.2073903 0.5184759 -0.8295614 0.8297399 0.4148699 -0.3733829 -0.8297399 0.4148699 -0.3733829 0.1054092 -0.5270463 -0.8432741 -0.1366916 -0.4647516 -0.8748265 0.1915565 -0.4693133 -0.8620042 -0.2302893 -0.4446966 -0.8655703 0.5958796 -0.6810052 -0.4256283 -0.5958796 -0.6810052 -0.4256283 0.7563365 -0.6535012 -0.02985537 -0.7563365 -0.6535012 -0.02985537 0.8069292 -0.5866119 0.0689336 -0.8069292 -0.5866119 0.0689336 0.2333729 -0.5834324 -0.7779099 -0.2333729 -0.5834324 -0.7779099 0.4177436 -0.7033636 -0.5751261 -0.355697 -0.5848173 -0.7290188 0.6871914 -0.5933728 -0.419138 -0.6871914 -0.5933728 -0.419138 0.5537071 -0.7776508 -0.2977713 -0.7028484 -0.5938889 -0.3915356 0.822669 -0.4395081 0.3606221 -0.3126936 -0.8859652 0.3424739 0.504141 -0.5744863 0.6448315 -0.5090584 -0.5662559 0.6482391 0.6154575 -0.6154575 0.492366 -0.6154575 -0.6154575 0.492366 -0.03713905 -0.7427814 0.6685032 0.04859292 -0.7531908 0.6560049 -0.7386325 -0.5589652 0.3768024 0.7103534 -0.6493535 0.2715478 -0.5773503 -0.5773503 0.5773503 0.6013168 -0.6013168 0.5261523 0.5364082 -0.7796863 -0.3230413 -0.5070232 -0.5902658 -0.6281034 0.2180755 -0.8561482 -0.4684584 -0.2180755 -0.8561482 -0.4684584 -0.1073484 -0.8587875 -0.5009594 0.03484123 -0.8144149 -0.5792362 -0.07701516 -0.8139104 -0.5758634 0.0899018 -0.6138126 -0.7843162 0.02788555 -0.5019403 -0.8644527 -0.05466765 -0.9840181 -0.1694698 0.1686746 -0.9347384 -0.3127508 -0.4259846 -0.9026816 -0.06085491 0.4349679 -0.8820183 -0.1812366 -0.335168 -0.924251 -0.1828188 0.322277 -0.9054449 -0.2762374 -0.3578878 -0.8819378 -0.306761 0.4284112 -0.8911396 0.1494457 -0.4284112 -0.8911396 0.1494457 -0.03165441 -0.981288 -0.1899267 0.03165441 -0.981288 -0.1899267 0.1853964 -0.8485455 -0.4955791 -0.6818851 -0.6708869 -0.2914509 0.2623156 -0.8993679 -0.3497542 -0.2623156 -0.8993679 -0.3497542 0.05851191 -0.9947026 -0.08451718 0.006617546 -0.9727849 -0.2316154 -0.01355689 -0.7591869 -0.6507316 0.01355689 -0.7591869 -0.6507316 0.2404278 -0.8014261 -0.5476412 -0.2404278 -0.8014261 -0.5476412 0.3142697 -0.8642417 -0.3928371 -0.3128082 -0.9351661 -0.1661793 0.2821285 -0.9592369 -0.01638162 -0.2821285 -0.9592369 -0.01638162 0.3272507 -0.9340282 -0.1431722 -0.3272507 -0.9340282 -0.1431722 0.02321916 -0.9984245 0.05108213 0.004338562 -0.9978708 -0.06507849 0.7826087 0.1304348 -0.6086957 -0.7826087 0.1304348 -0.6086957 0.963518 0.1605863 0.2141151 -0.9256246 0.2848076 0.2492066 0.1018289 0.3869501 0.9164609 -0.06926429 0.4294387 0.9004359 -0.6904563 -0.4707656 0.5492266 0.4319342 -0.2591605 -0.8638684 -0.40711 -0.1791284 -0.8956419 0.2873479 -0.7662611 -0.5746958 -0.2873479 -0.766261 -0.5746958 -0.6666667 -0.3333333 0.6666667 0.6666667 -0.3333333 0.6666667 0.1347634 -0.5727446 0.8085806 -0.1347634 -0.5727446 0.8085806 0.7638854 -0.5729141 0.2970665 -0.7532497 -0.591839 0.2869523 0.4115966 -0.3086975 -0.8574929 -0.4115966 -0.3086975 -0.8574929 0.03745025 -0.9737077 0.2247017 -0.05021667 -0.9708558 0.2343445 0.1304348 -0.9565218 -0.2608696 -0.1304348 -0.9565218 -0.2608696 -0.06311941 -0.568075 -0.8205528 0.06311941 -0.568075 -0.8205528 0.7324671 -0.6197798 0.2817181 -0.7324671 -0.6197798 0.2817181 0.3319135 -0.9404218 0.07375854 -0.5459861 -0.7184027 -0.4310416 0.2815465 -0.9572582 0.06624621 -0.3230722 -0.9458619 0.03113949 0.8752544 -0.4376272 0.2059422 -0.7356952 -0.5530576 0.3909988 0.897301 -0.3938155 0.1994002 -0.8479984 -0.4239992 0.3179994 0.9586452 -0.2767452 0.06641882 -0.9586452 -0.2767452 0.06641882 0.2524265 -0.432731 -0.8654621 -0.1783314 -0.8916575 -0.4161068 -0.1751125 -0.9631189 -0.2042979 0.1751125 -0.9631189 -0.2042979 -0.1219421 -0.9755373 -0.1829132 0.1219421 -0.9755373 -0.1829132 -0.1561737 -0.9370427 0.3123475 0.1561737 -0.9370427 0.3123475 -0.7238424 -0.07619392 0.6857454 0.7238424 -0.07619392 0.6857454 0.04783648 -0.9567298 -0.2870189 -0.04783648 -0.9567298 -0.2870189 -0.5488213 -0.7683499 -0.3292928 0.5488213 -0.7683499 -0.3292928 -0.4944805 -0.8618089 -0.1130241 0.4944805 -0.8618089 -0.1130241 -0.2594996 -0.9601487 0.1037998 0.1717156 -0.9851052 -0.009037613 -0.6684096 -0.5848584 -0.4595316 0.4332243 -0.7581425 -0.4873773 -0.1156166 -0.7630695 -0.6358913 0.1156166 -0.7630695 -0.6358913 0.4241816 -0.6589964 -0.621123 -0.4241816 -0.6589964 -0.621123 0.4766541 -0.8039091 -0.355712 -0.4766541 -0.8039091 -0.355712 0.5870963 -0.8051607 -0.08387088 -0.5870963 -0.8051607 -0.08387088 0.5773503 -0.8082904 0.1154701 -0.5656854 -0.8158925 0.1196642 0.5213825 -0.5440513 0.6573953 -0.4082483 -0.8164966 0.4082483 0.3357691 -0.8753979 0.3477608 -0.3357691 -0.8753979 0.3477608 0.1451717 -0.9145816 0.3774464 -0.1451717 -0.9145816 0.3774464 0.03007978 -0.9725808 0.2306119 -0.03007978 -0.9725808 0.2306119 0.4475494 -0.760834 -0.4699269 -0.4475494 -0.760834 -0.4699269 0.2627053 -0.9382334 -0.225176 -0.2627053 -0.9382334 -0.225176 -0.06311941 -0.9467917 -0.3155972 0.3765946 -0.4034942 -0.8338879 -0.2015739 -0.3695522 -0.9070828 -0.08233869 -0.6175402 -0.7822176 -0.3356243 -0.9109803 -0.2397316 0.3356243 -0.9109803 -0.2397316 -0.4567587 -0.8881419 0.05075091 0.269181 -0.9613608 -0.05768162 -0.02467632 -0.9130239 0.4071593 0.02467632 -0.9130239 0.4071593 -0.04867923 -0.7301886 0.6815094 0.02132976 -0.831861 0.554574 0.3378225 -0.783134 0.5220893 -0.3777924 -0.6746293 0.6341515 0.7894737 -0.5263158 -0.3157895 -0.7894737 -0.5263158 -0.3157895 0.8069701 -0.5850533 -0.080697 -0.8069701 -0.5850533 -0.080697 0.7867959 -0.6052276 0.1210455 -0.7867959 -0.6052276 0.1210455 -0.6357073 0.3632613 0.6811149 0.6357073 0.3632613 0.6811149 -0.8506798 0.3782634 0.365049 0.8506798 0.3782634 0.365049 -0.2197156 0.4557065 0.8625873 0.2663518 0.4127252 0.8710423 0.591352 0.2991008 0.7488936 -0.5932461 0.3063166 0.7444657 0.3653076 0.2937924 0.88331 -0.3714273 0.3283632 0.868458 0.2760493 0.2915287 0.9158645 -0.2760493 0.2915287 0.9158645 0.7964468 0.5900586 0.1323001 -0.8872826 0.4412432 0.1342914 0.5441568 0.3711687 -0.7524144 -0.5441568 0.3711687 -0.7524144 0.4027386 0.549189 -0.7322521 -0.4027386 0.549189 -0.7322521 0.1649085 0.7289437 -0.6644142 -0.361678 0.8487375 -0.3857898 0.3011077 0.9535076 -0.01254612 -0.19518 0.9759002 -0.09759002 0.2562453 0.9151617 -0.311155 0.01072961 0.8261798 -0.5633044 0.07785052 0.06631714 -0.9947569 -0.07785052 0.06631714 -0.9947569 0.1094499 0.2089498 -0.9717823 -0.1094499 0.2089498 -0.9717823 0.8150442 0.1405248 -0.5620994 -0.8150442 0.1405248 -0.5620994 0.9358481 0.3235813 0.1395841 -0.9358481 0.3235813 0.1395841 0.113195 0.9931954 -0.02738589 -0.113195 0.9931954 -0.02738589 -0.1496834 0.9194838 -0.3635168 -0.1210663 0.9912303 -0.05296647 0.3705765 0.6348635 -0.6779538 -0.9093759 0.392745 0.1370653 0.9192596 0.3681883 0.1392817 -0.9192596 0.3681883 0.1392817 0.9456937 0.185027 0.2672613 -0.9172859 0.2006562 0.3439822 0.9337134 0.2214577 0.2813111 -0.900405 0.2380051 0.3641765 0.9501479 0.1921647 0.2455438 -0.8945093 -0.1084253 0.4337015 0.1834971 0.5898122 -0.7864162 -0.1596174 0.239426 -0.9577043 0.3726855 0.7966327 -0.4759014 -0.3692765 0.8010123 -0.4711837 0.3262702 0.4445879 -0.8341999 -0.2985938 0.4821331 -0.8236441 0.2619684 0.1216745 -0.9573755 -0.2619684 0.1216745 -0.9573755 0.2996288 0.1361949 -0.9442847 -0.2996288 0.1361949 -0.9442847 0.8641914 -0.1696376 -0.4737049 -0.830482 0.4463135 0.3333227 0.6868954 -0.3520879 -0.6357743 -0.6868954 -0.3520879 -0.6357743 0.4189025 0.8793254 -0.2265115 -0.2950267 0.9544076 -0.04544794 0.1119178 -0.2468149 0.9625783 -0.1271882 -0.2260337 0.9657806 0.1208353 0.1946791 0.9733956 -0.1208353 0.1946791 0.9733956 0.3139982 0.7584519 0.5711005 -0.3139982 0.7584519 0.5711005 0.3230511 0.1817162 0.928772 -0.3230511 0.1817162 0.928772 0.04522031 -0.604308 0.7954666 -0.04522031 -0.604308 0.7954666 0.614433 -0.173779 0.7695928 -0.614433 -0.173779 0.7695928 0.6934513 0.2211965 0.6857094 -0.6934513 0.2211965 0.6857094 0.6304094 0.734323 0.2517019 -0.7104427 0.6904168 0.1363668 0.3179097 0.7573732 0.5703675 -0.3179097 0.7573732 0.5703675 0.6289424 0.1524708 0.7623544 -0.6289424 0.1524708 0.7623544 0.7088277 -0.1751994 0.6832777 -0.7088277 -0.1751994 0.6832777 0.6885315 -0.615842 0.3829662 -0.6885315 -0.615842 0.3829662 0.3237903 0.07195335 0.9433889 -0.3669272 0.289789 0.8839609 0.1548168 -0.8473082 0.5080362 -0.2854303 -0.7276712 0.6237182 -0.1781741 0.9799579 0.08908706 0.1702333 0.9792801 0.1096864 -0.2638457 0.1870905 0.9462466 0.2638457 0.1870905 0.9462466 0.9339511 -0.2772905 0.225489 -0.8680965 0.4883043 0.08925992 0.9758065 -0.1800325 0.124056 -0.9758065 -0.1800325 0.124056 0.9612813 0.2329603 0.1472002 -0.9612813 0.2329603 0.1472002 0.9955896 0.02880197 0.0892862 -0.9816547 0.1882348 -0.03036046 0.6374072 -0.09146648 -0.7650792 -0.746645 -0.02849036 -0.6646124 0.3720037 -0.08454626 -0.9243729 -0.3722676 -0.08472293 -0.9242504 0.5281225 -0.1522346 -0.8354108 -0.5281225 -0.1522346 -0.8354108 0.3070173 -0.794633 -0.5237354 -0.3070173 -0.794633 -0.5237354 0.5236076 0.7858749 -0.3289924 -0.5880637 0.7482819 -0.3070104 0.5396378 0.7726849 -0.3342889 -0.4693537 0.8497774 -0.2399703 0.2143616 0.5082443 -0.8341085 -0.4462593 0.2941254 -0.8451881 0.7365212 0.2808087 -0.6153723 -0.6973409 0.2770684 -0.6610211 0.3244428 -0.8111071 0.4866642 -0.3690983 -0.8844432 0.2855289 0.464866 -0.8465455 0.2593463 -0.464866 -0.8465455 0.2593463 0.1816593 -0.9833299 -0.007898211 -0.3188384 -0.9266241 0.199274 0.2924779 -0.9532612 -0.07582759 -0.2076135 -0.9746302 -0.08362209 0.5847051 -0.7809149 -0.2197549 -0.3397551 -0.9369006 0.08236485 0.6508971 -0.7339904 -0.1938842 -0.6508971 -0.7339904 -0.1938842 0.4074906 -0.5200867 0.7506406 -0.4074906 -0.5200867 0.7506406 -0.2654835 -0.4911444 0.8296359 0.2654835 -0.4911444 0.8296359 -0.7885024 -0.5677217 0.2365507 0.857614 -0.4637469 0.2223443 -0.5241765 -0.7741684 -0.3548272 0.5256732 -0.7717329 -0.3579051 0.4389761 -0.7290139 -0.5252036 -0.4663101 -0.6508912 -0.599079 0.6888023 -0.574002 -0.4428015 -0.6888023 -0.574002 -0.4428015 0.6302015 -0.1282387 -0.7657682 -0.7507172 0.2460684 -0.6130857 -0.217521 -0.9370135 0.2732956 0.1788077 -0.9394505 0.2923365 0.9045597 0.1792052 -0.3868557 -0.9045597 0.1792052 -0.3868557 0.1781741 -0.9799579 -0.08908706 -0.1781741 -0.9799579 -0.08908706 -0.2335159 -0.3748545 0.8971926 0.2335159 -0.3748545 0.8971926 0.7177406 -0.6755205 0.1688801 -0.4479547 -0.7737399 -0.4479547 0.5312708 -0.6133763 0.5843979 -0.5312708 -0.6133763 0.5843979 0.9007817 -0.1501303 -0.4074965 -0.5533716 -0.622543 -0.5533716 0.5815153 -0.6242738 -0.5216534 -0.5723839 -0.7582229 -0.3122094 0.613754 -0.7464576 -0.2571132 -0.5596814 -0.6169216 -0.5533214 0.171249 -0.9807899 -0.09340852 -0.9551076 0.2469593 -0.1636477 0.8716733 0.206296 -0.4445534 -0.9227122 0.08254653 -0.376548 0.7661046 -0.09089374 -0.6362563 -0.7661046 -0.09089374 -0.6362563 0.7929823 -0.1321637 -0.5947368 -0.7814988 -0.0882337 -0.6176362 0.2407717 0.1203858 0.9630869 -0.1240082 -0.02066802 0.992066 0.9251321 -0.1541886 0.3469245 -0.9434564 -0.1048285 0.3144854 0.7071068 0 -0.7071068 -0.7071068 0 -0.7071068 -0.01571154 -0.1414039 0.9898274 0.01571154 -0.1414039 0.9898274 0.6265721 -0.2955529 -0.721149 -0.6265721 -0.2955529 -0.721149 0.2714446 -0.335314 -0.9021543 -0.2714446 -0.335314 -0.9021543 -0.8651252 0.1266037 -0.4853141 0.8651252 0.1266037 -0.4853141 -0.8537656 0.4656903 0.2328451 0.8096172 0.5343473 0.2428851 -0.5433054 0.4656903 0.6985355 0.5621402 0.08030575 0.8231339 -0.109559 0.01565128 0.9938571 0.007070839 -0.1414178 0.9899248 0.1737772 -0.9847377 0.009654283 -0.1046042 -0.99374 0.03922653 0.4134492 -0.9095882 0.04134488 -0.2461057 -0.965492 0.08519041 0.3228001 -0.9453432 -0.04611426 -0.3228001 -0.9453432 -0.04611426 0.1220272 -0.9914714 0.04576021 -0.210358 -0.9775462 0.01237398 0.5678808 -0.8005067 0.1915742 -0.5678808 -0.8005067 0.1915742 0.4244213 -0.9048982 -0.03203177 -0.3786653 -0.9248172 -0.03641009 0.2569888 -0.9637079 0.07227808 -0.2529822 -0.9486834 -0.1897366 0.1350789 -0.9905791 -0.02251315 -0.1350789 -0.9905791 -0.02251315 -0.2981424 -0.5962848 0.745356 0.4870486 -0.6262053 0.6088108 0.5570861 -0.8170595 -0.1485562 -0.5570861 -0.8170595 -0.1485562 0.4723203 -0.8587642 -0.1985892 -0.4388195 -0.8758624 -0.2007554 0.2975268 -0.8639723 -0.4062386 -0.5786098 -0.8046292 -0.1333515 0.5770894 -0.7874866 0.2164085 -0.5770894 -0.7874866 0.2164085 0.0931167 0.06924057 -0.9932447 -0.0931167 0.06924057 -0.9932447 0.5160672 0.08120852 -0.8526897 -0.5160672 0.08120852 -0.8526897 0.9264149 -0.2850507 -0.2459712 -0.9308896 -0.2624169 -0.2541301 0.8266631 0.003473341 0.5626866 -0.846495 0.05951917 0.5290594 -0.214568 0.3156626 0.9242931 0.2510706 0.2145223 0.9438983 -0.4195818 0.2011693 0.8851453 0.4840985 0.03612673 0.8742675 -0.5470265 0.8369916 -0.01439541 0.5256307 0.8507076 -0.002993285 -0.2555612 0.9638834 -0.07494819 0.2555612 0.9638834 -0.07494819 -0.7330108 -0.04717391 0.6785793 0.8073093 -0.004097998 0.5901144 0.6843532 0.7087944 -0.1710883 -0.6843532 0.7087944 -0.1710883 -0.3603765 0.4290197 -0.828294 0.3603765 0.4290197 -0.828294</float_array>
+ <technique_common>
+ <accessor source="#Suzanne-mesh-normals-array" count="943" stride="3">
+ <param name="X" type="float"/>
+ <param name="Y" type="float"/>
+ <param name="Z" type="float"/>
+ </accessor>
+ </technique_common>
+ </source>
+ <source id="Suzanne-mesh-map-0">
+ <float_array id="Suzanne-mesh-map-0-array" count="5802">0.890955 0.590063 0.860081 0.560115 0.904571 0.559404 0.856226 0.850547 0.888398 0.821999 0.90064 0.853232 0.904571 0.559404 0.853018 0.521562 0.920166 0.524546 0.847458 0.888748 0.90064 0.853232 0.914672 0.888748 0.860081 0.560115 0.798481 0.569535 0.853018 0.521562 0.795104 0.838402 0.856226 0.850547 0.847458 0.888748 0.870622 0.589649 0.8289 0.590771 0.860081 0.560115 0.826436 0.818537 0.868067 0.82151 0.856226 0.850547 0.854402 0.604754 0.828171 0.633354 0.8289 0.590771 0.827598 0.775964 0.852534 0.8057 0.826436 0.818537 0.8289 0.590771 0.791018 0.645443 0.798481 0.569535 0.791018 0.762238 0.826436 0.818537 0.795104 0.838402 0.855181 0.668527 0.791018 0.645443 0.828171 0.633354 0.856142 0.742025 0.791018 0.762238 0.844839 0.707525 0.867508 0.642291 0.828171 0.633354 0.854107 0.625459 0.867293 0.768782 0.827598 0.775964 0.856142 0.742025 0.867508 0.642291 0.900375 0.666964 0.855181 0.668527 0.901223 0.745592 0.867293 0.768782 0.856142 0.742025 0.900375 0.666964 0.842358 0.702491 0.855181 0.668527 0.901223 0.745592 0.844839 0.707525 0.92118 0.713713 0.931889 0.636832 0.918898 0.699697 0.900375 0.666964 0.931368 0.777093 0.92118 0.713713 0.968213 0.77022 0.905882 0.627902 0.900375 0.666964 0.890474 0.641909 0.90499 0.78486 0.901223 0.745592 0.931368 0.777093 0.906232 0.605742 0.931889 0.636832 0.905882 0.627902 0.904357 0.807013 0.931368 0.777093 0.93125 0.820926 0.933717 0.593037 0.968392 0.645333 0.931889 0.636832 0.93125 0.820926 0.968213 0.77022 0.965038 0.841671 0.904571 0.559404 0.968392 0.573812 0.933717 0.593037 0.90064 0.853232 0.965038 0.841671 0.914672 0.888748 0.890955 0.590063 0.933717 0.593037 0.906232 0.605742 0.888398 0.821999 0.93125 0.820926 0.90064 0.853232 0.906232 0.605742 0.889591 0.593275 0.890955 0.590063 0.904357 0.807013 0.887178 0.818729 0.900583 0.804677 0.905882 0.627902 0.902359 0.607909 0.906232 0.605742 0.90499 0.78486 0.900583 0.804677 0.898822 0.786233 0.890474 0.641909 0.899781 0.626257 0.905882 0.627902 0.890219 0.770183 0.898822 0.786233 0.887351 0.775442 0.867508 0.642291 0.887842 0.636527 0.890474 0.641909 0.867293 0.768782 0.887351 0.775442 0.870376 0.775972 0.867508 0.642291 0.859881 0.623942 0.870908 0.635245 0.858859 0.786774 0.867293 0.768782 0.870376 0.775972 0.854107 0.625459 0.859664 0.608186 0.859881 0.623942 0.857942 0.802505 0.853157 0.785002 0.858859 0.786774 0.854402 0.604754 0.871664 0.593961 0.859664 0.608186 0.869299 0.817249 0.852534 0.8057 0.857942 0.802505 0.870622 0.589649 0.889591 0.593275 0.871664 0.593961 0.887178 0.818729 0.868067 0.82151 0.869299 0.817249 0.8794 0.616512 0.871664 0.593961 0.889591 0.593275 0.887178 0.818729 0.869299 0.817249 0.878029 0.795063 0.859664 0.608186 0.871664 0.593961 0.8794 0.616512 0.878029 0.795063 0.869299 0.817249 0.857942 0.802505 0.8794 0.616512 0.859881 0.623942 0.859664 0.608186 0.857942 0.802505 0.858859 0.786774 0.878029 0.795063 0.8794 0.616512 0.870908 0.635245 0.859881 0.623942 0.858859 0.786774 0.870376 0.775972 0.878029 0.795063 0.8794 0.616512 0.887842 0.636527 0.870908 0.635245 0.870376 0.775972 0.887351 0.775442 0.878029 0.795063 0.8794 0.616512 0.899781 0.626257 0.887842 0.636527 0.887351 0.775442 0.898822 0.786233 0.878029 0.795063 0.8794 0.616512 0.902359 0.607909 0.899781 0.626257 0.898822 0.786233 0.900583 0.804677 0.878029 0.795063 0.8794 0.616512 0.889591 0.593275 0.902359 0.607909 0.900583 0.804677 0.887178 0.818729 0.878029 0.795063 0.536419 0.06207197 0.518916 0.05029398 0.54026 0.05380499 0.501452 0.06204295 0.518916 0.05029398 0.518925 0.05968099 0.542788 0.064089 0.54026 0.05380499 0.55193 0.05833798 0.495083 0.06404697 0.497626 0.05376994 0.501452 0.06204295 0.555073 0.06189996 0.542788 0.064089 0.55193 0.05833798 0.495083 0.06404697 0.482805 0.06182897 0.485955 0.05827295 0.563812 0.076586 0.54629 0.07266896 0.555073 0.06189996 0.491565 0.07262498 0.474014 0.07651096 0.482805 0.06182897 0.583135 0.1084949 0.548333 0.08489298 0.563812 0.076586 0.489507 0.084858 0.454527 0.108481 0.474014 0.07651096 0.605512 0.165134 0.621513 0.227818 0.553118 0.209599 0.416514 0.22949 0.432024 0.165644 0.485339 0.210053 0.676379 0.233241 0.621513 0.227818 0.647395 0.200502 0.360308 0.235899 0.416514 0.22949 0.372747 0.256357 0.676379 0.233241 0.683908 0.279995 0.664761 0.253225 0.353696 0.284606 0.360308 0.235899 0.372747 0.256357 0.707254 0.310054 0.683908 0.279995 0.715342 0.265392 0.330721 0.316853 0.353696 0.284606 0.351187 0.31744 0.697446 0.332673 0.687515 0.311539 0.707254 0.310054 0.341964 0.339667 0.351187 0.31744 0.362723 0.329722 0.662817 0.372521 0.676824 0.323937 0.697446 0.332673 0.379297 0.378686 0.362723 0.329722 0.402772 0.362131 0.662817 0.372521 0.618316 0.375151 0.63905 0.35733 0.424583 0.379267 0.379297 0.378686 0.402772 0.362131 0.604826 0.397804 0.618316 0.375151 0.626842 0.395792 0.439252 0.40154 0.424583 0.379267 0.442396 0.381222 0.553095 0.390512 0.600808 0.377857 0.604826 0.397804 0.490934 0.391862 0.442396 0.381222 0.482938 0.358497 0.521923 0.386009 0.559674 0.357011 0.553095 0.390512 0.521923 0.386009 0.482938 0.358497 0.521086 0.343868 0.599845 0.344815 0.559674 0.357011 0.577279 0.340156 0.441977 0.347815 0.482938 0.358497 0.442396 0.381222 0.599845 0.344815 0.618316 0.375151 0.600808 0.377857 0.424583 0.379267 0.441977 0.347815 0.442396 0.381222 0.63905 0.35733 0.615546 0.342005 0.634472 0.332311 0.402772 0.362131 0.425972 0.345582 0.424583 0.379267 0.676824 0.323937 0.634472 0.332311 0.662406 0.312804 0.362723 0.329722 0.406362 0.33648 0.402772 0.362131 0.687515 0.311539 0.662406 0.312804 0.66844 0.297958 0.351187 0.31744 0.377061 0.317685 0.362723 0.329722 0.683908 0.279995 0.66844 0.297958 0.664101 0.277872 0.353696 0.284606 0.370304 0.302644 0.351187 0.31744 0.664761 0.253225 0.664101 0.277872 0.639236 0.253047 0.372747 0.256357 0.3741 0.281778 0.353696 0.284606 0.621513 0.227818 0.639236 0.253047 0.613992 0.242662 0.416514 0.22949 0.398938 0.255633 0.372747 0.256357 0.572941 0.258564 0.621513 0.227818 0.613992 0.242662 0.416514 0.22949 0.466409 0.259709 0.424464 0.244473 0.572941 0.258564 0.51976 0.2488639 0.553118 0.209599 0.51976 0.2488639 0.466409 0.259709 0.485339 0.210053 0.559674 0.357011 0.558527 0.316594 0.577279 0.340156 0.482938 0.358497 0.482619 0.317843 0.521086 0.343868 0.558527 0.316594 0.520277 0.294764 0.556923 0.291214 0.520277 0.294764 0.482619 0.317843 0.483433 0.292249 0.563905 0.272007 0.520277 0.294764 0.51976 0.2488639 0.475886 0.273078 0.520277 0.294764 0.483433 0.292249 0.525483 0.06896698 0.518925 0.05968099 0.536419 0.06207197 0.518925 0.05968099 0.512375 0.06895595 0.501452 0.06204295 0.531231 0.07382899 0.536419 0.06207197 0.542788 0.064089 0.501452 0.06204295 0.506626 0.07381099 0.495083 0.06404697 0.531231 0.07382899 0.54629 0.07266896 0.531019 0.08743095 0.506626 0.07381099 0.491565 0.07262498 0.495083 0.06404697 0.555621 0.121749 0.532669 0.09091997 0.548333 0.08489298 0.505177 0.09090799 0.482177 0.121781 0.489507 0.084858 0.531019 0.08743095 0.548333 0.08489298 0.532669 0.09091997 0.489507 0.084858 0.506827 0.08741599 0.505177 0.09090799 0.518981 0.151749 0.532042 0.127713 0.538112 0.1583819 0.518981 0.151749 0.505828 0.127728 0.518941 0.128358 0.532042 0.127713 0.518925 0.093952 0.532669 0.09091997 0.505828 0.127728 0.518925 0.093952 0.518941 0.128358 0.531019 0.08743095 0.518925 0.093952 0.518927 0.08517998 0.506827 0.08741599 0.518925 0.093952 0.505177 0.09090799 0.548362 0.17356 0.535214 0.166808 0.538112 0.1583819 0.502799 0.166857 0.489683 0.173693 0.499851 0.158434 0.537248 0.187577 0.548362 0.17356 0.544281 0.193366 0.50089 0.187571 0.489683 0.173693 0.5001 0.176033 0.528757 0.191785 0.544281 0.193366 0.519841 0.200843 0.509219 0.191626 0.493996 0.193428 0.50089 0.187571 0.519132 0.185382 0.519841 0.200843 0.517577 0.190607 0.519132 0.185382 0.519841 0.200843 0.509219 0.191626 0.538112 0.1583819 0.518998 0.1590279 0.518981 0.151749 0.499851 0.158434 0.518998 0.1590279 0.502799 0.166857 0.535214 0.166808 0.519016 0.165599 0.518998 0.1590279 0.502799 0.166857 0.519016 0.165599 0.50691 0.171667 0.519132 0.185382 0.528222 0.186316 0.528757 0.191785 0.509787 0.18626 0.519132 0.185382 0.509219 0.191626 0.528757 0.191785 0.533528 0.184215 0.537248 0.187577 0.504547 0.184206 0.509219 0.191626 0.50089 0.187571 0.533528 0.184215 0.537959 0.175966 0.537248 0.187577 0.504547 0.184206 0.5001 0.176033 0.504604 0.176791 0.537959 0.175966 0.531131 0.171631 0.535214 0.166808 0.50691 0.171667 0.5001 0.176033 0.502799 0.166857 0.533449 0.176739 0.528222 0.186316 0.519099 0.179457 0.504604 0.176791 0.509787 0.18626 0.504547 0.184206 0.519099 0.179457 0.531131 0.171631 0.533449 0.176739 0.50691 0.171667 0.519099 0.179457 0.504604 0.176791 0.519841 0.200843 0.553118 0.209599 0.51976 0.2488639 0.485339 0.210053 0.519841 0.200843 0.51976 0.2488639 0.544281 0.193366 0.561572 0.167779 0.553118 0.209599 0.476363 0.167996 0.493996 0.193428 0.485339 0.210053 0.538112 0.1583819 0.561572 0.167779 0.548362 0.17356 0.499851 0.158434 0.476363 0.167996 0.478371 0.149447 0.532042 0.127713 0.559475 0.1493189 0.538112 0.1583819 0.505828 0.127728 0.478371 0.149447 0.482177 0.121781 0.596138 0.133426 0.555621 0.121749 0.583135 0.1084949 0.441395 0.133592 0.482177 0.121781 0.478371 0.149447 0.601169 0.147885 0.559475 0.1493189 0.596138 0.133426 0.436337 0.148194 0.478371 0.149447 0.476363 0.167996 0.605512 0.165134 0.561572 0.167779 0.601169 0.147885 0.476363 0.167996 0.432024 0.165644 0.436337 0.148194 0.518927 0.08517998 0.528933 0.084957 0.531019 0.08743095 0.518927 0.08517998 0.508915 0.08494496 0.518925 0.08386498 0.531231 0.07382899 0.528933 0.084957 0.529036 0.07542896 0.508915 0.08494496 0.506626 0.07381099 0.50882 0.07541495 0.525483 0.06896698 0.529036 0.07542896 0.523751 0.070508 0.50882 0.07541495 0.512375 0.06895595 0.514106 0.07050096 0.518928 0.06789898 0.523751 0.070508 0.518929 0.06946796 0.514106 0.07050096 0.518928 0.06789898 0.518929 0.06946796 0.523751 0.070508 0.518928 0.07425898 0.518929 0.06946796 0.514106 0.07050096 0.518928 0.07425898 0.516297 0.07496595 0.523751 0.070508 0.524236 0.07669097 0.52156 0.07497 0.513619 0.07668399 0.514106 0.07050096 0.516297 0.07496595 0.529036 0.07542896 0.524601 0.07988595 0.524236 0.07669097 0.513252 0.07987898 0.50882 0.07541495 0.513619 0.07668399 0.518925 0.08386498 0.524601 0.07988595 0.528933 0.084957 0.518925 0.08386498 0.513252 0.07987898 0.518926 0.07933098 0.518926 0.07933098 0.52156 0.07497 0.524601 0.07988595 0.516297 0.07496595 0.518926 0.07933098 0.513252 0.07987898 0.524601 0.07988595 0.52156 0.07497 0.524236 0.07669097 0.513619 0.07668399 0.516297 0.07496595 0.513252 0.07987898 0.556923 0.291214 0.571787 0.277295 0.568351 0.292904 0.46807 0.278617 0.483433 0.292249 0.471978 0.294282 0.558527 0.316594 0.568351 0.292904 0.573085 0.311386 0.471978 0.294282 0.482619 0.317843 0.46779 0.313081 0.558527 0.316594 0.584855 0.327708 0.577279 0.340156 0.482619 0.317843 0.456477 0.329961 0.46779 0.313081 0.572941 0.258564 0.571787 0.277295 0.563905 0.272007 0.466409 0.259709 0.46807 0.278617 0.458737 0.268049 0.572941 0.258564 0.61172 0.255725 0.580734 0.26662 0.427062 0.257728 0.466409 0.259709 0.458737 0.268049 0.613992 0.242662 0.632494 0.262853 0.61172 0.255725 0.406068 0.265508 0.424464 0.244473 0.427062 0.257728 0.639236 0.253047 0.653658 0.279971 0.632494 0.262853 0.384904 0.283634 0.398938 0.255633 0.406068 0.265508 0.664101 0.277872 0.656064 0.297636 0.653658 0.279971 0.383015 0.301864 0.3741 0.281778 0.384904 0.283634 0.662406 0.312804 0.656064 0.297636 0.66844 0.297958 0.377061 0.317685 0.383015 0.301864 0.386858 0.314615 0.634472 0.332311 0.652752 0.310186 0.662406 0.312804 0.406362 0.33648 0.386858 0.314615 0.411556 0.327673 0.634472 0.332311 0.614408 0.331972 0.62904 0.323864 0.426727 0.335361 0.406362 0.33648 0.411556 0.327673 0.615546 0.342005 0.601033 0.333624 0.614408 0.331972 0.440344 0.336537 0.425972 0.345582 0.426727 0.335361 0.599845 0.344815 0.584855 0.327708 0.601033 0.333624 0.456477 0.329961 0.441977 0.347815 0.440344 0.336537 0.601033 0.333624 0.590644 0.321516 0.601799 0.328453 0.450408 0.323919 0.440344 0.336537 0.439372 0.331331 0.614408 0.331972 0.601799 0.328453 0.613335 0.327083 0.439372 0.331331 0.426727 0.335361 0.427623 0.330358 0.614408 0.331972 0.626851 0.320513 0.62904 0.323864 0.426727 0.335361 0.413648 0.324175 0.427623 0.330358 0.62904 0.323864 0.646248 0.306421 0.652752 0.310186 0.411556 0.327673 0.393381 0.31051 0.413648 0.324175 0.656064 0.297636 0.646248 0.306421 0.649541 0.296225 0.393381 0.31051 0.383015 0.301864 0.389662 0.300183 0.656064 0.297636 0.647785 0.283486 0.653658 0.279971 0.383015 0.301864 0.39104 0.287071 0.389662 0.300183 0.632494 0.262853 0.647785 0.283486 0.629829 0.267263 0.39104 0.287071 0.406068 0.265508 0.408893 0.269959 0.632494 0.262853 0.612641 0.26156 0.61172 0.255725 0.406068 0.265508 0.426254 0.263693 0.408893 0.269959 0.61172 0.255725 0.585166 0.270991 0.580734 0.26662 0.427062 0.257728 0.454369 0.272583 0.426254 0.263693 0.571787 0.277295 0.585166 0.270991 0.578124 0.2819 0.454369 0.272583 0.46807 0.278617 0.461798 0.283441 0.584855 0.327708 0.579548 0.30934 0.590644 0.321516 0.461204 0.311233 0.456477 0.329961 0.450408 0.323919 0.573085 0.311386 0.577524 0.293776 0.579548 0.30934 0.462754 0.295432 0.46779 0.313081 0.461204 0.311233 0.568351 0.292904 0.578124 0.2819 0.577524 0.293776 0.461798 0.283441 0.471978 0.294282 0.462754 0.295432 0.521923 0.386009 0.553209 0.433063 0.523031 0.433628 0.492809 0.434538 0.521923 0.386009 0.523031 0.433628 0.553095 0.390512 0.609819 0.431516 0.553209 0.433063 0.43586 0.43574 0.490934 0.391862 0.492809 0.434538 0.626842 0.395792 0.609819 0.431516 0.604826 0.397804 0.416915 0.400552 0.43586 0.43574 0.396518 0.425416 0.662817 0.372521 0.648174 0.419316 0.626842 0.395792 0.379297 0.378686 0.396518 0.425416 0.350292 0.396229 0.697446 0.332673 0.692106 0.388274 0.662817 0.372521 0.341964 0.339667 0.350292 0.396229 0.312756 0.350588 0.697446 0.332673 0.735879 0.312112 0.726332 0.341754 0.301067 0.320593 0.341964 0.339667 0.312756 0.350588 0.715342 0.265392 0.735879 0.312112 0.707254 0.310054 0.320452 0.270303 0.301067 0.320593 0.304876 0.261087 0.715342 0.265392 0.698172 0.216906 0.7299 0.256393 0.337414 0.219179 0.320452 0.270303 0.304876 0.261087 0.676379 0.233241 0.663103 0.190671 0.698172 0.216906 0.373474 0.191872 0.360308 0.235899 0.337414 0.219179 0.649444 0.02237796 0.62144 0.04808896 0.626908 0.01560795 0.388827 0.021586 0.416419 0.04763096 0.376796 0.07529598 0.626908 0.01560795 0.577206 0.03280097 0.56746 1.44e-4 0.411318 0.01513099 0.460782 0.03265595 0.416419 0.04763096 0.56746 1.44e-4 0.547413 0.04172396 0.518922 0.02488595 0.470636 1.44e-4 0.490511 0.04166895 0.460782 0.03265595 0.54026 0.05380499 0.518922 0.02488595 0.547413 0.04172396 0.518922 0.02488595 0.497626 0.05376994 0.490511 0.04166895 0.55193 0.05833798 0.547413 0.04172396 0.558059 0.05387097 0.490511 0.04166895 0.485955 0.05827295 0.479842 0.05378496 0.555073 0.06189996 0.558059 0.05387097 0.576951 0.057998 0.479842 0.05378496 0.482805 0.06182897 0.46092 0.05784499 0.563812 0.076586 0.576951 0.057998 0.611687 0.07826799 0.46092 0.05784499 0.474014 0.07651096 0.425932 0.07798498 0.576951 0.057998 0.62144 0.04808896 0.611687 0.07826799 0.416419 0.04763096 0.46092 0.05784499 0.425932 0.07798498 0.558059 0.05387097 0.577206 0.03280097 0.576951 0.057998 0.479842 0.05378496 0.460782 0.03265595 0.490511 0.04166895 0.611687 0.07826799 0.660451 0.07608395 0.626663 0.111357 0.425932 0.07798498 0.376796 0.07529598 0.416419 0.04763096 0.583135 0.1084949 0.611687 0.07826799 0.626663 0.111357 0.425932 0.07798498 0.454527 0.108481 0.410618 0.111244 0.629482 0.130456 0.601169 0.147885 0.596138 0.133426 0.407648 0.130594 0.436337 0.148194 0.413741 0.147158 0.626663 0.111357 0.596138 0.133426 0.583135 0.1084949 0.410618 0.111244 0.441395 0.133592 0.407648 0.130594 0.601169 0.147885 0.619303 0.159841 0.605512 0.165134 0.436337 0.148194 0.418035 0.160361 0.413741 0.147158 0.619303 0.159841 0.647395 0.200502 0.605512 0.165134 0.418035 0.160361 0.389677 0.20189 0.373474 0.191872 0.886245 0.1217769 0.89178 0.03691595 0.9459 0.07956898 0.141314 0.112482 0.142277 0.02146697 0.183115 0.09212696 0.849114 0.09973198 0.805584 0.01078599 0.89178 0.03691595 0.183115 0.09212696 0.232648 0.003483951 0.246353 0.07650995 0.805584 0.01078599 0.687018 0.07720398 0.672384 0.022201 0.349875 0.07595497 0.232648 0.003483951 0.365979 0.02099096 0.672384 0.022201 0.660451 0.07608395 0.649444 0.02237796 0.376796 0.07529598 0.365979 0.02099096 0.388827 0.021586 0.660451 0.07608395 0.629482 0.130456 0.626663 0.111357 0.376796 0.07529598 0.407648 0.130594 0.349875 0.07595497 0.7299 0.256393 0.760215 0.193244 0.789046 0.233323 0.271553 0.193871 0.304876 0.261087 0.241255 0.236977 0.909112 0.183261 0.9459 0.07956898 0.994525 0.1677049 0.107928 0.179083 0.07896095 0.06071895 0.141314 0.112482 0.862868 0.338556 0.962901 0.344752 0.911671 0.402429 0.160557 0.356821 0.04396796 0.367038 0.123776 0.315519 0.962901 0.344752 0.91536 0.259804 0.999856 0.25464 0.09896498 0.266968 0.04396796 0.367038 1.44e-4 0.259113 0.999856 0.25464 0.909112 0.183261 0.994525 0.1677049 0.107928 0.179083 1.44e-4 0.259113 0.01182895 0.155367 0.749542 0.334683 0.766337 0.300809 0.789162 0.313727 0.267408 0.310142 0.288183 0.346496 0.242992 0.325552 0.789162 0.313727 0.815314 0.276388 0.846174 0.293397 0.213065 0.285164 0.242992 0.325552 0.178537 0.304983 0.846174 0.293397 0.845007 0.256352 0.873517 0.265922 0.179662 0.263312 0.178537 0.304983 0.147089 0.274284 0.873517 0.265922 0.859075 0.228168 0.886999 0.2337689 0.1628029 0.23172 0.147089 0.274284 0.131514 0.237587 0.87503 0.184705 0.859075 0.228168 0.842355 0.19516 0.145224 0.182749 0.1628029 0.23172 0.131514 0.237587 0.909112 0.183261 0.886999 0.2337689 0.87503 0.184705 0.131514 0.237587 0.107928 0.179083 0.145224 0.182749 0.91536 0.259804 0.873517 0.265922 0.886999 0.2337689 0.147089 0.274284 0.09896498 0.266968 0.131514 0.237587 0.894128 0.301884 0.846174 0.293397 0.873517 0.265922 0.178537 0.304983 0.123776 0.315519 0.147089 0.274284 0.862868 0.338556 0.789162 0.313727 0.846174 0.293397 0.242992 0.325552 0.160557 0.356821 0.178537 0.304983 0.749542 0.334683 0.794286 0.364062 0.770185 0.379538 0.288183 0.346496 0.239776 0.382592 0.242992 0.325552 0.794286 0.364062 0.911671 0.402429 0.845499 0.449967 0.239776 0.382592 0.1064 0.432652 0.160557 0.356821 0.770572 0.444261 0.770185 0.379538 0.815858 0.445381 0.271364 0.473316 0.268122 0.398737 0.287033 0.442912 0.815858 0.445381 0.794286 0.364062 0.845499 0.449967 0.239776 0.382592 0.21926 0.477186 0.185281 0.484099 0.819845 0.468071 0.815858 0.445381 0.845499 0.449967 0.185281 0.484099 0.21926 0.477186 0.215894 0.503605 0.7299 0.256393 0.766337 0.300809 0.735879 0.312112 0.304876 0.261087 0.267408 0.310142 0.241255 0.236977 0.789046 0.233323 0.815314 0.276388 0.766337 0.300809 0.213065 0.285164 0.241255 0.236977 0.267408 0.310142 0.809631 0.233887 0.845007 0.256352 0.815314 0.276388 0.179662 0.263312 0.219168 0.237388 0.213065 0.285164 0.859075 0.228168 0.829287 0.2195619 0.842355 0.19516 0.1628029 0.23172 0.1990669 0.222464 0.179662 0.263312 0.788458 0.08082598 0.715482 0.1397269 0.687018 0.07720398 0.246353 0.07650995 0.319538 0.139409 0.246666 0.11485 0.715482 0.1397269 0.785486 0.15233 0.760215 0.193244 0.319538 0.139409 0.2459689 0.151002 0.246666 0.11485 0.698172 0.216906 0.715482 0.1397269 0.760215 0.193244 0.319538 0.139409 0.337414 0.219179 0.271553 0.193871 0.663103 0.190671 0.629482 0.130456 0.715482 0.1397269 0.407648 0.130594 0.373474 0.191872 0.319538 0.139409 0.629482 0.130456 0.687018 0.07720398 0.715482 0.1397269 0.319538 0.139409 0.349875 0.07595497 0.407648 0.130594 0.663103 0.190671 0.619303 0.159841 0.623495 0.146796 0.413741 0.147158 0.418035 0.160361 0.373474 0.191872 0.837382 0.156361 0.87503 0.184705 0.842355 0.19516 0.196622 0.155241 0.145224 0.182749 0.171653 0.1322939 0.87503 0.184705 0.886245 0.1217769 0.909112 0.183261 0.145224 0.182749 0.141314 0.112482 0.171653 0.1322939 0.78648 0.117591 0.837382 0.156361 0.785486 0.15233 0.246666 0.11485 0.196622 0.155241 0.171653 0.1322939 0.849114 0.09973198 0.78648 0.117591 0.788458 0.08082598 0.183115 0.09212696 0.246666 0.11485 0.171653 0.1322939 0.886245 0.1217769 0.858171 0.137775 0.849114 0.09973198 0.183115 0.09212696 0.171653 0.1322939 0.141314 0.112482 0.432388 0.894943 0.491058 0.881714 0.506166 0.904851 0.321637 0.893225 0.263032 0.878321 0.315867 0.868209 0.506166 0.904851 0.572792 0.860484 0.604825 0.879946 0.181486 0.854693 0.247207 0.901159 0.148729 0.873349 0.572792 0.860484 0.619962 0.791615 0.604825 0.879946 0.181486 0.854693 0.136063 0.784093 0.169745 0.787474 0.586396 0.793977 0.563786 0.739211 0.619962 0.791615 0.169745 0.787474 0.194086 0.733241 0.208656 0.740879 0.549027 0.746412 0.50827 0.697693 0.563786 0.739211 0.208656 0.740879 0.250811 0.693249 0.258399 0.707497 0.50827 0.697693 0.438641 0.680683 0.434803 0.658882 0.320962 0.677959 0.250811 0.693249 0.325318 0.656224 0.500314 0.711729 0.452955 0.700023 0.438641 0.680683 0.306136 0.696976 0.258399 0.707497 0.320962 0.677959 0.549027 0.746412 0.505666 0.730944 0.500314 0.711729 0.252524 0.726592 0.208656 0.740879 0.258399 0.707497 0.568148 0.787367 0.549027 0.746412 0.586396 0.793977 0.188269 0.781375 0.208656 0.740879 0.2145749 0.750414 0.555495 0.826352 0.586396 0.793977 0.572792 0.860484 0.19985 0.820889 0.169745 0.787474 0.188269 0.781375 0.501231 0.844356 0.572792 0.860484 0.491058 0.881714 0.253846 0.840502 0.181486 0.854693 0.19985 0.820889 0.491058 0.881714 0.457832 0.84004 0.501231 0.844356 0.297562 0.837358 0.263032 0.878321 0.253846 0.840502 0.785486 0.15233 0.783193 0.187449 0.760215 0.193244 0.2459689 0.151002 0.246955 0.187075 0.2336249 0.17562 0.434803 0.658882 0.394766 0.686125 0.391039 0.611891 0.325318 0.656224 0.364838 0.684445 0.320962 0.677959 0.789046 0.233323 0.783193 0.187449 0.809631 0.233887 0.246955 0.187075 0.241255 0.236977 0.219168 0.237388 0.391747 0.862097 0.438797 0.870229 0.432388 0.894943 0.315867 0.868209 0.363377 0.861308 0.321637 0.893225 0.438641 0.680683 0.435018 0.71828 0.394766 0.686125 0.323658 0.715731 0.320962 0.677959 0.364838 0.684445 0.384658 0.710299 0.435018 0.71828 0.433669 0.729661 0.3744 0.708969 0.323658 0.715731 0.364838 0.684445 0.410995 0.747662 0.433669 0.729661 0.427812 0.742828 0.324726 0.727177 0.347028 0.745816 0.33027 0.740536 0.384657 0.795423 0.410995 0.747662 0.418086 0.784946 0.37227 0.794472 0.347028 0.745816 0.3744 0.708969 0.384657 0.795423 0.431333 0.817535 0.401605 0.84146 0.37227 0.794472 0.32479 0.81546 0.338952 0.783073 0.401605 0.84146 0.457832 0.84004 0.438797 0.870229 0.354026 0.840297 0.297562 0.837358 0.32479 0.81546 0.816266 0.203086 0.829287 0.2195619 0.809631 0.233887 0.209828 0.206161 0.1990669 0.222464 0.1997669 0.214827 0.783193 0.187449 0.816266 0.203086 0.809631 0.233887 0.246955 0.187075 0.209828 0.206161 0.226485 0.183086 0.783193 0.187449 0.796021 0.176969 0.802192 0.1846089 0.226485 0.183086 0.2336249 0.17562 0.246955 0.187075 0.457832 0.84004 0.448505 0.804621 0.473386 0.8247 0.307886 0.802031 0.297562 0.837358 0.282357 0.821525 0.418086 0.784946 0.448505 0.804621 0.431333 0.817535 0.338952 0.783073 0.307886 0.802031 0.321237 0.777208 0.418086 0.784946 0.423718 0.754191 0.435868 0.779569 0.334089 0.752045 0.338952 0.783073 0.321237 0.777208 0.427812 0.742828 0.423718 0.754191 0.410995 0.747662 0.33027 0.740536 0.334089 0.752045 0.319919 0.74725 0.433669 0.729661 0.43795 0.749777 0.427812 0.742828 0.324726 0.727177 0.319919 0.74725 0.312907 0.729222 0.433669 0.729661 0.440995 0.724383 0.445392 0.731997 0.31751 0.721697 0.324726 0.727177 0.312907 0.729222 0.435018 0.71828 0.455277 0.713731 0.440995 0.724383 0.30346 0.710657 0.323658 0.715731 0.31751 0.721697 0.501231 0.844356 0.473386 0.8247 0.512485 0.828811 0.282357 0.821525 0.253846 0.840502 0.2429749 0.824574 0.555495 0.826352 0.512485 0.828811 0.550942 0.811814 0.2429749 0.824574 0.19985 0.820889 0.204839 0.806417 0.568148 0.787367 0.550942 0.811814 0.552139 0.787682 0.204839 0.806417 0.188269 0.781375 0.204331 0.782156 0.568148 0.787367 0.539407 0.764539 0.54285 0.755753 0.188269 0.781375 0.217774 0.759319 0.204331 0.782156 0.54285 0.755753 0.508439 0.743135 0.505666 0.730944 0.2145749 0.750414 0.249419 0.738732 0.217774 0.759319 0.505666 0.730944 0.455277 0.713731 0.452955 0.700023 0.252524 0.726592 0.30346 0.710657 0.249419 0.738732 0.445392 0.731997 0.454776 0.761665 0.43795 0.749777 0.312907 0.729222 0.302729 0.758742 0.28696 0.74502 0.470841 0.748408 0.475403 0.783904 0.454776 0.761665 0.28696 0.74502 0.281439 0.780511 0.268291 0.766661 0.475403 0.783904 0.503673 0.787562 0.494476 0.80247 0.252972 0.78341 0.281439 0.780511 0.26179 0.798626 0.503673 0.787562 0.516802 0.807339 0.494476 0.80247 0.252972 0.78341 0.239243 0.802891 0.23792 0.787045 0.512485 0.828811 0.494476 0.80247 0.516802 0.807339 0.26179 0.798626 0.2429749 0.824574 0.239243 0.802891 0.475403 0.783904 0.473386 0.8247 0.448505 0.804621 0.281439 0.780511 0.282357 0.821525 0.26179 0.798626 0.435868 0.779569 0.475403 0.783904 0.448505 0.804621 0.321237 0.777208 0.281439 0.780511 0.302729 0.758742 0.43795 0.749777 0.435868 0.779569 0.423718 0.754191 0.321237 0.777208 0.319919 0.74725 0.334089 0.752045 0.455277 0.713731 0.445392 0.731997 0.440995 0.724383 0.30346 0.710657 0.312907 0.729222 0.28696 0.74502 0.508439 0.743135 0.470841 0.748408 0.455277 0.713731 0.28696 0.74502 0.249419 0.738732 0.30346 0.710657 0.503673 0.787562 0.508439 0.743135 0.539407 0.764539 0.252972 0.78341 0.249419 0.738732 0.268291 0.766661 0.518562 0.791602 0.539407 0.764539 0.552139 0.787682 0.23792 0.787045 0.217774 0.759319 0.252972 0.78341 0.550942 0.811814 0.518562 0.791602 0.552139 0.787682 0.23792 0.787045 0.204839 0.806417 0.204331 0.782156 0.512485 0.828811 0.516802 0.807339 0.550942 0.811814 0.204839 0.806417 0.239243 0.802891 0.2429749 0.824574 0.50827 0.697693 0.484068 0.628776 0.543385 0.683538 0.276936 0.625067 0.250811 0.693249 0.216123 0.67812 0.563786 0.739211 0.543385 0.683538 0.581052 0.726933 0.216123 0.67812 0.194086 0.733241 0.1771759 0.720426 0.563786 0.739211 0.616701 0.759965 0.619962 0.791615 0.194086 0.733241 0.140379 0.752377 0.1771759 0.720426 0.619962 0.791615 0.660647 0.741167 0.707492 0.759884 0.136063 0.784093 0.09703797 0.732052 0.140379 0.752377 0.707492 0.759884 0.677256 0.670436 0.745511 0.6521 0.04952597 0.748824 0.08356398 0.662038 0.09703797 0.732052 0.745511 0.6521 0.671403 0.592656 0.740843 0.572428 0.019409 0.639749 0.09281998 0.589862 0.08356398 0.662038 0.543385 0.683538 0.671403 0.592656 0.677256 0.670436 0.216123 0.67812 0.09281998 0.589862 0.276936 0.625067 0.677256 0.670436 0.581052 0.726933 0.543385 0.683538 0.1771759 0.720426 0.08356398 0.662038 0.216123 0.67812 0.660647 0.741167 0.616701 0.759965 0.581052 0.726933 0.1771759 0.720426 0.140379 0.752377 0.09703797 0.732052 0.829287 0.2195619 0.834705 0.206959 0.842355 0.19516 0.05121594 0.522659 0.09281998 0.589862 0.03366398 0.564403 0.62042 0.565675 0.484068 0.628776 0.498072 0.552315 0.276936 0.625067 0.145041 0.562595 0.264218 0.55014 0.391039 0.611891 0.484068 0.628776 0.434803 0.658882 0.276936 0.625067 0.369913 0.610196 0.325318 0.656224 0.890955 0.590063 0.870622 0.589649 0.860081 0.560115 0.856226 0.850547 0.868067 0.82151 0.888398 0.821999 0.904571 0.559404 0.860081 0.560115 0.853018 0.521562 0.847458 0.888748 0.856226 0.850547 0.90064 0.853232 0.860081 0.560115 0.8289 0.590771 0.798481 0.569535 0.795104 0.838402 0.826436 0.818537 0.856226 0.850547 0.870622 0.589649 0.854402 0.604754 0.8289 0.590771 0.826436 0.818537 0.852534 0.8057 0.868067 0.82151 0.854402 0.604754 0.854107 0.625459 0.828171 0.633354 0.827598 0.775964 0.853157 0.785002 0.852534 0.8057 0.8289 0.590771 0.828171 0.633354 0.791018 0.645443 0.791018 0.762238 0.827598 0.775964 0.826436 0.818537 0.855181 0.668527 0.842358 0.702491 0.791018 0.645443 0.856142 0.742025 0.827598 0.775964 0.791018 0.762238 0.867508 0.642291 0.855181 0.668527 0.828171 0.633354 0.867293 0.768782 0.853157 0.785002 0.827598 0.775964 0.867508 0.642291 0.890474 0.641909 0.900375 0.666964 0.901223 0.745592 0.890219 0.770183 0.867293 0.768782 0.900375 0.666964 0.918898 0.699697 0.842358 0.702491 0.901223 0.745592 0.856142 0.742025 0.844839 0.707525 0.931889 0.636832 0.968392 0.645333 0.918898 0.699697 0.931368 0.777093 0.901223 0.745592 0.92118 0.713713 0.905882 0.627902 0.931889 0.636832 0.900375 0.666964 0.90499 0.78486 0.890219 0.770183 0.901223 0.745592 0.906232 0.605742 0.933717 0.593037 0.931889 0.636832 0.904357 0.807013 0.90499 0.78486 0.931368 0.777093 0.933717 0.593037 0.968392 0.573812 0.968392 0.645333 0.93125 0.820926 0.931368 0.777093 0.968213 0.77022 0.904571 0.559404 0.920166 0.524546 0.968392 0.573812 0.90064 0.853232 0.93125 0.820926 0.965038 0.841671 0.890955 0.590063 0.904571 0.559404 0.933717 0.593037 0.888398 0.821999 0.904357 0.807013 0.93125 0.820926 0.906232 0.605742 0.902359 0.607909 0.889591 0.593275 0.904357 0.807013 0.888398 0.821999 0.887178 0.818729 0.905882 0.627902 0.899781 0.626257 0.902359 0.607909 0.90499 0.78486 0.904357 0.807013 0.900583 0.804677 0.890474 0.641909 0.887842 0.636527 0.899781 0.626257 0.890219 0.770183 0.90499 0.78486 0.898822 0.786233 0.867508 0.642291 0.870908 0.635245 0.887842 0.636527 0.867293 0.768782 0.890219 0.770183 0.887351 0.775442 0.867508 0.642291 0.854107 0.625459 0.859881 0.623942 0.858859 0.786774 0.853157 0.785002 0.867293 0.768782 0.854107 0.625459 0.854402 0.604754 0.859664 0.608186 0.857942 0.802505 0.852534 0.8057 0.853157 0.785002 0.854402 0.604754 0.870622 0.589649 0.871664 0.593961 0.869299 0.817249 0.868067 0.82151 0.852534 0.8057 0.870622 0.589649 0.890955 0.590063 0.889591 0.593275 0.887178 0.818729 0.888398 0.821999 0.868067 0.82151 0.536419 0.06207197 0.518925 0.05968099 0.518916 0.05029398 0.501452 0.06204295 0.497626 0.05376994 0.518916 0.05029398 0.542788 0.064089 0.536419 0.06207197 0.54026 0.05380499 0.495083 0.06404697 0.485955 0.05827295 0.497626 0.05376994 0.555073 0.06189996 0.54629 0.07266896 0.542788 0.064089 0.495083 0.06404697 0.491565 0.07262498 0.482805 0.06182897 0.563812 0.076586 0.548333 0.08489298 0.54629 0.07266896 0.491565 0.07262498 0.489507 0.084858 0.474014 0.07651096 0.583135 0.1084949 0.555621 0.121749 0.548333 0.08489298 0.489507 0.084858 0.482177 0.121781 0.454527 0.108481 0.605512 0.165134 0.647395 0.200502 0.621513 0.227818 0.416514 0.22949 0.389677 0.20189 0.432024 0.165644 0.676379 0.233241 0.664761 0.253225 0.621513 0.227818 0.360308 0.235899 0.389677 0.20189 0.416514 0.22949 0.676379 0.233241 0.715342 0.265392 0.683908 0.279995 0.353696 0.284606 0.320452 0.270303 0.360308 0.235899 0.707254 0.310054 0.687515 0.311539 0.683908 0.279995 0.330721 0.316853 0.320452 0.270303 0.353696 0.284606 0.697446 0.332673 0.676824 0.323937 0.687515 0.311539 0.341964 0.339667 0.330721 0.316853 0.351187 0.31744 0.662817 0.372521 0.63905 0.35733 0.676824 0.323937 0.379297 0.378686 0.341964 0.339667 0.362723 0.329722 0.662817 0.372521 0.626842 0.395792 0.618316 0.375151 0.424583 0.379267 0.416915 0.400552 0.379297 0.378686 0.604826 0.397804 0.600808 0.377857 0.618316 0.375151 0.439252 0.40154 0.416915 0.400552 0.424583 0.379267 0.553095 0.390512 0.559674 0.357011 0.600808 0.377857 0.490934 0.391862 0.439252 0.40154 0.442396 0.381222 0.521923 0.386009 0.521086 0.343868 0.559674 0.357011 0.521923 0.386009 0.490934 0.391862 0.482938 0.358497 0.599845 0.344815 0.600808 0.377857 0.559674 0.357011 0.441977 0.347815 0.464579 0.34223 0.482938 0.358497 0.599845 0.344815 0.615546 0.342005 0.618316 0.375151 0.424583 0.379267 0.425972 0.345582 0.441977 0.347815 0.63905 0.35733 0.618316 0.375151 0.615546 0.342005 0.402772 0.362131 0.406362 0.33648 0.425972 0.345582 0.676824 0.323937 0.63905 0.35733 0.634472 0.332311 0.362723 0.329722 0.377061 0.317685 0.406362 0.33648 0.687515 0.311539 0.676824 0.323937 0.662406 0.312804 0.351187 0.31744 0.370304 0.302644 0.377061 0.317685 0.683908 0.279995 0.687515 0.311539 0.66844 0.297958 0.353696 0.284606 0.3741 0.281778 0.370304 0.302644 0.664761 0.253225 0.683908 0.279995 0.664101 0.277872 0.372747 0.256357 0.398938 0.255633 0.3741 0.281778 0.621513 0.227818 0.664761 0.253225 0.639236 0.253047 0.416514 0.22949 0.424464 0.244473 0.398938 0.255633 0.572941 0.258564 0.553118 0.209599 0.621513 0.227818 0.416514 0.22949 0.485339 0.210053 0.466409 0.259709 0.572941 0.258564 0.563905 0.272007 0.51976 0.2488639 0.51976 0.2488639 0.475886 0.273078 0.466409 0.259709 0.559674 0.357011 0.521086 0.343868 0.558527 0.316594 0.482938 0.358497 0.464579 0.34223 0.482619 0.317843 0.558527 0.316594 0.521086 0.343868 0.520277 0.294764 0.520277 0.294764 0.521086 0.343868 0.482619 0.317843 0.563905 0.272007 0.556923 0.291214 0.520277 0.294764 0.475886 0.273078 0.51976 0.2488639 0.520277 0.294764 0.525483 0.06896698 0.518928 0.06789898 0.518925 0.05968099 0.518925 0.05968099 0.518928 0.06789898 0.512375 0.06895595 0.531231 0.07382899 0.525483 0.06896698 0.536419 0.06207197 0.501452 0.06204295 0.512375 0.06895595 0.506626 0.07381099 0.531231 0.07382899 0.542788 0.064089 0.54629 0.07266896 0.506626 0.07381099 0.506827 0.08741599 0.491565 0.07262498 0.555621 0.121749 0.532042 0.127713 0.532669 0.09091997 0.505177 0.09090799 0.505828 0.127728 0.482177 0.121781 0.531019 0.08743095 0.54629 0.07266896 0.548333 0.08489298 0.489507 0.084858 0.491565 0.07262498 0.506827 0.08741599 0.518981 0.151749 0.518941 0.128358 0.532042 0.127713 0.518981 0.151749 0.499851 0.158434 0.505828 0.127728 0.532042 0.127713 0.518941 0.128358 0.518925 0.093952 0.505828 0.127728 0.505177 0.09090799 0.518925 0.093952 0.531019 0.08743095 0.532669 0.09091997 0.518925 0.093952 0.506827 0.08741599 0.518927 0.08517998 0.518925 0.093952 0.548362 0.17356 0.537959 0.175966 0.535214 0.166808 0.502799 0.166857 0.5001 0.176033 0.489683 0.173693 0.537248 0.187577 0.537959 0.175966 0.548362 0.17356 0.50089 0.187571 0.493996 0.193428 0.489683 0.173693 0.528757 0.191785 0.537248 0.187577 0.544281 0.193366 0.509219 0.191626 0.519841 0.200843 0.493996 0.193428 0.519132 0.185382 0.528757 0.191785 0.519841 0.200843 0.538112 0.1583819 0.535214 0.166808 0.518998 0.1590279 0.499851 0.158434 0.518981 0.151749 0.518998 0.1590279 0.535214 0.166808 0.531131 0.171631 0.519016 0.165599 0.502799 0.166857 0.518998 0.1590279 0.519016 0.165599 0.519132 0.185382 0.519099 0.179457 0.528222 0.186316 0.509787 0.18626 0.519099 0.179457 0.519132 0.185382 0.528757 0.191785 0.528222 0.186316 0.533528 0.184215 0.504547 0.184206 0.509787 0.18626 0.509219 0.191626 0.533528 0.184215 0.533449 0.176739 0.537959 0.175966 0.504547 0.184206 0.50089 0.187571 0.5001 0.176033 0.537959 0.175966 0.533449 0.176739 0.531131 0.171631 0.50691 0.171667 0.504604 0.176791 0.5001 0.176033 0.533449 0.176739 0.533528 0.184215 0.528222 0.186316 0.504604 0.176791 0.519099 0.179457 0.509787 0.18626 0.519099 0.179457 0.519016 0.165599 0.531131 0.171631 0.50691 0.171667 0.519016 0.165599 0.519099 0.179457 0.519841 0.200843 0.544281 0.193366 0.553118 0.209599 0.485339 0.210053 0.493996 0.193428 0.519841 0.200843 0.544281 0.193366 0.548362 0.17356 0.561572 0.167779 0.476363 0.167996 0.489683 0.173693 0.493996 0.193428 0.538112 0.1583819 0.559475 0.1493189 0.561572 0.167779 0.499851 0.158434 0.489683 0.173693 0.476363 0.167996 0.532042 0.127713 0.555621 0.121749 0.559475 0.1493189 0.505828 0.127728 0.499851 0.158434 0.478371 0.149447 0.596138 0.133426 0.559475 0.1493189 0.555621 0.121749 0.441395 0.133592 0.454527 0.108481 0.482177 0.121781 0.601169 0.147885 0.561572 0.167779 0.559475 0.1493189 0.436337 0.148194 0.441395 0.133592 0.478371 0.149447 0.605512 0.165134 0.553118 0.209599 0.561572 0.167779 0.476363 0.167996 0.485339 0.210053 0.432024 0.165644 0.518927 0.08517998 0.518925 0.08386498 0.528933 0.084957 0.518927 0.08517998 0.506827 0.08741599 0.508915 0.08494496 0.531231 0.07382899 0.531019 0.08743095 0.528933 0.084957 0.508915 0.08494496 0.506827 0.08741599 0.506626 0.07381099 0.525483 0.06896698 0.531231 0.07382899 0.529036 0.07542896 0.50882 0.07541495 0.506626 0.07381099 0.512375 0.06895595 0.518928 0.06789898 0.525483 0.06896698 0.523751 0.070508 0.514106 0.07050096 0.512375 0.06895595 0.518928 0.06789898 0.523751 0.070508 0.52156 0.07497 0.518928 0.07425898 0.514106 0.07050096 0.518929 0.06946796 0.518928 0.07425898 0.523751 0.070508 0.529036 0.07542896 0.524236 0.07669097 0.513619 0.07668399 0.50882 0.07541495 0.514106 0.07050096 0.529036 0.07542896 0.528933 0.084957 0.524601 0.07988595 0.513252 0.07987898 0.508915 0.08494496 0.50882 0.07541495 0.518925 0.08386498 0.518926 0.07933098 0.524601 0.07988595 0.518925 0.08386498 0.508915 0.08494496 0.513252 0.07987898 0.518926 0.07933098 0.518928 0.07425898 0.52156 0.07497 0.516297 0.07496595 0.518928 0.07425898 0.518926 0.07933098 0.556923 0.291214 0.563905 0.272007 0.571787 0.277295 0.46807 0.278617 0.475886 0.273078 0.483433 0.292249 0.558527 0.316594 0.556923 0.291214 0.568351 0.292904 0.471978 0.294282 0.483433 0.292249 0.482619 0.317843 0.558527 0.316594 0.573085 0.311386 0.584855 0.327708 0.482619 0.317843 0.464579 0.34223 0.456477 0.329961 0.572941 0.258564 0.580734 0.26662 0.571787 0.277295 0.466409 0.259709 0.475886 0.273078 0.46807 0.278617 0.572941 0.258564 0.613992 0.242662 0.61172 0.255725 0.427062 0.257728 0.424464 0.244473 0.466409 0.259709 0.613992 0.242662 0.639236 0.253047 0.632494 0.262853 0.406068 0.265508 0.398938 0.255633 0.424464 0.244473 0.639236 0.253047 0.664101 0.277872 0.653658 0.279971 0.384904 0.283634 0.3741 0.281778 0.398938 0.255633 0.664101 0.277872 0.66844 0.297958 0.656064 0.297636 0.383015 0.301864 0.370304 0.302644 0.3741 0.281778 0.662406 0.312804 0.652752 0.310186 0.656064 0.297636 0.377061 0.317685 0.370304 0.302644 0.383015 0.301864 0.634472 0.332311 0.62904 0.323864 0.652752 0.310186 0.406362 0.33648 0.377061 0.317685 0.386858 0.314615 0.634472 0.332311 0.615546 0.342005 0.614408 0.331972 0.426727 0.335361 0.425972 0.345582 0.406362 0.33648 0.615546 0.342005 0.599845 0.344815 0.601033 0.333624 0.440344 0.336537 0.441977 0.347815 0.425972 0.345582 0.599845 0.344815 0.577279 0.340156 0.584855 0.327708 0.456477 0.329961 0.464579 0.34223 0.441977 0.347815 0.601033 0.333624 0.584855 0.327708 0.590644 0.321516 0.450408 0.323919 0.456477 0.329961 0.440344 0.336537 0.614408 0.331972 0.601033 0.333624 0.601799 0.328453 0.439372 0.331331 0.440344 0.336537 0.426727 0.335361 0.614408 0.331972 0.613335 0.327083 0.626851 0.320513 0.426727 0.335361 0.411556 0.327673 0.413648 0.324175 0.62904 0.323864 0.626851 0.320513 0.646248 0.306421 0.411556 0.327673 0.386858 0.314615 0.393381 0.31051 0.656064 0.297636 0.652752 0.310186 0.646248 0.306421 0.393381 0.31051 0.386858 0.314615 0.383015 0.301864 0.656064 0.297636 0.649541 0.296225 0.647785 0.283486 0.383015 0.301864 0.384904 0.283634 0.39104 0.287071 0.632494 0.262853 0.653658 0.279971 0.647785 0.283486 0.39104 0.287071 0.384904 0.283634 0.406068 0.265508 0.632494 0.262853 0.629829 0.267263 0.612641 0.26156 0.406068 0.265508 0.427062 0.257728 0.426254 0.263693 0.61172 0.255725 0.612641 0.26156 0.585166 0.270991 0.427062 0.257728 0.458737 0.268049 0.454369 0.272583 0.571787 0.277295 0.580734 0.26662 0.585166 0.270991 0.454369 0.272583 0.458737 0.268049 0.46807 0.278617 0.584855 0.327708 0.573085 0.311386 0.579548 0.30934 0.461204 0.311233 0.46779 0.313081 0.456477 0.329961 0.573085 0.311386 0.568351 0.292904 0.577524 0.293776 0.462754 0.295432 0.471978 0.294282 0.46779 0.313081 0.568351 0.292904 0.571787 0.277295 0.578124 0.2819 0.461798 0.283441 0.46807 0.278617 0.471978 0.294282 0.521923 0.386009 0.553095 0.390512 0.553209 0.433063 0.492809 0.434538 0.490934 0.391862 0.521923 0.386009 0.553095 0.390512 0.604826 0.397804 0.609819 0.431516 0.43586 0.43574 0.439252 0.40154 0.490934 0.391862 0.626842 0.395792 0.648174 0.419316 0.609819 0.431516 0.416915 0.400552 0.439252 0.40154 0.43586 0.43574 0.662817 0.372521 0.692106 0.388274 0.648174 0.419316 0.379297 0.378686 0.416915 0.400552 0.396518 0.425416 0.697446 0.332673 0.726332 0.341754 0.692106 0.388274 0.341964 0.339667 0.379297 0.378686 0.350292 0.396229 0.697446 0.332673 0.707254 0.310054 0.735879 0.312112 0.301067 0.320593 0.330721 0.316853 0.341964 0.339667 0.715342 0.265392 0.7299 0.256393 0.735879 0.312112 0.320452 0.270303 0.330721 0.316853 0.301067 0.320593 0.715342 0.265392 0.676379 0.233241 0.698172 0.216906 0.337414 0.219179 0.360308 0.235899 0.320452 0.270303 0.676379 0.233241 0.647395 0.200502 0.663103 0.190671 0.373474 0.191872 0.389677 0.20189 0.360308 0.235899 0.649444 0.02237796 0.660451 0.07608395 0.62144 0.04808896 0.388827 0.021586 0.411318 0.01513099 0.416419 0.04763096 0.626908 0.01560795 0.62144 0.04808896 0.577206 0.03280097 0.411318 0.01513099 0.470636 1.44e-4 0.460782 0.03265595 0.56746 1.44e-4 0.577206 0.03280097 0.547413 0.04172396 0.470636 1.44e-4 0.518922 0.02488595 0.490511 0.04166895 0.54026 0.05380499 0.518916 0.05029398 0.518922 0.02488595 0.518922 0.02488595 0.518916 0.05029398 0.497626 0.05376994 0.55193 0.05833798 0.54026 0.05380499 0.547413 0.04172396 0.490511 0.04166895 0.497626 0.05376994 0.485955 0.05827295 0.555073 0.06189996 0.55193 0.05833798 0.558059 0.05387097 0.479842 0.05378496 0.485955 0.05827295 0.482805 0.06182897 0.563812 0.076586 0.555073 0.06189996 0.576951 0.057998 0.46092 0.05784499 0.482805 0.06182897 0.474014 0.07651096 0.576951 0.057998 0.577206 0.03280097 0.62144 0.04808896 0.416419 0.04763096 0.460782 0.03265595 0.46092 0.05784499 0.558059 0.05387097 0.547413 0.04172396 0.577206 0.03280097 0.479842 0.05378496 0.46092 0.05784499 0.460782 0.03265595 0.611687 0.07826799 0.62144 0.04808896 0.660451 0.07608395 0.425932 0.07798498 0.410618 0.111244 0.376796 0.07529598 0.583135 0.1084949 0.563812 0.076586 0.611687 0.07826799 0.425932 0.07798498 0.474014 0.07651096 0.454527 0.108481 0.629482 0.130456 0.623495 0.146796 0.601169 0.147885 0.407648 0.130594 0.441395 0.133592 0.436337 0.148194 0.626663 0.111357 0.629482 0.130456 0.596138 0.133426 0.410618 0.111244 0.454527 0.108481 0.441395 0.133592 0.601169 0.147885 0.623495 0.146796 0.619303 0.159841 0.436337 0.148194 0.432024 0.165644 0.418035 0.160361 0.619303 0.159841 0.663103 0.190671 0.647395 0.200502 0.418035 0.160361 0.432024 0.165644 0.389677 0.20189 0.886245 0.1217769 0.849114 0.09973198 0.89178 0.03691595 0.141314 0.112482 0.07896095 0.06071895 0.142277 0.02146697 0.849114 0.09973198 0.788458 0.08082598 0.805584 0.01078599 0.183115 0.09212696 0.142277 0.02146697 0.232648 0.003483951 0.805584 0.01078599 0.788458 0.08082598 0.687018 0.07720398 0.349875 0.07595497 0.246353 0.07650995 0.232648 0.003483951 0.672384 0.022201 0.687018 0.07720398 0.660451 0.07608395 0.376796 0.07529598 0.349875 0.07595497 0.365979 0.02099096 0.660451 0.07608395 0.687018 0.07720398 0.629482 0.130456 0.376796 0.07529598 0.410618 0.111244 0.407648 0.130594 0.7299 0.256393 0.698172 0.216906 0.760215 0.193244 0.271553 0.193871 0.337414 0.219179 0.304876 0.261087 0.909112 0.183261 0.886245 0.1217769 0.9459 0.07956898 0.107928 0.179083 0.01182895 0.155367 0.07896095 0.06071895 0.862868 0.338556 0.894128 0.301884 0.962901 0.344752 0.160557 0.356821 0.1064 0.432652 0.04396796 0.367038 0.962901 0.344752 0.894128 0.301884 0.91536 0.259804 0.09896498 0.266968 0.123776 0.315519 0.04396796 0.367038 0.999856 0.25464 0.91536 0.259804 0.909112 0.183261 0.107928 0.179083 0.09896498 0.266968 1.44e-4 0.259113 0.749542 0.334683 0.735879 0.312112 0.766337 0.300809 0.267408 0.310142 0.301067 0.320593 0.288183 0.346496 0.789162 0.313727 0.766337 0.300809 0.815314 0.276388 0.213065 0.285164 0.267408 0.310142 0.242992 0.325552 0.846174 0.293397 0.815314 0.276388 0.845007 0.256352 0.179662 0.263312 0.213065 0.285164 0.178537 0.304983 0.873517 0.265922 0.845007 0.256352 0.859075 0.228168 0.1628029 0.23172 0.179662 0.263312 0.147089 0.274284 0.87503 0.184705 0.886999 0.2337689 0.859075 0.228168 0.145224 0.182749 0.176788 0.196179 0.1628029 0.23172 0.909112 0.183261 0.91536 0.259804 0.886999 0.2337689 0.131514 0.237587 0.09896498 0.266968 0.107928 0.179083 0.91536 0.259804 0.894128 0.301884 0.873517 0.265922 0.147089 0.274284 0.123776 0.315519 0.09896498 0.266968 0.894128 0.301884 0.862868 0.338556 0.846174 0.293397 0.178537 0.304983 0.160557 0.356821 0.123776 0.315519 0.862868 0.338556 0.794286 0.364062 0.789162 0.313727 0.242992 0.325552 0.239776 0.382592 0.160557 0.356821 0.749542 0.334683 0.789162 0.313727 0.794286 0.364062 0.288183 0.346496 0.268122 0.398737 0.239776 0.382592 0.794286 0.364062 0.862868 0.338556 0.911671 0.402429 0.239776 0.382592 0.185281 0.484099 0.1064 0.432652 0.770572 0.444261 0.7557 0.418603 0.770185 0.379538 0.271364 0.473316 0.21926 0.477186 0.268122 0.398737 0.815858 0.445381 0.770185 0.379538 0.794286 0.364062 0.239776 0.382592 0.268122 0.398737 0.21926 0.477186 0.7299 0.256393 0.789046 0.233323 0.766337 0.300809 0.304876 0.261087 0.301067 0.320593 0.267408 0.310142 0.789046 0.233323 0.809631 0.233887 0.815314 0.276388 0.213065 0.285164 0.219168 0.237388 0.241255 0.236977 0.809631 0.233887 0.829287 0.2195619 0.845007 0.256352 0.179662 0.263312 0.1990669 0.222464 0.219168 0.237388 0.859075 0.228168 0.845007 0.256352 0.829287 0.2195619 0.1628029 0.23172 0.176788 0.196179 0.1990669 0.222464 0.788458 0.08082598 0.78648 0.117591 0.715482 0.1397269 0.246353 0.07650995 0.349875 0.07595497 0.319538 0.139409 0.715482 0.1397269 0.78648 0.117591 0.785486 0.15233 0.319538 0.139409 0.271553 0.193871 0.2459689 0.151002 0.698172 0.216906 0.663103 0.190671 0.715482 0.1397269 0.319538 0.139409 0.373474 0.191872 0.337414 0.219179 0.663103 0.190671 0.623495 0.146796 0.629482 0.130456 0.407648 0.130594 0.413741 0.147158 0.373474 0.191872 0.837382 0.156361 0.858171 0.137775 0.87503 0.184705 0.196622 0.155241 0.176788 0.196179 0.145224 0.182749 0.87503 0.184705 0.858171 0.137775 0.886245 0.1217769 0.145224 0.182749 0.107928 0.179083 0.141314 0.112482 0.78648 0.117591 0.858171 0.137775 0.837382 0.156361 0.246666 0.11485 0.2459689 0.151002 0.196622 0.155241 0.849114 0.09973198 0.858171 0.137775 0.78648 0.117591 0.183115 0.09212696 0.246353 0.07650995 0.246666 0.11485 0.432388 0.894943 0.438797 0.870229 0.491058 0.881714 0.321637 0.893225 0.247207 0.901159 0.263032 0.878321 0.506166 0.904851 0.491058 0.881714 0.572792 0.860484 0.181486 0.854693 0.263032 0.878321 0.247207 0.901159 0.572792 0.860484 0.586396 0.793977 0.619962 0.791615 0.181486 0.854693 0.148729 0.873349 0.136063 0.784093 0.586396 0.793977 0.549027 0.746412 0.563786 0.739211 0.169745 0.787474 0.136063 0.784093 0.194086 0.733241 0.549027 0.746412 0.500314 0.711729 0.50827 0.697693 0.208656 0.740879 0.194086 0.733241 0.250811 0.693249 0.50827 0.697693 0.500314 0.711729 0.438641 0.680683 0.320962 0.677959 0.258399 0.707497 0.250811 0.693249 0.500314 0.711729 0.505666 0.730944 0.452955 0.700023 0.306136 0.696976 0.252524 0.726592 0.258399 0.707497 0.549027 0.746412 0.54285 0.755753 0.505666 0.730944 0.252524 0.726592 0.2145749 0.750414 0.208656 0.740879 0.568148 0.787367 0.54285 0.755753 0.549027 0.746412 0.188269 0.781375 0.169745 0.787474 0.208656 0.740879 0.555495 0.826352 0.568148 0.787367 0.586396 0.793977 0.19985 0.820889 0.181486 0.854693 0.169745 0.787474 0.501231 0.844356 0.555495 0.826352 0.572792 0.860484 0.253846 0.840502 0.263032 0.878321 0.181486 0.854693 0.491058 0.881714 0.438797 0.870229 0.457832 0.84004 0.297562 0.837358 0.315867 0.868209 0.263032 0.878321 0.785486 0.15233 0.796021 0.176969 0.783193 0.187449 0.2459689 0.151002 0.271553 0.193871 0.246955 0.187075 0.434803 0.658882 0.438641 0.680683 0.394766 0.686125 0.325318 0.656224 0.369913 0.610196 0.364838 0.684445 0.789046 0.233323 0.760215 0.193244 0.783193 0.187449 0.246955 0.187075 0.271553 0.193871 0.241255 0.236977 0.391747 0.862097 0.401605 0.84146 0.438797 0.870229 0.315867 0.868209 0.354026 0.840297 0.363377 0.861308 0.438641 0.680683 0.452955 0.700023 0.435018 0.71828 0.323658 0.715731 0.306136 0.696976 0.320962 0.677959 0.384658 0.710299 0.394766 0.686125 0.435018 0.71828 0.3744 0.708969 0.324726 0.727177 0.323658 0.715731 0.410995 0.747662 0.384658 0.710299 0.433669 0.729661 0.324726 0.727177 0.3744 0.708969 0.347028 0.745816 0.384657 0.795423 0.384658 0.710299 0.410995 0.747662 0.37227 0.794472 0.338952 0.783073 0.347028 0.745816 0.384657 0.795423 0.418086 0.784946 0.431333 0.817535 0.37227 0.794472 0.354026 0.840297 0.32479 0.81546 0.401605 0.84146 0.431333 0.817535 0.457832 0.84004 0.354026 0.840297 0.315867 0.868209 0.297562 0.837358 0.816266 0.203086 0.825107 0.209762 0.829287 0.2195619 0.209828 0.206161 0.219168 0.237388 0.1990669 0.222464 0.783193 0.187449 0.802192 0.1846089 0.816266 0.203086 0.246955 0.187075 0.219168 0.237388 0.209828 0.206161 0.457832 0.84004 0.431333 0.817535 0.448505 0.804621 0.307886 0.802031 0.32479 0.81546 0.297562 0.837358 0.418086 0.784946 0.435868 0.779569 0.448505 0.804621 0.338952 0.783073 0.32479 0.81546 0.307886 0.802031 0.418086 0.784946 0.410995 0.747662 0.423718 0.754191 0.334089 0.752045 0.347028 0.745816 0.338952 0.783073 0.427812 0.742828 0.43795 0.749777 0.423718 0.754191 0.33027 0.740536 0.347028 0.745816 0.334089 0.752045 0.433669 0.729661 0.445392 0.731997 0.43795 0.749777 0.324726 0.727177 0.33027 0.740536 0.319919 0.74725 0.433669 0.729661 0.435018 0.71828 0.440995 0.724383 0.31751 0.721697 0.323658 0.715731 0.324726 0.727177 0.435018 0.71828 0.452955 0.700023 0.455277 0.713731 0.30346 0.710657 0.306136 0.696976 0.323658 0.715731 0.501231 0.844356 0.457832 0.84004 0.473386 0.8247 0.282357 0.821525 0.297562 0.837358 0.253846 0.840502 0.555495 0.826352 0.501231 0.844356 0.512485 0.828811 0.2429749 0.824574 0.253846 0.840502 0.19985 0.820889 0.568148 0.787367 0.555495 0.826352 0.550942 0.811814 0.204839 0.806417 0.19985 0.820889 0.188269 0.781375 0.568148 0.787367 0.552139 0.787682 0.539407 0.764539 0.188269 0.781375 0.2145749 0.750414 0.217774 0.759319 0.54285 0.755753 0.539407 0.764539 0.508439 0.743135 0.2145749 0.750414 0.252524 0.726592 0.249419 0.738732 0.505666 0.730944 0.508439 0.743135 0.455277 0.713731 0.252524 0.726592 0.306136 0.696976 0.30346 0.710657 0.445392 0.731997 0.470841 0.748408 0.454776 0.761665 0.312907 0.729222 0.319919 0.74725 0.302729 0.758742 0.470841 0.748408 0.48887 0.770464 0.475403 0.783904 0.28696 0.74502 0.302729 0.758742 0.281439 0.780511 0.475403 0.783904 0.48887 0.770464 0.503673 0.787562 0.252972 0.78341 0.268291 0.766661 0.281439 0.780511 0.503673 0.787562 0.518562 0.791602 0.516802 0.807339 0.252972 0.78341 0.26179 0.798626 0.239243 0.802891 0.512485 0.828811 0.473386 0.8247 0.494476 0.80247 0.26179 0.798626 0.282357 0.821525 0.2429749 0.824574 0.475403 0.783904 0.494476 0.80247 0.473386 0.8247 0.281439 0.780511 0.307886 0.802031 0.282357 0.821525 0.435868 0.779569 0.454776 0.761665 0.475403 0.783904 0.321237 0.777208 0.307886 0.802031 0.281439 0.780511 0.43795 0.749777 0.454776 0.761665 0.435868 0.779569 0.321237 0.777208 0.302729 0.758742 0.319919 0.74725 0.455277 0.713731 0.470841 0.748408 0.445392 0.731997 0.30346 0.710657 0.31751 0.721697 0.312907 0.729222 0.508439 0.743135 0.48887 0.770464 0.470841 0.748408 0.28696 0.74502 0.268291 0.766661 0.249419 0.738732 0.503673 0.787562 0.48887 0.770464 0.508439 0.743135 0.252972 0.78341 0.217774 0.759319 0.249419 0.738732 0.518562 0.791602 0.503673 0.787562 0.539407 0.764539 0.23792 0.787045 0.204331 0.782156 0.217774 0.759319 0.550942 0.811814 0.516802 0.807339 0.518562 0.791602 0.23792 0.787045 0.239243 0.802891 0.204839 0.806417 0.50827 0.697693 0.434803 0.658882 0.484068 0.628776 0.276936 0.625067 0.325318 0.656224 0.250811 0.693249 0.563786 0.739211 0.50827 0.697693 0.543385 0.683538 0.216123 0.67812 0.250811 0.693249 0.194086 0.733241 0.563786 0.739211 0.581052 0.726933 0.616701 0.759965 0.194086 0.733241 0.136063 0.784093 0.140379 0.752377 0.619962 0.791615 0.616701 0.759965 0.660647 0.741167 0.136063 0.784093 0.04952597 0.748824 0.09703797 0.732052 0.707492 0.759884 0.660647 0.741167 0.677256 0.670436 0.04952597 0.748824 0.019409 0.639749 0.08356398 0.662038 0.745511 0.6521 0.677256 0.670436 0.671403 0.592656 0.019409 0.639749 0.03366398 0.564403 0.09281998 0.589862 0.543385 0.683538 0.484068 0.628776 0.671403 0.592656 0.216123 0.67812 0.08356398 0.662038 0.09281998 0.589862 0.677256 0.670436 0.660647 0.741167 0.581052 0.726933 0.1771759 0.720426 0.09703797 0.732052 0.08356398 0.662038 0.829287 0.2195619 0.834578 0.206879 0.834705 0.206959 0.05121594 0.522659 0.145041 0.562595 0.09281998 0.589862 0.62042 0.565675 0.671403 0.592656 0.484068 0.628776 0.276936 0.625067 0.09281998 0.589862 0.145041 0.562595 0.391039 0.611891 0.498072 0.552315 0.484068 0.628776 0.276936 0.625067 0.264218 0.55014 0.369913 0.610196</float_array>
+ <technique_common>
+ <accessor source="#Suzanne-mesh-map-0-array" count="2901" stride="2">
+ <param name="S" type="float"/>
+ <param name="T" type="float"/>
+ </accessor>
+ </technique_common>
+ </source>
+ <vertices id="Suzanne-mesh-vertices">
+ <input semantic="POSITION" source="#Suzanne-mesh-positions"/>
+ </vertices>
+ <triangles count="967">
+ <input semantic="VERTEX" source="#Suzanne-mesh-vertices" offset="0"/>
+ <input semantic="NORMAL" source="#Suzanne-mesh-normals" offset="1"/>
+ <input semantic="TEXCOORD" source="#Suzanne-mesh-map-0" offset="2" set="0"/>
+ <p>46 0 0 2 0 1 44 0 2 3 1 3 47 1 4 45 1 5 44 2 6 4 2 7 42 2 8 5 3 9 45 3 10 43 3 11 2 4 12 6 4 13 4 4 14 7 5 15 3 5 16 5 5 17 0 6 18 8 6 19 2 6 20 9 7 21 1 7 22 3 7 23 10 8 24 14 8 25 8 8 26 15 9 27 11 9 28 9 9 29 8 10 30 16 10 31 6 10 32 17 11 33 9 11 34 7 11 35 20 12 36 16 12 37 14 12 38 21 13 39 17 13 40 19 13 41 22 14 42 14 14 43 12 14 44 23 15 45 15 15 46 21 15 47 22 16 48 26 16 49 20 16 50 27 17 51 23 17 52 21 17 53 26 18 54 18 18 55 20 18 56 27 19 57 19 19 58 29 19 59 32 20 60 28 20 61 26 20 62 33 21 63 29 21 64 31 21 65 34 22 66 26 22 67 24 22 68 35 23 69 27 23 70 33 23 71 36 24 72 32 24 73 34 24 74 37 25 75 33 25 76 39 25 77 38 26 78 30 26 79 32 26 80 39 27 81 31 27 82 41 27 83 44 28 84 40 28 85 38 28 86 45 29 87 41 29 88 43 29 89 46 30 90 38 30 91 36 30 92 47 31 93 39 31 94 45 31 95 36 32 96 48 32 97 46 32 98 37 33 99 49 33 100 51 33 101 34 34 102 50 34 103 36 34 104 35 35 105 51 35 106 53 35 107 24 36 108 52 36 109 34 36 110 25 37 111 53 37 112 55 37 113 22 38 114 54 38 115 24 38 116 23 39 117 55 39 118 57 39 119 22 40 120 58 40 121 56 40 122 59 41 123 23 41 124 57 41 125 12 42 126 62 42 127 58 42 128 63 43 129 13 43 130 59 43 131 10 44 132 64 44 133 62 44 134 65 45 135 11 45 136 63 45 137 0 46 138 48 46 139 64 46 140 49 47 141 1 47 142 65 47 143 60 48 144 64 48 145 48 48 146 49 49 147 65 49 148 61 49 149 62 50 150 64 50 151 60 50 152 61 51 153 65 51 154 63 51 155 60 52 156 58 52 157 62 52 158 63 53 159 59 53 160 61 53 161 60 54 162 56 54 163 58 54 164 59 55 165 57 55 166 61 55 167 60 56 168 54 56 169 56 56 170 57 57 171 55 57 172 61 57 173 60 58 174 52 58 175 54 58 176 55 59 177 53 59 178 61 59 179 60 60 180 50 60 181 52 60 182 53 61 183 51 61 184 61 61 185 60 62 186 48 62 187 50 62 188 51 63 189 49 63 190 61 63 191 173 64 192 90 64 193 88 64 194 174 65 195 90 65 196 175 65 197 171 66 198 88 66 199 86 66 200 172 67 201 89 67 202 174 67 203 84 68 204 171 68 205 86 68 206 172 69 207 85 69 208 87 69 209 82 70 210 169 70 211 84 70 212 170 71 213 83 71 214 85 71 215 80 72 216 167 72 217 82 72 218 168 73 219 81 73 220 83 73 221 78 74 222 145 74 223 163 74 224 146 75 225 79 75 226 164 75 227 93 76 228 145 76 229 91 76 230 94 77 231 146 77 232 148 77 233 93 78 234 149 78 235 147 78 236 150 79 237 94 79 238 148 79 239 97 80 240 149 80 241 95 80 242 98 81 243 150 81 244 152 81 245 99 82 246 151 82 247 97 82 248 100 83 249 152 83 250 154 83 251 101 84 252 153 84 253 99 84 254 102 85 255 154 85 256 156 85 257 101 86 258 157 86 259 155 86 260 158 87 261 102 87 262 156 87 263 105 88 264 157 88 265 103 88 266 106 89 267 158 89 268 160 89 269 107 90 270 159 90 271 105 90 272 108 91 273 160 91 274 162 91 275 66 92 276 161 92 277 107 92 278 66 93 279 162 93 280 67 93 281 127 94 282 161 94 283 109 94 284 128 95 285 162 95 286 160 95 287 127 96 288 157 96 289 159 96 290 158 97 291 128 97 292 160 97 293 155 98 294 178 98 295 125 98 296 156 99 297 179 99 298 158 99 299 153 100 300 125 100 301 123 100 302 154 101 303 126 101 304 156 101 305 151 102 306 123 102 307 121 102 308 152 103 309 124 103 310 154 103 311 149 104 312 121 104 313 119 104 314 150 105 315 122 105 316 152 105 317 147 106 318 119 106 319 117 106 320 148 107 321 120 107 322 150 107 323 145 108 324 117 108 325 115 108 326 146 109 327 118 109 328 148 109 329 113 110 330 145 110 331 115 110 332 146 110 333 114 110 334 116 110 335 113 111 336 176 111 337 163 111 338 176 112 339 114 112 340 164 112 341 161 113 342 111 113 343 109 113 344 162 114 345 112 114 346 67 114 347 111 115 348 177 115 349 182 115 350 177 116 351 112 116 352 183 116 353 180 117 354 177 117 355 176 117 356 181 118 357 177 118 358 183 118 359 134 119 360 175 119 361 173 119 362 175 120 363 135 120 364 174 120 365 132 121 366 173 121 367 171 121 368 174 122 369 133 122 370 172 122 371 132 123 372 169 123 373 130 123 374 133 124 375 170 124 376 172 124 377 165 125 378 184 125 379 167 125 380 185 126 381 166 126 382 168 126 383 130 127 384 167 127 385 184 127 386 168 128 387 131 128 388 185 128 389 189 129 390 186 129 391 143 129 392 189 130 393 187 130 394 188 130 395 186 131 396 68 131 397 184 131 398 187 132 399 68 132 400 188 132 401 130 133 402 68 133 403 129 133 404 131 133 405 68 133 406 185 133 407 141 134 408 190 134 409 143 134 410 191 135 411 142 135 412 144 135 413 194 136 414 141 136 415 139 136 416 195 137 417 142 137 418 193 137 419 196 138 420 139 138 421 138 138 422 197 139 423 140 139 424 195 139 425 70 140 426 138 140 427 137 140 428 70 141 429 138 141 430 197 141 431 143 142 432 69 142 433 189 142 434 144 143 435 69 143 436 191 143 437 190 144 438 207 144 439 69 144 440 191 145 441 207 145 442 206 145 443 70 146 444 199 146 445 196 146 446 200 147 447 70 147 448 197 147 449 196 148 450 201 148 451 194 148 452 202 149 453 197 149 454 195 149 455 201 150 456 192 150 457 194 150 458 202 151 459 193 151 460 204 151 461 192 152 462 205 152 463 190 152 464 206 153 465 193 153 466 191 153 467 203 154 468 199 154 469 198 154 470 204 155 471 200 155 472 202 155 473 198 156 474 205 156 475 203 156 476 206 157 477 198 157 478 204 157 479 138 158 480 163 158 481 176 158 482 164 159 483 138 159 484 176 159 485 139 160 486 210 160 487 163 160 488 211 161 489 140 161 490 164 161 491 143 162 492 210 162 493 141 162 494 144 163 495 211 163 496 213 163 497 186 164 498 212 164 499 143 164 500 187 165 501 213 165 502 166 165 503 208 166 504 165 166 505 80 166 506 209 167 507 166 167 508 213 167 509 214 168 510 212 168 511 208 168 512 215 169 513 213 169 514 211 169 515 78 170 516 210 170 517 214 170 518 211 171 519 79 171 520 215 171 521 129 172 522 221 172 523 130 172 524 129 173 525 222 173 526 71 173 527 132 174 528 221 174 529 219 174 530 222 175 531 133 175 532 220 175 533 134 176 534 219 176 535 217 176 536 220 177 537 135 177 538 218 177 539 136 133 540 217 133 541 216 133 542 218 133 543 136 133 544 216 133 545 217 178 546 230 178 547 216 178 548 218 179 549 230 179 550 229 179 551 217 180 552 226 180 553 228 180 554 227 181 555 218 181 556 229 181 557 219 140 558 224 140 559 226 140 560 225 182 561 220 182 562 227 182 563 71 183 564 224 183 565 221 183 566 71 184 567 225 184 568 223 184 569 223 185 570 228 185 571 224 185 572 229 186 573 223 186 574 225 186 575 224 187 576 228 187 577 226 187 578 227 188 579 229 188 580 225 188 581 182 189 582 233 189 583 231 189 584 234 190 585 183 190 586 232 190 587 111 191 588 231 191 589 253 191 590 232 192 591 112 192 592 254 192 593 111 193 594 255 193 595 109 193 596 112 194 597 256 194 598 254 194 599 113 195 600 233 195 601 180 195 602 114 196 603 234 196 604 252 196 605 113 197 606 249 197 607 251 197 608 250 198 609 114 198 610 252 198 611 115 199 612 247 199 613 249 199 614 248 200 615 116 200 616 250 200 617 117 201 618 245 201 619 247 201 620 246 202 621 118 202 622 248 202 623 119 203 624 243 203 625 245 203 626 244 204 627 120 204 628 246 204 629 123 205 630 243 205 631 121 205 632 124 206 633 244 206 634 242 206 635 125 207 636 241 207 637 123 207 638 126 208 639 242 208 640 240 208 641 125 209 642 235 209 643 239 209 644 236 210 645 126 210 646 240 210 647 178 211 648 237 211 649 235 211 650 238 212 651 179 212 652 236 212 653 127 213 654 255 213 655 237 213 656 256 214 657 128 214 658 238 214 659 237 215 660 257 215 661 275 215 662 258 216 663 238 216 664 276 216 665 235 217 666 275 217 667 277 217 668 276 218 669 236 218 670 278 218 671 235 219 672 273 219 673 239 219 674 236 220 675 274 220 676 278 220 677 239 221 678 271 221 679 241 221 680 240 222 681 272 222 682 274 222 683 243 223 684 271 223 685 269 223 686 272 224 687 244 224 688 270 224 689 243 225 690 267 225 691 245 225 692 244 226 693 268 226 694 270 226 695 247 227 696 267 227 697 265 227 698 268 228 699 248 228 700 266 228 701 247 229 702 263 229 703 249 229 704 248 230 705 264 230 706 266 230 707 249 231 708 261 231 709 251 231 710 250 232 711 262 232 712 264 232 713 233 233 714 261 233 715 279 233 716 262 234 717 234 234 718 280 234 719 255 235 720 259 235 721 257 235 722 260 236 723 256 236 724 258 236 725 253 237 726 281 237 727 259 237 728 282 238 729 254 238 730 260 238 731 231 239 732 279 239 733 281 239 734 280 240 735 232 240 736 282 240 737 66 241 738 283 241 739 72 241 740 284 242 741 66 242 742 72 242 743 107 243 744 285 243 745 283 243 746 286 244 747 108 244 748 284 244 749 103 245 750 285 245 751 105 245 752 104 246 753 286 246 754 288 246 755 101 247 756 287 247 757 103 247 758 102 248 759 288 248 760 290 248 761 99 249 762 289 249 763 101 249 764 100 250 765 290 250 766 292 250 767 99 251 768 293 251 769 291 251 770 294 252 771 100 252 772 292 252 773 95 253 774 293 253 775 97 253 776 96 254 777 294 254 778 296 254 779 95 255 780 297 255 781 295 255 782 298 256 783 96 256 784 296 256 785 93 257 786 299 257 787 297 257 788 300 258 789 94 258 790 298 258 791 308 259 792 337 259 793 307 259 794 308 260 795 338 260 796 328 260 797 307 261 798 335 261 799 306 261 800 307 262 801 336 262 802 338 262 803 306 263 804 339 263 805 305 263 806 306 264 807 340 264 808 336 264 809 88 265 810 305 265 811 339 265 812 305 266 813 89 266 814 340 266 815 86 267 816 339 267 817 333 267 818 340 268 819 87 268 820 334 268 821 84 269 822 333 269 823 329 269 824 334 270 825 85 270 826 330 270 827 82 271 828 329 271 829 331 271 830 330 272 831 83 272 832 332 272 833 329 273 834 337 273 835 331 273 836 338 274 837 330 274 838 332 274 839 333 275 840 335 275 841 329 275 842 334 276 843 336 276 844 340 276 845 331 277 846 327 277 847 325 277 848 332 278 849 328 278 850 338 278 851 80 279 852 331 279 853 325 279 854 332 280 855 81 280 856 326 280 857 341 281 858 214 281 859 208 281 860 342 282 861 215 282 862 344 282 863 325 283 864 208 283 865 80 283 866 326 284 867 209 284 868 342 284 869 214 285 870 345 285 871 78 285 872 215 286 873 346 286 874 344 286 875 345 287 876 91 287 877 78 287 878 346 288 879 92 288 880 300 288 881 323 289 882 303 289 883 76 289 884 324 290 885 303 290 886 352 290 887 351 291 888 77 291 889 303 291 890 352 292 891 77 292 892 350 292 893 77 293 894 347 293 895 304 293 896 348 294 897 77 294 898 304 294 899 304 295 900 327 295 901 308 295 902 328 296 903 304 296 904 308 296 905 327 297 906 341 297 907 325 297 908 328 298 909 342 298 910 348 298 911 295 299 912 317 299 913 309 299 914 318 300 915 296 300 916 310 300 917 315 301 918 76 301 919 75 301 920 316 302 921 76 302 922 324 302 923 357 303 924 302 303 925 301 303 926 358 304 927 302 304 928 356 304 929 302 305 930 353 305 931 74 305 932 354 306 933 302 306 934 74 306 935 74 307 936 315 307 937 75 307 938 316 308 939 74 308 940 75 308 941 291 309 942 361 309 943 363 309 944 362 310 945 292 310 946 364 310 947 363 311 948 367 311 949 365 311 950 368 312 951 364 312 952 366 312 953 365 313 954 369 313 955 371 313 956 370 314 957 366 314 958 372 314 959 371 315 960 375 315 961 373 315 962 376 316 963 372 316 964 374 316 965 377 317 966 375 317 967 313 317 968 378 318 969 376 318 970 374 318 971 315 319 972 373 319 973 377 319 974 374 320 975 316 320 976 378 320 977 353 321 978 371 321 979 373 321 980 372 322 981 354 322 982 374 322 983 355 323 984 365 323 985 371 323 986 366 324 987 356 324 988 372 324 989 357 325 990 363 325 991 365 325 992 364 326 993 358 326 994 366 326 995 291 327 996 359 327 997 289 327 998 292 328 999 360 328 1000 364 328 1001 359 329 1002 301 329 1003 73 329 1004 360 330 1005 301 330 1006 358 330 1007 285 331 1008 289 331 1009 283 331 1010 286 332 1011 290 332 1012 288 332 1013 283 333 1014 359 333 1015 73 333 1016 360 334 1017 284 334 1018 73 334 1019 72 335 1020 283 335 1021 73 335 1022 73 336 1023 284 336 1024 72 336 1025 295 337 1026 361 337 1027 293 337 1028 296 338 1029 362 338 1030 310 338 1031 309 339 1032 367 339 1033 361 339 1034 368 340 1035 310 340 1036 362 340 1037 311 341 1038 369 341 1039 367 341 1040 370 342 1041 312 342 1042 368 342 1043 375 343 1044 381 343 1045 313 343 1046 376 344 1047 382 344 1048 370 344 1049 349 345 1050 383 345 1051 347 345 1052 350 346 1053 384 346 1054 386 346 1055 383 347 1056 319 347 1057 317 347 1058 384 348 1059 320 348 1060 386 348 1061 297 349 1062 383 349 1063 317 349 1064 384 350 1065 298 350 1066 318 350 1067 299 351 1068 341 351 1069 383 351 1070 342 352 1071 300 352 1072 384 352 1073 341 353 1074 347 353 1075 383 353 1076 384 354 1077 348 354 1078 342 354 1079 299 355 1080 345 355 1081 343 355 1082 344 356 1083 346 356 1084 300 356 1085 321 357 1086 377 357 1087 313 357 1088 322 358 1089 378 358 1090 380 358 1091 377 359 1092 323 359 1093 315 359 1094 378 360 1095 324 360 1096 380 360 1097 385 361 1098 321 361 1099 319 361 1100 386 362 1101 322 362 1102 380 362 1103 351 363 1104 385 363 1105 349 363 1106 352 364 1107 386 364 1108 380 364 1109 323 365 1110 379 365 1111 351 365 1112 352 366 1113 380 366 1114 324 366 1115 387 367 1116 401 367 1117 399 367 1118 388 368 1119 402 368 1120 414 368 1121 399 369 1122 403 369 1123 397 369 1124 404 370 1125 400 370 1126 398 370 1127 403 371 1128 395 371 1129 397 371 1130 404 372 1131 396 372 1132 406 372 1133 405 373 1134 393 373 1135 395 373 1136 406 374 1137 394 374 1138 408 374 1139 407 375 1140 391 375 1141 393 375 1142 408 376 1143 392 376 1144 410 376 1145 391 377 1146 411 377 1147 389 377 1148 412 378 1149 392 378 1150 390 378 1151 409 379 1152 417 379 1153 411 379 1154 418 380 1155 410 380 1156 412 380 1157 407 381 1158 419 381 1159 409 381 1160 420 382 1161 408 382 1162 410 382 1163 423 383 1164 407 383 1165 405 383 1166 424 384 1167 408 384 1168 422 384 1169 425 385 1170 405 385 1171 403 385 1172 426 386 1173 406 386 1174 424 386 1175 427 387 1176 403 387 1177 401 387 1178 428 388 1179 404 388 1180 426 388 1181 401 389 1182 415 389 1183 427 389 1184 416 390 1185 402 390 1186 428 390 1187 319 391 1188 441 391 1189 317 391 1190 320 392 1191 442 392 1192 444 392 1193 389 393 1194 443 393 1195 319 393 1196 390 394 1197 444 394 1198 412 394 1199 309 395 1200 441 395 1201 311 395 1202 442 396 1203 310 396 1204 312 396 1205 381 397 1206 413 397 1207 387 397 1208 414 398 1209 382 398 1210 388 398 1211 411 399 1212 439 399 1213 443 399 1214 440 400 1215 412 400 1216 444 400 1217 445 401 1218 439 401 1219 437 401 1220 446 402 1221 440 402 1222 444 402 1223 433 133 1224 437 133 1225 435 133 1226 438 133 1227 434 133 1228 436 133 1229 447 403 1230 433 403 1231 431 403 1232 448 404 1233 434 404 1234 446 404 1235 447 405 1236 449 405 1237 429 405 1238 448 406 1239 450 406 1240 432 406 1241 429 407 1242 415 407 1243 413 407 1244 430 408 1245 416 408 1246 450 408 1247 447 409 1248 381 409 1249 311 409 1250 448 410 1251 382 410 1252 430 410 1253 441 411 1254 447 411 1255 311 411 1256 442 412 1257 448 412 1258 446 412 1259 441 413 1260 443 413 1261 445 413 1262 446 414 1263 444 414 1264 442 414 1265 415 415 1266 451 415 1267 475 415 1268 452 416 1269 416 416 1270 476 416 1271 431 417 1272 451 417 1273 449 417 1274 432 418 1275 452 418 1276 462 418 1277 431 419 1278 459 419 1279 461 419 1280 460 420 1281 432 420 1282 462 420 1283 435 421 1284 459 421 1285 433 421 1286 436 422 1287 460 422 1288 458 422 1289 437 423 1290 457 423 1291 435 423 1292 438 424 1293 458 424 1294 456 424 1295 437 425 1296 453 425 1297 455 425 1298 454 426 1299 438 426 1300 456 426 1301 439 427 1302 473 427 1303 453 427 1304 474 427 1305 440 427 1306 454 427 1307 427 428 1308 475 428 1309 463 428 1310 476 429 1311 428 429 1312 464 429 1313 425 430 1314 463 430 1315 465 430 1316 464 431 1317 426 431 1318 466 431 1319 423 432 1320 465 432 1321 467 432 1322 466 433 1323 424 433 1324 468 433 1325 423 434 1326 469 434 1327 421 434 1328 424 435 1329 470 435 1330 468 435 1331 421 436 1332 471 436 1333 419 436 1334 422 437 1335 472 437 1336 470 437 1337 419 438 1338 473 438 1339 417 438 1340 420 439 1341 474 439 1342 472 439 1343 455 440 1344 477 440 1345 457 440 1346 456 441 1347 478 441 1348 480 441 1349 479 442 1350 483 442 1351 477 442 1352 480 443 1353 484 443 1354 482 443 1355 483 444 1356 487 444 1357 485 444 1358 488 445 1359 484 445 1360 486 445 1361 487 446 1362 491 446 1363 485 446 1364 488 447 1365 492 447 1366 490 447 1367 463 448 1368 485 448 1369 491 448 1370 486 449 1371 464 449 1372 492 449 1373 483 450 1374 475 450 1375 451 450 1376 484 451 1377 476 451 1378 486 451 1379 461 452 1380 483 452 1381 451 452 1382 462 453 1383 484 453 1384 478 453 1385 457 133 1386 461 133 1387 459 133 1388 462 133 1389 458 133 1390 460 133 1391 473 454 1392 455 454 1393 453 454 1394 474 455 1395 456 455 1396 480 455 1397 471 456 1398 479 456 1399 473 456 1400 480 457 1401 472 457 1402 474 457 1403 487 458 1404 471 458 1405 469 458 1406 488 459 1407 472 459 1408 482 459 1409 489 460 1410 469 460 1411 467 460 1412 490 461 1413 470 461 1414 488 461 1415 465 462 1416 489 462 1417 467 462 1418 490 463 1419 466 463 1420 468 463 1421 463 464 1422 491 464 1423 465 464 1424 466 465 1425 492 465 1426 464 465 1427 391 466 1428 503 466 1429 501 466 1430 504 467 1431 392 467 1432 502 467 1433 393 468 1434 501 468 1435 499 468 1436 502 469 1437 394 469 1438 500 469 1439 393 470 1440 497 470 1441 395 470 1442 394 471 1443 498 471 1444 500 471 1445 395 472 1446 495 472 1447 397 472 1448 396 473 1449 496 473 1450 498 473 1451 397 474 1452 493 474 1453 399 474 1454 398 475 1455 494 475 1456 496 475 1457 399 476 1458 505 476 1459 387 476 1460 400 477 1461 506 477 1462 494 477 1463 501 478 1464 505 478 1465 493 478 1466 502 479 1467 506 479 1468 504 479 1469 493 480 1470 499 480 1471 501 480 1472 500 481 1473 494 481 1474 502 481 1475 495 482 1476 497 482 1477 499 482 1478 500 483 1479 498 483 1480 496 483 1481 381 484 1482 505 484 1483 313 484 1484 382 485 1485 506 485 1486 388 485 1487 313 486 1488 503 486 1489 321 486 1490 504 487 1491 314 487 1492 322 487 1493 319 488 1494 503 488 1495 389 488 1496 504 489 1497 320 489 1498 390 489 1499 46 490 1500 0 490 1501 2 490 1502 3 491 1503 1 491 1504 47 491 1505 44 492 1506 2 492 1507 4 492 1508 5 493 1509 3 493 1510 45 493 1511 2 494 1512 8 494 1513 6 494 1514 7 495 1515 9 495 1516 3 495 1517 0 496 1518 10 496 1519 8 496 1520 9 497 1521 11 497 1522 1 497 1523 10 498 1524 12 498 1525 14 498 1526 15 499 1527 13 499 1528 11 499 1529 8 500 1530 14 500 1531 16 500 1532 17 501 1533 15 501 1534 9 501 1535 20 502 1536 18 502 1537 16 502 1538 21 503 1539 15 503 1540 17 503 1541 22 504 1542 20 504 1543 14 504 1544 23 505 1545 13 505 1546 15 505 1547 22 506 1548 24 506 1549 26 506 1550 27 507 1551 25 507 1552 23 507 1553 26 508 1554 28 508 1555 18 508 1556 27 509 1557 21 509 1558 19 509 1559 32 510 1560 30 510 1561 28 510 1562 33 511 1563 27 511 1564 29 511 1565 34 512 1566 32 512 1567 26 512 1568 35 513 1569 25 513 1570 27 513 1571 36 514 1572 38 514 1573 32 514 1574 37 515 1575 35 515 1576 33 515 1577 38 516 1578 40 516 1579 30 516 1580 39 517 1581 33 517 1582 31 517 1583 44 518 1584 42 518 1585 40 518 1586 45 519 1587 39 519 1588 41 519 1589 46 520 1590 44 520 1591 38 520 1592 47 521 1593 37 521 1594 39 521 1595 36 522 1596 50 522 1597 48 522 1598 37 523 1599 47 523 1600 49 523 1601 34 524 1602 52 524 1603 50 524 1604 35 525 1605 37 525 1606 51 525 1607 24 526 1608 54 526 1609 52 526 1610 25 527 1611 35 527 1612 53 527 1613 22 528 1614 56 528 1615 54 528 1616 23 529 1617 25 529 1618 55 529 1619 22 530 1620 12 530 1621 58 530 1622 59 531 1623 13 531 1624 23 531 1625 12 532 1626 10 532 1627 62 532 1628 63 533 1629 11 533 1630 13 533 1631 10 534 1632 0 534 1633 64 534 1634 65 535 1635 1 535 1636 11 535 1637 0 536 1638 46 536 1639 48 536 1640 49 537 1641 47 537 1642 1 537 1643 173 538 1644 175 538 1645 90 538 1646 174 539 1647 89 539 1648 90 539 1649 171 540 1650 173 540 1651 88 540 1652 172 541 1653 87 541 1654 89 541 1655 84 542 1656 169 542 1657 171 542 1658 172 543 1659 170 543 1660 85 543 1661 82 544 1662 167 544 1663 169 544 1664 170 545 1665 168 545 1666 83 545 1667 80 546 1668 165 546 1669 167 546 1670 168 547 1671 166 547 1672 81 547 1673 78 548 1674 91 548 1675 145 548 1676 146 549 1677 92 549 1678 79 549 1679 93 550 1680 147 550 1681 145 550 1682 94 551 1683 92 551 1684 146 551 1685 93 552 1686 95 552 1687 149 552 1688 150 553 1689 96 553 1690 94 553 1691 97 554 1692 151 554 1693 149 554 1694 98 555 1695 96 555 1696 150 555 1697 99 556 1698 153 556 1699 151 556 1700 100 557 1701 98 557 1702 152 557 1703 101 558 1704 155 558 1705 153 558 1706 102 559 1707 100 559 1708 154 559 1709 101 560 1710 103 560 1711 157 560 1712 158 561 1713 104 561 1714 102 561 1715 105 562 1716 159 562 1717 157 562 1718 106 563 1719 104 563 1720 158 563 1721 107 564 1722 161 564 1723 159 564 1724 108 565 1725 106 565 1726 160 565 1727 66 566 1728 67 566 1729 161 566 1730 66 567 1731 108 567 1732 162 567 1733 127 568 1734 159 568 1735 161 568 1736 128 569 1737 110 569 1738 162 569 1739 127 570 1740 178 570 1741 157 570 1742 158 571 1743 179 571 1744 128 571 1745 155 572 1746 157 572 1747 178 572 1748 156 573 1749 126 573 1750 179 573 1751 153 574 1752 155 574 1753 125 574 1754 154 575 1755 124 575 1756 126 575 1757 151 576 1758 153 576 1759 123 576 1760 152 577 1761 122 577 1762 124 577 1763 149 578 1764 151 578 1765 121 578 1766 150 579 1767 120 579 1768 122 579 1769 147 580 1770 149 580 1771 119 580 1772 148 581 1773 118 581 1774 120 581 1775 145 582 1776 147 582 1777 117 582 1778 146 583 1779 116 583 1780 118 583 1781 113 584 1782 163 584 1783 145 584 1784 146 585 1785 164 585 1786 114 585 1787 113 586 1788 180 586 1789 176 586 1790 176 587 1791 181 587 1792 114 587 1793 161 588 1794 67 588 1795 111 588 1796 162 589 1797 110 589 1798 112 589 1799 111 590 1800 67 590 1801 177 590 1802 177 591 1803 67 591 1804 112 591 1805 180 592 1806 182 592 1807 177 592 1808 181 593 1809 176 593 1810 177 593 1811 134 594 1812 136 594 1813 175 594 1814 175 595 1815 136 595 1816 135 595 1817 132 596 1818 134 596 1819 173 596 1820 174 597 1821 135 597 1822 133 597 1823 132 598 1824 171 598 1825 169 598 1826 133 599 1827 131 599 1828 170 599 1829 165 600 1830 186 600 1831 184 600 1832 185 601 1833 187 601 1834 166 601 1835 130 602 1836 169 602 1837 167 602 1838 168 603 1839 170 603 1840 131 603 1841 189 130 1842 188 130 1843 186 130 1844 189 604 1845 144 604 1846 187 604 1847 186 132 1848 188 132 1849 68 132 1850 187 605 1851 185 605 1852 68 605 1853 130 133 1854 184 133 1855 68 133 1856 131 133 1857 129 133 1858 68 133 1859 141 606 1860 192 606 1861 190 606 1862 191 607 1863 193 607 1864 142 607 1865 194 608 1866 192 608 1867 141 608 1868 195 609 1869 140 609 1870 142 609 1871 196 610 1872 194 610 1873 139 610 1874 197 611 1875 138 611 1876 140 611 1877 70 612 1878 196 612 1879 138 612 1880 143 613 1881 190 613 1882 69 613 1883 144 614 1884 189 614 1885 69 614 1886 190 615 1887 205 615 1888 207 615 1889 191 616 1890 69 616 1891 207 616 1892 70 617 1893 198 617 1894 199 617 1895 200 618 1896 198 618 1897 70 618 1898 196 619 1899 199 619 1900 201 619 1901 202 620 1902 200 620 1903 197 620 1904 201 621 1905 203 621 1906 192 621 1907 202 622 1908 195 622 1909 193 622 1910 192 623 1911 203 623 1912 205 623 1913 206 624 1914 204 624 1915 193 624 1916 203 625 1917 201 625 1918 199 625 1919 204 626 1920 198 626 1921 200 626 1922 198 627 1923 207 627 1924 205 627 1925 206 628 1926 207 628 1927 198 628 1928 138 629 1929 139 629 1930 163 629 1931 164 630 1932 140 630 1933 138 630 1934 139 631 1935 141 631 1936 210 631 1937 211 632 1938 142 632 1939 140 632 1940 143 633 1941 212 633 1942 210 633 1943 144 634 1944 142 634 1945 211 634 1946 186 635 1947 165 635 1948 212 635 1949 187 636 1950 144 636 1951 213 636 1952 208 637 1953 212 637 1954 165 637 1955 209 638 1956 81 638 1957 166 638 1958 214 639 1959 210 639 1960 212 639 1961 215 640 1962 209 640 1963 213 640 1964 78 641 1965 163 641 1966 210 641 1967 211 642 1968 164 642 1969 79 642 1970 129 643 1971 71 643 1972 221 643 1973 129 644 1974 131 644 1975 222 644 1976 132 645 1977 130 645 1978 221 645 1979 222 646 1980 131 646 1981 133 646 1982 134 647 1983 132 647 1984 219 647 1985 220 648 1986 133 648 1987 135 648 1988 136 649 1989 134 649 1990 217 649 1991 218 650 1992 135 650 1993 136 650 1994 217 178 1995 228 178 1996 230 178 1997 218 179 1998 216 179 1999 230 179 2000 217 651 2001 219 651 2002 226 651 2003 227 652 2004 220 652 2005 218 652 2006 219 140 2007 221 140 2008 224 140 2009 225 182 2010 222 182 2011 220 182 2012 71 183 2013 223 183 2014 224 183 2015 71 184 2016 222 184 2017 225 184 2018 223 653 2019 230 653 2020 228 653 2021 229 654 2022 230 654 2023 223 654 2024 182 655 2025 180 655 2026 233 655 2027 234 656 2028 181 656 2029 183 656 2030 111 657 2031 182 657 2032 231 657 2033 232 658 2034 183 658 2035 112 658 2036 111 659 2037 253 659 2038 255 659 2039 112 660 2040 110 660 2041 256 660 2042 113 661 2043 251 661 2044 233 661 2045 114 662 2046 181 662 2047 234 662 2048 113 663 2049 115 663 2050 249 663 2051 250 664 2052 116 664 2053 114 664 2054 115 665 2055 117 665 2056 247 665 2057 248 666 2058 118 666 2059 116 666 2060 117 667 2061 119 667 2062 245 667 2063 246 668 2064 120 668 2065 118 668 2066 119 669 2067 121 669 2068 243 669 2069 244 670 2070 122 670 2071 120 670 2072 123 671 2073 241 671 2074 243 671 2075 124 672 2076 122 672 2077 244 672 2078 125 673 2079 239 673 2080 241 673 2081 126 674 2082 124 674 2083 242 674 2084 125 675 2085 178 675 2086 235 675 2087 236 676 2088 179 676 2089 126 676 2090 178 677 2091 127 677 2092 237 677 2093 238 678 2094 128 678 2095 179 678 2096 127 679 2097 109 679 2098 255 679 2099 256 680 2100 110 680 2101 128 680 2102 237 681 2103 255 681 2104 257 681 2105 258 682 2106 256 682 2107 238 682 2108 235 683 2109 237 683 2110 275 683 2111 276 684 2112 238 684 2113 236 684 2114 235 685 2115 277 685 2116 273 685 2117 236 686 2118 240 686 2119 274 686 2120 239 687 2121 273 687 2122 271 687 2123 240 688 2124 242 688 2125 272 688 2126 243 689 2127 241 689 2128 271 689 2129 272 690 2130 242 690 2131 244 690 2132 243 691 2133 269 691 2134 267 691 2135 244 692 2136 246 692 2137 268 692 2138 247 693 2139 245 693 2140 267 693 2141 268 694 2142 246 694 2143 248 694 2144 247 695 2145 265 695 2146 263 695 2147 248 696 2148 250 696 2149 264 696 2150 249 697 2151 263 697 2152 261 697 2153 250 698 2154 252 698 2155 262 698 2156 233 233 2157 251 233 2158 261 233 2159 262 234 2160 252 234 2161 234 234 2162 255 699 2163 253 699 2164 259 699 2165 260 700 2166 254 700 2167 256 700 2168 253 701 2169 231 701 2170 281 701 2171 282 702 2172 232 702 2173 254 702 2174 231 703 2175 233 703 2176 279 703 2177 280 704 2178 234 704 2179 232 704 2180 66 705 2181 107 705 2182 283 705 2183 284 706 2184 108 706 2185 66 706 2186 107 707 2187 105 707 2188 285 707 2189 286 708 2190 106 708 2191 108 708 2192 103 709 2193 287 709 2194 285 709 2195 104 710 2196 106 710 2197 286 710 2198 101 711 2199 289 711 2200 287 711 2201 102 712 2202 104 712 2203 288 712 2204 99 713 2205 291 713 2206 289 713 2207 100 714 2208 102 714 2209 290 714 2210 99 715 2211 97 715 2212 293 715 2213 294 716 2214 98 716 2215 100 716 2216 95 717 2217 295 717 2218 293 717 2219 96 718 2220 98 718 2221 294 718 2222 95 719 2223 93 719 2224 297 719 2225 298 720 2226 94 720 2227 96 720 2228 93 721 2229 91 721 2230 299 721 2231 300 722 2232 92 722 2233 94 722 2234 308 723 2235 327 723 2236 337 723 2237 308 724 2238 307 724 2239 338 724 2240 307 725 2241 337 725 2242 335 725 2243 307 726 2244 306 726 2245 336 726 2246 306 727 2247 335 727 2248 339 727 2249 306 728 2250 305 728 2251 340 728 2252 88 729 2253 90 729 2254 305 729 2255 305 730 2256 90 730 2257 89 730 2258 86 731 2259 88 731 2260 339 731 2261 340 732 2262 89 732 2263 87 732 2264 84 733 2265 86 733 2266 333 733 2267 334 734 2268 87 734 2269 85 734 2270 82 735 2271 84 735 2272 329 735 2273 330 736 2274 85 736 2275 83 736 2276 329 737 2277 335 737 2278 337 737 2279 338 738 2280 336 738 2281 330 738 2282 333 739 2283 339 739 2284 335 739 2285 334 740 2286 330 740 2287 336 740 2288 331 741 2289 337 741 2290 327 741 2291 332 742 2292 326 742 2293 328 742 2294 80 743 2295 82 743 2296 331 743 2297 332 744 2298 83 744 2299 81 744 2300 341 745 2301 343 745 2302 214 745 2303 342 746 2304 209 746 2305 215 746 2306 325 747 2307 341 747 2308 208 747 2309 326 748 2310 81 748 2311 209 748 2312 214 749 2313 343 749 2314 345 749 2315 215 750 2316 79 750 2317 346 750 2318 345 751 2319 299 751 2320 91 751 2321 346 752 2322 79 752 2323 92 752 2324 323 753 2325 351 753 2326 303 753 2327 324 754 2328 76 754 2329 303 754 2330 351 755 2331 349 755 2332 77 755 2333 352 756 2334 303 756 2335 77 756 2336 77 757 2337 349 757 2338 347 757 2339 348 758 2340 350 758 2341 77 758 2342 304 759 2343 347 759 2344 327 759 2345 328 760 2346 348 760 2347 304 760 2348 327 761 2349 347 761 2350 341 761 2351 328 762 2352 326 762 2353 342 762 2354 295 763 2355 297 763 2356 317 763 2357 318 764 2358 298 764 2359 296 764 2360 315 765 2361 323 765 2362 76 765 2363 316 766 2364 75 766 2365 76 766 2366 357 767 2367 355 767 2368 302 767 2369 358 768 2370 301 768 2371 302 768 2372 302 769 2373 355 769 2374 353 769 2375 354 770 2376 356 770 2377 302 770 2378 74 771 2379 353 771 2380 315 771 2381 316 772 2382 354 772 2383 74 772 2384 291 773 2385 293 773 2386 361 773 2387 362 774 2388 294 774 2389 292 774 2390 363 775 2391 361 775 2392 367 775 2393 368 776 2394 362 776 2395 364 776 2396 365 777 2397 367 777 2398 369 777 2399 370 778 2400 368 778 2401 366 778 2402 371 779 2403 369 779 2404 375 779 2405 376 780 2406 370 780 2407 372 780 2408 377 781 2409 373 781 2410 375 781 2411 378 782 2412 314 782 2413 376 782 2414 315 783 2415 353 783 2416 373 783 2417 374 784 2418 354 784 2419 316 784 2420 353 785 2421 355 785 2422 371 785 2423 372 786 2424 356 786 2425 354 786 2426 355 787 2427 357 787 2428 365 787 2429 366 788 2430 358 788 2431 356 788 2432 357 789 2433 359 789 2434 363 789 2435 364 790 2436 360 790 2437 358 790 2438 291 791 2439 363 791 2440 359 791 2441 292 792 2442 290 792 2443 360 792 2444 359 793 2445 357 793 2446 301 793 2447 360 794 2448 73 794 2449 301 794 2450 285 795 2451 287 795 2452 289 795 2453 286 796 2454 284 796 2455 290 796 2456 283 797 2457 289 797 2458 359 797 2459 360 798 2460 290 798 2461 284 798 2462 295 799 2463 309 799 2464 361 799 2465 296 800 2466 294 800 2467 362 800 2468 309 801 2469 311 801 2470 367 801 2471 368 802 2472 312 802 2473 310 802 2474 311 803 2475 381 803 2476 369 803 2477 370 804 2478 382 804 2479 312 804 2480 375 805 2481 369 805 2482 381 805 2483 376 806 2484 314 806 2485 382 806 2486 349 807 2487 385 807 2488 383 807 2489 350 808 2490 348 808 2491 384 808 2492 383 809 2493 385 809 2494 319 809 2495 384 810 2496 318 810 2497 320 810 2498 297 811 2499 299 811 2500 383 811 2501 384 812 2502 300 812 2503 298 812 2504 299 813 2505 343 813 2506 341 813 2507 342 814 2508 344 814 2509 300 814 2510 321 815 2511 379 815 2512 377 815 2513 322 816 2514 314 816 2515 378 816 2516 377 817 2517 379 817 2518 323 817 2519 378 818 2520 316 818 2521 324 818 2522 385 819 2523 379 819 2524 321 819 2525 386 820 2526 320 820 2527 322 820 2528 351 821 2529 379 821 2530 385 821 2531 352 822 2532 350 822 2533 386 822 2534 387 823 2535 413 823 2536 401 823 2537 388 824 2538 400 824 2539 402 824 2540 399 825 2541 401 825 2542 403 825 2543 404 826 2544 402 826 2545 400 826 2546 403 827 2547 405 827 2548 395 827 2549 404 828 2550 398 828 2551 396 828 2552 405 829 2553 407 829 2554 393 829 2555 406 830 2556 396 830 2557 394 830 2558 407 831 2559 409 831 2560 391 831 2561 408 832 2562 394 832 2563 392 832 2564 391 833 2565 409 833 2566 411 833 2567 412 834 2568 410 834 2569 392 834 2570 409 835 2571 419 835 2572 417 835 2573 418 836 2574 420 836 2575 410 836 2576 407 837 2577 421 837 2578 419 837 2579 420 838 2580 422 838 2581 408 838 2582 423 839 2583 421 839 2584 407 839 2585 424 840 2586 406 840 2587 408 840 2588 425 841 2589 423 841 2590 405 841 2591 426 842 2592 404 842 2593 406 842 2594 427 843 2595 425 843 2596 403 843 2597 428 844 2598 402 844 2599 404 844 2600 401 845 2601 413 845 2602 415 845 2603 416 846 2604 414 846 2605 402 846 2606 319 847 2607 443 847 2608 441 847 2609 320 848 2610 318 848 2611 442 848 2612 389 849 2613 411 849 2614 443 849 2615 390 850 2616 320 850 2617 444 850 2618 309 851 2619 317 851 2620 441 851 2621 442 852 2622 318 852 2623 310 852 2624 381 853 2625 429 853 2626 413 853 2627 414 854 2628 430 854 2629 382 854 2630 411 855 2631 417 855 2632 439 855 2633 440 856 2634 418 856 2635 412 856 2636 445 857 2637 443 857 2638 439 857 2639 446 858 2640 438 858 2641 440 858 2642 433 859 2643 445 859 2644 437 859 2645 438 860 2646 446 860 2647 434 860 2648 447 861 2649 445 861 2650 433 861 2651 448 862 2652 432 862 2653 434 862 2654 447 863 2655 431 863 2656 449 863 2657 448 864 2658 430 864 2659 450 864 2660 429 865 2661 449 865 2662 415 865 2663 430 866 2664 414 866 2665 416 866 2666 447 867 2667 429 867 2668 381 867 2669 448 868 2670 312 868 2671 382 868 2672 441 869 2673 445 869 2674 447 869 2675 442 870 2676 312 870 2677 448 870 2678 415 871 2679 449 871 2680 451 871 2681 452 872 2682 450 872 2683 416 872 2684 431 873 2685 461 873 2686 451 873 2687 432 874 2688 450 874 2689 452 874 2690 431 419 2691 433 419 2692 459 419 2693 460 420 2694 434 420 2695 432 420 2696 435 875 2697 457 875 2698 459 875 2699 436 876 2700 434 876 2701 460 876 2702 437 877 2703 455 877 2704 457 877 2705 438 878 2706 436 878 2707 458 878 2708 437 879 2709 439 879 2710 453 879 2711 454 880 2712 440 880 2713 438 880 2714 439 881 2715 417 881 2716 473 881 2717 474 882 2718 418 882 2719 440 882 2720 427 883 2721 415 883 2722 475 883 2723 476 884 2724 416 884 2725 428 884 2726 425 885 2727 427 885 2728 463 885 2729 464 886 2730 428 886 2731 426 886 2732 423 887 2733 425 887 2734 465 887 2735 466 888 2736 426 888 2737 424 888 2738 423 889 2739 467 889 2740 469 889 2741 424 890 2742 422 890 2743 470 890 2744 421 891 2745 469 891 2746 471 891 2747 422 892 2748 420 892 2749 472 892 2750 419 893 2751 471 893 2752 473 893 2753 420 894 2754 418 894 2755 474 894 2756 455 895 2757 479 895 2758 477 895 2759 456 896 2760 458 896 2761 478 896 2762 479 897 2763 481 897 2764 483 897 2765 480 898 2766 478 898 2767 484 898 2768 483 899 2769 481 899 2770 487 899 2771 488 900 2772 482 900 2773 484 900 2774 487 901 2775 489 901 2776 491 901 2777 488 902 2778 486 902 2779 492 902 2780 463 903 2781 475 903 2782 485 903 2783 486 904 2784 476 904 2785 464 904 2786 483 905 2787 485 905 2788 475 905 2789 484 906 2790 452 906 2791 476 906 2792 461 907 2793 477 907 2794 483 907 2795 462 908 2796 452 908 2797 484 908 2798 457 909 2799 477 909 2800 461 909 2801 462 910 2802 478 910 2803 458 910 2804 473 911 2805 479 911 2806 455 911 2807 474 912 2808 454 912 2809 456 912 2810 471 913 2811 481 913 2812 479 913 2813 480 914 2814 482 914 2815 472 914 2816 487 915 2817 481 915 2818 471 915 2819 488 916 2820 470 916 2821 472 916 2822 489 917 2823 487 917 2824 469 917 2825 490 918 2826 468 918 2827 470 918 2828 465 919 2829 491 919 2830 489 919 2831 490 920 2832 492 920 2833 466 920 2834 391 921 2835 389 921 2836 503 921 2837 504 922 2838 390 922 2839 392 922 2840 393 923 2841 391 923 2842 501 923 2843 502 924 2844 392 924 2845 394 924 2846 393 925 2847 499 925 2848 497 925 2849 394 926 2850 396 926 2851 498 926 2852 395 927 2853 497 927 2854 495 927 2855 396 928 2856 398 928 2857 496 928 2858 397 929 2859 495 929 2860 493 929 2861 398 930 2862 400 930 2863 494 930 2864 399 931 2865 493 931 2866 505 931 2867 400 932 2868 388 932 2869 506 932 2870 501 933 2871 503 933 2872 505 933 2873 502 934 2874 494 934 2875 506 934 2876 493 935 2877 495 935 2878 499 935 2879 500 936 2880 496 936 2881 494 936 2882 381 937 2883 387 937 2884 505 937 2885 382 938 2886 314 938 2887 506 938 2888 313 939 2889 505 939 2890 503 939 2891 504 940 2892 506 940 2893 314 940 2894 319 941 2895 321 941 2896 503 941 2897 504 942 2898 322 942 2899 320 942 2900</p>
+ </triangles>
+ </mesh>
+ </geometry>
+ </library_geometries>
+ <library_visual_scenes>
+ <visual_scene id="Scene" name="Scene">
+ <node id="Suzanne" name="Suzanne" type="NODE">
+ <matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix>
+ <instance_geometry url="#Suzanne-mesh" name="Suzanne"/>
+ </node>
+ </visual_scene>
+ </library_visual_scenes>
+ <scene>
+ <instance_visual_scene url="#Scene"/>
+ </scene>
+</COLLADA> \ No newline at end of file
diff --git a/demo/fancy.bak/suzanne.mtl b/demo/fancy.bak/suzanne.mtl
new file mode 100644
index 0000000..f231bdf
--- /dev/null
+++ b/demo/fancy.bak/suzanne.mtl
@@ -0,0 +1,10 @@
+# Blender MTL File: 'None'
+# Material Count: 1
+
+newmtl None
+Ns 500
+Ka 0.8 0.8 0.8
+Kd 0.8 0.8 0.8
+Ks 0.8 0.8 0.8
+d 1
+illum 2
diff --git a/demo/fancy.bak/suzanne.obj b/demo/fancy.bak/suzanne.obj
new file mode 100644
index 0000000..fc96293
--- /dev/null
+++ b/demo/fancy.bak/suzanne.obj
@@ -0,0 +1,2977 @@
+# Blender v3.4.1 OBJ File: ''
+# www.blender.org
+mtllib suzanne.mtl
+o Suzanne
+v 0.437500 0.164062 0.765625
+v -0.437500 0.164062 0.765625
+v 0.500000 0.093750 0.687500
+v -0.500000 0.093750 0.687500
+v 0.546875 0.054688 0.578125
+v -0.546875 0.054688 0.578125
+v 0.351562 -0.023438 0.617188
+v -0.351562 -0.023438 0.617188
+v 0.351562 0.031250 0.718750
+v -0.351562 0.031250 0.718750
+v 0.351562 0.132812 0.781250
+v -0.351562 0.132812 0.781250
+v 0.273438 0.164062 0.796875
+v -0.273438 0.164062 0.796875
+v 0.203125 0.093750 0.742188
+v -0.203125 0.093750 0.742188
+v 0.156250 0.054688 0.648438
+v -0.156250 0.054688 0.648438
+v 0.078125 0.242188 0.656250
+v -0.078125 0.242188 0.656250
+v 0.140625 0.242188 0.742188
+v -0.140625 0.242188 0.742188
+v 0.242188 0.242188 0.796875
+v -0.242188 0.242188 0.796875
+v 0.273438 0.328125 0.796875
+v -0.273438 0.328125 0.796875
+v 0.203125 0.390625 0.742188
+v -0.203125 0.390625 0.742188
+v 0.156250 0.437500 0.648438
+v -0.156250 0.437500 0.648438
+v 0.351562 0.515625 0.617188
+v -0.351562 0.515625 0.617188
+v 0.351562 0.453125 0.718750
+v -0.351562 0.453125 0.718750
+v 0.351562 0.359375 0.781250
+v -0.351562 0.359375 0.781250
+v 0.437500 0.328125 0.765625
+v -0.437500 0.328125 0.765625
+v 0.500000 0.390625 0.687500
+v -0.500000 0.390625 0.687500
+v 0.546875 0.437500 0.578125
+v -0.546875 0.437500 0.578125
+v 0.625000 0.242188 0.562500
+v -0.625000 0.242188 0.562500
+v 0.562500 0.242188 0.671875
+v -0.562500 0.242188 0.671875
+v 0.468750 0.242188 0.757812
+v -0.468750 0.242188 0.757812
+v 0.476562 0.242188 0.773438
+v -0.476562 0.242188 0.773438
+v 0.445312 0.335938 0.781250
+v -0.445312 0.335938 0.781250
+v 0.351562 0.375000 0.804688
+v -0.351562 0.375000 0.804688
+v 0.265625 0.335938 0.820312
+v -0.265625 0.335938 0.820312
+v 0.226562 0.242188 0.820312
+v -0.226562 0.242188 0.820312
+v 0.265625 0.156250 0.820312
+v -0.265625 0.156250 0.820312
+v 0.351562 0.242188 0.828125
+v -0.351562 0.242188 0.828125
+v 0.351562 0.117188 0.804688
+v -0.351562 0.117188 0.804688
+v 0.445312 0.156250 0.781250
+v -0.445312 0.156250 0.781250
+v 0.000000 0.429688 0.742188
+v 0.000000 0.351562 0.820312
+v 0.000000 -0.679688 0.734375
+v 0.000000 -0.320312 0.781250
+v 0.000000 -0.187500 0.796875
+v 0.000000 -0.773438 0.718750
+v 0.000000 0.406250 0.601562
+v 0.000000 0.570312 0.570312
+v 0.000000 0.898438 -0.546875
+v 0.000000 0.562500 -0.851562
+v 0.000000 0.070312 -0.828125
+v 0.000000 -0.382812 -0.351562
+v 0.203125 -0.187500 0.562500
+v -0.203125 -0.187500 0.562500
+v 0.312500 -0.437500 0.570312
+v -0.312500 -0.437500 0.570312
+v 0.351562 -0.695312 0.570312
+v -0.351562 -0.695312 0.570312
+v 0.367188 -0.890625 0.531250
+v -0.367188 -0.890625 0.531250
+v 0.328125 -0.945312 0.523438
+v -0.328125 -0.945312 0.523438
+v 0.179688 -0.968750 0.554688
+v -0.179688 -0.968750 0.554688
+v 0.000000 -0.984375 0.578125
+v 0.437500 -0.140625 0.531250
+v -0.437500 -0.140625 0.531250
+v 0.632812 -0.039062 0.539062
+v -0.632812 -0.039062 0.539062
+v 0.828125 0.148438 0.445312
+v -0.828125 0.148438 0.445312
+v 0.859375 0.429688 0.593750
+v -0.859375 0.429688 0.593750
+v 0.710938 0.484375 0.625000
+v -0.710938 0.484375 0.625000
+v 0.492188 0.601562 0.687500
+v -0.492188 0.601562 0.687500
+v 0.320312 0.757812 0.734375
+v -0.320312 0.757812 0.734375
+v 0.156250 0.718750 0.757812
+v -0.156250 0.718750 0.757812
+v 0.062500 0.492188 0.750000
+v -0.062500 0.492188 0.750000
+v 0.164062 0.414062 0.773438
+v -0.164062 0.414062 0.773438
+v 0.125000 0.304688 0.765625
+v -0.125000 0.304688 0.765625
+v 0.203125 0.093750 0.742188
+v -0.203125 0.093750 0.742188
+v 0.375000 0.015625 0.703125
+v -0.375000 0.015625 0.703125
+v 0.492188 0.062500 0.671875
+v -0.492188 0.062500 0.671875
+v 0.625000 0.187500 0.648438
+v -0.625000 0.187500 0.648438
+v 0.640625 0.296875 0.648438
+v -0.640625 0.296875 0.648438
+v 0.601562 0.375000 0.664062
+v -0.601562 0.375000 0.664062
+v 0.429688 0.437500 0.718750
+v -0.429688 0.437500 0.718750
+v 0.250000 0.468750 0.757812
+v -0.250000 0.468750 0.757812
+v 0.000000 -0.765625 0.734375
+v 0.109375 -0.718750 0.734375
+v -0.109375 -0.718750 0.734375
+v 0.117188 -0.835938 0.710938
+v -0.117188 -0.835938 0.710938
+v 0.062500 -0.882812 0.695312
+v -0.062500 -0.882812 0.695312
+v 0.000000 -0.890625 0.687500
+v 0.000000 -0.195312 0.750000
+v 0.000000 -0.140625 0.742188
+v 0.101562 -0.148438 0.742188
+v -0.101562 -0.148438 0.742188
+v 0.125000 -0.226562 0.750000
+v -0.125000 -0.226562 0.750000
+v 0.085938 -0.289062 0.742188
+v -0.085938 -0.289062 0.742188
+v 0.398438 -0.046875 0.671875
+v -0.398438 -0.046875 0.671875
+v 0.617188 0.054688 0.625000
+v -0.617188 0.054688 0.625000
+v 0.726562 0.203125 0.601562
+v -0.726562 0.203125 0.601562
+v 0.742188 0.375000 0.656250
+v -0.742188 0.375000 0.656250
+v 0.687500 0.414062 0.726562
+v -0.687500 0.414062 0.726562
+v 0.437500 0.546875 0.796875
+v -0.437500 0.546875 0.796875
+v 0.312500 0.640625 0.835938
+v -0.312500 0.640625 0.835938
+v 0.203125 0.617188 0.851562
+v -0.203125 0.617188 0.851562
+v 0.101562 0.429688 0.843750
+v -0.101562 0.429688 0.843750
+v 0.125000 -0.101562 0.812500
+v -0.125000 -0.101562 0.812500
+v 0.210938 -0.445312 0.710938
+v -0.210938 -0.445312 0.710938
+v 0.250000 -0.703125 0.687500
+v -0.250000 -0.703125 0.687500
+v 0.265625 -0.820312 0.664062
+v -0.265625 -0.820312 0.664062
+v 0.234375 -0.914062 0.632812
+v -0.234375 -0.914062 0.632812
+v 0.164062 -0.929688 0.632812
+v -0.164062 -0.929688 0.632812
+v 0.000000 -0.945312 0.640625
+v 0.000000 0.046875 0.726562
+v 0.000000 0.210938 0.765625
+v 0.328125 0.476562 0.742188
+v -0.328125 0.476562 0.742188
+v 0.164062 0.140625 0.750000
+v -0.164062 0.140625 0.750000
+v 0.132812 0.210938 0.757812
+v -0.132812 0.210938 0.757812
+v 0.117188 -0.687500 0.734375
+v -0.117188 -0.687500 0.734375
+v 0.078125 -0.445312 0.750000
+v -0.078125 -0.445312 0.750000
+v 0.000000 -0.445312 0.750000
+v 0.000000 -0.328125 0.742188
+v 0.093750 -0.273438 0.781250
+v -0.093750 -0.273438 0.781250
+v 0.132812 -0.226562 0.796875
+v -0.132812 -0.226562 0.796875
+v 0.109375 -0.132812 0.781250
+v -0.109375 -0.132812 0.781250
+v 0.039062 -0.125000 0.781250
+v -0.039062 -0.125000 0.781250
+v 0.000000 -0.203125 0.828125
+v 0.046875 -0.148438 0.812500
+v -0.046875 -0.148438 0.812500
+v 0.093750 -0.156250 0.812500
+v -0.093750 -0.156250 0.812500
+v 0.109375 -0.226562 0.828125
+v -0.109375 -0.226562 0.828125
+v 0.078125 -0.250000 0.804688
+v -0.078125 -0.250000 0.804688
+v 0.000000 -0.289062 0.804688
+v 0.257812 -0.312500 0.554688
+v -0.257812 -0.312500 0.554688
+v 0.164062 -0.242188 0.710938
+v -0.164062 -0.242188 0.710938
+v 0.179688 -0.312500 0.710938
+v -0.179688 -0.312500 0.710938
+v 0.234375 -0.250000 0.554688
+v -0.234375 -0.250000 0.554688
+v 0.000000 -0.875000 0.687500
+v 0.046875 -0.867188 0.687500
+v -0.046875 -0.867188 0.687500
+v 0.093750 -0.820312 0.710938
+v -0.093750 -0.820312 0.710938
+v 0.093750 -0.742188 0.726562
+v -0.093750 -0.742188 0.726562
+v 0.000000 -0.781250 0.656250
+v 0.093750 -0.750000 0.664062
+v -0.093750 -0.750000 0.664062
+v 0.093750 -0.812500 0.640625
+v -0.093750 -0.812500 0.640625
+v 0.046875 -0.851562 0.632812
+v -0.046875 -0.851562 0.632812
+v 0.000000 -0.859375 0.632812
+v 0.171875 0.218750 0.781250
+v -0.171875 0.218750 0.781250
+v 0.187500 0.156250 0.773438
+v -0.187500 0.156250 0.773438
+v 0.335938 0.429688 0.757812
+v -0.335938 0.429688 0.757812
+v 0.273438 0.421875 0.773438
+v -0.273438 0.421875 0.773438
+v 0.421875 0.398438 0.773438
+v -0.421875 0.398438 0.773438
+v 0.562500 0.351562 0.695312
+v -0.562500 0.351562 0.695312
+v 0.585938 0.289062 0.687500
+v -0.585938 0.289062 0.687500
+v 0.578125 0.195312 0.679688
+v -0.578125 0.195312 0.679688
+v 0.476562 0.101562 0.718750
+v -0.476562 0.101562 0.718750
+v 0.375000 0.062500 0.742188
+v -0.375000 0.062500 0.742188
+v 0.226562 0.109375 0.781250
+v -0.226562 0.109375 0.781250
+v 0.179688 0.296875 0.781250
+v -0.179688 0.296875 0.781250
+v 0.210938 0.375000 0.781250
+v -0.210938 0.375000 0.781250
+v 0.234375 0.359375 0.757812
+v -0.234375 0.359375 0.757812
+v 0.195312 0.296875 0.757812
+v -0.195312 0.296875 0.757812
+v 0.242188 0.125000 0.757812
+v -0.242188 0.125000 0.757812
+v 0.375000 0.085938 0.726562
+v -0.375000 0.085938 0.726562
+v 0.460938 0.117188 0.703125
+v -0.460938 0.117188 0.703125
+v 0.546875 0.210938 0.671875
+v -0.546875 0.210938 0.671875
+v 0.554688 0.281250 0.671875
+v -0.554688 0.281250 0.671875
+v 0.531250 0.335938 0.679688
+v -0.531250 0.335938 0.679688
+v 0.414062 0.390625 0.750000
+v -0.414062 0.390625 0.750000
+v 0.281250 0.398438 0.765625
+v -0.281250 0.398438 0.765625
+v 0.335938 0.406250 0.750000
+v -0.335938 0.406250 0.750000
+v 0.203125 0.171875 0.750000
+v -0.203125 0.171875 0.750000
+v 0.195312 0.226562 0.750000
+v -0.195312 0.226562 0.750000
+v 0.109375 0.460938 0.609375
+v -0.109375 0.460938 0.609375
+v 0.195312 0.664062 0.617188
+v -0.195312 0.664062 0.617188
+v 0.335938 0.687500 0.593750
+v -0.335938 0.687500 0.593750
+v 0.484375 0.554688 0.554688
+v -0.484375 0.554688 0.554688
+v 0.679688 0.453125 0.492188
+v -0.679688 0.453125 0.492188
+v 0.796875 0.406250 0.460938
+v -0.796875 0.406250 0.460938
+v 0.773438 0.164062 0.375000
+v -0.773438 0.164062 0.375000
+v 0.601562 0.000000 0.414062
+v -0.601562 0.000000 0.414062
+v 0.437500 -0.093750 0.468750
+v -0.437500 -0.093750 0.468750
+v 0.000000 0.898438 0.289062
+v 0.000000 0.984375 -0.078125
+v 0.000000 -0.195312 -0.671875
+v 0.000000 -0.460938 0.187500
+v 0.000000 -0.976562 0.460938
+v 0.000000 -0.804688 0.343750
+v 0.000000 -0.570312 0.320312
+v 0.000000 -0.484375 0.281250
+v 0.851562 0.234375 0.054688
+v -0.851562 0.234375 0.054688
+v 0.859375 0.320312 -0.046875
+v -0.859375 0.320312 -0.046875
+v 0.773438 0.265625 -0.437500
+v -0.773438 0.265625 -0.437500
+v 0.460938 0.437500 -0.703125
+v -0.460938 0.437500 -0.703125
+v 0.734375 -0.046875 0.070312
+v -0.734375 -0.046875 0.070312
+v 0.593750 -0.125000 -0.164062
+v -0.593750 -0.125000 -0.164062
+v 0.640625 -0.007812 -0.429688
+v -0.640625 -0.007812 -0.429688
+v 0.335938 0.054688 -0.664062
+v -0.335938 0.054688 -0.664062
+v 0.234375 -0.351562 0.406250
+v -0.234375 -0.351562 0.406250
+v 0.179688 -0.414062 0.257812
+v -0.179688 -0.414062 0.257812
+v 0.289062 -0.710938 0.382812
+v -0.289062 -0.710938 0.382812
+v 0.250000 -0.500000 0.390625
+v -0.250000 -0.500000 0.390625
+v 0.328125 -0.914062 0.398438
+v -0.328125 -0.914062 0.398438
+v 0.140625 -0.757812 0.367188
+v -0.140625 -0.757812 0.367188
+v 0.125000 -0.539062 0.359375
+v -0.125000 -0.539062 0.359375
+v 0.164062 -0.945312 0.437500
+v -0.164062 -0.945312 0.437500
+v 0.218750 -0.281250 0.429688
+v -0.218750 -0.281250 0.429688
+v 0.210938 -0.226562 0.468750
+v -0.210938 -0.226562 0.468750
+v 0.203125 -0.171875 0.500000
+v -0.203125 -0.171875 0.500000
+v 0.210938 -0.390625 0.164062
+v -0.210938 -0.390625 0.164062
+v 0.296875 -0.312500 -0.265625
+v -0.296875 -0.312500 -0.265625
+v 0.343750 -0.148438 -0.539062
+v -0.343750 -0.148438 -0.539062
+v 0.453125 0.867188 -0.382812
+v -0.453125 0.867188 -0.382812
+v 0.453125 0.929688 -0.070312
+v -0.453125 0.929688 -0.070312
+v 0.453125 0.851562 0.234375
+v -0.453125 0.851562 0.234375
+v 0.460938 0.523438 0.429688
+v -0.460938 0.523438 0.429688
+v 0.726562 0.406250 0.335938
+v -0.726562 0.406250 0.335938
+v 0.632812 0.453125 0.281250
+v -0.632812 0.453125 0.281250
+v 0.640625 0.703125 0.054688
+v -0.640625 0.703125 0.054688
+v 0.796875 0.562500 0.125000
+v -0.796875 0.562500 0.125000
+v 0.796875 0.617188 -0.117188
+v -0.796875 0.617188 -0.117188
+v 0.640625 0.750000 -0.195312
+v -0.640625 0.750000 -0.195312
+v 0.640625 0.679688 -0.445312
+v -0.640625 0.679688 -0.445312
+v 0.796875 0.539062 -0.359375
+v -0.796875 0.539062 -0.359375
+v 0.617188 0.328125 -0.585938
+v -0.617188 0.328125 -0.585938
+v 0.484375 0.023438 -0.546875
+v -0.484375 0.023438 -0.546875
+v 0.820312 0.328125 -0.203125
+v -0.820312 0.328125 -0.203125
+v 0.406250 -0.171875 0.148438
+v -0.406250 -0.171875 0.148438
+v 0.429688 -0.195312 -0.210938
+v -0.429688 -0.195312 -0.210938
+v 0.890625 0.406250 -0.234375
+v -0.890625 0.406250 -0.234375
+v 0.773438 -0.140625 -0.125000
+v -0.773438 -0.140625 -0.125000
+v 1.039062 -0.101562 -0.328125
+v -1.039062 -0.101562 -0.328125
+v 1.281250 0.054688 -0.429688
+v -1.281250 0.054688 -0.429688
+v 1.351562 0.320312 -0.421875
+v -1.351562 0.320312 -0.421875
+v 1.234375 0.507812 -0.421875
+v -1.234375 0.507812 -0.421875
+v 1.023437 0.476562 -0.312500
+v -1.023437 0.476562 -0.312500
+v 1.015625 0.414062 -0.289062
+v -1.015625 0.414062 -0.289062
+v 1.187500 0.437500 -0.390625
+v -1.187500 0.437500 -0.390625
+v 1.265625 0.289062 -0.406250
+v -1.265625 0.289062 -0.406250
+v 1.210937 0.078125 -0.406250
+v -1.210937 0.078125 -0.406250
+v 1.031250 -0.039062 -0.304688
+v -1.031250 -0.039062 -0.304688
+v 0.828125 -0.070312 -0.132812
+v -0.828125 -0.070312 -0.132812
+v 0.921875 0.359375 -0.218750
+v -0.921875 0.359375 -0.218750
+v 0.945312 0.304688 -0.289062
+v -0.945312 0.304688 -0.289062
+v 0.882812 -0.023438 -0.210938
+v -0.882812 -0.023438 -0.210938
+v 1.039062 0.000000 -0.367188
+v -1.039062 0.000000 -0.367188
+v 1.187500 0.093750 -0.445312
+v -1.187500 0.093750 -0.445312
+v 1.234375 0.250000 -0.445312
+v -1.234375 0.250000 -0.445312
+v 1.171875 0.359375 -0.437500
+v -1.171875 0.359375 -0.437500
+v 1.023437 0.343750 -0.359375
+v -1.023437 0.343750 -0.359375
+v 0.843750 0.289062 -0.210938
+v -0.843750 0.289062 -0.210938
+v 0.835938 0.171875 -0.273438
+v -0.835938 0.171875 -0.273438
+v 0.757812 0.093750 -0.273438
+v -0.757812 0.093750 -0.273438
+v 0.820312 0.085938 -0.273438
+v -0.820312 0.085938 -0.273438
+v 0.843750 0.015625 -0.273438
+v -0.843750 0.015625 -0.273438
+v 0.812500 -0.015625 -0.273438
+v -0.812500 -0.015625 -0.273438
+v 0.726562 0.000000 -0.070312
+v -0.726562 0.000000 -0.070312
+v 0.718750 -0.023438 -0.171875
+v -0.718750 -0.023438 -0.171875
+v 0.718750 0.039062 -0.187500
+v -0.718750 0.039062 -0.187500
+v 0.796875 0.203125 -0.210938
+v -0.796875 0.203125 -0.210938
+v 0.890625 0.242188 -0.265625
+v -0.890625 0.242188 -0.265625
+v 0.890625 0.234375 -0.320312
+v -0.890625 0.234375 -0.320312
+v 0.812500 -0.015625 -0.320312
+v -0.812500 -0.015625 -0.320312
+v 0.851562 0.015625 -0.320312
+v -0.851562 0.015625 -0.320312
+v 0.828125 0.078125 -0.320312
+v -0.828125 0.078125 -0.320312
+v 0.765625 0.093750 -0.320312
+v -0.765625 0.093750 -0.320312
+v 0.843750 0.171875 -0.320312
+v -0.843750 0.171875 -0.320312
+v 1.039062 0.328125 -0.414062
+v -1.039062 0.328125 -0.414062
+v 1.187500 0.343750 -0.484375
+v -1.187500 0.343750 -0.484375
+v 1.257812 0.242188 -0.492188
+v -1.257812 0.242188 -0.492188
+v 1.210937 0.085938 -0.484375
+v -1.210937 0.085938 -0.484375
+v 1.046875 0.000000 -0.421875
+v -1.046875 0.000000 -0.421875
+v 0.882812 -0.015625 -0.265625
+v -0.882812 -0.015625 -0.265625
+v 0.953125 0.289062 -0.343750
+v -0.953125 0.289062 -0.343750
+v 0.890625 0.109375 -0.328125
+v -0.890625 0.109375 -0.328125
+v 0.937500 0.062500 -0.335938
+v -0.937500 0.062500 -0.335938
+v 1.000000 0.125000 -0.367188
+v -1.000000 0.125000 -0.367188
+v 0.960938 0.171875 -0.351562
+v -0.960938 0.171875 -0.351562
+v 1.015625 0.234375 -0.375000
+v -1.015625 0.234375 -0.375000
+v 1.054687 0.187500 -0.382812
+v -1.054687 0.187500 -0.382812
+v 1.109375 0.210938 -0.390625
+v -1.109375 0.210938 -0.390625
+v 1.085937 0.273438 -0.390625
+v -1.085937 0.273438 -0.390625
+v 1.023437 0.437500 -0.484375
+v -1.023437 0.437500 -0.484375
+v 1.250000 0.468750 -0.546875
+v -1.250000 0.468750 -0.546875
+v 1.367187 0.296875 -0.500000
+v -1.367187 0.296875 -0.500000
+v 1.312500 0.054688 -0.531250
+v -1.312500 0.054688 -0.531250
+v 1.039062 -0.085938 -0.492188
+v -1.039062 -0.085938 -0.492188
+v 0.789062 -0.125000 -0.328125
+v -0.789062 -0.125000 -0.328125
+v 0.859375 0.382812 -0.382812
+v -0.859375 0.382812 -0.382812
+vt 0.890955 0.590063
+vt 0.860081 0.560115
+vt 0.904571 0.559404
+vt 0.856226 0.850547
+vt 0.888398 0.821999
+vt 0.900640 0.853232
+vt 0.853018 0.521562
+vt 0.920166 0.524546
+vt 0.847458 0.888748
+vt 0.914672 0.888748
+vt 0.798481 0.569535
+vt 0.795104 0.838402
+vt 0.870622 0.589649
+vt 0.828900 0.590771
+vt 0.826436 0.818537
+vt 0.868067 0.821510
+vt 0.854402 0.604754
+vt 0.828171 0.633354
+vt 0.827598 0.775964
+vt 0.852534 0.805700
+vt 0.791018 0.645443
+vt 0.791018 0.762238
+vt 0.855181 0.668527
+vt 0.856142 0.742025
+vt 0.844839 0.707525
+vt 0.867508 0.642291
+vt 0.854107 0.625459
+vt 0.867293 0.768782
+vt 0.900375 0.666964
+vt 0.901223 0.745592
+vt 0.842358 0.702491
+vt 0.921180 0.713713
+vt 0.931889 0.636832
+vt 0.918898 0.699697
+vt 0.931368 0.777093
+vt 0.968213 0.770220
+vt 0.905882 0.627902
+vt 0.890474 0.641909
+vt 0.904990 0.784860
+vt 0.906232 0.605742
+vt 0.904357 0.807013
+vt 0.931250 0.820926
+vt 0.933717 0.593037
+vt 0.968392 0.645333
+vt 0.965038 0.841671
+vt 0.968392 0.573812
+vt 0.889591 0.593275
+vt 0.887178 0.818729
+vt 0.900583 0.804677
+vt 0.902359 0.607909
+vt 0.898822 0.786233
+vt 0.899781 0.626257
+vt 0.890219 0.770183
+vt 0.887351 0.775442
+vt 0.887842 0.636527
+vt 0.870376 0.775972
+vt 0.859881 0.623942
+vt 0.870908 0.635245
+vt 0.858859 0.786774
+vt 0.859664 0.608186
+vt 0.857942 0.802505
+vt 0.853157 0.785002
+vt 0.871664 0.593961
+vt 0.869299 0.817249
+vt 0.879400 0.616512
+vt 0.878029 0.795063
+vt 0.536419 0.062072
+vt 0.518916 0.050294
+vt 0.540260 0.053805
+vt 0.501452 0.062043
+vt 0.518925 0.059681
+vt 0.542788 0.064089
+vt 0.551930 0.058338
+vt 0.495083 0.064047
+vt 0.497626 0.053770
+vt 0.555073 0.061900
+vt 0.482805 0.061829
+vt 0.485955 0.058273
+vt 0.563812 0.076586
+vt 0.546290 0.072669
+vt 0.491565 0.072625
+vt 0.474014 0.076511
+vt 0.583135 0.108495
+vt 0.548333 0.084893
+vt 0.489507 0.084858
+vt 0.454527 0.108481
+vt 0.605512 0.165134
+vt 0.621513 0.227818
+vt 0.553118 0.209599
+vt 0.416514 0.229490
+vt 0.432024 0.165644
+vt 0.485339 0.210053
+vt 0.676379 0.233241
+vt 0.647395 0.200502
+vt 0.360308 0.235899
+vt 0.372747 0.256357
+vt 0.683908 0.279995
+vt 0.664761 0.253225
+vt 0.353696 0.284606
+vt 0.707254 0.310054
+vt 0.715342 0.265392
+vt 0.330721 0.316853
+vt 0.351187 0.317440
+vt 0.697446 0.332673
+vt 0.687515 0.311539
+vt 0.341964 0.339667
+vt 0.362723 0.329722
+vt 0.662817 0.372521
+vt 0.676824 0.323937
+vt 0.379297 0.378686
+vt 0.402772 0.362131
+vt 0.618316 0.375151
+vt 0.639050 0.357330
+vt 0.424583 0.379267
+vt 0.604826 0.397804
+vt 0.626842 0.395792
+vt 0.439252 0.401540
+vt 0.442396 0.381222
+vt 0.553095 0.390512
+vt 0.600808 0.377857
+vt 0.490934 0.391862
+vt 0.482938 0.358497
+vt 0.521923 0.386009
+vt 0.559674 0.357011
+vt 0.521086 0.343868
+vt 0.599845 0.344815
+vt 0.577279 0.340156
+vt 0.441977 0.347815
+vt 0.615546 0.342005
+vt 0.634472 0.332311
+vt 0.425972 0.345582
+vt 0.662406 0.312804
+vt 0.406362 0.336480
+vt 0.668440 0.297958
+vt 0.377061 0.317685
+vt 0.664101 0.277872
+vt 0.370304 0.302644
+vt 0.639236 0.253047
+vt 0.374100 0.281778
+vt 0.613992 0.242662
+vt 0.398938 0.255633
+vt 0.572941 0.258564
+vt 0.466409 0.259709
+vt 0.424464 0.244473
+vt 0.519760 0.248864
+vt 0.558527 0.316594
+vt 0.482619 0.317843
+vt 0.520277 0.294764
+vt 0.556923 0.291214
+vt 0.483433 0.292249
+vt 0.563905 0.272007
+vt 0.475886 0.273078
+vt 0.525483 0.068967
+vt 0.512375 0.068956
+vt 0.531231 0.073829
+vt 0.506626 0.073811
+vt 0.531019 0.087431
+vt 0.555621 0.121749
+vt 0.532669 0.090920
+vt 0.505177 0.090908
+vt 0.482177 0.121781
+vt 0.506827 0.087416
+vt 0.518981 0.151749
+vt 0.532042 0.127713
+vt 0.538112 0.158382
+vt 0.505828 0.127728
+vt 0.518941 0.128358
+vt 0.518925 0.093952
+vt 0.518927 0.085180
+vt 0.548362 0.173560
+vt 0.535214 0.166808
+vt 0.502799 0.166857
+vt 0.489683 0.173693
+vt 0.499851 0.158434
+vt 0.537248 0.187577
+vt 0.544281 0.193366
+vt 0.500890 0.187571
+vt 0.500100 0.176033
+vt 0.528757 0.191785
+vt 0.519841 0.200843
+vt 0.509219 0.191626
+vt 0.493996 0.193428
+vt 0.519132 0.185382
+vt 0.517577 0.190607
+vt 0.518998 0.159028
+vt 0.519016 0.165599
+vt 0.506910 0.171667
+vt 0.528222 0.186316
+vt 0.509787 0.186260
+vt 0.533528 0.184215
+vt 0.504547 0.184206
+vt 0.537959 0.175966
+vt 0.504604 0.176791
+vt 0.531131 0.171631
+vt 0.533449 0.176739
+vt 0.519099 0.179457
+vt 0.561572 0.167779
+vt 0.476363 0.167996
+vt 0.478371 0.149447
+vt 0.559475 0.149319
+vt 0.596138 0.133426
+vt 0.441395 0.133592
+vt 0.601169 0.147885
+vt 0.436337 0.148194
+vt 0.528933 0.084957
+vt 0.508915 0.084945
+vt 0.518925 0.083865
+vt 0.529036 0.075429
+vt 0.508820 0.075415
+vt 0.523751 0.070508
+vt 0.514106 0.070501
+vt 0.518928 0.067899
+vt 0.518929 0.069468
+vt 0.518928 0.074259
+vt 0.516297 0.074966
+vt 0.524236 0.076691
+vt 0.521560 0.074970
+vt 0.513619 0.076684
+vt 0.524601 0.079886
+vt 0.513252 0.079879
+vt 0.518926 0.079331
+vt 0.571787 0.277295
+vt 0.568351 0.292904
+vt 0.468070 0.278617
+vt 0.471978 0.294282
+vt 0.573085 0.311386
+vt 0.467790 0.313081
+vt 0.584855 0.327708
+vt 0.456477 0.329961
+vt 0.458737 0.268049
+vt 0.611720 0.255725
+vt 0.580734 0.266620
+vt 0.427062 0.257728
+vt 0.632494 0.262853
+vt 0.406068 0.265508
+vt 0.653658 0.279971
+vt 0.384904 0.283634
+vt 0.656064 0.297636
+vt 0.383015 0.301864
+vt 0.386858 0.314615
+vt 0.652752 0.310186
+vt 0.411556 0.327673
+vt 0.614408 0.331972
+vt 0.629040 0.323864
+vt 0.426727 0.335361
+vt 0.601033 0.333624
+vt 0.440344 0.336537
+vt 0.590644 0.321516
+vt 0.601799 0.328453
+vt 0.450408 0.323919
+vt 0.439372 0.331331
+vt 0.613335 0.327083
+vt 0.427623 0.330358
+vt 0.626851 0.320513
+vt 0.413648 0.324175
+vt 0.646248 0.306421
+vt 0.393381 0.310510
+vt 0.649541 0.296225
+vt 0.389662 0.300183
+vt 0.647785 0.283486
+vt 0.391040 0.287071
+vt 0.629829 0.267263
+vt 0.408893 0.269959
+vt 0.612641 0.261560
+vt 0.426254 0.263693
+vt 0.585166 0.270991
+vt 0.454369 0.272583
+vt 0.578124 0.281900
+vt 0.461798 0.283441
+vt 0.579548 0.309340
+vt 0.461204 0.311233
+vt 0.577524 0.293776
+vt 0.462754 0.295432
+vt 0.553209 0.433063
+vt 0.523031 0.433628
+vt 0.492809 0.434538
+vt 0.609819 0.431516
+vt 0.435860 0.435740
+vt 0.416915 0.400552
+vt 0.396518 0.425416
+vt 0.648174 0.419316
+vt 0.350292 0.396229
+vt 0.692106 0.388274
+vt 0.312756 0.350588
+vt 0.735879 0.312112
+vt 0.726332 0.341754
+vt 0.301067 0.320593
+vt 0.320452 0.270303
+vt 0.304876 0.261087
+vt 0.698172 0.216906
+vt 0.729900 0.256393
+vt 0.337414 0.219179
+vt 0.663103 0.190671
+vt 0.373474 0.191872
+vt 0.649444 0.022378
+vt 0.621440 0.048089
+vt 0.626908 0.015608
+vt 0.388827 0.021586
+vt 0.416419 0.047631
+vt 0.376796 0.075296
+vt 0.577206 0.032801
+vt 0.567460 0.000144
+vt 0.411318 0.015131
+vt 0.460782 0.032656
+vt 0.547413 0.041724
+vt 0.518922 0.024886
+vt 0.470636 0.000144
+vt 0.490511 0.041669
+vt 0.558059 0.053871
+vt 0.479842 0.053785
+vt 0.576951 0.057998
+vt 0.460920 0.057845
+vt 0.611687 0.078268
+vt 0.425932 0.077985
+vt 0.660451 0.076084
+vt 0.626663 0.111357
+vt 0.410618 0.111244
+vt 0.629482 0.130456
+vt 0.407648 0.130594
+vt 0.413741 0.147158
+vt 0.619303 0.159841
+vt 0.418035 0.160361
+vt 0.389677 0.201890
+vt 0.886245 0.121777
+vt 0.891780 0.036916
+vt 0.945900 0.079569
+vt 0.141314 0.112482
+vt 0.142277 0.021467
+vt 0.183115 0.092127
+vt 0.849114 0.099732
+vt 0.805584 0.010786
+vt 0.232648 0.003484
+vt 0.246353 0.076510
+vt 0.687018 0.077204
+vt 0.672384 0.022201
+vt 0.349875 0.075955
+vt 0.365979 0.020991
+vt 0.760215 0.193244
+vt 0.789046 0.233323
+vt 0.271553 0.193871
+vt 0.241255 0.236977
+vt 0.909112 0.183261
+vt 0.994525 0.167705
+vt 0.107928 0.179083
+vt 0.078961 0.060719
+vt 0.862868 0.338556
+vt 0.962901 0.344752
+vt 0.911671 0.402429
+vt 0.160557 0.356821
+vt 0.043968 0.367038
+vt 0.123776 0.315519
+vt 0.915360 0.259804
+vt 0.999856 0.254640
+vt 0.098965 0.266968
+vt 0.000144 0.259113
+vt 0.011829 0.155367
+vt 0.749542 0.334683
+vt 0.766337 0.300809
+vt 0.789162 0.313727
+vt 0.267408 0.310142
+vt 0.288183 0.346496
+vt 0.242992 0.325552
+vt 0.815314 0.276388
+vt 0.846174 0.293397
+vt 0.213065 0.285164
+vt 0.178537 0.304983
+vt 0.845007 0.256352
+vt 0.873517 0.265922
+vt 0.179662 0.263312
+vt 0.147089 0.274284
+vt 0.859075 0.228168
+vt 0.886999 0.233769
+vt 0.162803 0.231720
+vt 0.131514 0.237587
+vt 0.875030 0.184705
+vt 0.842355 0.195160
+vt 0.145224 0.182749
+vt 0.894128 0.301884
+vt 0.794286 0.364062
+vt 0.770185 0.379538
+vt 0.239776 0.382592
+vt 0.845499 0.449967
+vt 0.106400 0.432652
+vt 0.770572 0.444261
+vt 0.815858 0.445381
+vt 0.271364 0.473316
+vt 0.268122 0.398737
+vt 0.287033 0.442912
+vt 0.219260 0.477186
+vt 0.185281 0.484099
+vt 0.819845 0.468071
+vt 0.215894 0.503605
+vt 0.809631 0.233887
+vt 0.219168 0.237388
+vt 0.829287 0.219562
+vt 0.199067 0.222464
+vt 0.788458 0.080826
+vt 0.715482 0.139727
+vt 0.319538 0.139409
+vt 0.246666 0.114850
+vt 0.785486 0.152330
+vt 0.245969 0.151002
+vt 0.623495 0.146796
+vt 0.837382 0.156361
+vt 0.196622 0.155241
+vt 0.171653 0.132294
+vt 0.786480 0.117591
+vt 0.858171 0.137775
+vt 0.432388 0.894943
+vt 0.491058 0.881714
+vt 0.506166 0.904851
+vt 0.321637 0.893225
+vt 0.263032 0.878321
+vt 0.315867 0.868209
+vt 0.572792 0.860484
+vt 0.604825 0.879946
+vt 0.181486 0.854693
+vt 0.247207 0.901159
+vt 0.148729 0.873349
+vt 0.619962 0.791615
+vt 0.136063 0.784093
+vt 0.169745 0.787474
+vt 0.586396 0.793977
+vt 0.563786 0.739211
+vt 0.194086 0.733241
+vt 0.208656 0.740879
+vt 0.549027 0.746412
+vt 0.508270 0.697693
+vt 0.250811 0.693249
+vt 0.258399 0.707497
+vt 0.438641 0.680683
+vt 0.434803 0.658882
+vt 0.320962 0.677959
+vt 0.325318 0.656224
+vt 0.500314 0.711729
+vt 0.452955 0.700023
+vt 0.306136 0.696976
+vt 0.505666 0.730944
+vt 0.252524 0.726592
+vt 0.568148 0.787367
+vt 0.188269 0.781375
+vt 0.214575 0.750414
+vt 0.555495 0.826352
+vt 0.199850 0.820889
+vt 0.501231 0.844356
+vt 0.253846 0.840502
+vt 0.457832 0.840040
+vt 0.297562 0.837358
+vt 0.783193 0.187449
+vt 0.246955 0.187075
+vt 0.233625 0.175620
+vt 0.394766 0.686125
+vt 0.391039 0.611891
+vt 0.364838 0.684445
+vt 0.391747 0.862097
+vt 0.438797 0.870229
+vt 0.363377 0.861308
+vt 0.435018 0.718280
+vt 0.323658 0.715731
+vt 0.384658 0.710299
+vt 0.433669 0.729661
+vt 0.374400 0.708969
+vt 0.410995 0.747662
+vt 0.427812 0.742828
+vt 0.324726 0.727177
+vt 0.347028 0.745816
+vt 0.330270 0.740536
+vt 0.384657 0.795423
+vt 0.418086 0.784946
+vt 0.372270 0.794472
+vt 0.431333 0.817535
+vt 0.401605 0.841460
+vt 0.324790 0.815460
+vt 0.338952 0.783073
+vt 0.354026 0.840297
+vt 0.816266 0.203086
+vt 0.209828 0.206161
+vt 0.199767 0.214827
+vt 0.226485 0.183086
+vt 0.796021 0.176969
+vt 0.802192 0.184609
+vt 0.448505 0.804621
+vt 0.473386 0.824700
+vt 0.307886 0.802031
+vt 0.282357 0.821525
+vt 0.321237 0.777208
+vt 0.423718 0.754191
+vt 0.435868 0.779569
+vt 0.334089 0.752045
+vt 0.319919 0.747250
+vt 0.437950 0.749777
+vt 0.312907 0.729222
+vt 0.440995 0.724383
+vt 0.445392 0.731997
+vt 0.317510 0.721697
+vt 0.455277 0.713731
+vt 0.303460 0.710657
+vt 0.512485 0.828811
+vt 0.242975 0.824574
+vt 0.550942 0.811814
+vt 0.204839 0.806417
+vt 0.552139 0.787682
+vt 0.204331 0.782156
+vt 0.539407 0.764539
+vt 0.542850 0.755753
+vt 0.217774 0.759319
+vt 0.508439 0.743135
+vt 0.249419 0.738732
+vt 0.454776 0.761665
+vt 0.302729 0.758742
+vt 0.286960 0.745020
+vt 0.470841 0.748408
+vt 0.475403 0.783904
+vt 0.281439 0.780511
+vt 0.268291 0.766661
+vt 0.503673 0.787562
+vt 0.494476 0.802470
+vt 0.252972 0.783410
+vt 0.261790 0.798626
+vt 0.516802 0.807339
+vt 0.239243 0.802891
+vt 0.237920 0.787045
+vt 0.518562 0.791602
+vt 0.484068 0.628776
+vt 0.543385 0.683538
+vt 0.276936 0.625067
+vt 0.216123 0.678120
+vt 0.581052 0.726933
+vt 0.177176 0.720426
+vt 0.616701 0.759965
+vt 0.140379 0.752377
+vt 0.660647 0.741167
+vt 0.707492 0.759884
+vt 0.097038 0.732052
+vt 0.677256 0.670436
+vt 0.745511 0.652100
+vt 0.049526 0.748824
+vt 0.083564 0.662038
+vt 0.671403 0.592656
+vt 0.740843 0.572428
+vt 0.019409 0.639749
+vt 0.092820 0.589862
+vt 0.834705 0.206959
+vt 0.051216 0.522659
+vt 0.033664 0.564403
+vt 0.620420 0.565675
+vt 0.498072 0.552315
+vt 0.145041 0.562595
+vt 0.264218 0.550140
+vt 0.369913 0.610196
+vt 0.464579 0.342230
+vt 0.176788 0.196179
+vt 0.755700 0.418603
+vt 0.825107 0.209762
+vt 0.488870 0.770464
+vt 0.834578 0.206879
+vn 0.6617 -0.2026 0.7219
+vn -0.6617 -0.2026 0.7219
+vn 0.8268 -0.3051 0.4725
+vn -0.8268 -0.3051 0.4725
+vn 0.4076 -0.7905 0.4570
+vn -0.4076 -0.7905 0.4570
+vn 0.3791 -0.5163 0.7679
+vn -0.3791 -0.5163 0.7679
+vn -0.0859 -0.5222 0.8485
+vn 0.0859 -0.5222 0.8485
+vn -0.2664 -0.8487 0.4570
+vn 0.2664 -0.8487 0.4570
+vn -0.7824 -0.3294 0.5285
+vn 0.7606 -0.3400 0.5531
+vn -0.4767 -0.1907 0.8581
+vn 0.4649 -0.1958 0.8634
+vn -0.4649 0.1958 0.8634
+vn 0.4649 0.1958 0.8634
+vn -0.7656 0.3223 0.5568
+vn 0.7683 0.3293 0.5488
+vn -0.2560 0.8073 0.5317
+vn 0.2487 0.8249 0.5076
+vn -0.0821 0.6023 0.7940
+vn 0.1017 0.5518 0.8277
+vn 0.3329 0.5231 0.7846
+vn -0.3861 0.5446 0.7445
+vn 0.4246 0.7711 0.4745
+vn -0.4059 0.7641 0.5014
+vn 0.8251 0.2968 0.4808
+vn -0.8299 0.2940 0.4742
+vn 0.6888 0.1868 0.7005
+vn -0.6617 0.2026 0.7219
+vn 0.8400 0.3436 -0.4200
+vn -0.7816 0.3058 -0.5437
+vn 0.2074 0.8296 -0.5185
+vn -0.2037 0.8146 -0.5431
+vn -0.4056 0.7605 -0.5070
+vn 0.4381 0.7988 -0.4123
+vn -0.8642 0.3143 -0.3928
+vn 0.7861 0.3276 -0.5241
+vn -0.7782 -0.3537 -0.5188
+vn 0.7782 -0.3537 -0.5188
+vn -0.4381 -0.7988 -0.4123
+vn 0.4381 -0.7988 -0.4123
+vn 0.2037 -0.8146 -0.5431
+vn -0.2037 -0.8146 -0.5431
+vn 0.7683 -0.3293 -0.5488
+vn -0.7683 -0.3293 -0.5488
+vn 0.4000 -0.0623 0.9144
+vn -0.4000 -0.0623 0.9144
+vn 0.3069 -0.1754 0.9354
+vn -0.3069 -0.1754 0.9354
+vn 0.0945 -0.1835 0.9785
+vn -0.0945 -0.1835 0.9785
+vn -0.0624 -0.0283 0.9977
+vn 0.0624 -0.0283 0.9977
+vn -0.0624 0.0260 0.9977
+vn 0.0624 0.0260 0.9977
+vn 0.0996 0.1729 0.9799
+vn -0.0996 0.1729 0.9799
+vn 0.3036 0.1656 0.9383
+vn -0.3036 0.1656 0.9383
+vn 0.4002 0.0572 0.9147
+vn -0.4002 0.0572 0.9147
+vn 0.1367 -0.8748 0.4648
+vn -0.1054 -0.8433 0.5270
+vn 0.2303 -0.8656 0.4447
+vn -0.1916 -0.8620 0.4693
+vn 0.5788 -0.5049 0.6404
+vn -0.5788 -0.5049 0.6404
+vn 0.7763 -0.0633 0.6272
+vn -0.7763 -0.0633 0.6272
+vn 0.7471 0.1132 0.6550
+vn -0.7471 0.1132 0.6550
+vn 0.3747 -0.8345 0.4040
+vn -0.3747 -0.8345 0.4040
+vn 0.3557 -0.7290 0.5848
+vn -0.4177 -0.5751 0.7034
+vn 0.6947 -0.4197 0.5841
+vn -0.6947 -0.4197 0.5841
+vn 0.7028 -0.3915 0.5939
+vn -0.5537 -0.2978 0.7777
+vn 0.3127 0.3425 0.8860
+vn -0.8227 0.3606 0.4395
+vn 0.5091 0.6482 0.5663
+vn -0.5041 0.6448 0.5745
+vn 0.5977 0.5565 0.5771
+vn -0.5977 0.5565 0.5771
+vn -0.0486 0.6560 0.7532
+vn 0.0371 0.6685 0.7428
+vn -0.7104 0.2715 0.6494
+vn 0.7386 0.3768 0.5590
+vn -0.6013 0.5262 0.6013
+vn 0.5774 0.5774 0.5774
+vn 0.5070 -0.6281 0.5903
+vn -0.5364 -0.3230 0.7797
+vn 0.2226 -0.4694 0.8545
+vn -0.2226 -0.4694 0.8545
+vn -0.0348 -0.5792 0.8144
+vn 0.1073 -0.5010 0.8588
+vn -0.0899 -0.7843 0.6138
+vn 0.0770 -0.5759 0.8139
+vn 0.0547 -0.1695 0.9840
+vn -0.0279 -0.8645 0.5019
+vn 0.4260 -0.0609 0.9027
+vn -0.1687 -0.3128 0.9347
+vn 0.3352 -0.1828 0.9243
+vn -0.4350 -0.1812 0.8820
+vn 0.3579 -0.3068 0.8819
+vn -0.3223 -0.2762 0.9054
+vn 0.0000 -0.4472 0.8944
+vn -0.1598 0.3903 0.9067
+vn 0.1598 0.3903 0.9067
+vn 0.6819 -0.2915 0.6709
+vn -0.1854 -0.4956 0.8485
+vn 0.0585 -0.0781 0.9952
+vn -0.0585 -0.0781 0.9952
+vn -0.0066 -0.2316 0.9728
+vn -0.0585 -0.0845 0.9947
+vn 0.1008 -0.7103 0.6966
+vn -0.1008 -0.7103 0.6966
+vn 0.1322 -0.5947 0.7930
+vn -0.1322 -0.5947 0.7930
+vn 0.3128 -0.1662 0.9352
+vn -0.3143 -0.3928 0.8642
+vn 0.3288 -0.0360 0.9437
+vn -0.3288 -0.0360 0.9437
+vn 0.3233 -0.0808 0.9429
+vn -0.3233 -0.0808 0.9429
+vn -0.0232 0.0511 0.9984
+vn 0.0000 0.0665 0.9978
+vn -0.0043 -0.0651 0.9979
+vn 0.0000 -0.0665 0.9978
+vn 0.0000 0.0000 1.0000
+vn 0.8447 -0.5335 0.0445
+vn -0.8447 -0.5335 0.0445
+vn 0.9256 0.2492 -0.2848
+vn -0.9635 0.2141 -0.1606
+vn 0.0693 0.9004 -0.4294
+vn -0.1018 0.9165 -0.3870
+vn -1.0000 0.0000 0.0000
+vn 0.6905 0.5492 0.4708
+vn 0.4071 -0.8956 0.1791
+vn -0.4319 -0.8639 0.2592
+vn 0.2873 -0.5747 0.7663
+vn -0.2873 -0.5747 0.7663
+vn -0.6326 0.5353 0.5596
+vn 0.6326 0.5353 0.5596
+vn 0.0862 0.7759 0.6250
+vn -0.0862 0.7759 0.6250
+vn 0.7532 0.2870 0.5918
+vn -0.7639 0.2971 0.5729
+vn 0.3416 -0.5409 0.7686
+vn -0.3416 -0.5409 0.7686
+vn 0.0502 0.2343 0.9709
+vn -0.0375 0.2247 0.9737
+vn -0.1304 -0.6087 0.7826
+vn 0.1304 -0.6087 0.7826
+vn -0.5059 0.0716 0.8596
+vn 0.5059 0.0716 0.8596
+vn -0.5774 -0.5774 0.5774
+vn 0.5774 -0.5774 0.5774
+vn 0.5460 -0.4310 0.7184
+vn -0.3319 0.0738 0.9404
+vn 0.3231 0.0311 0.9459
+vn -0.2815 0.0662 0.9573
+vn 0.7357 0.3910 0.5531
+vn -0.8753 0.2059 0.4376
+vn 0.8480 0.3180 0.4240
+vn -0.8973 0.1994 0.3938
+vn 0.8505 0.3798 0.3638
+vn -0.8505 0.3798 0.3638
+vn 0.1783 -0.4161 0.8917
+vn -0.2524 -0.8655 0.4327
+vn -0.1296 -0.1945 0.9723
+vn 0.1296 -0.1945 0.9723
+vn -0.4472 0.0000 0.8944
+vn 0.4472 0.0000 0.8944
+vn -0.1582 0.9494 0.2713
+vn 0.1582 0.9494 0.2713
+vn -0.6463 0.7337 0.2096
+vn 0.6463 0.7337 0.2096
+vn 1.0000 0.0000 0.0000
+vn 0.3051 -0.9450 0.1181
+vn -0.3051 -0.9450 0.1181
+vn 0.0217 -0.3031 0.9527
+vn -0.0217 -0.3031 0.9527
+vn 0.1353 -0.3479 0.9277
+vn -0.1353 -0.3479 0.9277
+vn -0.4681 -0.2239 0.8548
+vn 0.4681 -0.2239 0.8548
+vn -0.2710 0.0271 0.9622
+vn 0.2710 0.0271 0.9622
+vn -0.1717 -0.0090 0.9851
+vn 0.2595 0.1038 0.9601
+vn -0.4332 -0.4874 0.7581
+vn 0.6684 -0.4595 0.5849
+vn -0.1599 -0.8797 0.4478
+vn 0.1599 -0.8797 0.4478
+vn 0.3900 -0.5895 0.7074
+vn -0.3900 -0.5895 0.7074
+vn 0.6547 -0.4589 0.6007
+vn -0.6547 -0.4589 0.6007
+vn 0.5378 -0.1144 0.8353
+vn -0.5378 -0.1144 0.8353
+vn 0.5657 0.1197 0.8159
+vn -0.5774 0.1155 0.8083
+vn 0.4082 0.4082 0.8165
+vn -0.5214 0.6574 0.5441
+vn 0.1796 0.7882 0.5886
+vn -0.1796 0.7882 0.5886
+vn 0.1881 0.3387 0.9219
+vn -0.1881 0.3387 0.9219
+vn -0.0870 0.2756 0.9573
+vn 0.0870 0.2756 0.9573
+vn 0.0829 -0.2902 0.9534
+vn -0.0829 -0.2902 0.9534
+vn 0.3015 -0.3015 0.9045
+vn -0.3015 -0.3015 0.9045
+vn -0.3766 -0.8339 0.4035
+vn 0.0631 -0.3156 0.9468
+vn 0.0823 -0.7822 0.6175
+vn 0.2016 -0.9071 0.3696
+vn -0.3707 -0.2851 0.8839
+vn 0.3707 -0.2851 0.8839
+vn -0.2692 -0.0577 0.9614
+vn 0.4568 0.0508 0.8881
+vn -0.2797 0.5245 0.8042
+vn 0.2797 0.5245 0.8042
+vn -0.0213 0.5546 0.8319
+vn 0.0487 0.6815 0.7302
+vn 0.3778 0.6342 0.6746
+vn -0.3378 0.5221 0.7831
+vn 0.4988 0.5300 0.6858
+vn -0.4988 0.5300 0.6858
+vn 0.5425 -0.3391 0.7686
+vn -0.5425 -0.3391 0.7686
+vn 0.8305 -0.0615 0.5536
+vn -0.8305 -0.0615 0.5536
+vn 0.7814 0.1116 0.6140
+vn -0.7814 0.1116 0.6140
+vn -0.4338 0.8888 -0.1481
+vn 0.4338 0.8888 -0.1481
+vn -0.8515 0.3744 -0.3670
+vn 0.8515 0.3744 -0.3670
+vn -0.2664 0.8710 -0.4127
+vn 0.2197 0.8626 -0.4557
+vn 0.5932 0.7445 -0.3063
+vn -0.5914 0.7489 -0.2991
+vn 0.3714 0.8685 -0.3284
+vn -0.3653 0.8833 -0.2938
+vn 0.2901 0.9141 -0.2833
+vn -0.2901 0.9141 -0.2833
+vn 0.8873 0.1343 -0.4412
+vn -0.7964 0.1323 -0.5901
+vn 0.5108 -0.6649 -0.5450
+vn -0.5108 -0.6649 -0.5450
+vn 0.3695 -0.8566 -0.3601
+vn -0.3695 -0.8566 -0.3601
+vn 0.3617 -0.3858 -0.8487
+vn -0.1649 -0.6644 -0.7289
+vn 0.1952 -0.0976 -0.9759
+vn -0.3011 -0.0125 -0.9535
+vn -0.0107 -0.5633 -0.8262
+vn -0.2562 -0.3112 -0.9152
+vn 0.1533 -0.9649 -0.2134
+vn -0.1533 -0.9649 -0.2134
+vn 0.1260 -0.9624 -0.2406
+vn -0.1260 -0.9624 -0.2406
+vn 0.9396 0.1573 -0.3041
+vn -0.9396 0.1573 -0.3041
+vn 0.9278 0.1838 -0.3246
+vn -0.9278 0.1838 -0.3246
+vn 0.2192 0.0766 -0.9727
+vn -0.2192 0.0766 -0.9727
+vn 0.1211 -0.0530 -0.9912
+vn 0.1497 -0.3635 -0.9195
+vn 0.9094 0.1371 -0.3927
+vn -0.3706 -0.6780 -0.6349
+vn 0.9202 0.1355 -0.3672
+vn -0.9202 0.1355 -0.3672
+vn 0.9173 0.3440 -0.2007
+vn -0.9457 0.2673 -0.1850
+vn 0.9004 0.3642 -0.2380
+vn -0.9337 0.2813 -0.2215
+vn 0.8945 0.4337 0.1084
+vn -0.9501 0.2455 -0.1922
+vn 0.1596 -0.9577 -0.2394
+vn -0.1835 -0.7864 -0.5898
+vn 0.3693 -0.4712 -0.8010
+vn -0.3727 -0.4759 -0.7966
+vn 0.2986 -0.8236 -0.4821
+vn -0.3263 -0.8342 -0.4446
+vn 0.2995 -0.9442 -0.1368
+vn -0.2995 -0.9442 -0.1368
+vn 0.3287 -0.9163 -0.2291
+vn -0.3287 -0.9163 -0.2291
+vn 0.8305 0.3333 -0.4463
+vn -0.8642 -0.4737 0.1696
+vn 0.9166 -0.3740 0.1414
+vn -0.9166 -0.3740 0.1414
+vn 0.2950 -0.0454 -0.9544
+vn -0.4189 -0.2265 -0.8793
+vn 0.1272 0.9658 0.2260
+vn -0.1119 0.9626 0.2468
+vn 0.1320 0.9750 -0.1788
+vn -0.1320 0.9750 -0.1788
+vn 0.3878 0.6192 -0.6828
+vn -0.3878 0.6192 -0.6828
+vn 0.4951 0.8618 -0.1100
+vn -0.4951 0.8618 -0.1100
+vn 0.2561 0.6447 0.7202
+vn -0.2561 0.6447 0.7202
+vn 0.5966 0.7888 0.1479
+vn -0.5966 0.7888 0.1479
+vn 0.7125 0.6755 -0.1900
+vn -0.7125 0.6755 -0.1900
+vn 0.7104 0.1364 -0.6904
+vn -0.6304 0.2517 -0.7343
+vn 0.6823 0.2318 -0.6933
+vn -0.6823 0.2318 -0.6933
+vn 0.6574 0.7254 -0.2040
+vn -0.6574 0.7254 -0.2040
+vn 0.7289 0.6729 0.1262
+vn -0.7289 0.6729 0.1262
+vn 0.7791 0.4074 0.4764
+vn -0.7791 0.4074 0.4764
+vn 0.3669 0.8840 -0.2898
+vn -0.3238 0.9434 -0.0720
+vn 0.2854 0.6237 0.7277
+vn -0.1548 0.5080 0.8473
+vn -0.1702 0.1097 -0.9793
+vn 0.1782 0.0891 -0.9800
+vn 0.2925 0.5674 0.7697
+vn -0.2925 0.5674 0.7697
+vn -0.1616 0.1847 0.9694
+vn 0.1616 0.1847 0.9694
+vn 0.8681 0.0893 -0.4883
+vn -0.9340 0.2255 0.2773
+vn 0.9276 0.0762 0.3657
+vn -0.9276 0.0762 0.3657
+vn 0.9750 0.2169 0.0490
+vn -0.9750 0.2169 0.0490
+vn 0.9817 -0.0304 -0.1882
+vn -0.9956 0.0893 -0.0288
+vn 0.7466 -0.6646 0.0285
+vn -0.6374 -0.7651 0.0915
+vn 0.3723 -0.9243 0.0847
+vn -0.3720 -0.9244 0.0845
+vn 0.3986 -0.8754 0.2734
+vn -0.3986 -0.8754 0.2734
+vn 0.6328 -0.7642 0.1247
+vn -0.6328 -0.7642 0.1247
+vn 0.7325 -0.6368 0.2407
+vn -0.7325 -0.6368 0.2407
+vn 0.2637 -0.4499 0.8533
+vn -0.2637 -0.4499 0.8533
+vn 0.5881 -0.3070 -0.7483
+vn -0.5236 -0.3290 -0.7859
+vn 0.4694 -0.2400 -0.8498
+vn -0.5396 -0.3343 -0.7727
+vn 0.4463 -0.8452 -0.2941
+vn -0.2144 -0.8341 -0.5082
+vn 0.6973 -0.6610 -0.2771
+vn -0.7365 -0.6154 -0.2808
+vn 0.4972 -0.4408 -0.7473
+vn -0.4972 -0.4408 -0.7473
+vn 0.3691 0.2855 0.8844
+vn -0.3244 0.4867 0.8111
+vn 0.4467 0.0975 0.8894
+vn -0.4467 0.0975 0.8894
+vn 0.3188 0.1993 0.9266
+vn -0.1817 -0.0079 0.9833
+vn 0.2076 -0.0836 0.9746
+vn -0.2925 -0.0758 0.9533
+vn 0.3398 0.0824 0.9369
+vn -0.5847 -0.2198 0.7809
+vn 0.5957 -0.3850 0.7049
+vn -0.5957 -0.3850 0.7049
+vn 0.4843 0.5580 0.6738
+vn -0.4843 0.5580 0.6738
+vn -0.2675 0.8318 0.4864
+vn 0.2675 0.8318 0.4864
+vn -0.8576 0.2223 0.4637
+vn 0.7885 0.2366 0.5677
+vn -0.5257 -0.3579 0.7717
+vn 0.5242 -0.3548 0.7742
+vn 0.4663 -0.5991 0.6509
+vn -0.4390 -0.5252 0.7290
+vn 0.7104 -0.4567 0.5356
+vn -0.7104 -0.4567 0.5356
+vn 0.7507 -0.6131 -0.2461
+vn -0.6302 -0.7658 0.1282
+vn -0.1788 0.2923 0.9395
+vn 0.2175 0.2733 0.9370
+vn 0.9042 -0.3578 -0.2332
+vn -0.9042 -0.3578 -0.2332
+vn 0.0400 0.3399 0.9396
+vn -0.0400 0.3399 0.9396
+vn 0.2734 0.9064 0.3221
+vn -0.2734 0.9064 0.3221
+vn 0.4480 -0.4480 0.7737
+vn -0.7177 0.1689 0.6755
+vn 0.5534 -0.5534 0.6225
+vn -0.9008 -0.4075 0.1501
+vn 0.5724 -0.3122 0.7582
+vn -0.5815 -0.5217 0.6243
+vn 0.5597 -0.5533 0.6169
+vn -0.6138 -0.2571 0.7465
+vn 0.9551 -0.1636 -0.2470
+vn -0.1712 -0.0934 0.9808
+vn 0.9227 -0.3765 -0.0825
+vn -0.8717 -0.4446 -0.2063
+vn 0.9972 -0.0181 -0.0725
+vn -0.9972 -0.0181 -0.0725
+vn 0.6895 -0.6644 0.2883
+vn -0.6895 -0.6644 0.2883
+vn 0.7815 -0.6176 0.0882
+vn -0.7930 -0.5947 0.1322
+vn 0.7022 -0.7022 0.1170
+vn -0.7022 -0.7022 0.1170
+vn 0.1240 0.9921 0.0207
+vn -0.2408 0.9631 -0.1204
+vn 0.9435 0.3145 0.1048
+vn -0.9251 0.3469 0.1542
+vn 0.6213 -0.7767 0.1036
+vn -0.6213 -0.7767 0.1036
+vn 0.0000 1.0000 0.0000
+vn 0.6197 -0.6899 0.3742
+vn -0.6197 -0.6899 0.3742
+vn 0.2752 -0.8808 0.3853
+vn -0.2752 -0.8808 0.3853
+vn -0.7929 -0.5252 -0.3089
+vn 0.7929 -0.5252 -0.3089
+vn -0.8096 0.2429 -0.5343
+vn 0.8538 0.2328 -0.4657
+vn -0.5621 0.8231 -0.0803
+vn 0.5433 0.6985 -0.4657
+vn -0.0071 0.9899 0.1414
+vn 0.1096 0.9939 -0.0157
+vn 0.1046 0.0392 0.9937
+vn -0.1738 0.0097 0.9847
+vn 0.2461 0.0852 0.9655
+vn -0.4134 0.0413 0.9096
+vn 0.3009 0.0926 0.9491
+vn -0.3009 0.0926 0.9491
+vn 0.2104 0.0124 0.9775
+vn -0.1220 0.0458 0.9915
+vn -0.0099 0.3867 0.9221
+vn 0.0099 0.3867 0.9221
+vn 0.3787 -0.0364 0.9248
+vn -0.4244 -0.0320 0.9049
+vn 0.2530 -0.1897 0.9487
+vn -0.2570 0.0723 0.9637
+vn -0.4870 0.6088 0.6262
+vn 0.2981 0.7454 0.5963
+vn 0.6693 0.1802 0.7208
+vn -0.6693 0.1802 0.7208
+vn 0.4388 -0.2008 0.8759
+vn -0.4723 -0.1986 0.8588
+vn 0.5786 -0.1334 0.8046
+vn -0.2975 -0.4062 0.8640
+vn 0.5002 0.2833 0.8182
+vn -0.5002 0.2833 0.8182
+vn 0.2980 0.5802 0.7580
+vn -0.2980 0.5802 0.7580
+vn 0.0929 -0.9912 -0.0944
+vn -0.0929 -0.9912 -0.0944
+vn 0.4688 -0.8715 0.1442
+vn -0.4688 -0.8715 0.1442
+vn 0.9309 -0.2541 0.2624
+vn -0.9264 -0.2460 0.2851
+vn 0.8465 0.5291 -0.0595
+vn -0.8267 0.5627 -0.0035
+vn -0.2511 0.9439 -0.2145
+vn 0.2146 0.9243 -0.3157
+vn -0.4841 0.8743 -0.0361
+vn 0.4196 0.8851 -0.2012
+vn -0.5256 -0.0030 -0.8507
+vn 0.5470 -0.0144 -0.8370
+vn -0.1466 0.0104 -0.9891
+vn 0.1466 0.0104 -0.9891
+vn 0.4046 0.0266 -0.9141
+vn -0.4046 0.0266 -0.9141
+vn -0.8073 0.5901 0.0041
+vn 0.7330 0.6786 0.0472
+vn 0.4200 -0.2291 -0.8781
+vn -0.4200 -0.2291 -0.8781
+vn -0.0687 -0.9943 -0.0818
+vn 0.0687 -0.9943 -0.0818
+vn 0.6713 -0.1971 0.7145
+vn -0.6713 -0.1971 0.7145
+vn 0.8326 -0.3017 0.4646
+vn -0.8326 -0.3017 0.4646
+vn 0.4258 -0.7967 0.4290
+vn -0.4258 -0.7967 0.4290
+vn 0.3265 -0.4954 0.8050
+vn -0.3265 -0.4954 0.8050
+vn -0.0649 -0.5714 0.8181
+vn 0.0649 -0.5714 0.8181
+vn -0.2738 -0.8315 0.4834
+vn 0.2738 -0.8315 0.4834
+vn -0.7606 -0.3400 0.5531
+vn 0.7824 -0.3294 0.5285
+vn -0.4649 -0.1958 0.8634
+vn 0.4767 -0.1907 0.8581
+vn -0.4983 0.1812 0.8478
+vn 0.4983 0.1812 0.8478
+vn -0.7683 0.3293 0.5488
+vn 0.7656 0.3223 0.5568
+vn -0.2487 0.8249 0.5076
+vn 0.2560 0.8073 0.5317
+vn -0.1017 0.5518 0.8277
+vn 0.0821 0.6023 0.7940
+vn 0.3861 0.5446 0.7445
+vn -0.3329 0.5231 0.7846
+vn 0.4059 0.7641 0.5014
+vn -0.4246 0.7711 0.4745
+vn 0.8299 0.2940 0.4742
+vn -0.8251 0.2968 0.4808
+vn 0.6617 0.2026 0.7219
+vn -0.6888 0.1868 0.7005
+vn 0.7816 0.3058 -0.5437
+vn -0.8400 0.3436 -0.4200
+vn 0.2037 0.8146 -0.5431
+vn -0.2074 0.8296 -0.5185
+vn -0.4381 0.7988 -0.4123
+vn 0.4056 0.7605 -0.5070
+vn -0.7861 0.3276 -0.5241
+vn 0.8642 0.3143 -0.3928
+vn -0.8519 -0.3408 -0.3976
+vn 0.8519 -0.3408 -0.3976
+vn -0.4056 -0.7605 -0.5070
+vn 0.4056 -0.7605 -0.5070
+vn 0.2074 -0.8296 -0.5185
+vn -0.2074 -0.8296 -0.5185
+vn 0.8297 -0.3734 -0.4149
+vn -0.8297 -0.3734 -0.4149
+vn 0.1054 -0.8433 0.5270
+vn -0.1367 -0.8748 0.4648
+vn 0.1916 -0.8620 0.4693
+vn -0.2303 -0.8656 0.4447
+vn 0.5959 -0.4256 0.6810
+vn -0.5959 -0.4256 0.6810
+vn 0.7563 -0.0299 0.6535
+vn -0.7563 -0.0299 0.6535
+vn 0.8069 0.0689 0.5866
+vn -0.8069 0.0689 0.5866
+vn 0.2334 -0.7779 0.5834
+vn -0.2334 -0.7779 0.5834
+vn 0.4177 -0.5751 0.7034
+vn -0.3557 -0.7290 0.5848
+vn 0.6872 -0.4191 0.5934
+vn -0.6872 -0.4191 0.5934
+vn 0.5537 -0.2978 0.7777
+vn -0.7028 -0.3915 0.5939
+vn 0.8227 0.3606 0.4395
+vn -0.3127 0.3425 0.8860
+vn 0.5041 0.6448 0.5745
+vn -0.5091 0.6482 0.5663
+vn 0.6155 0.4924 0.6155
+vn -0.6155 0.4924 0.6155
+vn -0.0371 0.6685 0.7428
+vn 0.0486 0.6560 0.7532
+vn -0.7386 0.3768 0.5590
+vn 0.7104 0.2715 0.6494
+vn -0.5774 0.5774 0.5774
+vn 0.6013 0.5262 0.6013
+vn 0.5364 -0.3230 0.7797
+vn -0.5070 -0.6281 0.5903
+vn 0.2181 -0.4685 0.8561
+vn -0.2181 -0.4685 0.8561
+vn -0.1073 -0.5010 0.8588
+vn 0.0348 -0.5792 0.8144
+vn -0.0770 -0.5759 0.8139
+vn 0.0899 -0.7843 0.6138
+vn 0.0279 -0.8645 0.5019
+vn -0.0547 -0.1695 0.9840
+vn 0.1687 -0.3128 0.9347
+vn -0.4260 -0.0609 0.9027
+vn 0.4350 -0.1812 0.8820
+vn -0.3352 -0.1828 0.9243
+vn 0.3223 -0.2762 0.9054
+vn -0.3579 -0.3068 0.8819
+vn 0.4284 0.1494 0.8911
+vn -0.4284 0.1494 0.8911
+vn -0.0317 -0.1899 0.9813
+vn 0.0317 -0.1899 0.9813
+vn 0.1854 -0.4956 0.8485
+vn -0.6819 -0.2915 0.6709
+vn 0.2623 -0.3498 0.8994
+vn -0.2623 -0.3498 0.8994
+vn 0.0585 -0.0845 0.9947
+vn 0.0066 -0.2316 0.9728
+vn -0.0136 -0.6507 0.7592
+vn 0.0136 -0.6507 0.7592
+vn 0.2404 -0.5476 0.8014
+vn -0.2404 -0.5476 0.8014
+vn 0.3143 -0.3928 0.8642
+vn -0.3128 -0.1662 0.9352
+vn 0.2821 -0.0164 0.9592
+vn -0.2821 -0.0164 0.9592
+vn 0.3273 -0.1432 0.9340
+vn -0.3273 -0.1432 0.9340
+vn 0.0232 0.0511 0.9984
+vn 0.0043 -0.0651 0.9979
+vn 0.7826 -0.6087 -0.1304
+vn -0.7826 -0.6087 -0.1304
+vn 0.9635 0.2141 -0.1606
+vn -0.9256 0.2492 -0.2848
+vn 0.1018 0.9165 -0.3870
+vn -0.0693 0.9004 -0.4294
+vn -0.6905 0.5492 0.4708
+vn 0.4319 -0.8639 0.2592
+vn -0.4071 -0.8956 0.1791
+vn -0.6667 0.6667 0.3333
+vn 0.6667 0.6667 0.3333
+vn 0.1348 0.8086 0.5727
+vn -0.1348 0.8086 0.5727
+vn 0.7639 0.2971 0.5729
+vn -0.7532 0.2870 0.5918
+vn 0.4116 -0.8575 0.3087
+vn -0.4116 -0.8575 0.3087
+vn 0.0375 0.2247 0.9737
+vn -0.0502 0.2343 0.9709
+vn 0.1304 -0.2609 0.9565
+vn -0.1304 -0.2609 0.9565
+vn -0.0631 -0.8206 0.5681
+vn 0.0631 -0.8206 0.5681
+vn 0.7325 0.2817 0.6198
+vn -0.7325 0.2817 0.6198
+vn 0.3319 0.0738 0.9404
+vn -0.5460 -0.4310 0.7184
+vn 0.2815 0.0662 0.9573
+vn -0.3231 0.0311 0.9459
+vn 0.8753 0.2059 0.4376
+vn -0.7357 0.3910 0.5531
+vn 0.8973 0.1994 0.3938
+vn -0.8480 0.3180 0.4240
+vn 0.9586 0.0664 0.2767
+vn -0.9586 0.0664 0.2767
+vn 0.2524 -0.8655 0.4327
+vn -0.1783 -0.4161 0.8917
+vn -0.1751 -0.2043 0.9631
+vn 0.1751 -0.2043 0.9631
+vn -0.1219 -0.1829 0.9755
+vn 0.1219 -0.1829 0.9755
+vn -0.1562 0.3123 0.9370
+vn 0.1562 0.3123 0.9370
+vn -0.7238 0.6857 0.0762
+vn 0.7238 0.6857 0.0762
+vn 0.0478 -0.2870 0.9567
+vn -0.0478 -0.2870 0.9567
+vn -0.5488 -0.3293 0.7683
+vn 0.5488 -0.3293 0.7683
+vn -0.4945 -0.1130 0.8618
+vn 0.4945 -0.1130 0.8618
+vn -0.2595 0.1038 0.9601
+vn 0.1717 -0.0090 0.9851
+vn -0.6684 -0.4595 0.5849
+vn 0.4332 -0.4874 0.7581
+vn -0.1156 -0.6359 0.7631
+vn 0.1156 -0.6359 0.7631
+vn 0.4242 -0.6211 0.6590
+vn -0.4242 -0.6211 0.6590
+vn 0.4767 -0.3557 0.8039
+vn -0.4767 -0.3557 0.8039
+vn 0.5871 -0.0839 0.8052
+vn -0.5871 -0.0839 0.8052
+vn 0.5774 0.1155 0.8083
+vn -0.5657 0.1197 0.8159
+vn 0.5214 0.6574 0.5441
+vn -0.4082 0.4082 0.8165
+vn 0.3358 0.3478 0.8754
+vn -0.3358 0.3478 0.8754
+vn 0.1452 0.3774 0.9146
+vn -0.1452 0.3774 0.9146
+vn 0.0301 0.2306 0.9726
+vn -0.0301 0.2306 0.9726
+vn 0.4475 -0.4699 0.7608
+vn -0.4475 -0.4699 0.7608
+vn 0.2627 -0.2252 0.9382
+vn -0.2627 -0.2252 0.9382
+vn -0.0631 -0.3156 0.9468
+vn 0.3766 -0.8339 0.4035
+vn -0.2016 -0.9071 0.3696
+vn -0.0823 -0.7822 0.6175
+vn -0.3356 -0.2397 0.9110
+vn 0.3356 -0.2397 0.9110
+vn -0.4568 0.0508 0.8881
+vn 0.2692 -0.0577 0.9614
+vn -0.0247 0.4072 0.9130
+vn 0.0247 0.4072 0.9130
+vn -0.0487 0.6815 0.7302
+vn 0.0213 0.5546 0.8319
+vn 0.3378 0.5221 0.7831
+vn -0.3778 0.6342 0.6746
+vn 0.7895 -0.3158 0.5263
+vn -0.7895 -0.3158 0.5263
+vn 0.8070 -0.0807 0.5851
+vn -0.8070 -0.0807 0.5851
+vn 0.7868 0.1210 0.6052
+vn -0.7868 0.1210 0.6052
+vn -0.6357 0.6811 -0.3633
+vn 0.6357 0.6811 -0.3633
+vn -0.8507 0.3650 -0.3783
+vn 0.8507 0.3650 -0.3783
+vn -0.2197 0.8626 -0.4557
+vn 0.2664 0.8710 -0.4127
+vn 0.5914 0.7489 -0.2991
+vn -0.5932 0.7445 -0.3063
+vn 0.3653 0.8833 -0.2938
+vn -0.3714 0.8685 -0.3284
+vn 0.2760 0.9159 -0.2915
+vn -0.2760 0.9159 -0.2915
+vn 0.7964 0.1323 -0.5901
+vn -0.8873 0.1343 -0.4412
+vn 0.5442 -0.7524 -0.3712
+vn -0.5442 -0.7524 -0.3712
+vn 0.4027 -0.7323 -0.5492
+vn -0.4027 -0.7323 -0.5492
+vn 0.1649 -0.6644 -0.7289
+vn -0.3617 -0.3858 -0.8487
+vn 0.3011 -0.0125 -0.9535
+vn -0.1952 -0.0976 -0.9759
+vn 0.2562 -0.3112 -0.9152
+vn 0.0107 -0.5633 -0.8262
+vn 0.0779 -0.9948 -0.0663
+vn -0.0779 -0.9948 -0.0663
+vn 0.1094 -0.9718 -0.2089
+vn -0.1094 -0.9718 -0.2089
+vn 0.8150 -0.5621 -0.1405
+vn -0.8150 -0.5621 -0.1405
+vn 0.9358 0.1396 -0.3236
+vn -0.9358 0.1396 -0.3236
+vn 0.1132 -0.0274 -0.9932
+vn -0.1132 -0.0274 -0.9932
+vn -0.1497 -0.3635 -0.9195
+vn -0.1211 -0.0530 -0.9912
+vn 0.3706 -0.6780 -0.6349
+vn -0.9094 0.1371 -0.3927
+vn 0.9193 0.1393 -0.3682
+vn -0.9193 0.1393 -0.3682
+vn 0.9457 0.2673 -0.1850
+vn -0.9173 0.3440 -0.2007
+vn 0.9337 0.2813 -0.2215
+vn -0.9004 0.3642 -0.2380
+vn 0.9501 0.2455 -0.1922
+vn -0.8945 0.4337 0.1084
+vn 0.1835 -0.7864 -0.5898
+vn -0.1596 -0.9577 -0.2394
+vn 0.3727 -0.4759 -0.7966
+vn -0.3693 -0.4712 -0.8010
+vn 0.3263 -0.8342 -0.4446
+vn -0.2986 -0.8236 -0.4821
+vn 0.2620 -0.9574 -0.1217
+vn -0.2620 -0.9574 -0.1217
+vn 0.2996 -0.9443 -0.1362
+vn -0.2996 -0.9443 -0.1362
+vn 0.8642 -0.4737 0.1696
+vn -0.8305 0.3333 -0.4463
+vn 0.6869 -0.6358 0.3521
+vn -0.6869 -0.6358 0.3521
+vn 0.4189 -0.2265 -0.8793
+vn -0.2950 -0.0454 -0.9544
+vn 0.1119 0.9626 0.2468
+vn -0.1272 0.9658 0.2260
+vn 0.1208 0.9734 -0.1947
+vn -0.1208 0.9734 -0.1947
+vn 0.3140 0.5711 -0.7585
+vn -0.3140 0.5711 -0.7585
+vn 0.3231 0.9288 -0.1817
+vn -0.3231 0.9288 -0.1817
+vn 0.0452 0.7955 0.6043
+vn -0.0452 0.7955 0.6043
+vn 0.6144 0.7696 0.1738
+vn -0.6144 0.7696 0.1738
+vn 0.6935 0.6857 -0.2212
+vn -0.6935 0.6857 -0.2212
+vn 0.6304 0.2517 -0.7343
+vn -0.7104 0.1364 -0.6904
+vn 0.3179 0.5704 -0.7574
+vn -0.3179 0.5704 -0.7574
+vn 0.6289 0.7624 -0.1525
+vn -0.6289 0.7624 -0.1525
+vn 0.7088 0.6833 0.1752
+vn -0.7088 0.6833 0.1752
+vn 0.6885 0.3830 0.6158
+vn -0.6885 0.3830 0.6158
+vn 0.3238 0.9434 -0.0720
+vn -0.3669 0.8840 -0.2898
+vn 0.1548 0.5080 0.8473
+vn -0.2854 0.6237 0.7277
+vn -0.1782 0.0891 -0.9800
+vn 0.1702 0.1097 -0.9793
+vn -0.2638 0.9462 -0.1871
+vn 0.2638 0.9462 -0.1871
+vn 0.9340 0.2255 0.2773
+vn -0.8681 0.0893 -0.4883
+vn 0.9758 0.1241 0.1800
+vn -0.9758 0.1241 0.1800
+vn 0.9613 0.1472 -0.2330
+vn -0.9613 0.1472 -0.2330
+vn 0.9956 0.0893 -0.0288
+vn -0.9817 -0.0304 -0.1882
+vn 0.6374 -0.7651 0.0915
+vn -0.7466 -0.6646 0.0285
+vn 0.3720 -0.9244 0.0845
+vn -0.3723 -0.9243 0.0847
+vn 0.5281 -0.8354 0.1522
+vn -0.5281 -0.8354 0.1522
+vn 0.3070 -0.5237 0.7946
+vn -0.3070 -0.5237 0.7946
+vn 0.5236 -0.3290 -0.7859
+vn -0.5881 -0.3070 -0.7483
+vn 0.5396 -0.3343 -0.7727
+vn -0.4694 -0.2400 -0.8498
+vn 0.2144 -0.8341 -0.5082
+vn -0.4463 -0.8452 -0.2941
+vn 0.7365 -0.6154 -0.2808
+vn -0.6973 -0.6610 -0.2771
+vn 0.3244 0.4867 0.8111
+vn -0.3691 0.2855 0.8844
+vn 0.4649 0.2593 0.8465
+vn -0.4649 0.2593 0.8465
+vn 0.1817 -0.0079 0.9833
+vn -0.3188 0.1993 0.9266
+vn 0.2925 -0.0758 0.9533
+vn -0.2076 -0.0836 0.9746
+vn 0.5847 -0.2198 0.7809
+vn -0.3398 0.0824 0.9369
+vn 0.6509 -0.1939 0.7340
+vn -0.6509 -0.1939 0.7340
+vn 0.4075 0.7506 0.5201
+vn -0.4075 0.7506 0.5201
+vn -0.2655 0.8296 0.4911
+vn 0.2655 0.8296 0.4911
+vn -0.7885 0.2366 0.5677
+vn 0.8576 0.2223 0.4637
+vn -0.5242 -0.3548 0.7742
+vn 0.5257 -0.3579 0.7717
+vn 0.4390 -0.5252 0.7290
+vn -0.4663 -0.5991 0.6509
+vn 0.6888 -0.4428 0.5740
+vn -0.6888 -0.4428 0.5740
+vn 0.6302 -0.7658 0.1282
+vn -0.7507 -0.6131 -0.2461
+vn -0.2175 0.2733 0.9370
+vn 0.1788 0.2923 0.9395
+vn 0.9046 -0.3869 -0.1792
+vn -0.9046 -0.3869 -0.1792
+vn 0.1782 -0.0891 0.9800
+vn -0.1782 -0.0891 0.9800
+vn -0.2335 0.8972 0.3749
+vn 0.2335 0.8972 0.3749
+vn 0.7177 0.1689 0.6755
+vn -0.4480 -0.4480 0.7737
+vn 0.5313 0.5844 0.6134
+vn -0.5313 0.5844 0.6134
+vn 0.9008 -0.4075 0.1501
+vn -0.5534 -0.5534 0.6225
+vn 0.5815 -0.5217 0.6243
+vn -0.5724 -0.3122 0.7582
+vn 0.6138 -0.2571 0.7465
+vn -0.5597 -0.5533 0.6169
+vn 0.1712 -0.0934 0.9808
+vn -0.9551 -0.1636 -0.2470
+vn 0.8717 -0.4446 -0.2063
+vn -0.9227 -0.3765 -0.0825
+vn 0.7661 -0.6363 0.0909
+vn -0.7661 -0.6363 0.0909
+vn 0.7930 -0.5947 0.1322
+vn -0.7815 -0.6176 0.0882
+vn 0.2408 0.9631 -0.1204
+vn -0.1240 0.9921 0.0207
+vn 0.9251 0.3469 0.1542
+vn -0.9435 0.3145 0.1048
+vn 0.7071 -0.7071 0.0000
+vn -0.7071 -0.7071 0.0000
+vn -0.0157 0.9898 0.1414
+vn 0.0157 0.9898 0.1414
+vn 0.6266 -0.7211 0.2956
+vn -0.6266 -0.7211 0.2956
+vn 0.2714 -0.9022 0.3353
+vn -0.2714 -0.9022 0.3353
+vn -0.8651 -0.4853 -0.1266
+vn 0.8651 -0.4853 -0.1266
+vn -0.8538 0.2328 -0.4657
+vn 0.8096 0.2429 -0.5343
+vn -0.5433 0.6985 -0.4657
+vn 0.5621 0.8231 -0.0803
+vn -0.1096 0.9939 -0.0157
+vn 0.0071 0.9899 0.1414
+vn 0.1738 0.0097 0.9847
+vn -0.1046 0.0392 0.9937
+vn 0.4134 0.0413 0.9096
+vn -0.2461 0.0852 0.9655
+vn 0.3228 -0.0461 0.9453
+vn -0.3228 -0.0461 0.9453
+vn 0.1220 0.0458 0.9915
+vn -0.2104 0.0124 0.9775
+vn 0.5679 0.1916 0.8005
+vn -0.5679 0.1916 0.8005
+vn 0.4244 -0.0320 0.9049
+vn -0.3787 -0.0364 0.9248
+vn 0.2570 0.0723 0.9637
+vn -0.2530 -0.1897 0.9487
+vn 0.1351 -0.0225 0.9906
+vn -0.1351 -0.0225 0.9906
+vn -0.2981 0.7454 0.5963
+vn 0.4870 0.6088 0.6262
+vn 0.5571 -0.1486 0.8171
+vn -0.5571 -0.1486 0.8171
+vn 0.4723 -0.1986 0.8588
+vn -0.4388 -0.2008 0.8759
+vn 0.2975 -0.4062 0.8640
+vn -0.5786 -0.1334 0.8046
+vn 0.5771 0.2164 0.7875
+vn -0.5771 0.2164 0.7875
+vn 0.0931 -0.9932 -0.0692
+vn -0.0931 -0.9932 -0.0692
+vn 0.5161 -0.8527 -0.0812
+vn -0.5161 -0.8527 -0.0812
+vn 0.9264 -0.2460 0.2851
+vn -0.9309 -0.2541 0.2624
+vn 0.8267 0.5627 -0.0035
+vn -0.8465 0.5291 -0.0595
+vn -0.2146 0.9243 -0.3157
+vn 0.2511 0.9439 -0.2145
+vn -0.4196 0.8851 -0.2012
+vn 0.4841 0.8743 -0.0361
+vn -0.5470 -0.0144 -0.8370
+vn 0.5256 -0.0030 -0.8507
+vn -0.2556 -0.0749 -0.9639
+vn 0.2556 -0.0749 -0.9639
+vn -0.7330 0.6786 0.0472
+vn 0.8073 0.5901 0.0041
+vn 0.6844 -0.1711 -0.7088
+vn -0.6844 -0.1711 -0.7088
+vn -0.3604 -0.8283 -0.4290
+vn 0.3604 -0.8283 -0.4290
+usemtl None
+s off
+f 47/1/1 3/2/1 45/3/1
+f 4/4/2 48/5/2 46/6/2
+f 45/3/3 5/7/3 43/8/3
+f 6/9/4 46/6/4 44/10/4
+f 3/2/5 7/11/5 5/7/5
+f 8/12/6 4/4/6 6/9/6
+f 1/13/7 9/14/7 3/2/7
+f 10/15/8 2/16/8 4/4/8
+f 11/17/9 15/18/9 9/14/9
+f 16/19/10 12/20/10 10/15/10
+f 9/14/11 17/21/11 7/11/11
+f 18/22/12 10/15/12 8/12/12
+f 21/23/13 17/21/13 15/18/13
+f 22/24/14 18/22/14 20/25/14
+f 23/26/15 15/18/15 13/27/15
+f 24/28/16 16/19/16 22/24/16
+f 23/26/17 27/29/17 21/23/17
+f 28/30/18 24/28/18 22/24/18
+f 27/29/19 19/31/19 21/23/19
+f 28/30/20 20/25/20 30/32/20
+f 33/33/21 29/34/21 27/29/21
+f 34/35/22 30/32/22 32/36/22
+f 35/37/23 27/29/23 25/38/23
+f 36/39/24 28/30/24 34/35/24
+f 37/40/25 33/33/25 35/37/25
+f 38/41/26 34/35/26 40/42/26
+f 39/43/27 31/44/27 33/33/27
+f 40/42/28 32/36/28 42/45/28
+f 45/3/29 41/46/29 39/43/29
+f 46/6/30 42/45/30 44/10/30
+f 47/1/31 39/43/31 37/40/31
+f 48/5/32 40/42/32 46/6/32
+f 37/40/33 49/47/33 47/1/33
+f 38/41/34 50/48/34 52/49/34
+f 35/37/35 51/50/35 37/40/35
+f 36/39/36 52/49/36 54/51/36
+f 25/38/37 53/52/37 35/37/37
+f 26/53/38 54/51/38 56/54/38
+f 23/26/39 55/55/39 25/38/39
+f 24/28/40 56/54/40 58/56/40
+f 23/26/41 59/57/41 57/58/41
+f 60/59/42 24/28/42 58/56/42
+f 13/27/43 63/60/43 59/57/43
+f 64/61/44 14/62/44 60/59/44
+f 11/17/45 65/63/45 63/60/45
+f 66/64/46 12/20/46 64/61/46
+f 1/13/47 49/47/47 65/63/47
+f 50/48/48 2/16/48 66/64/48
+f 61/65/49 65/63/49 49/47/49
+f 50/48/50 66/64/50 62/66/50
+f 63/60/51 65/63/51 61/65/51
+f 62/66/52 66/64/52 64/61/52
+f 61/65/53 59/57/53 63/60/53
+f 64/61/54 60/59/54 62/66/54
+f 61/65/55 57/58/55 59/57/55
+f 60/59/56 58/56/56 62/66/56
+f 61/65/57 55/55/57 57/58/57
+f 58/56/58 56/54/58 62/66/58
+f 61/65/59 53/52/59 55/55/59
+f 56/54/60 54/51/60 62/66/60
+f 61/65/61 51/50/61 53/52/61
+f 54/51/62 52/49/62 62/66/62
+f 61/65/63 49/47/63 51/50/63
+f 52/49/64 50/48/64 62/66/64
+f 174/67/65 91/68/65 89/69/65
+f 175/70/66 91/68/66 176/71/66
+f 172/72/67 89/69/67 87/73/67
+f 173/74/68 90/75/68 175/70/68
+f 85/76/69 172/72/69 87/73/69
+f 173/74/70 86/77/70 88/78/70
+f 83/79/71 170/80/71 85/76/71
+f 171/81/72 84/82/72 86/77/72
+f 81/83/73 168/84/73 83/79/73
+f 169/85/74 82/86/74 84/82/74
+f 79/87/75 146/88/75 164/89/75
+f 147/90/76 80/91/76 165/92/76
+f 94/93/77 146/88/77 92/94/77
+f 95/95/78 147/90/78 149/96/78
+f 94/93/79 150/97/79 148/98/79
+f 151/99/80 95/95/80 149/96/80
+f 98/100/81 150/97/81 96/101/81
+f 99/102/82 151/99/82 153/103/82
+f 100/104/83 152/105/83 98/100/83
+f 101/106/84 153/103/84 155/107/84
+f 102/108/85 154/109/85 100/104/85
+f 103/110/86 155/107/86 157/111/86
+f 102/108/87 158/112/87 156/113/87
+f 159/114/88 103/110/88 157/111/88
+f 106/115/89 158/112/89 104/116/89
+f 107/117/90 159/114/90 161/118/90
+f 108/119/91 160/120/91 106/115/91
+f 109/121/92 161/118/92 163/122/92
+f 67/123/93 162/124/93 108/119/93
+f 67/123/94 163/122/94 68/125/94
+f 128/126/95 162/124/95 110/127/95
+f 129/128/96 163/122/96 161/118/96
+f 128/126/97 158/112/97 160/120/97
+f 159/114/98 129/128/98 161/118/98
+f 156/113/99 179/129/99 126/130/99
+f 157/111/100 180/131/100 159/114/100
+f 154/109/101 126/130/101 124/132/101
+f 155/107/102 127/133/102 157/111/102
+f 152/105/103 124/132/103 122/134/103
+f 153/103/104 125/135/104 155/107/104
+f 150/97/105 122/134/105 120/136/105
+f 151/99/106 123/137/106 153/103/106
+f 148/98/107 120/136/107 118/138/107
+f 149/96/108 121/139/108 151/99/108
+f 146/88/109 118/138/109 116/140/109
+f 147/90/110 119/141/110 149/96/110
+f 114/142/111 146/88/111 116/140/111
+f 147/90/111 115/143/111 117/144/111
+f 114/142/112 177/145/112 164/89/112
+f 177/145/113 115/143/113 165/92/113
+f 162/124/114 112/146/114 110/127/114
+f 163/122/115 113/147/115 68/125/115
+f 112/146/116 178/148/116 183/149/116
+f 178/148/117 113/147/117 184/150/117
+f 181/151/118 178/148/118 177/145/118
+f 182/152/119 178/148/119 184/150/119
+f 135/153/120 176/71/120 174/67/120
+f 176/71/121 136/154/121 175/70/121
+f 133/155/122 174/67/122 172/72/122
+f 175/70/123 134/156/123 173/74/123
+f 133/155/124 170/80/124 131/157/124
+f 134/156/125 171/81/125 173/74/125
+f 166/158/126 185/159/126 168/84/126
+f 186/160/127 167/161/127 169/85/127
+f 131/157/128 168/84/128 185/159/128
+f 169/85/129 132/162/129 186/160/129
+f 190/163/130 187/164/130 144/165/130
+f 190/163/131 188/166/131 189/167/131
+f 187/164/132 69/168/132 185/159/132
+f 188/166/133 69/168/133 189/167/133
+f 131/157/134 69/168/134 130/169/134
+f 132/162/134 69/168/134 186/160/134
+f 142/170/135 191/171/135 144/165/135
+f 192/172/136 143/173/136 145/174/136
+f 195/175/137 142/170/137 140/176/137
+f 196/177/138 143/173/138 194/178/138
+f 197/179/139 140/176/139 139/180/139
+f 198/181/140 141/182/140 196/177/140
+f 71/183/141 139/180/141 138/184/141
+f 71/183/142 139/180/142 198/181/142
+f 144/165/143 70/185/143 190/163/143
+f 145/174/144 70/185/144 192/172/144
+f 191/171/145 208/186/145 70/185/145
+f 192/172/146 208/186/146 207/187/146
+f 71/183/147 200/188/147 197/179/147
+f 201/189/148 71/183/148 198/181/148
+f 197/179/149 202/190/149 195/175/149
+f 203/191/150 198/181/150 196/177/150
+f 202/190/151 193/192/151 195/175/151
+f 203/191/152 194/178/152 205/193/152
+f 193/192/153 206/194/153 191/171/153
+f 207/187/154 194/178/154 192/172/154
+f 204/195/155 200/188/155 199/196/155
+f 205/193/156 201/189/156 203/191/156
+f 199/196/157 206/194/157 204/195/157
+f 207/187/158 199/196/158 205/193/158
+f 139/180/159 164/89/159 177/145/159
+f 165/92/160 139/180/160 177/145/160
+f 140/176/161 211/197/161 164/89/161
+f 212/198/162 141/182/162 165/92/162
+f 144/165/163 211/197/163 142/170/163
+f 145/174/164 212/198/164 214/199/164
+f 187/164/165 213/200/165 144/165/165
+f 188/166/166 214/199/166 167/161/166
+f 209/201/167 166/158/167 81/83/167
+f 210/202/168 167/161/168 214/199/168
+f 215/203/169 213/200/169 209/201/169
+f 216/204/170 214/199/170 212/198/170
+f 79/87/171 211/197/171 215/203/171
+f 212/198/172 80/91/172 216/204/172
+f 130/169/173 222/205/173 131/157/173
+f 130/169/174 223/206/174 72/207/174
+f 133/155/175 222/205/175 220/208/175
+f 223/206/176 134/156/176 221/209/176
+f 135/153/177 220/208/177 218/210/177
+f 221/209/178 136/154/178 219/211/178
+f 137/212/134 218/210/134 217/213/134
+f 219/211/134 137/212/134 217/213/134
+f 218/210/179 231/214/179 217/213/179
+f 219/211/180 231/214/180 230/215/180
+f 218/210/181 227/216/181 229/217/181
+f 228/218/182 219/211/182 230/215/182
+f 220/208/141 225/219/141 227/216/141
+f 226/220/183 221/209/183 228/218/183
+f 72/207/184 225/219/184 222/205/184
+f 72/207/185 226/220/185 224/221/185
+f 224/221/186 229/217/186 225/219/186
+f 230/215/187 224/221/187 226/220/187
+f 225/219/188 229/217/188 227/216/188
+f 228/218/189 230/215/189 226/220/189
+f 183/149/190 234/222/190 232/223/190
+f 235/224/191 184/150/191 233/225/191
+f 112/146/192 232/223/192 254/226/192
+f 233/225/193 113/147/193 255/227/193
+f 112/146/194 256/228/194 110/127/194
+f 113/147/195 257/229/195 255/227/195
+f 114/142/196 234/222/196 181/151/196
+f 115/143/197 235/224/197 253/230/197
+f 114/142/198 250/231/198 252/232/198
+f 251/233/199 115/143/199 253/230/199
+f 116/140/200 248/234/200 250/231/200
+f 249/235/201 117/144/201 251/233/201
+f 118/138/202 246/236/202 248/234/202
+f 247/237/203 119/141/203 249/235/203
+f 120/136/204 244/238/204 246/236/204
+f 245/239/205 121/139/205 247/237/205
+f 124/132/206 244/238/206 122/134/206
+f 125/135/207 245/239/207 243/240/207
+f 126/130/208 242/241/208 124/132/208
+f 127/133/209 243/240/209 241/242/209
+f 126/130/210 236/243/210 240/244/210
+f 237/245/211 127/133/211 241/242/211
+f 179/129/212 238/246/212 236/243/212
+f 239/247/213 180/131/213 237/245/213
+f 128/126/214 256/228/214 238/246/214
+f 257/229/215 129/128/215 239/247/215
+f 238/246/216 258/248/216 276/249/216
+f 259/250/217 239/247/217 277/251/217
+f 236/243/218 276/249/218 278/252/218
+f 277/251/219 237/245/219 279/253/219
+f 236/243/220 274/254/220 240/244/220
+f 237/245/221 275/255/221 279/253/221
+f 240/244/222 272/256/222 242/241/222
+f 241/242/223 273/257/223 275/255/223
+f 244/238/224 272/256/224 270/258/224
+f 273/257/225 245/239/225 271/259/225
+f 244/238/226 268/260/226 246/236/226
+f 245/239/227 269/261/227 271/259/227
+f 248/234/228 268/260/228 266/262/228
+f 269/261/229 249/235/229 267/263/229
+f 248/234/230 264/264/230 250/231/230
+f 249/235/231 265/265/231 267/263/231
+f 250/231/232 262/266/232 252/232/232
+f 251/233/233 263/267/233 265/265/233
+f 234/222/234 262/266/234 280/268/234
+f 263/267/235 235/224/235 281/269/235
+f 256/228/236 260/270/236 258/248/236
+f 261/271/237 257/229/237 259/250/237
+f 254/226/238 282/272/238 260/270/238
+f 283/273/239 255/227/239 261/271/239
+f 232/223/240 280/268/240 282/272/240
+f 281/269/241 233/225/241 283/273/241
+f 67/123/242 284/274/242 73/275/242
+f 285/276/243 67/123/243 73/275/243
+f 108/119/244 286/277/244 284/274/244
+f 287/278/245 109/121/245 285/276/245
+f 104/116/246 286/277/246 106/115/246
+f 105/279/247 287/278/247 289/280/247
+f 102/108/248 288/281/248 104/116/248
+f 103/110/249 289/280/249 291/282/249
+f 100/104/250 290/283/250 102/108/250
+f 101/106/251 291/282/251 293/284/251
+f 100/104/252 294/285/252 292/286/252
+f 295/287/253 101/106/253 293/284/253
+f 96/101/254 294/285/254 98/100/254
+f 97/288/255 295/287/255 297/289/255
+f 96/101/256 298/290/256 296/291/256
+f 299/292/257 97/288/257 297/289/257
+f 94/93/258 300/293/258 298/290/258
+f 301/294/259 95/95/259 299/292/259
+f 309/295/260 338/296/260 308/297/260
+f 309/298/261 339/299/261 329/300/261
+f 308/297/262 336/301/262 307/302/262
+f 308/303/263 337/304/263 339/299/263
+f 307/302/264 340/305/264 306/306/264
+f 307/307/265 341/308/265 337/304/265
+f 89/69/266 306/306/266 340/305/266
+f 306/306/267 90/75/267 341/308/267
+f 87/73/268 340/305/268 334/309/268
+f 341/308/269 88/78/269 335/310/269
+f 85/76/270 334/309/270 330/311/270
+f 335/310/271 86/77/271 331/312/271
+f 83/79/272 330/311/272 332/313/272
+f 331/312/273 84/82/273 333/314/273
+f 330/311/274 338/296/274 332/313/274
+f 339/299/275 331/312/275 333/314/275
+f 334/309/276 336/301/276 330/311/276
+f 335/310/277 337/304/277 341/308/277
+f 332/313/278 328/315/278 326/316/278
+f 333/314/279 329/300/279 339/299/279
+f 81/83/280 332/313/280 326/316/280
+f 333/314/281 82/86/281 327/317/281
+f 342/318/282 215/203/282 209/201/282
+f 343/319/283 216/204/283 345/320/283
+f 326/316/284 209/201/284 81/83/284
+f 327/317/285 210/202/285 343/319/285
+f 215/203/286 346/321/286 79/87/286
+f 216/204/287 347/322/287 345/320/287
+f 346/321/288 92/94/288 79/87/288
+f 347/322/289 93/323/289 301/294/289
+f 324/324/290 304/325/290 77/326/290
+f 325/327/291 304/328/291 353/329/291
+f 352/330/292 78/331/292 304/325/292
+f 353/329/293 78/332/293 351/333/293
+f 78/331/294 348/334/294 305/335/294
+f 349/336/295 78/332/295 305/337/295
+f 305/335/296 328/315/296 309/295/296
+f 329/300/297 305/337/297 309/298/297
+f 328/315/298 342/318/298 326/316/298
+f 329/300/299 343/319/299 349/336/299
+f 296/291/300 318/338/300 310/339/300
+f 319/340/301 297/289/301 311/341/301
+f 316/342/302 77/326/302 76/343/302
+f 317/344/303 77/345/303 325/327/303
+f 358/346/304 303/347/304 302/348/304
+f 359/349/305 303/350/305 357/351/305
+f 303/347/306 354/352/306 75/353/306
+f 355/354/307 303/350/307 75/355/307
+f 75/353/308 316/342/308 76/343/308
+f 317/344/309 75/355/309 76/356/309
+f 292/357/310 362/358/310 364/359/310
+f 363/360/311 293/361/311 365/362/311
+f 364/359/312 368/363/312 366/364/312
+f 369/365/313 365/362/313 367/366/313
+f 366/364/314 370/367/314 372/368/314
+f 371/369/315 367/366/315 373/370/315
+f 372/368/316 376/371/316 374/372/316
+f 377/373/317 373/370/317 375/374/317
+f 378/375/318 376/371/318 314/376/318
+f 379/377/319 377/373/319 375/374/319
+f 316/342/320 374/372/320 378/375/320
+f 375/374/321 317/344/321 379/377/321
+f 354/352/322 372/368/322 374/372/322
+f 373/370/323 355/354/323 375/374/323
+f 356/378/324 366/364/324 372/368/324
+f 367/366/325 357/351/325 373/370/325
+f 358/346/326 364/359/326 366/364/326
+f 365/362/327 359/349/327 367/366/327
+f 292/357/328 360/379/328 290/380/328
+f 293/361/329 361/381/329 365/362/329
+f 360/379/330 302/348/330 74/382/330
+f 361/381/331 302/383/331 359/349/331
+f 286/384/332 290/380/332 284/385/332
+f 287/386/333 291/387/333 289/388/333
+f 284/385/334 360/379/334 74/382/334
+f 361/381/335 285/389/335 74/390/335
+f 73/391/336 284/385/336 74/382/336
+f 74/390/337 285/389/337 73/392/337
+f 296/291/338 362/358/338 294/285/338
+f 297/289/339 363/360/339 311/341/339
+f 310/339/340 368/363/340 362/358/340
+f 369/365/341 311/341/341 363/360/341
+f 312/393/342 370/367/342 368/363/342
+f 371/369/343 313/394/343 369/365/343
+f 376/371/344 382/395/344 314/376/344
+f 377/373/345 383/396/345 371/369/345
+f 350/397/346 384/398/346 348/334/346
+f 351/333/347 385/399/347 387/400/347
+f 384/398/348 320/401/348 318/338/348
+f 385/399/349 321/402/349 387/400/349
+f 298/290/350 384/398/350 318/338/350
+f 385/399/351 299/292/351 319/340/351
+f 300/293/352 342/318/352 384/398/352
+f 343/319/353 301/294/353 385/399/353
+f 342/318/354 348/334/354 384/398/354
+f 385/399/355 349/336/355 343/319/355
+f 300/293/356 346/321/356 344/403/356
+f 345/320/357 347/322/357 301/294/357
+f 322/404/358 378/375/358 314/376/358
+f 323/405/359 379/377/359 381/406/359
+f 378/375/360 324/324/360 316/342/360
+f 379/377/361 325/327/361 381/406/361
+f 386/407/362 322/404/362 320/401/362
+f 387/400/363 323/405/363 381/406/363
+f 352/330/364 386/407/364 350/397/364
+f 353/329/365 387/400/365 381/406/365
+f 324/324/366 380/408/366 352/330/366
+f 353/329/367 381/406/367 325/327/367
+f 388/409/368 402/410/368 400/411/368
+f 389/412/369 403/413/369 415/414/369
+f 400/411/370 404/415/370 398/416/370
+f 405/417/371 401/418/371 399/419/371
+f 404/415/372 396/420/372 398/416/372
+f 405/417/373 397/421/373 407/422/373
+f 406/423/374 394/424/374 396/420/374
+f 407/422/375 395/425/375 409/426/375
+f 408/427/376 392/428/376 394/424/376
+f 409/426/377 393/429/377 411/430/377
+f 392/428/378 412/431/378 390/432/378
+f 413/433/379 393/429/379 391/434/379
+f 410/435/380 418/436/380 412/431/380
+f 419/437/381 411/430/381 413/433/381
+f 408/427/382 420/438/382 410/435/382
+f 421/439/383 409/426/383 411/430/383
+f 424/440/384 408/427/384 406/423/384
+f 425/441/385 409/426/385 423/442/385
+f 426/443/386 406/423/386 404/415/386
+f 427/444/387 407/422/387 425/441/387
+f 428/445/388 404/415/388 402/410/388
+f 429/446/389 405/417/389 427/444/389
+f 402/410/390 416/447/390 428/445/390
+f 417/448/391 403/413/391 429/446/391
+f 320/401/392 442/449/392 318/338/392
+f 321/402/393 443/450/393 445/451/393
+f 390/432/394 444/452/394 320/453/394
+f 391/434/395 445/454/395 413/433/395
+f 310/339/396 442/449/396 312/393/396
+f 443/450/397 311/341/397 313/394/397
+f 382/455/398 414/456/398 388/409/398
+f 415/414/399 383/457/399 389/412/399
+f 412/431/400 440/458/400 444/452/400
+f 441/459/401 413/433/401 445/454/401
+f 446/460/402 440/458/402 438/461/402
+f 447/462/403 441/459/403 445/454/403
+f 434/463/134 438/461/134 436/464/134
+f 439/465/134 435/466/134 437/467/134
+f 448/468/404 434/463/404 432/469/404
+f 449/470/405 435/466/405 447/462/405
+f 448/468/406 450/471/406 430/472/406
+f 449/470/407 451/473/407 433/474/407
+f 430/472/408 416/447/408 414/456/408
+f 431/475/409 417/448/409 451/473/409
+f 448/476/410 382/395/410 312/393/410
+f 449/477/411 383/396/411 431/478/411
+f 442/449/412 448/476/412 312/393/412
+f 443/450/413 449/477/413 447/479/413
+f 442/449/414 444/480/414 446/481/414
+f 447/479/415 445/451/415 443/450/415
+f 416/447/416 452/482/416 476/483/416
+f 453/484/417 417/448/417 477/485/417
+f 432/469/418 452/482/418 450/471/418
+f 433/474/419 453/484/419 463/486/419
+f 432/469/420 460/487/420 462/488/420
+f 461/489/421 433/474/421 463/486/421
+f 436/464/422 460/487/422 434/463/422
+f 437/467/423 461/489/423 459/490/423
+f 438/461/424 458/491/424 436/464/424
+f 439/465/425 459/490/425 457/492/425
+f 438/461/426 454/493/426 456/494/426
+f 455/495/427 439/465/427 457/492/427
+f 440/458/428 474/496/428 454/493/428
+f 475/497/428 441/459/428 455/495/428
+f 428/445/429 476/483/429 464/498/429
+f 477/485/430 429/446/430 465/499/430
+f 426/443/431 464/498/431 466/500/431
+f 465/499/432 427/444/432 467/501/432
+f 424/440/433 466/500/433 468/502/433
+f 467/501/434 425/441/434 469/503/434
+f 424/440/435 470/504/435 422/505/435
+f 425/441/436 471/506/436 469/503/436
+f 422/505/437 472/507/437 420/438/437
+f 423/442/438 473/508/438 471/506/438
+f 420/438/439 474/496/439 418/436/439
+f 421/439/440 475/497/440 473/508/440
+f 456/494/441 478/509/441 458/491/441
+f 457/492/442 479/510/442 481/511/442
+f 480/512/443 484/513/443 478/509/443
+f 481/511/444 485/514/444 483/515/444
+f 484/513/445 488/516/445 486/517/445
+f 489/518/446 485/514/446 487/519/446
+f 488/516/447 492/520/447 486/517/447
+f 489/518/448 493/521/448 491/522/448
+f 464/498/449 486/517/449 492/520/449
+f 487/519/450 465/499/450 493/521/450
+f 484/513/451 476/483/451 452/482/451
+f 485/514/452 477/485/452 487/519/452
+f 462/488/453 484/513/453 452/482/453
+f 463/486/454 485/514/454 479/510/454
+f 458/491/134 462/488/134 460/487/134
+f 463/486/134 459/490/134 461/489/134
+f 474/496/455 456/494/455 454/493/455
+f 475/497/456 457/492/456 481/511/456
+f 472/507/457 480/512/457 474/496/457
+f 481/511/458 473/508/458 475/497/458
+f 488/516/459 472/507/459 470/504/459
+f 489/518/460 473/508/460 483/515/460
+f 490/523/461 470/504/461 468/502/461
+f 491/522/462 471/506/462 489/518/462
+f 466/500/463 490/523/463 468/502/463
+f 491/522/464 467/501/464 469/503/464
+f 464/498/465 492/520/465 466/500/465
+f 467/501/466 493/521/466 465/499/466
+f 392/428/467 504/524/467 502/525/467
+f 505/526/468 393/429/468 503/527/468
+f 394/424/469 502/525/469 500/528/469
+f 503/527/470 395/425/470 501/529/470
+f 394/424/471 498/530/471 396/420/471
+f 395/425/472 499/531/472 501/529/472
+f 396/420/473 496/532/473 398/533/473
+f 397/421/474 497/534/474 499/531/474
+f 398/533/475 494/535/475 400/536/475
+f 399/537/476 495/538/476 497/534/476
+f 400/536/477 506/539/477 388/540/477
+f 401/541/478 507/542/478 495/538/478
+f 502/525/479 506/539/479 494/535/479
+f 503/527/480 507/542/480 505/526/480
+f 494/535/481 500/528/481 502/525/481
+f 501/529/482 495/538/482 503/527/482
+f 496/532/483 498/530/483 500/528/483
+f 501/529/484 499/531/484 497/534/484
+f 382/395/485 506/543/485 314/376/485
+f 383/544/486 507/542/486 389/545/486
+f 314/546/487 504/524/487 322/547/487
+f 505/526/488 315/548/488 323/549/488
+f 320/453/489 504/524/489 390/432/489
+f 505/526/490 321/550/490 391/434/490
+f 47/1/491 1/13/491 3/2/491
+f 4/4/492 2/16/492 48/5/492
+f 45/3/493 3/2/493 5/7/493
+f 6/9/494 4/4/494 46/6/494
+f 3/2/495 9/14/495 7/11/495
+f 8/12/496 10/15/496 4/4/496
+f 1/13/497 11/17/497 9/14/497
+f 10/15/498 12/20/498 2/16/498
+f 11/17/499 13/27/499 15/18/499
+f 16/19/500 14/62/500 12/20/500
+f 9/14/501 15/18/501 17/21/501
+f 18/22/502 16/19/502 10/15/502
+f 21/23/503 19/31/503 17/21/503
+f 22/24/504 16/19/504 18/22/504
+f 23/26/505 21/23/505 15/18/505
+f 24/28/506 14/62/506 16/19/506
+f 23/26/507 25/38/507 27/29/507
+f 28/30/508 26/53/508 24/28/508
+f 27/29/509 29/34/509 19/31/509
+f 28/30/510 22/24/510 20/25/510
+f 33/33/511 31/44/511 29/34/511
+f 34/35/512 28/30/512 30/32/512
+f 35/37/513 33/33/513 27/29/513
+f 36/39/514 26/53/514 28/30/514
+f 37/40/515 39/43/515 33/33/515
+f 38/41/516 36/39/516 34/35/516
+f 39/43/517 41/46/517 31/44/517
+f 40/42/518 34/35/518 32/36/518
+f 45/3/519 43/8/519 41/46/519
+f 46/6/520 40/42/520 42/45/520
+f 47/1/521 45/3/521 39/43/521
+f 48/5/522 38/41/522 40/42/522
+f 37/40/523 51/50/523 49/47/523
+f 38/41/524 48/5/524 50/48/524
+f 35/37/525 53/52/525 51/50/525
+f 36/39/526 38/41/526 52/49/526
+f 25/38/527 55/55/527 53/52/527
+f 26/53/528 36/39/528 54/51/528
+f 23/26/529 57/58/529 55/55/529
+f 24/28/530 26/53/530 56/54/530
+f 23/26/531 13/27/531 59/57/531
+f 60/59/532 14/62/532 24/28/532
+f 13/27/533 11/17/533 63/60/533
+f 64/61/534 12/20/534 14/62/534
+f 11/17/535 1/13/535 65/63/535
+f 66/64/536 2/16/536 12/20/536
+f 1/13/537 47/1/537 49/47/537
+f 50/48/538 48/5/538 2/16/538
+f 174/67/539 176/71/539 91/68/539
+f 175/70/540 90/75/540 91/68/540
+f 172/72/541 174/67/541 89/69/541
+f 173/74/542 88/78/542 90/75/542
+f 85/76/543 170/80/543 172/72/543
+f 173/74/544 171/81/544 86/77/544
+f 83/79/545 168/84/545 170/80/545
+f 171/81/546 169/85/546 84/82/546
+f 81/83/547 166/158/547 168/84/547
+f 169/85/548 167/161/548 82/86/548
+f 79/87/549 92/94/549 146/88/549
+f 147/90/550 93/323/550 80/91/550
+f 94/93/551 148/98/551 146/88/551
+f 95/95/552 93/323/552 147/90/552
+f 94/93/553 96/101/553 150/97/553
+f 151/99/554 97/288/554 95/95/554
+f 98/100/555 152/105/555 150/97/555
+f 99/102/556 97/288/556 151/99/556
+f 100/104/557 154/109/557 152/105/557
+f 101/106/558 99/102/558 153/103/558
+f 102/108/559 156/113/559 154/109/559
+f 103/110/560 101/106/560 155/107/560
+f 102/108/561 104/116/561 158/112/561
+f 159/114/562 105/279/562 103/110/562
+f 106/115/563 160/120/563 158/112/563
+f 107/117/564 105/279/564 159/114/564
+f 108/119/565 162/124/565 160/120/565
+f 109/121/566 107/117/566 161/118/566
+f 67/123/567 68/125/567 162/124/567
+f 67/123/568 109/121/568 163/122/568
+f 128/126/569 160/120/569 162/124/569
+f 129/128/570 111/551/570 163/122/570
+f 128/126/571 179/129/571 158/112/571
+f 159/114/572 180/131/572 129/128/572
+f 156/113/573 158/112/573 179/129/573
+f 157/111/574 127/133/574 180/131/574
+f 154/109/575 156/113/575 126/130/575
+f 155/107/576 125/135/576 127/133/576
+f 152/105/577 154/109/577 124/132/577
+f 153/103/578 123/137/578 125/135/578
+f 150/97/579 152/105/579 122/134/579
+f 151/99/580 121/139/580 123/137/580
+f 148/98/581 150/97/581 120/136/581
+f 149/96/582 119/141/582 121/139/582
+f 146/88/583 148/98/583 118/138/583
+f 147/90/584 117/144/584 119/141/584
+f 114/142/585 164/89/585 146/88/585
+f 147/90/586 165/92/586 115/143/586
+f 114/142/587 181/151/587 177/145/587
+f 177/145/588 182/152/588 115/143/588
+f 162/124/589 68/125/589 112/146/589
+f 163/122/590 111/551/590 113/147/590
+f 112/146/591 68/125/591 178/148/591
+f 178/148/592 68/125/592 113/147/592
+f 181/151/593 183/149/593 178/148/593
+f 182/152/594 177/145/594 178/148/594
+f 135/153/595 137/212/595 176/71/595
+f 176/71/596 137/212/596 136/154/596
+f 133/155/597 135/153/597 174/67/597
+f 175/70/598 136/154/598 134/156/598
+f 133/155/599 172/72/599 170/80/599
+f 134/156/600 132/162/600 171/81/600
+f 166/158/601 187/164/601 185/159/601
+f 186/160/602 188/166/602 167/161/602
+f 131/157/603 170/80/603 168/84/603
+f 169/85/604 171/81/604 132/162/604
+f 190/163/131 189/167/131 187/164/131
+f 190/163/605 145/174/605 188/166/605
+f 187/164/133 189/167/133 69/168/133
+f 188/166/606 186/160/606 69/168/606
+f 131/157/134 185/159/134 69/168/134
+f 132/162/134 130/169/134 69/168/134
+f 142/170/607 193/192/607 191/171/607
+f 192/172/608 194/178/608 143/173/608
+f 195/175/609 193/192/609 142/170/609
+f 196/177/610 141/182/610 143/173/610
+f 197/179/611 195/175/611 140/176/611
+f 198/181/612 139/180/612 141/182/612
+f 71/183/613 197/179/613 139/180/613
+f 144/165/614 191/171/614 70/185/614
+f 145/174/615 190/163/615 70/185/615
+f 191/171/145 206/194/145 208/186/145
+f 192/172/146 70/185/146 208/186/146
+f 71/183/616 199/196/616 200/188/616
+f 201/189/617 199/196/617 71/183/617
+f 197/179/618 200/188/618 202/190/618
+f 203/191/619 201/189/619 198/181/619
+f 202/190/620 204/195/620 193/192/620
+f 203/191/621 196/177/621 194/178/621
+f 193/192/622 204/195/622 206/194/622
+f 207/187/623 205/193/623 194/178/623
+f 204/195/624 202/190/624 200/188/624
+f 205/193/625 199/196/625 201/189/625
+f 199/196/626 208/186/626 206/194/626
+f 207/187/627 208/186/627 199/196/627
+f 139/180/628 140/176/628 164/89/628
+f 165/92/629 141/182/629 139/180/629
+f 140/176/630 142/170/630 211/197/630
+f 212/198/631 143/173/631 141/182/631
+f 144/165/632 213/200/632 211/197/632
+f 145/174/633 143/173/633 212/198/633
+f 187/164/634 166/158/634 213/200/634
+f 188/166/635 145/174/635 214/199/635
+f 209/201/636 213/200/636 166/158/636
+f 210/202/637 82/86/637 167/161/637
+f 215/203/638 211/197/638 213/200/638
+f 216/204/639 210/202/639 214/199/639
+f 79/87/640 164/89/640 211/197/640
+f 212/198/641 165/92/641 80/91/641
+f 130/169/642 72/207/642 222/205/642
+f 130/169/643 132/162/643 223/206/643
+f 133/155/644 131/157/644 222/205/644
+f 223/206/645 132/162/645 134/156/645
+f 135/153/646 133/155/646 220/208/646
+f 221/209/647 134/156/647 136/154/647
+f 137/212/648 135/153/648 218/210/648
+f 219/211/649 136/154/649 137/212/649
+f 218/210/179 229/217/179 231/214/179
+f 219/211/180 217/213/180 231/214/180
+f 218/210/650 220/208/650 227/216/650
+f 228/218/651 221/209/651 219/211/651
+f 220/208/141 222/205/141 225/219/141
+f 226/220/183 223/206/183 221/209/183
+f 72/207/184 224/221/184 225/219/184
+f 72/207/185 223/206/185 226/220/185
+f 224/221/652 231/214/652 229/217/652
+f 230/215/653 231/214/653 224/221/653
+f 183/149/654 181/151/654 234/222/654
+f 235/224/655 182/152/655 184/150/655
+f 112/146/656 183/149/656 232/223/656
+f 233/225/657 184/150/657 113/147/657
+f 112/146/658 254/226/658 256/228/658
+f 113/147/659 111/551/659 257/229/659
+f 114/142/660 252/232/660 234/222/660
+f 115/143/661 182/152/661 235/224/661
+f 114/142/662 116/140/662 250/231/662
+f 251/233/663 117/144/663 115/143/663
+f 116/140/664 118/138/664 248/234/664
+f 249/235/665 119/141/665 117/144/665
+f 118/138/666 120/136/666 246/236/666
+f 247/237/667 121/139/667 119/141/667
+f 120/136/668 122/134/668 244/238/668
+f 245/239/669 123/137/669 121/139/669
+f 124/132/670 242/241/670 244/238/670
+f 125/135/671 123/137/671 245/239/671
+f 126/130/672 240/244/672 242/241/672
+f 127/133/673 125/135/673 243/240/673
+f 126/130/674 179/129/674 236/243/674
+f 237/245/675 180/131/675 127/133/675
+f 179/129/676 128/126/676 238/246/676
+f 239/247/677 129/128/677 180/131/677
+f 128/126/678 110/127/678 256/228/678
+f 257/229/679 111/551/679 129/128/679
+f 238/246/680 256/228/680 258/248/680
+f 259/250/681 257/229/681 239/247/681
+f 236/243/682 238/246/682 276/249/682
+f 277/251/683 239/247/683 237/245/683
+f 236/243/684 278/252/684 274/254/684
+f 237/245/685 241/242/685 275/255/685
+f 240/244/686 274/254/686 272/256/686
+f 241/242/687 243/240/687 273/257/687
+f 244/238/688 242/241/688 272/256/688
+f 273/257/689 243/240/689 245/239/689
+f 244/238/690 270/258/690 268/260/690
+f 245/239/691 247/237/691 269/261/691
+f 248/234/692 246/236/692 268/260/692
+f 269/261/693 247/237/693 249/235/693
+f 248/234/694 266/262/694 264/264/694
+f 249/235/695 251/233/695 265/265/695
+f 250/231/696 264/264/696 262/266/696
+f 251/233/697 253/230/697 263/267/697
+f 234/222/234 252/232/234 262/266/234
+f 263/267/235 253/230/235 235/224/235
+f 256/228/698 254/226/698 260/270/698
+f 261/271/699 255/227/699 257/229/699
+f 254/226/700 232/223/700 282/272/700
+f 283/273/701 233/225/701 255/227/701
+f 232/223/702 234/222/702 280/268/702
+f 281/269/703 235/224/703 233/225/703
+f 67/123/704 108/119/704 284/274/704
+f 285/276/705 109/121/705 67/123/705
+f 108/119/706 106/115/706 286/277/706
+f 287/278/707 107/117/707 109/121/707
+f 104/116/708 288/281/708 286/277/708
+f 105/279/709 107/117/709 287/278/709
+f 102/108/710 290/283/710 288/281/710
+f 103/110/711 105/279/711 289/280/711
+f 100/104/712 292/286/712 290/283/712
+f 101/106/713 103/110/713 291/282/713
+f 100/104/714 98/100/714 294/285/714
+f 295/287/715 99/102/715 101/106/715
+f 96/101/716 296/291/716 294/285/716
+f 97/288/717 99/102/717 295/287/717
+f 96/101/718 94/93/718 298/290/718
+f 299/292/719 95/95/719 97/288/719
+f 94/93/720 92/94/720 300/293/720
+f 301/294/721 93/323/721 95/95/721
+f 309/295/722 328/315/722 338/296/722
+f 309/298/723 308/303/723 339/299/723
+f 308/297/724 338/296/724 336/301/724
+f 308/303/725 307/307/725 337/304/725
+f 307/302/726 336/301/726 340/305/726
+f 307/307/727 306/306/727 341/308/727
+f 89/69/728 91/68/728 306/306/728
+f 306/306/729 91/68/729 90/75/729
+f 87/73/730 89/69/730 340/305/730
+f 341/308/731 90/75/731 88/78/731
+f 85/76/732 87/73/732 334/309/732
+f 335/310/733 88/78/733 86/77/733
+f 83/79/734 85/76/734 330/311/734
+f 331/312/735 86/77/735 84/82/735
+f 330/311/736 336/301/736 338/296/736
+f 339/299/737 337/304/737 331/312/737
+f 334/309/738 340/305/738 336/301/738
+f 335/310/739 331/312/739 337/304/739
+f 332/313/740 338/296/740 328/315/740
+f 333/314/741 327/317/741 329/300/741
+f 81/83/742 83/79/742 332/313/742
+f 333/314/743 84/82/743 82/86/743
+f 342/318/744 344/403/744 215/203/744
+f 343/319/745 210/202/745 216/204/745
+f 326/316/746 342/318/746 209/201/746
+f 327/317/747 82/86/747 210/202/747
+f 215/203/748 344/403/748 346/321/748
+f 216/204/749 80/91/749 347/322/749
+f 346/321/750 300/293/750 92/94/750
+f 347/322/751 80/91/751 93/323/751
+f 324/324/752 352/330/752 304/325/752
+f 325/327/753 77/345/753 304/328/753
+f 352/330/754 350/397/754 78/331/754
+f 353/329/755 304/328/755 78/332/755
+f 78/331/756 350/397/756 348/334/756
+f 349/336/757 351/333/757 78/332/757
+f 305/335/758 348/334/758 328/315/758
+f 329/300/759 349/336/759 305/337/759
+f 328/315/760 348/334/760 342/318/760
+f 329/300/761 327/317/761 343/319/761
+f 296/291/762 298/290/762 318/338/762
+f 319/340/763 299/292/763 297/289/763
+f 316/342/764 324/324/764 77/326/764
+f 317/344/765 76/356/765 77/345/765
+f 358/346/766 356/378/766 303/347/766
+f 359/349/767 302/383/767 303/350/767
+f 303/347/768 356/378/768 354/352/768
+f 355/354/769 357/351/769 303/350/769
+f 75/353/770 354/352/770 316/342/770
+f 317/344/771 355/354/771 75/355/771
+f 292/357/772 294/285/772 362/358/772
+f 363/360/773 295/287/773 293/361/773
+f 364/359/774 362/358/774 368/363/774
+f 369/365/775 363/360/775 365/362/775
+f 366/364/776 368/363/776 370/367/776
+f 371/369/777 369/365/777 367/366/777
+f 372/368/778 370/367/778 376/371/778
+f 377/373/779 371/369/779 373/370/779
+f 378/375/780 374/372/780 376/371/780
+f 379/377/781 315/552/781 377/373/781
+f 316/342/782 354/352/782 374/372/782
+f 375/374/783 355/354/783 317/344/783
+f 354/352/784 356/378/784 372/368/784
+f 373/370/785 357/351/785 355/354/785
+f 356/378/786 358/346/786 366/364/786
+f 367/366/787 359/349/787 357/351/787
+f 358/346/788 360/379/788 364/359/788
+f 365/362/789 361/381/789 359/349/789
+f 292/357/790 364/359/790 360/379/790
+f 293/361/791 291/387/791 361/381/791
+f 360/379/792 358/346/792 302/348/792
+f 361/381/793 74/390/793 302/383/793
+f 286/384/794 288/553/794 290/380/794
+f 287/386/795 285/389/795 291/387/795
+f 284/385/796 290/380/796 360/379/796
+f 361/381/797 291/387/797 285/389/797
+f 296/291/798 310/339/798 362/358/798
+f 297/289/799 295/287/799 363/360/799
+f 310/339/800 312/393/800 368/363/800
+f 369/365/801 313/394/801 311/341/801
+f 312/393/802 382/395/802 370/367/802
+f 371/369/803 383/396/803 313/394/803
+f 376/371/804 370/367/804 382/395/804
+f 377/373/805 315/552/805 383/396/805
+f 350/397/806 386/407/806 384/398/806
+f 351/333/807 349/336/807 385/399/807
+f 384/398/808 386/407/808 320/401/808
+f 385/399/809 319/340/809 321/402/809
+f 298/290/810 300/293/810 384/398/810
+f 385/399/811 301/294/811 299/292/811
+f 300/293/812 344/403/812 342/318/812
+f 343/319/813 345/320/813 301/294/813
+f 322/404/814 380/408/814 378/375/814
+f 323/405/815 315/552/815 379/377/815
+f 378/375/816 380/408/816 324/324/816
+f 379/377/817 317/344/817 325/327/817
+f 386/407/818 380/408/818 322/404/818
+f 387/400/819 321/402/819 323/405/819
+f 352/330/820 380/408/820 386/407/820
+f 353/329/821 351/333/821 387/400/821
+f 388/409/822 414/456/822 402/410/822
+f 389/412/823 401/418/823 403/413/823
+f 400/411/824 402/410/824 404/415/824
+f 405/417/825 403/413/825 401/418/825
+f 404/415/826 406/423/826 396/420/826
+f 405/417/827 399/419/827 397/421/827
+f 406/423/828 408/427/828 394/424/828
+f 407/422/829 397/421/829 395/425/829
+f 408/427/830 410/435/830 392/428/830
+f 409/426/831 395/425/831 393/429/831
+f 392/428/832 410/435/832 412/431/832
+f 413/433/833 411/430/833 393/429/833
+f 410/435/834 420/438/834 418/436/834
+f 419/437/835 421/439/835 411/430/835
+f 408/427/836 422/505/836 420/438/836
+f 421/439/837 423/442/837 409/426/837
+f 424/440/838 422/505/838 408/427/838
+f 425/441/839 407/422/839 409/426/839
+f 426/443/840 424/440/840 406/423/840
+f 427/444/841 405/417/841 407/422/841
+f 428/445/842 426/443/842 404/415/842
+f 429/446/843 403/413/843 405/417/843
+f 402/410/844 414/456/844 416/447/844
+f 417/448/845 415/414/845 403/413/845
+f 320/401/846 444/480/846 442/449/846
+f 321/402/847 319/340/847 443/450/847
+f 390/432/848 412/431/848 444/452/848
+f 391/434/849 321/550/849 445/454/849
+f 310/339/850 318/338/850 442/449/850
+f 443/450/851 319/340/851 311/341/851
+f 382/455/852 430/472/852 414/456/852
+f 415/414/853 431/475/853 383/457/853
+f 412/431/854 418/436/854 440/458/854
+f 441/459/855 419/437/855 413/433/855
+f 446/460/856 444/452/856 440/458/856
+f 447/462/857 439/465/857 441/459/857
+f 434/463/858 446/460/858 438/461/858
+f 439/465/859 447/462/859 435/466/859
+f 448/468/860 446/460/860 434/463/860
+f 449/470/861 433/474/861 435/466/861
+f 448/468/862 432/469/862 450/471/862
+f 449/470/863 431/475/863 451/473/863
+f 430/472/864 450/471/864 416/447/864
+f 431/475/865 415/414/865 417/448/865
+f 448/476/866 430/554/866 382/395/866
+f 449/477/867 313/394/867 383/396/867
+f 442/449/868 446/481/868 448/476/868
+f 443/450/869 313/394/869 449/477/869
+f 416/447/870 450/471/870 452/482/870
+f 453/484/871 451/473/871 417/448/871
+f 432/469/872 462/488/872 452/482/872
+f 433/474/873 451/473/873 453/484/873
+f 432/469/420 434/463/420 460/487/420
+f 461/489/421 435/466/421 433/474/421
+f 436/464/874 458/491/874 460/487/874
+f 437/467/875 435/466/875 461/489/875
+f 438/461/876 456/494/876 458/491/876
+f 439/465/877 437/467/877 459/490/877
+f 438/461/878 440/458/878 454/493/878
+f 455/495/879 441/459/879 439/465/879
+f 440/458/880 418/436/880 474/496/880
+f 475/497/881 419/437/881 441/459/881
+f 428/445/882 416/447/882 476/483/882
+f 477/485/883 417/448/883 429/446/883
+f 426/443/884 428/445/884 464/498/884
+f 465/499/885 429/446/885 427/444/885
+f 424/440/886 426/443/886 466/500/886
+f 467/501/887 427/444/887 425/441/887
+f 424/440/888 468/502/888 470/504/888
+f 425/441/889 423/442/889 471/506/889
+f 422/505/890 470/504/890 472/507/890
+f 423/442/891 421/439/891 473/508/891
+f 420/438/892 472/507/892 474/496/892
+f 421/439/893 419/437/893 475/497/893
+f 456/494/894 480/512/894 478/509/894
+f 457/492/895 459/490/895 479/510/895
+f 480/512/896 482/555/896 484/513/896
+f 481/511/897 479/510/897 485/514/897
+f 484/513/898 482/555/898 488/516/898
+f 489/518/899 483/515/899 485/514/899
+f 488/516/900 490/523/900 492/520/900
+f 489/518/901 487/519/901 493/521/901
+f 464/498/902 476/483/902 486/517/902
+f 487/519/903 477/485/903 465/499/903
+f 484/513/904 486/517/904 476/483/904
+f 485/514/905 453/484/905 477/485/905
+f 462/488/906 478/509/906 484/513/906
+f 463/486/907 453/484/907 485/514/907
+f 458/491/908 478/509/908 462/488/908
+f 463/486/909 479/510/909 459/490/909
+f 474/496/910 480/512/910 456/494/910
+f 475/497/911 455/495/911 457/492/911
+f 472/507/912 482/555/912 480/512/912
+f 481/511/913 483/515/913 473/508/913
+f 488/516/914 482/555/914 472/507/914
+f 489/518/915 471/506/915 473/508/915
+f 490/523/916 488/516/916 470/504/916
+f 491/522/917 469/503/917 471/506/917
+f 466/500/918 492/520/918 490/523/918
+f 491/522/919 493/521/919 467/501/919
+f 392/428/920 390/432/920 504/524/920
+f 505/526/921 391/434/921 393/429/921
+f 394/424/922 392/428/922 502/525/922
+f 503/527/923 393/429/923 395/425/923
+f 394/424/924 500/528/924 498/530/924
+f 395/425/925 397/421/925 499/531/925
+f 396/420/926 498/530/926 496/532/926
+f 397/421/927 399/537/927 497/534/927
+f 398/533/928 496/532/928 494/535/928
+f 399/537/929 401/541/929 495/538/929
+f 400/536/930 494/535/930 506/539/930
+f 401/541/931 389/545/931 507/542/931
+f 502/525/932 504/524/932 506/539/932
+f 503/527/933 495/538/933 507/542/933
+f 494/535/934 496/532/934 500/528/934
+f 501/529/935 497/534/935 495/538/935
+f 382/395/936 388/556/936 506/543/936
+f 383/544/937 315/548/937 507/542/937
+f 314/546/938 506/539/938 504/524/938
+f 505/526/939 507/542/939 315/548/939
+f 320/453/940 322/547/940 504/524/940
+f 505/526/941 323/549/941 321/550/941
diff --git a/src/glfw/CMakeLists.txt b/src/glfw/CMakeLists.txt
new file mode 100644
index 0000000..6637d2b
--- /dev/null
+++ b/src/glfw/CMakeLists.txt
@@ -0,0 +1,11 @@
+project(honey-engine)
+
+
+target_sources(honey PUBLIC
+ ${CMAKE_CURRENT_LIST_DIR}/setup.c
+ ${CMAKE_CURRENT_LIST_DIR}/context.c
+ ${CMAKE_CURRENT_LIST_DIR}/init.c
+ ${CMAKE_CURRENT_LIST_DIR}/input.c
+ ${CMAKE_CURRENT_LIST_DIR}/monitor.c
+ ${CMAKE_CURRENT_LIST_DIR}/window.c
+)
diff --git a/src/glfw/bind b/src/glfw/bind
new file mode 100644
index 0000000..ce1aace
--- /dev/null
+++ b/src/glfw/bind
@@ -0,0 +1,47 @@
+void glfwDefaultWindowHints ()
+void glfwWindowHint (int hint, int value)
+void glfwWindowHintString (int hint, const char *value)
+GLFWwindow * glfwCreateWindow (int width, int height, const char *title, GLFWmonitor *monitor, GLFWwindow *share)
+void glfwDestroyWindow (GLFWwindow *window)
+int glfwWindowShouldClose (GLFWwindow *window)
+void glfwSetWindowShouldClose (GLFWwindow *window, int value)
+void glfwSetWindowTitle (GLFWwindow *window, const char *title)
+void glfwSetWindowIcon (GLFWwindow *window, int count, const GLFWimage *images)
+void glfwGetWindowPos (GLFWwindow *window, int *xpos, int *ypos)
+void glfwSetWindowPos (GLFWwindow *window, int xpos, int ypos)
+void glfwGetWindowSize (GLFWwindow *window, int *width, int *height)
+void glfwSetWindowSizeLimits (GLFWwindow *window, int minwidth, int minheight, int maxwidth, int maxheight)
+void glfwSetWindowAspectRatio (GLFWwindow *window, int numer, int denom)
+void glfwSetWindowSize (GLFWwindow *window, int width, int height)
+void glfwGetFramebufferSize (GLFWwindow *window, int *width, int *height)
+void glfwGetWindowFrameSize (GLFWwindow *window, int *left, int *top, int *right, int *bottom)
+void glfwGetWindowContentScale (GLFWwindow *window, float *xscale, float *yscale)
+float glfwGetWindowOpacity (GLFWwindow *window)
+void glfwSetWindowOpacity (GLFWwindow *window, float opacity)
+void glfwIconifyWindow (GLFWwindow *window)
+void glfwRestoreWindow (GLFWwindow *window)
+void glfwMaximizeWindow (GLFWwindow *window)
+void glfwShowWindow (GLFWwindow *window)
+void glfwHideWindow (GLFWwindow *window)
+void glfwFocusWindow (GLFWwindow *window)
+void glfwRequestWindowAttention (GLFWwindow *window)
+GLFWmonitor * glfwGetWindowMonitor (GLFWwindow *window)
+void glfwSetWindowMonitor (GLFWwindow *window, GLFWmonitor *monitor, int xpos, int ypos, int width, int height, int refreshRate)
+int glfwGetWindowAttrib (GLFWwindow *window, int attrib)
+void glfwSetWindowAttrib (GLFWwindow *window, int attrib, int value)
+void glfwSetWindowUserPointer (GLFWwindow *window, void *pointer)
+void * glfwGetWindowUserPointer (GLFWwindow *window)
+GLFWwindowposfun glfwSetWindowPosCallback (GLFWwindow *window, GLFWwindowposfun callback)
+GLFWwindowsizefun glfwSetWindowSizeCallback (GLFWwindow *window, GLFWwindowsizefun callback)
+GLFWwindowclosefun glfwSetWindowCloseCallback (GLFWwindow *window, GLFWwindowclosefun callback)
+GLFWwindowrefreshfun glfwSetWindowRefreshCallback (GLFWwindow *window, GLFWwindowrefreshfun callback)
+GLFWwindowfocusfun glfwSetWindowFocusCallback (GLFWwindow *window, GLFWwindowfocusfun callback)
+GLFWwindowiconifyfun glfwSetWindowIconifyCallback (GLFWwindow *window, GLFWwindowiconifyfun callback)
+GLFWwindowmaximizefun glfwSetWindowMaximizeCallback (GLFWwindow *window, GLFWwindowmaximizefun callback)
+GLFWframebuffersizefun glfwSetFramebufferSizeCallback (GLFWwindow *window, GLFWframebuffersizefun callback)
+GLFWwindowcontentscalefun glfwSetWindowContentScaleCallback (GLFWwindow *window, GLFWwindowcontentscalefun callback)
+void glfwPollEvents ()
+void glfwWaitEvents ()
+void glfwWaitEventsTimeout (double timeout)
+void glfwPostEmptyEvent ()
+void glfwSwapBuffers (GLFWwindow *window)
diff --git a/src/glfw/bind.bind b/src/glfw/bind.bind
new file mode 100644
index 0000000..b75587a
--- /dev/null
+++ b/src/glfw/bind.bind
@@ -0,0 +1,439 @@
+int glfwDefaultWindowHints_bind(lua_State *L)
+{
+ glfwDefaultWindowHints();
+ return 0;
+}
+
+
+int glfwWindowHint_bind(lua_State *L)
+{
+ int hint = luaL_checkinteger(L, 1);
+ int value = luaL_checkinteger(L, 2);
+ glfwWindowHint(hint, value);
+ return 0;
+}
+
+
+int glfwWindowHintString_bind(lua_State *L)
+{
+ int hint = luaL_checkinteger(L, 1);
+ const char * value = luaL_checkstring(L, 2);
+ glfwWindowHintString(hint, value);
+ return 0;
+}
+
+
+int glfwCreateWindow_bind(lua_State *L)
+{
+ int width = luaL_checkinteger(L, 1);
+ int height = luaL_checkinteger(L, 2);
+ const char * title = luaL_checkstring(L, 3);
+ GLFWmonitor * monitor = get: GLFWmonitor *
+ GLFWwindow * share = get: GLFWwindow *
+ GLFWwindow * bind_result = glfwCreateWindow(width, height, title, monitor, share);
+ /* push result */
+ return /* count */;
+}
+
+
+int glfwDestroyWindow_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ glfwDestroyWindow(window);
+ return 0;
+}
+
+
+int glfwWindowShouldClose_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ int bind_result = glfwWindowShouldClose(window);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glfwSetWindowShouldClose_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ int value = luaL_checkinteger(L, 2);
+ glfwSetWindowShouldClose(window, value);
+ return 0;
+}
+
+
+int glfwSetWindowTitle_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ const char * title = luaL_checkstring(L, 2);
+ glfwSetWindowTitle(window, title);
+ return 0;
+}
+
+
+int glfwSetWindowIcon_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ int count = luaL_checkinteger(L, 2);
+ const GLFWimage * images = get: const GLFWimage *
+ glfwSetWindowIcon(window, count, images);
+ return 0;
+}
+
+
+int glfwGetWindowPos_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ int * xpos = get: int *
+ int * ypos = get: int *
+ glfwGetWindowPos(window, xpos, ypos);
+ return 0;
+}
+
+
+int glfwSetWindowPos_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ int xpos = luaL_checkinteger(L, 2);
+ int ypos = luaL_checkinteger(L, 3);
+ glfwSetWindowPos(window, xpos, ypos);
+ return 0;
+}
+
+
+int glfwGetWindowSize_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ int * width = get: int *
+ int * height = get: int *
+ glfwGetWindowSize(window, width, height);
+ return 0;
+}
+
+
+int glfwSetWindowSizeLimits_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ int minwidth = luaL_checkinteger(L, 2);
+ int minheight = luaL_checkinteger(L, 3);
+ int maxwidth = luaL_checkinteger(L, 4);
+ int maxheight = luaL_checkinteger(L, 5);
+ glfwSetWindowSizeLimits(window, minwidth, minheight, maxwidth, maxheight);
+ return 0;
+}
+
+
+int glfwSetWindowAspectRatio_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ int numer = luaL_checkinteger(L, 2);
+ int denom = luaL_checkinteger(L, 3);
+ glfwSetWindowAspectRatio(window, numer, denom);
+ return 0;
+}
+
+
+int glfwSetWindowSize_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ int width = luaL_checkinteger(L, 2);
+ int height = luaL_checkinteger(L, 3);
+ glfwSetWindowSize(window, width, height);
+ return 0;
+}
+
+
+int glfwGetFramebufferSize_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ int * width = get: int *
+ int * height = get: int *
+ glfwGetFramebufferSize(window, width, height);
+ return 0;
+}
+
+
+int glfwGetWindowFrameSize_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ int * left = get: int *
+ int * top = get: int *
+ int * right = get: int *
+ int * bottom = get: int *
+ glfwGetWindowFrameSize(window, left, top, right, bottom);
+ return 0;
+}
+
+
+int glfwGetWindowContentScale_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ float * xscale = get: float *
+ float * yscale = get: float *
+ glfwGetWindowContentScale(window, xscale, yscale);
+ return 0;
+}
+
+
+int glfwGetWindowOpacity_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ float bind_result = glfwGetWindowOpacity(window);
+ lua_pushnumber(L, bind_result);
+ return 1;
+}
+
+
+int glfwSetWindowOpacity_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ float opacity = luaL_checknumber(L, 2);
+ glfwSetWindowOpacity(window, opacity);
+ return 0;
+}
+
+
+int glfwIconifyWindow_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ glfwIconifyWindow(window);
+ return 0;
+}
+
+
+int glfwRestoreWindow_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ glfwRestoreWindow(window);
+ return 0;
+}
+
+
+int glfwMaximizeWindow_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ glfwMaximizeWindow(window);
+ return 0;
+}
+
+
+int glfwShowWindow_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ glfwShowWindow(window);
+ return 0;
+}
+
+
+int glfwHideWindow_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ glfwHideWindow(window);
+ return 0;
+}
+
+
+int glfwFocusWindow_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ glfwFocusWindow(window);
+ return 0;
+}
+
+
+int glfwRequestWindowAttention_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ glfwRequestWindowAttention(window);
+ return 0;
+}
+
+
+int glfwGetWindowMonitor_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ GLFWmonitor * bind_result = glfwGetWindowMonitor(window);
+ /* push result */
+ return /* count */;
+}
+
+
+int glfwSetWindowMonitor_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ GLFWmonitor * monitor = get: GLFWmonitor *
+ int xpos = luaL_checkinteger(L, 3);
+ int ypos = luaL_checkinteger(L, 4);
+ int width = luaL_checkinteger(L, 5);
+ int height = luaL_checkinteger(L, 6);
+ int refreshRate = luaL_checkinteger(L, 7);
+ glfwSetWindowMonitor(window, monitor, xpos, ypos, width, height, refreshRate);
+ return 0;
+}
+
+
+int glfwGetWindowAttrib_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ int attrib = luaL_checkinteger(L, 2);
+ int bind_result = glfwGetWindowAttrib(window, attrib);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glfwSetWindowAttrib_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ int attrib = luaL_checkinteger(L, 2);
+ int value = luaL_checkinteger(L, 3);
+ glfwSetWindowAttrib(window, attrib, value);
+ return 0;
+}
+
+
+int glfwSetWindowUserPointer_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ void * pointer = get: void *
+ glfwSetWindowUserPointer(window, pointer);
+ return 0;
+}
+
+
+int glfwGetWindowUserPointer_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ void * bind_result = glfwGetWindowUserPointer(window);
+ /* push result */
+ return /* count */;
+}
+
+
+int glfwSetWindowPosCallback_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ GLFWwindowposfun callback = get: GLFWwindowposfun
+ GLFWwindowposfun bind_result = glfwSetWindowPosCallback(window, callback);
+ /* push result */
+ return /* count */;
+}
+
+
+int glfwSetWindowSizeCallback_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ GLFWwindowsizefun callback = get: GLFWwindowsizefun
+ GLFWwindowsizefun bind_result = glfwSetWindowSizeCallback(window, callback);
+ /* push result */
+ return /* count */;
+}
+
+
+int glfwSetWindowCloseCallback_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ GLFWwindowclosefun callback = get: GLFWwindowclosefun
+ GLFWwindowclosefun bind_result = glfwSetWindowCloseCallback(window, callback);
+ /* push result */
+ return /* count */;
+}
+
+
+int glfwSetWindowRefreshCallback_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ GLFWwindowrefreshfun callback = get: GLFWwindowrefreshfun
+ GLFWwindowrefreshfun bind_result = glfwSetWindowRefreshCallback(window, callback);
+ /* push result */
+ return /* count */;
+}
+
+
+int glfwSetWindowFocusCallback_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ GLFWwindowfocusfun callback = get: GLFWwindowfocusfun
+ GLFWwindowfocusfun bind_result = glfwSetWindowFocusCallback(window, callback);
+ /* push result */
+ return /* count */;
+}
+
+
+int glfwSetWindowIconifyCallback_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ GLFWwindowiconifyfun callback = get: GLFWwindowiconifyfun
+ GLFWwindowiconifyfun bind_result = glfwSetWindowIconifyCallback(window, callback);
+ /* push result */
+ return /* count */;
+}
+
+
+int glfwSetWindowMaximizeCallback_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ GLFWwindowmaximizefun callback = get: GLFWwindowmaximizefun
+ GLFWwindowmaximizefun bind_result = glfwSetWindowMaximizeCallback(window, callback);
+ /* push result */
+ return /* count */;
+}
+
+
+int glfwSetFramebufferSizeCallback_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ GLFWframebuffersizefun callback = get: GLFWframebuffersizefun
+ GLFWframebuffersizefun bind_result = glfwSetFramebufferSizeCallback(window, callback);
+ /* push result */
+ return /* count */;
+}
+
+
+int glfwSetWindowContentScaleCallback_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ GLFWwindowcontentscalefun callback = get: GLFWwindowcontentscalefun
+ GLFWwindowcontentscalefun bind_result = glfwSetWindowContentScaleCallback(window, callback);
+ /* push result */
+ return /* count */;
+}
+
+
+int glfwPollEvents_bind(lua_State *L)
+{
+ glfwPollEvents();
+ return 0;
+}
+
+
+int glfwWaitEvents_bind(lua_State *L)
+{
+ glfwWaitEvents();
+ return 0;
+}
+
+
+int glfwWaitEventsTimeout_bind(lua_State *L)
+{
+ double timeout = luaL_checknumber(L, 1);
+ glfwWaitEventsTimeout(timeout);
+ return 0;
+}
+
+
+int glfwPostEmptyEvent_bind(lua_State *L)
+{
+ glfwPostEmptyEvent();
+ return 0;
+}
+
+
+int glfwSwapBuffers_bind(lua_State *L)
+{
+ GLFWwindow * window = get: GLFWwindow *
+ glfwSwapBuffers(window);
+ return 0;
+}
+
+
diff --git a/src/glfw/context.c b/src/glfw/context.c
new file mode 100644
index 0000000..e22533e
--- /dev/null
+++ b/src/glfw/context.c
@@ -0,0 +1,49 @@
+#include <lua.h>
+#include <lauxlib.h>
+#include <GLFW/glfw3.h>
+#include "setup.h"
+
+
+int glfwMakeContextCurrent_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ glfwMakeContextCurrent(*window);
+ return 0;
+}
+
+
+int glfwGetCurrentContext_bind(lua_State *L)
+{
+ GLFWwindow * bind_result = glfwGetCurrentContext();
+ struct h_glfw_window_data_t *data = glfwGetWindowUserPointer(bind_result);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ return 1;
+}
+
+
+int glfwSwapInterval_bind(lua_State *L)
+{
+ int interval = luaL_checkinteger(L, 1);
+ glfwSwapInterval(interval);
+ return 0;
+}
+
+
+int glfwExtensionSupported_bind(lua_State *L)
+{
+ const char * extension = luaL_checkstring(L, 1);
+ int bind_result = glfwExtensionSupported(extension);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glfwGetProcAddress_bind(lua_State *L)
+{
+ const char * procname = luaL_checkstring(L, 1);
+ GLFWglproc bind_result = glfwGetProcAddress(procname);
+ lua_pushlightuserdata(L, bind_result);
+ return 1;
+}
+
+
diff --git a/src/glfw/init.c b/src/glfw/init.c
new file mode 100644
index 0000000..6d91d28
--- /dev/null
+++ b/src/glfw/init.c
@@ -0,0 +1,58 @@
+#include <lua.h>
+#include <lauxlib.h>
+#include <glad/glad.h>
+#include <GLFW/glfw3.h>
+#include "setup.h"
+
+
+int glfwInit_bind(lua_State *L)
+{
+ int bind_result = glfwInit();
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glfwTerminate_bind(lua_State *L)
+{
+ glfwTerminate();
+ return 0;
+}
+
+
+int glfwInitHint_bind(lua_State *L)
+{
+ int hint = luaL_checkinteger(L, 1);
+ int value = luaL_checkinteger(L, 2);
+ glfwInitHint(hint, value);
+ return 0;
+}
+
+
+int glfwGetVersion_bind(lua_State *L)
+{
+ int major, minor, rev;
+ glfwGetVersion(&major, &minor, &rev);
+ lua_pushinteger(L, major);
+ lua_pushinteger(L, minor);
+ lua_pushinteger(L, rev);
+ return 3;
+}
+
+
+int glfwGetVersionString_bind(lua_State *L)
+{
+ const char * bind_result = glfwGetVersionString();
+ lua_pushstring(L, bind_result);
+ return 1;
+}
+
+
+int glfwGetError_bind(lua_State *L)
+{
+ const char * description;
+ int bind_result = glfwGetError(&description);
+ lua_pushinteger(L, bind_result);
+ lua_pushstring(L, description);
+ return 2;
+}
diff --git a/src/glfw/input.c b/src/glfw/input.c
new file mode 100644
index 0000000..4233d56
--- /dev/null
+++ b/src/glfw/input.c
@@ -0,0 +1,586 @@
+#include <lua.h>
+#include <lauxlib.h>
+#include <GLFW/glfw3.h>
+#include "setup.h"
+
+
+int glfwGetInputMode_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int mode = luaL_checkinteger(L, 2);
+ int bind_result = glfwGetInputMode(*window, mode);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glfwSetInputMode_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int mode = luaL_checkinteger(L, 2);
+ int value = luaL_checkinteger(L, 3);
+ glfwSetInputMode(*window, mode, value);
+ return 0;
+}
+
+
+int glfwRawMouseMotionSupported_bind(lua_State *L)
+{
+ int bind_result = glfwRawMouseMotionSupported();
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glfwGetKeyName_bind(lua_State *L)
+{
+ int key = luaL_checkinteger(L, 1);
+ int scancode = luaL_checkinteger(L, 2);
+ const char * bind_result = glfwGetKeyName(key, scancode);
+ lua_pushstring(L, bind_result);
+ return 1;
+}
+
+
+int glfwGetKeyScancode_bind(lua_State *L)
+{
+ int key = luaL_checkinteger(L, 1);
+ int bind_result = glfwGetKeyScancode(key);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glfwGetKey_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int key = luaL_checkinteger(L, 2);
+ int bind_result = glfwGetKey(*window, key);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glfwGetMouseButton_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int button = luaL_checkinteger(L, 2);
+ int bind_result = glfwGetMouseButton(*window, button);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glfwGetCursorPos_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ double xpos, ypos;
+ glfwGetCursorPos(*window, &xpos, &ypos);
+ lua_pushnumber(L, xpos);
+ lua_pushnumber(L, ypos);
+ return 2;
+}
+
+
+int glfwSetCursorPos_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ double xpos = luaL_checknumber(L, 2);
+ double ypos = luaL_checknumber(L, 3);
+ glfwSetCursorPos(*window, xpos, ypos);
+ return 0;
+}
+
+
+static GLFWcursor ** create_cursor(lua_State *L)
+{
+ GLFWcursor **cursor = lua_newuserdata(L, sizeof(GLFWcursor *));
+ luaL_getmetatable(L, glfw_cursor_tname);
+ lua_setmetatable(L, -2);
+}
+
+int glfwCreateCursor_bind(lua_State *L)
+{
+ const GLFWimage * image = lua_touserdata(L, 1);
+ int xhot = luaL_checkinteger(L, 2);
+ int yhot = luaL_checkinteger(L, 3);
+
+ GLFWcursor **cursor = create_cursor(L);
+ *cursor = glfwCreateCursor(image, xhot, yhot);
+ return 1;
+}
+
+
+int glfwCreateStandardCursor_bind(lua_State *L)
+{
+ int shape = luaL_checkinteger(L, 1);
+ GLFWcursor **cursor = create_cursor(L);
+ *cursor = glfwCreateStandardCursor(shape);
+ return 1;
+}
+
+
+int glfwDestroyCursor_bind(lua_State *L)
+{
+ GLFWcursor ** cursor = luaL_checkudata(L, 1, glfw_cursor_tname);
+ glfwDestroyCursor(*cursor);
+ return 0;
+}
+
+
+int glfwSetCursor_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ GLFWcursor ** cursor = luaL_checkudata(L, 2, glfw_cursor_tname);
+ glfwSetCursor(*window, *cursor);
+ return 0;
+}
+
+
+/* helpers for creating callback setter binds */
+static GLFWwindow ** check_callback_args(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int type = lua_type(L, 2);
+ if (type == LUA_TNIL || type == LUA_TFUNCTION) {
+ return window;
+ }
+ else {
+ luaL_typerror(L, 2, "nil or function");
+ }
+}
+
+#define SET_CALLBACK(L, win, setter, cb, key) \
+do { \
+ /* get window data */ \
+ struct h_glfw_window_data_t *data = glfwGetWindowUserPointer(win); \
+ \
+ /* push old callback */ \
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->key); \
+ \
+ /* set new callback */ \
+ if (lua_isnil(L, 2)) { \
+ /* new "callback" is nil, unset */ \
+ setter(win, NULL); \
+ data->key = LUA_NOREF; \
+ } \
+ else { \
+ /* new callback is function */ \
+ setter(win, cb); \
+ lua_pushvalue(L, 2); \
+ data->key = luaL_ref(L, LUA_REGISTRYINDEX); \
+ } \
+} while(0)
+
+#define RETRIEVE_CALLBACK(win, key) \
+struct h_glfw_window_data_t *data = glfwGetWindowUserPointer(win); \
+if (data->key == LUA_NOREF) { return; } \
+lua_State *L = data->L; \
+lua_rawgeti(L, LUA_REGISTRYINDEX, data->key);
+
+
+static void h_key_cb(
+ GLFWwindow *window,
+ int key, int scancode,
+ int action, int mods)
+{
+ RETRIEVE_CALLBACK(window, key_cb_ref);
+ /* push arguments */
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_pushinteger(L, key);
+ lua_pushinteger(L, scancode);
+ lua_pushinteger(L, action);
+ lua_pushinteger(L, mods);
+ /* call */
+ lua_call(L, 5, 0);
+}
+int glfwSetKeyCallback_bind(lua_State *L)
+{
+ GLFWwindow **window = check_callback_args(L);
+ SET_CALLBACK(
+ L, *window,
+ glfwSetKeyCallback,
+ h_key_cb, key_cb_ref
+ );
+ return 1;
+}
+
+
+static void h_char_cb(GLFWwindow *window, unsigned int codepoint)
+{
+ RETRIEVE_CALLBACK(window, char_cb_ref);
+ /* push arguments */
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_pushinteger(L, codepoint);
+ /* call */
+ lua_call(L, 2, 0);
+}
+int glfwSetCharCallback_bind(lua_State *L)
+{
+ GLFWwindow **window = check_callback_args(L);
+ SET_CALLBACK(
+ L, *window,
+ glfwSetCharCallback,
+ h_char_cb, char_cb_ref
+ );
+ return 1;
+}
+
+
+static void h_char_mods_cb(GLFWwindow *window, unsigned int codepoint, int mods)
+{
+ RETRIEVE_CALLBACK(window, char_mods_cb_ref);
+ /* push arguments */
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_pushinteger(L, codepoint);
+ lua_pushinteger(L, mods);
+ /* call */
+ lua_call(L, 3, 0);
+}
+int glfwSetCharModsCallback_bind(lua_State *L)
+{
+ GLFWwindow **window = check_callback_args(L);
+ SET_CALLBACK(
+ L, *window,
+ glfwSetCharModsCallback,
+ h_char_mods_cb, char_mods_cb_ref
+ );
+ return 1;
+}
+
+
+static void h_mouse_button_cb(GLFWwindow *window, int button, int action, int mods)
+{
+ RETRIEVE_CALLBACK(window, char_mods_cb_ref);
+ /* push arguments */
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_pushinteger(L, button);
+ lua_pushinteger(L, action);
+ lua_pushinteger(L, mods);
+ /* call */
+ lua_call(L, 4, 0);
+}
+int glfwSetMouseButtonCallback_bind(lua_State *L)
+{
+ GLFWwindow **window = check_callback_args(L);
+ SET_CALLBACK(
+ L, *window,
+ glfwSetMouseButtonCallback,
+ h_mouse_button_cb, mouse_button_cb_ref
+ );
+ return 1;
+}
+
+
+static void h_cursor_pos_cb(GLFWwindow *window, double xpos, double ypos)
+{
+ RETRIEVE_CALLBACK(window, cursor_pos_cb_ref);
+ /* push_arguments */
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_pushnumber(L, xpos);
+ lua_pushnumber(L, ypos);
+ /* call */
+ lua_call(L, 3, 0);
+}
+int glfwSetCursorPosCallback_bind(lua_State *L)
+{
+ GLFWwindow **window = check_callback_args(L);
+ SET_CALLBACK(
+ L, *window,
+ glfwSetCursorPosCallback,
+ h_cursor_pos_cb, cursor_pos_cb_ref
+ );
+ return 1;
+}
+
+
+static void h_cursor_enter_cb(GLFWwindow *window, int entered)
+{
+ RETRIEVE_CALLBACK(window, cursor_enter_cb_ref);
+ /* push_arguments */
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_pushinteger(L, entered);
+ /* call */
+ lua_call(L, 2, 0);
+}
+int glfwSetCursorEnterCallback_bind(lua_State *L)
+{
+ GLFWwindow **window = check_callback_args(L);
+ SET_CALLBACK(
+ L, *window,
+ glfwSetCursorEnterCallback,
+ h_cursor_enter_cb, cursor_enter_cb_ref
+ );
+ return 1;
+}
+
+
+static void h_scroll_cb(GLFWwindow *window, double xoffset, double yoffset)
+{
+ RETRIEVE_CALLBACK(window, scroll_cb_ref);
+ /* push_arguments */
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_pushnumber(L, xoffset);
+ lua_pushnumber(L, yoffset);
+ /* call */
+ lua_call(L, 3, 0);
+
+}
+int glfwSetScrollCallback_bind(lua_State *L)
+{
+ GLFWwindow **window = check_callback_args(L);
+ SET_CALLBACK(
+ L, *window,
+ glfwSetScrollCallback,
+ h_scroll_cb, scroll_cb_ref
+ );
+ return 1;
+}
+
+
+static void h_drop_cb(GLFWwindow *window, int path_count, const char **paths)
+{
+ RETRIEVE_CALLBACK(window, drop_cb_ref);
+ /* push_arguments */
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_createtable(L, path_count, 0);
+ int tbl = lua_gettop(L);
+ for (int i=0; i<path_count; i++) {
+ lua_pushstring(L, paths[i]);
+ lua_rawseti(L, tbl, i+1);
+ }
+ /* call */
+ lua_call(L, 2, 0);
+
+}
+int glfwSetDropCallback_bind(lua_State *L)
+{
+ GLFWwindow **window = check_callback_args(L);
+ SET_CALLBACK(
+ L, *window,
+ glfwSetDropCallback,
+ h_drop_cb, drop_cb_ref
+ );
+ return 1;
+}
+
+
+int glfwJoystickPresent_bind(lua_State *L)
+{
+ int jid = luaL_checkinteger(L, 1);
+ int bind_result = glfwJoystickPresent(jid);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glfwGetJoystickAxes_bind(lua_State *L)
+{
+ int jid = luaL_checkinteger(L, 1);
+ int count;
+ const float * bind_result = glfwGetJoystickAxes(jid, &count);
+
+ lua_createtable(L, count, 0);
+ int tbl = lua_gettop(L);
+ for (int i=0; i<count; i++) {
+ lua_pushnumber(L, bind_result[i]);
+ lua_rawseti(L, tbl, i+1);
+ }
+ return 1;
+}
+
+
+int glfwGetJoystickButtons_bind(lua_State *L)
+{
+ int jid = luaL_checkinteger(L, 1);
+ int count;
+ const unsigned char * bind_result = glfwGetJoystickButtons(jid, &count);
+
+ lua_createtable(L, count, 0);
+ int tbl = lua_gettop(L);
+ for (int i=0; i<count; i++) {
+ lua_pushinteger(L, bind_result[i]);
+ lua_rawseti(L, tbl, i+1);
+ }
+ return 1;
+}
+
+
+int glfwGetJoystickHats_bind(lua_State *L)
+{
+ int jid = luaL_checkinteger(L, 1);
+ int count;
+ const unsigned char * bind_result = glfwGetJoystickHats(jid, &count);
+
+ lua_createtable(L, count, 0);
+ int tbl = lua_gettop(L);
+ for (int i=0; i<count; i++) {
+ lua_pushinteger(L, bind_result[i]);
+ lua_rawseti(L, tbl, i+1);
+ }
+ return 1;
+}
+
+
+int glfwGetJoystickName_bind(lua_State *L)
+{
+ int jid = luaL_checkinteger(L, 1);
+ const char * bind_result = glfwGetJoystickName(jid);
+ lua_pushstring(L, bind_result);
+ return 1;
+}
+
+
+int glfwGetJoystickGUID_bind(lua_State *L)
+{
+ int jid = luaL_checkinteger(L, 1);
+ const char * bind_result = glfwGetJoystickGUID(jid);
+ lua_pushstring(L, bind_result);
+ return 1;
+}
+
+
+int glfwJoystickIsGamepad_bind(lua_State *L)
+{
+ int jid = luaL_checkinteger(L, 1);
+ int bind_result = glfwJoystickIsGamepad(jid);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+struct h_js_data_t {
+ lua_State *L;
+ int cb_ref;
+} static h_js_data = { NULL, LUA_NOREF };
+static void h_joystick_cb(int jid, int event)
+{
+ if (h_js_data.cb_ref == LUA_NOREF) { return; }
+
+ lua_State *L = h_js_data.L;
+ lua_rawgeti(L, LUA_REGISTRYINDEX, h_js_data.cb_ref);
+ lua_pushinteger(L, jid);
+ lua_pushinteger(L, event);
+ lua_call(L, 2, 0);
+}
+int glfwSetJoystickCallback_bind(lua_State *L)
+{
+ int type = lua_type(L, 1);
+ if (type != LUA_TNIL && type != LUA_TFUNCTION) {
+ return luaL_typerror(L, 1, "function or nil");
+ }
+
+ /* push old cb */
+ h_js_data.L = L;
+ lua_rawgeti(L, LUA_REGISTRYINDEX, h_js_data.cb_ref);
+
+ /* set new cb */
+ if (type == LUA_TNIL) {
+ glfwSetJoystickCallback(NULL);
+ h_js_data.cb_ref = LUA_NOREF;
+ }
+ else {
+ glfwSetJoystickCallback(h_joystick_cb);
+ lua_pushvalue(L, 1);
+ h_js_data.cb_ref = luaL_ref(L, LUA_REGISTRYINDEX);
+ }
+
+ return 1;
+}
+
+
+int glfwUpdateGamepadMappings_bind(lua_State *L)
+{
+ const char * string = luaL_checkstring(L, 1);
+ int bind_result = glfwUpdateGamepadMappings(string);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glfwGetGamepadName_bind(lua_State *L)
+{
+ int jid = luaL_checkinteger(L, 1);
+ const char * bind_result = glfwGetGamepadName(jid);
+ lua_pushstring(L, bind_result);
+ return 1;
+}
+
+
+int glfwGetGamepadState_bind(lua_State *L)
+{
+ int jid = luaL_checkinteger(L, 1);
+ GLFWgamepadstate state;
+ int bind_result = glfwGetGamepadState(jid, &state);
+ lua_pushinteger(L, bind_result);
+ if (bind_result == GLFW_FALSE) {
+ lua_pushnil(L);
+ lua_pushnil(L);
+ }
+ else {
+ lua_createtable(L, 15, 0);
+ int buttons = lua_gettop(L);
+ for (int i=0; i<15; i++) {
+ lua_pushinteger(L, state.buttons[i]);
+ lua_rawseti(L, buttons, i+1);
+ }
+ lua_createtable(L, 6, 0);
+ int axes = lua_gettop(L);
+ for (int i=0; i<6; i++) {
+ lua_pushnumber(L, state.axes[i]);
+ lua_rawseti(L, axes, i+1);
+ }
+ }
+
+ return 3;
+}
+
+
+int glfwSetClipboardString_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ const char * string = luaL_checkstring(L, 2);
+ glfwSetClipboardString(*window, string);
+ return 0;
+}
+
+
+int glfwGetClipboardString_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ const char * bind_result = glfwGetClipboardString(*window);
+ lua_pushstring(L, bind_result);
+ return 1;
+}
+
+
+int glfwGetTime_bind(lua_State *L)
+{
+ double bind_result = glfwGetTime();
+ lua_pushnumber(L, bind_result);
+ return 1;
+}
+
+
+int glfwSetTime_bind(lua_State *L)
+{
+ double time = luaL_checknumber(L, 1);
+ glfwSetTime(time);
+ return 0;
+}
+
+
+int glfwGetTimerValue_bind(lua_State *L)
+{
+ uint64_t bind_result = glfwGetTimerValue();
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glfwGetTimerFrequency_bind(lua_State *L)
+{
+ uint64_t bind_result = glfwGetTimerFrequency();
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
diff --git a/src/glfw/monitor.c b/src/glfw/monitor.c
new file mode 100644
index 0000000..0f1b3fc
--- /dev/null
+++ b/src/glfw/monitor.c
@@ -0,0 +1,250 @@
+#include <stdlib.h>
+#include <lua.h>
+#include <lauxlib.h>
+#include <GLFW/glfw3.h>
+#include "setup.h"
+
+
+GLFWmonitor ** create_monitor(lua_State *L)
+{
+ GLFWmonitor ** monitor = lua_newuserdata(L, sizeof(GLFWmonitor *));
+ luaL_getmetatable(L, glfw_monitor_tname);
+ lua_setmetatable(L, -2);
+ return monitor;
+}
+
+int glfwGetMonitors_bind(lua_State *L)
+{
+ int count;
+ GLFWmonitor ** bind_result = glfwGetMonitors(&count);
+ lua_createtable(L, count, 0);
+ int tbl = lua_gettop(L);
+ for (int i=0; i<count; i++) {
+ GLFWmonitor **monitor = create_monitor(L);
+ *monitor = bind_result[i];
+ lua_rawseti(L, tbl, i+1);
+ }
+ return 1;
+}
+
+
+int glfwGetPrimaryMonitor_bind(lua_State *L)
+{
+ GLFWmonitor **monitor = create_monitor(L);
+ *monitor = glfwGetPrimaryMonitor();
+ return 1;
+}
+
+
+int glfwGetMonitorPos_bind(lua_State *L)
+{
+ GLFWmonitor * monitor = luaL_checkudata(L, 1, glfw_monitor_tname);
+ int xpos, ypos;
+ glfwGetMonitorPos(monitor, &xpos, &ypos);
+ lua_pushinteger(L, xpos);
+ lua_pushinteger(L, ypos);
+ return 2;
+}
+
+
+int glfwGetMonitorWorkarea_bind(lua_State *L)
+{
+ GLFWmonitor * monitor = luaL_checkudata(L, 1, glfw_monitor_tname);
+ int xpos, ypos, width, height;
+ glfwGetMonitorWorkarea(monitor, &xpos, &ypos, &width, &height);
+ lua_pushinteger(L, xpos);
+ lua_pushinteger(L, ypos);
+ lua_pushinteger(L, width);
+ lua_pushinteger(L, height);
+ return 4;
+}
+
+
+int glfwGetMonitorPhysicalSize_bind(lua_State *L)
+{
+ GLFWmonitor * monitor = luaL_checkudata(L, 1, glfw_monitor_tname);
+ int widthMM, heightMM;
+ glfwGetMonitorPhysicalSize(monitor, &widthMM, &heightMM);
+ lua_pushinteger(L, widthMM);
+ lua_pushinteger(L, heightMM);
+ return 2;
+}
+
+
+int glfwGetMonitorContentScale_bind(lua_State *L)
+{
+ GLFWmonitor * monitor = luaL_checkudata(L, 1, glfw_monitor_tname);
+ float xscale, yscale;
+ glfwGetMonitorContentScale(monitor, &xscale, &yscale);
+ lua_pushnumber(L, xscale);
+ lua_pushnumber(L, yscale);
+ return 2;
+}
+
+
+int glfwGetMonitorName_bind(lua_State *L)
+{
+ GLFWmonitor * monitor = luaL_checkudata(L, 1, glfw_monitor_tname);
+ const char * bind_result = glfwGetMonitorName(monitor);
+ lua_pushstring(L, bind_result);
+ return 1;
+}
+
+
+struct h_glfw_monitor_data_t {
+ lua_State *L;
+ int cb_ref;
+} static h_monitor_data = { NULL, LUA_NOREF };
+static void h_monitor_cb(GLFWmonitor *monitor, int event)
+{
+ if (h_monitor_data.cb_ref == LUA_NOREF) { return; }
+
+ lua_State *L = h_monitor_data.L;
+ lua_rawgeti(L, LUA_REGISTRYINDEX, h_monitor_data.cb_ref);
+ GLFWmonitor **m = create_monitor(L);
+ *m = monitor;
+ lua_pushinteger(L, event);
+ lua_call(L, 2, 0);
+}
+
+int glfwSetMonitorCallback_bind(lua_State *L)
+{
+ int type = lua_type(L, 1);
+ if (type != LUA_TNIL && type != LUA_TFUNCTION) {
+ return luaL_typerror(L, 1, "function or nil");
+ }
+
+ /* push old cb */
+ h_monitor_data.L = L;
+ lua_rawgeti(L, LUA_REGISTRYINDEX, h_monitor_data.cb_ref);
+
+ /* set new cb */
+ if (type == LUA_TNIL) {
+ glfwSetMonitorCallback(NULL);
+ h_monitor_data.cb_ref = LUA_NOREF;
+ }
+ else {
+ glfwSetMonitorCallback(h_monitor_cb);
+ lua_pushvalue(L, 1);
+ h_monitor_data.cb_ref = luaL_ref(L, LUA_REGISTRYINDEX);
+ }
+
+ return 1;
+}
+
+
+static void push_vidmode(lua_State *L, GLFWvidmode mode)
+{
+ lua_createtable(L, 0, 6);
+ int tbl = lua_gettop(L);
+
+ lua_pushinteger(L, mode.width);
+ lua_setfield(L, tbl, "width");
+ lua_pushinteger(L, mode.height);
+ lua_setfield(L, tbl, "height");
+ lua_pushinteger(L, mode.redBits);
+ lua_setfield(L, tbl, "redBits");
+ lua_pushinteger(L, mode.greenBits);
+ lua_setfield(L, tbl, "greenBits");
+ lua_pushinteger(L, mode.blueBits);
+ lua_setfield(L, tbl, "blueBits");
+ lua_pushinteger(L, mode.refreshRate);
+ lua_setfield(L, tbl, "refreshRate");
+}
+int glfwGetVideoModes_bind(lua_State *L)
+{
+ GLFWmonitor * monitor = luaL_checkudata(L, 1, glfw_monitor_tname);
+ int count;
+ const GLFWvidmode * bind_result = glfwGetVideoModes(monitor, &count);
+
+ lua_createtable(L, count, 0);
+ int tbl = lua_gettop(L);
+ for (int i=0; i<count; i++) {
+ push_vidmode(L, bind_result[i]);
+ lua_rawseti(L, tbl, i+1);
+ }
+ return 1;
+}
+
+
+int glfwGetVideoMode_bind(lua_State *L)
+{
+ GLFWmonitor * monitor = luaL_checkudata(L, 1, glfw_monitor_tname);
+ const GLFWvidmode * bind_result = glfwGetVideoMode(monitor);
+ push_vidmode(L, *bind_result);
+ return 1;
+}
+
+
+int glfwSetGamma_bind(lua_State *L)
+{
+ GLFWmonitor * monitor = luaL_checkudata(L, 1, glfw_monitor_tname);
+ float gamma = luaL_checknumber(L, 2);
+ glfwSetGamma(monitor, gamma);
+ return 0;
+}
+
+
+int glfwGetGammaRamp_bind(lua_State *L)
+{
+ GLFWmonitor * monitor = luaL_checkudata(L, 1, glfw_monitor_tname);
+ const GLFWgammaramp * ramp = glfwGetGammaRamp(monitor);
+ lua_createtable(L, ramp->size, 0);
+ int ramp_tbl = lua_gettop(L);
+ for (int i=0; i<ramp->size; i++) {
+ lua_createtable(L, 3, 0);
+ int tbl = lua_gettop(L);
+ lua_pushinteger(L, ramp->red[i]);
+ lua_rawseti(L, tbl, 1);
+ lua_pushinteger(L, ramp->green[i]);
+ lua_rawseti(L, tbl, 2);
+ lua_pushinteger(L, ramp->blue[i]);
+ lua_rawseti(L, tbl, 3);
+ lua_rawseti(L, ramp_tbl, i+1);
+ }
+
+ return 1;
+}
+
+
+int glfwSetGammaRamp_bind(lua_State *L)
+{
+ GLFWmonitor * monitor = luaL_checkudata(L, 1, glfw_monitor_tname);
+ luaL_checktype(L, 2, LUA_TTABLE);
+
+ GLFWgammaramp ramp = { NULL, NULL, NULL, 0 };
+ size_t len = lua_objlen(L, 2);
+ ramp.red = malloc(len * sizeof(unsigned short));
+ ramp.green = malloc(len * sizeof(unsigned short));
+ ramp.blue = malloc(len * sizeof(unsigned short));
+ ramp.size = len;
+ if (
+ ramp.red == NULL ||
+ ramp.green == NULL ||
+ ramp.blue == NULL
+ ) {
+ return luaL_error(
+ L,
+ "failed to allocate one or more gamma ramp "
+ "color buffers of %lu bytes each",
+ len * sizeof(unsigned short)
+ );
+ }
+
+ for (int i=0; i<len; i++) {
+ lua_rawgeti(L, 2, i+1);
+ int tbl = lua_gettop(L);
+ lua_rawgeti(L, tbl, 1);
+ ramp.red[i] = lua_tonumber(L, -1);
+ lua_rawgeti(L, tbl, 2);
+ ramp.green[i] = lua_tonumber(L, -1);
+ lua_rawgeti(L, tbl, 3);
+ ramp.blue[i] = lua_tonumber(L, -1);
+ lua_pop(L, 4);
+ }
+
+ glfwSetGammaRamp(monitor, &ramp);
+ return 0;
+}
+
+
diff --git a/src/glfw/setup.c b/src/glfw/setup.c
new file mode 100644
index 0000000..0abab35
--- /dev/null
+++ b/src/glfw/setup.c
@@ -0,0 +1,33 @@
+#include <lua.h>
+#include <lauxlib.h>
+#include "util/util.h"
+#include "setup.h"
+
+
+#define X(str, mt) const char *glfw_ ## mt ## _tname = str;
+H_GLFW_METATABLES
+#undef X
+
+
+void setup_glfw(lua_State *L, int honey_tbl)
+{
+ /* create metatables */
+ #define X(str, mt) luaL_newmetatable(L, glfw_ ## mt ## _tname); lua_pop(L, 1);
+ H_GLFW_METATABLES
+ #undef X
+
+ struct honey_tbl_t tbl[] = {
+ #define X(name, val) H_INT(name, val),
+ H_GLFW_ENUM
+ #undef X
+
+ #define X(name, func) H_FUNC(name, func),
+ H_GLFW_FUNCTIONS
+ #undef X
+
+ H_END
+ };
+
+ create_table(L, tbl);
+ lua_setfield(L, honey_tbl, "glfw");
+}
diff --git a/src/glfw/setup.h b/src/glfw/setup.h
new file mode 100644
index 0000000..1b30728
--- /dev/null
+++ b/src/glfw/setup.h
@@ -0,0 +1,419 @@
+#ifndef HONEY_GLFW_SETUP_H
+#define HONEY_GLFW_SETUP_H
+
+#include <lua.h>
+#include <GLFW/glfw3.h>
+
+struct h_glfw_window_data_t {
+ lua_State *L;
+ int self_ref;
+
+ /* callbacks */
+ int key_cb_ref;
+ int char_cb_ref;
+ int char_mods_cb_ref;
+ int mouse_button_cb_ref;
+ int cursor_pos_cb_ref;
+ int cursor_enter_cb_ref;
+ int scroll_cb_ref;
+ int drop_cb_ref;
+ int pos_cb_ref;
+ int size_cb_ref;
+ int close_cb_ref;
+ int refresh_cb_ref;
+ int focus_cb_ref;
+ int iconify_cb_ref;
+ int maximize_cb_ref;
+ int framebuffer_size_cb_ref;
+ int content_scale_cb_ref;
+};
+
+
+GLFWmonitor ** create_monitor(lua_State *L);
+
+
+#define H_GLFW_METATABLES \
+ X("glfw.window", window) \
+ X("glfw.cursor", cursor) \
+ X("glfw.monitor", monitor) \
+
+#define X(str, name) extern const char *glfw_ ## name ## _tname;
+H_GLFW_METATABLES
+#undef X
+
+
+#define H_GLFW_FUNCTIONS \
+ /* context */ \
+ X("MakeContextCurrent", glfwMakeContextCurrent_bind) \
+ X("GetCurrentContext", glfwGetCurrentContext_bind) \
+ X("SwapInterval", glfwSwapInterval_bind) \
+ X("ExtensionSupported", glfwExtensionSupported_bind) \
+ X("GetProcAddress", glfwGetProcAddress_bind) \
+\
+ /* setup/error */ \
+ X("Init", glfwInit_bind) \
+ X("Terminate", glfwTerminate_bind) \
+ X("InitHint", glfwInitHint_bind) \
+ X("GetVersion", glfwGetVersion_bind) \
+ X("GetVersionString", glfwGetVersionString_bind) \
+ X("GetError", glfwGetError_bind) \
+\
+ /* input */ \
+ X("GetInputMode", glfwGetInputMode_bind) \
+ X("SetInputMode", glfwSetInputMode_bind) \
+ X("RawMouseMotionSupported", glfwRawMouseMotionSupported_bind) \
+ X("GetKeyName", glfwGetKeyName_bind) \
+ X("GetKeyScancode", glfwGetKeyScancode_bind) \
+ X("GetKey", glfwGetKey_bind) \
+ X("GetMouseButton", glfwGetMouseButton_bind) \
+ X("GetCursorPos", glfwGetCursorPos_bind) \
+ X("SetCursorPos", glfwSetCursorPos_bind) \
+ X("CreateCursor", glfwCreateCursor_bind) \
+ X("CreateStandardCursor", glfwCreateStandardCursor_bind) \
+ X("DestroyCursor", glfwDestroyCursor_bind) \
+ X("SetCursor", glfwSetCursor_bind) \
+ X("SetKeyCallback", glfwSetKeyCallback_bind) \
+ X("SetCharCallback", glfwSetCharCallback_bind) \
+ X("SetCharModsCallback", glfwSetCharModsCallback_bind) \
+ X("SetMouseButtonCallback", glfwSetMouseButtonCallback_bind) \
+ X("SetCursorPosCallback", glfwSetCursorPosCallback_bind) \
+ X("SetCursorEnterCallback", glfwSetCursorEnterCallback_bind) \
+ X("SetScrollCallback", glfwSetScrollCallback_bind) \
+ X("SetDropCallback", glfwSetDropCallback_bind) \
+ X("JoystickPresent", glfwJoystickPresent_bind) \
+ X("GetJoystickAxes", glfwGetJoystickAxes_bind) \
+ X("GetJoystickButtons", glfwGetJoystickButtons_bind) \
+ X("GetJoystickHats", glfwGetJoystickHats_bind) \
+ X("GetJoystickName", glfwGetJoystickName_bind) \
+ X("GetJoystickGUID", glfwGetJoystickGUID_bind) \
+ X("JoystickIsGamepad", glfwJoystickIsGamepad_bind) \
+ X("SetJoystickCallback", glfwSetJoystickCallback_bind) \
+ X("UpdateGamepadMappings", glfwUpdateGamepadMappings_bind) \
+ X("GetGamepadName", glfwGetGamepadName_bind) \
+ X("GetGamepadState", glfwGetGamepadState_bind) \
+ X("SetClipboardString", glfwSetClipboardString_bind) \
+ X("GetClipboardString", glfwGetClipboardString_bind) \
+ X("GetTime", glfwGetTime_bind) \
+ X("SetTime", glfwSetTime_bind) \
+ X("GetTimerValue", glfwGetTimerValue_bind) \
+ X("GetTimerFrequency", glfwGetTimerFrequency_bind) \
+\
+ /* monitor */ \
+ X("GetMonitors", glfwGetMonitors_bind) \
+ X("GetPrimaryMonitor", glfwGetPrimaryMonitor_bind) \
+ X("GetMonitorPos", glfwGetMonitorPos_bind) \
+ X("GetMonitorWorkarea", glfwGetMonitorWorkarea_bind) \
+ X("GetMonitorPhysicalSize", glfwGetMonitorPhysicalSize_bind) \
+ X("GetMonitorContentScale", glfwGetMonitorContentScale_bind) \
+ X("GetMonitorName", glfwGetMonitorName_bind) \
+ X("SetMonitorCallback", glfwSetMonitorCallback_bind) \
+ X("GetVideoModes", glfwGetVideoModes_bind) \
+ X("GetVideoMode", glfwGetVideoMode_bind) \
+ X("SetGamma", glfwSetGamma_bind) \
+ X("GetGammaRamp", glfwGetGammaRamp_bind) \
+ X("SetGammaRamp", glfwSetGammaRamp_bind) \
+\
+ /* window */ \
+ X("DefaultWindowHints", glfwDefaultWindowHints_bind) \
+ X("WindowHint", glfwWindowHint_bind) \
+ X("WindowHintString", glfwWindowHintString_bind) \
+ X("CreateWindow", glfwCreateWindow_bind) \
+ X("DestroyWindow", glfwDestroyWindow_bind) \
+ X("WindowShouldClose", glfwWindowShouldClose_bind) \
+ X("SetWindowShouldClose", glfwSetWindowShouldClose_bind) \
+ X("SetWindowTitle", glfwSetWindowTitle_bind) \
+ X("SetWindowIcon", glfwSetWindowIcon_bind) \
+ X("GetWindowPos", glfwGetWindowPos_bind) \
+ X("SetWindowPos", glfwSetWindowPos_bind) \
+ X("GetWindowSize", glfwGetWindowSize_bind) \
+ X("SetWindowSizeLimits", glfwSetWindowSizeLimits_bind) \
+ X("SetWindowAspectRatio", glfwSetWindowAspectRatio_bind) \
+ X("SetWindowSize", glfwSetWindowSize_bind) \
+ X("GetFramebufferSize", glfwGetFramebufferSize_bind) \
+ X("GetWindowFrameSize", glfwGetWindowFrameSize_bind) \
+ X("GetWindowContentScale", glfwGetWindowContentScale_bind) \
+ X("GetWindowOpacity", glfwGetWindowOpacity_bind) \
+ X("SetWindowOpacity", glfwSetWindowOpacity_bind) \
+ X("IconifyWindow", glfwIconifyWindow_bind) \
+ X("RestoreWindow", glfwRestoreWindow_bind) \
+ X("MaximizeWindow", glfwMaximizeWindow_bind) \
+ X("ShowWindow", glfwShowWindow_bind) \
+ X("HideWindow", glfwHideWindow_bind) \
+ X("FocusWindow", glfwFocusWindow_bind) \
+ X("RequestWindowAttention", glfwRequestWindowAttention_bind) \
+ X("GetWindowMonitor", glfwGetWindowMonitor_bind) \
+ X("SetWindowMonitor", glfwSetWindowMonitor_bind) \
+ X("GetWindowAttrib", glfwGetWindowAttrib_bind) \
+ X("SetWindowAttrib", glfwSetWindowAttrib_bind) \
+ X("SetWindowPosCallback", glfwSetWindowPosCallback_bind) \
+ X("SetWindowSizeCallback", glfwSetWindowSizeCallback_bind) \
+ X("SetWindowCloseCallback", glfwSetWindowCloseCallback_bind) \
+ X("SetWindowRefreshCallback", glfwSetWindowRefreshCallback_bind) \
+ X("SetWindowFocusCallback", glfwSetWindowFocusCallback_bind) \
+ X("SetWindowIconifyCallback", glfwSetWindowIconifyCallback_bind) \
+ X("SetWindowMaximizeCallback", glfwSetWindowMaximizeCallback_bind) \
+ X("SetFramebufferSizeCallback", glfwSetFramebufferSizeCallback_bind) \
+ X("SetWindowContentScaleCallback", glfwSetWindowContentScaleCallback_bind) \
+ X("PollEvents", glfwPollEvents_bind) \
+ X("WaitEvents", glfwWaitEvents_bind) \
+ X("WaitEventsTimeout", glfwWaitEventsTimeout_bind) \
+ X("PostEmptyEvent", glfwPostEmptyEvent_bind) \
+ X("SwapBuffers", glfwSwapBuffers_bind) \
+
+
+#define X(name, func) int func(lua_State *L);
+H_GLFW_FUNCTIONS
+#undef X
+
+
+#define H_GLFW_ENUM \
+ X("FOCUSED", GLFW_FOCUSED) \
+ X("ICONIFIED", GLFW_ICONIFIED) \
+ X("RESIZABLE", GLFW_RESIZABLE) \
+ X("VISIBLE", GLFW_VISIBLE) \
+ X("DECORATED", GLFW_DECORATED) \
+ X("GLFW_AUTO_ICONIFY", GLFW_AUTO_ICONIFY) \
+ X("FLOATING", GLFW_FLOATING) \
+ X("MAXIMIZED", GLFW_MAXIMIZED) \
+ X("CENTER_CURSOR", GLFW_CENTER_CURSOR) \
+ X("TRANSPARENT_FRAMEBUFFER", GLFW_TRANSPARENT_FRAMEBUFFER) \
+ X("HOVERED", GLFW_HOVERED) \
+ X("FOCUS_ON_SHOW", GLFW_FOCUS_ON_SHOW) \
+ X("RED_BITS", GLFW_RED_BITS) \
+ X("GREEN_BITS", GLFW_GREEN_BITS) \
+ X("BLUE_BITS", GLFW_BLUE_BITS) \
+ X("ALPHA_BITS", GLFW_ALPHA_BITS) \
+ X("DEPTH_BITS", GLFW_DEPTH_BITS) \
+ X("STENCIL_BITS", GLFW_STENCIL_BITS) \
+ X("ACCUM_RED_BITS", GLFW_ACCUM_RED_BITS) \
+ X("ACCUM_GREEN_BITS", GLFW_ACCUM_GREEN_BITS) \
+ X("ACCUM_BLUE_BITS", GLFW_ACCUM_BLUE_BITS) \
+ X("ACCUM_ALPHA_BITS", GLFW_ACCUM_ALPHA_BITS) \
+ X("AUX_BUFFERS", GLFW_AUX_BUFFERS) \
+ X("STEREO", GLFW_STEREO) \
+ X("SAMPLES", GLFW_SAMPLES) \
+ X("SRGB_CAPABLE", GLFW_SRGB_CAPABLE) \
+ X("REFRESH_RATE", GLFW_REFRESH_RATE) \
+ X("DOUBLEBUFFER", GLFW_DOUBLEBUFFER) \
+ X("CLIENT_API", GLFW_CLIENT_API) \
+ X("CONTEXT_VERSION_MAJOR", GLFW_CONTEXT_VERSION_MAJOR) \
+ X("CONTEXT_VERSION_MINOR", GLFW_CONTEXT_VERSION_MINOR) \
+ X("CONTEXT_REVISION", GLFW_CONTEXT_REVISION) \
+ X("CONTEXT_ROBUSTNESS", GLFW_CONTEXT_ROBUSTNESS) \
+ X("OPENGL_FORWARD_COMPAT", GLFW_OPENGL_FORWARD_COMPAT) \
+ X("OPENGL_DEBUG_CONTEXT", GLFW_OPENGL_DEBUG_CONTEXT) \
+ X("OPENGL_PROFILE", GLFW_OPENGL_PROFILE) \
+ X("CONTEXT_RELEASE_BEHAVIOR", GLFW_CONTEXT_RELEASE_BEHAVIOR) \
+ X("CONTEXT_NO_ERROR", GLFW_CONTEXT_NO_ERROR) \
+ X("CONTEXT_CREATION_API", GLFW_CONTEXT_CREATION_API) \
+ X("SCALE_TO_MONITOR", GLFW_SCALE_TO_MONITOR) \
+ X("COCOA_RETINA_FRAMEBUFFER", GLFW_COCOA_RETINA_FRAMEBUFFER) \
+ X("COCOA_FRAME_NAME", GLFW_COCOA_FRAME_NAME) \
+ X("COCOA_GRAPHICS_SWITCHING", GLFW_COCOA_GRAPHICS_SWITCHING) \
+ X("X11_CLASS_NAME", GLFW_X11_CLASS_NAME) \
+ X("X11_INSTANCE_NAME", GLFW_X11_INSTANCE_NAME) \
+ X("GAMEPAD_AXIS_LEFT_X", GLFW_GAMEPAD_AXIS_LEFT_X) \
+ X("GAMEPAD_AXIS_LEFT_Y", GLFW_GAMEPAD_AXIS_LEFT_Y) \
+ X("GAMEPAD_AXIS_RIGHT_X", GLFW_GAMEPAD_AXIS_RIGHT_X) \
+ X("GAMEPAD_AXIS_RIGHT_Y", GLFW_GAMEPAD_AXIS_RIGHT_Y) \
+ X("GAMEPAD_AXIS_LEFT_TRIGGER", GLFW_GAMEPAD_AXIS_LEFT_TRIGGER) \
+ X("GAMEPAD_AXIS_RIGHT_TRIGGER", GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER) \
+ X("GAMEPAD_AXIS_LAST", GLFW_GAMEPAD_AXIS_LAST) \
+ X("GAMEPAD_AXIS_LEFT_X", GLFW_GAMEPAD_AXIS_LEFT_X) \
+ X("GAMEPAD_AXIS_LEFT_Y", GLFW_GAMEPAD_AXIS_LEFT_Y) \
+ X("GAMEPAD_AXIS_RIGHT_X", GLFW_GAMEPAD_AXIS_RIGHT_X) \
+ X("GAMEPAD_AXIS_RIGHT_Y", GLFW_GAMEPAD_AXIS_RIGHT_Y) \
+ X("GAMEPAD_AXIS_LEFT_TRIGGER", GLFW_GAMEPAD_AXIS_LEFT_TRIGGER) \
+ X("GAMEPAD_AXIS_RIGHT_TRIGGER", GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER) \
+ X("GAMEPAD_AXIS_LAST", GLFW_GAMEPAD_AXIS_LAST) \
+ X("HAT_CENTERED", GLFW_HAT_CENTERED) \
+ X("HAT_UP", GLFW_HAT_UP) \
+ X("HAT_RIGHT", GLFW_HAT_RIGHT) \
+ X("HAT_DOWN", GLFW_HAT_DOWN) \
+ X("HAT_LEFT", GLFW_HAT_LEFT) \
+ X("HAT_RIGHT_UP", GLFW_HAT_RIGHT_UP) \
+ X("HAT_RIGHT_DOWN", GLFW_HAT_RIGHT_DOWN) \
+ X("HAT_LEFT_UP", GLFW_HAT_LEFT_UP) \
+ X("HAT_LEFT_DOWN", GLFW_HAT_LEFT_DOWN) \
+ X("JOYSTICK_1", GLFW_JOYSTICK_1) \
+ X("JOYSTICK_2", GLFW_JOYSTICK_2) \
+ X("JOYSTICK_3", GLFW_JOYSTICK_3) \
+ X("JOYSTICK_4", GLFW_JOYSTICK_4) \
+ X("JOYSTICK_5", GLFW_JOYSTICK_5) \
+ X("JOYSTICK_6", GLFW_JOYSTICK_6) \
+ X("JOYSTICK_7", GLFW_JOYSTICK_7) \
+ X("JOYSTICK_8", GLFW_JOYSTICK_8) \
+ X("JOYSTICK_9", GLFW_JOYSTICK_9) \
+ X("JOYSTICK_10", GLFW_JOYSTICK_10) \
+ X("JOYSTICK_11", GLFW_JOYSTICK_11) \
+ X("JOYSTICK_12", GLFW_JOYSTICK_12) \
+ X("JOYSTICK_13", GLFW_JOYSTICK_13) \
+ X("JOYSTICK_14", GLFW_JOYSTICK_14) \
+ X("JOYSTICK_15", GLFW_JOYSTICK_15) \
+ X("JOYSTICK_16", GLFW_JOYSTICK_16) \
+ X("JOYSTICK_LAST", GLFW_JOYSTICK_LAST) \
+ X("KEY_UNKNOWN", GLFW_KEY_UNKNOWN) \
+ X("KEY_SPACE", GLFW_KEY_SPACE) \
+ X("KEY_APOSTROPHE", GLFW_KEY_APOSTROPHE) \
+ X("KEY_COMMA", GLFW_KEY_COMMA) \
+ X("KEY_MINUS", GLFW_KEY_MINUS) \
+ X("KEY_PERIOD", GLFW_KEY_PERIOD) \
+ X("KEY_SLASH", GLFW_KEY_SLASH) \
+ X("KEY_0", GLFW_KEY_0) \
+ X("KEY_1", GLFW_KEY_1) \
+ X("KEY_2", GLFW_KEY_2) \
+ X("KEY_3", GLFW_KEY_3) \
+ X("KEY_4", GLFW_KEY_4) \
+ X("KEY_5", GLFW_KEY_5) \
+ X("KEY_6", GLFW_KEY_6) \
+ X("KEY_7", GLFW_KEY_7) \
+ X("KEY_8", GLFW_KEY_8) \
+ X("KEY_9", GLFW_KEY_9) \
+ X("KEY_SEMICOLON", GLFW_KEY_SEMICOLON) \
+ X("KEY_EQUAL", GLFW_KEY_EQUAL) \
+ X("KEY_A", GLFW_KEY_A) \
+ X("KEY_B", GLFW_KEY_B) \
+ X("KEY_C", GLFW_KEY_C) \
+ X("KEY_D", GLFW_KEY_D) \
+ X("KEY_E", GLFW_KEY_E) \
+ X("KEY_F", GLFW_KEY_F) \
+ X("KEY_G", GLFW_KEY_G) \
+ X("KEY_H", GLFW_KEY_H) \
+ X("KEY_I", GLFW_KEY_I) \
+ X("KEY_J", GLFW_KEY_J) \
+ X("KEY_K", GLFW_KEY_K) \
+ X("KEY_L", GLFW_KEY_L) \
+ X("KEY_M", GLFW_KEY_M) \
+ X("KEY_N", GLFW_KEY_N) \
+ X("KEY_O", GLFW_KEY_O) \
+ X("KEY_P", GLFW_KEY_P) \
+ X("KEY_Q", GLFW_KEY_Q) \
+ X("KEY_R", GLFW_KEY_R) \
+ X("KEY_S", GLFW_KEY_S) \
+ X("KEY_T", GLFW_KEY_T) \
+ X("KEY_U", GLFW_KEY_U) \
+ X("KEY_V", GLFW_KEY_V) \
+ X("KEY_W", GLFW_KEY_W) \
+ X("KEY_X", GLFW_KEY_X) \
+ X("KEY_Y", GLFW_KEY_Y) \
+ X("KEY_Z", GLFW_KEY_Z) \
+ X("KEY_LEFT_BRACKET", GLFW_KEY_LEFT_BRACKET) \
+ X("KEY_BACKSLASH", GLFW_KEY_BACKSLASH) \
+ X("KEY_RIGHT_BRACKET", GLFW_KEY_RIGHT_BRACKET) \
+ X("KEY_GRAVE_ACCENT", GLFW_KEY_GRAVE_ACCENT) \
+ X("KEY_WORLD_1", GLFW_KEY_WORLD_1) \
+ X("KEY_WORLD_2", GLFW_KEY_WORLD_2) \
+ X("KEY_ESCAPE", GLFW_KEY_ESCAPE) \
+ X("KEY_ENTER", GLFW_KEY_ENTER) \
+ X("KEY_TAB", GLFW_KEY_TAB) \
+ X("KEY_BACKSPACE", GLFW_KEY_BACKSPACE) \
+ X("KEY_INSERT", GLFW_KEY_INSERT) \
+ X("KEY_DELETE", GLFW_KEY_DELETE) \
+ X("KEY_RIGHT", GLFW_KEY_RIGHT) \
+ X("KEY_LEFT", GLFW_KEY_LEFT) \
+ X("KEY_DOWN", GLFW_KEY_DOWN) \
+ X("KEY_UP", GLFW_KEY_UP) \
+ X("KEY_PAGE_UP", GLFW_KEY_PAGE_UP) \
+ X("KEY_PAGE_DOWN", GLFW_KEY_PAGE_DOWN) \
+ X("KEY_HOME", GLFW_KEY_HOME) \
+ X("KEY_END", GLFW_KEY_END) \
+ X("KEY_CAPS_LOCK", GLFW_KEY_CAPS_LOCK) \
+ X("KEY_SCROLL_LOCK", GLFW_KEY_SCROLL_LOCK) \
+ X("KEY_NUM_LOCK", GLFW_KEY_NUM_LOCK) \
+ X("KEY_PRINT_SCREEN", GLFW_KEY_PRINT_SCREEN) \
+ X("KEY_PAUSE", GLFW_KEY_PAUSE) \
+ X("KEY_F1", GLFW_KEY_F1) \
+ X("KEY_F2", GLFW_KEY_F2) \
+ X("KEY_F3", GLFW_KEY_F3) \
+ X("KEY_F4", GLFW_KEY_F4) \
+ X("KEY_F5", GLFW_KEY_F5) \
+ X("KEY_F6", GLFW_KEY_F6) \
+ X("KEY_F7", GLFW_KEY_F7) \
+ X("KEY_F8", GLFW_KEY_F8) \
+ X("KEY_F9", GLFW_KEY_F9) \
+ X("KEY_F10", GLFW_KEY_F10) \
+ X("KEY_F11", GLFW_KEY_F11) \
+ X("KEY_F12", GLFW_KEY_F12) \
+ X("KEY_F13", GLFW_KEY_F13) \
+ X("KEY_F14", GLFW_KEY_F14) \
+ X("KEY_F15", GLFW_KEY_F15) \
+ X("KEY_F16", GLFW_KEY_F16) \
+ X("KEY_F17", GLFW_KEY_F17) \
+ X("KEY_F18", GLFW_KEY_F18) \
+ X("KEY_F19", GLFW_KEY_F19) \
+ X("KEY_F20", GLFW_KEY_F20) \
+ X("KEY_F21", GLFW_KEY_F21) \
+ X("KEY_F22", GLFW_KEY_F22) \
+ X("KEY_F23", GLFW_KEY_F23) \
+ X("KEY_F24", GLFW_KEY_F24) \
+ X("KEY_F25", GLFW_KEY_F25) \
+ X("KEY_KP_0", GLFW_KEY_KP_0) \
+ X("KEY_KP_1", GLFW_KEY_KP_1) \
+ X("KEY_KP_2", GLFW_KEY_KP_2) \
+ X("KEY_KP_3", GLFW_KEY_KP_3) \
+ X("KEY_KP_4", GLFW_KEY_KP_4) \
+ X("KEY_KP_5", GLFW_KEY_KP_5) \
+ X("KEY_KP_6", GLFW_KEY_KP_6) \
+ X("KEY_KP_7", GLFW_KEY_KP_7) \
+ X("KEY_KP_8", GLFW_KEY_KP_8) \
+ X("KEY_KP_9", GLFW_KEY_KP_9) \
+ X("KEY_KP_DECIMAL", GLFW_KEY_KP_DECIMAL) \
+ X("KEY_KP_DIVIDE", GLFW_KEY_KP_DIVIDE) \
+ X("KEY_KP_MULTIPLY", GLFW_KEY_KP_MULTIPLY) \
+ X("KEY_KP_SUBTRACT", GLFW_KEY_KP_SUBTRACT) \
+ X("KEY_KP_ADD", GLFW_KEY_KP_ADD) \
+ X("KEY_KP_ENTER", GLFW_KEY_KP_ENTER) \
+ X("KEY_KP_EQUAL", GLFW_KEY_KP_EQUAL) \
+ X("KEY_LEFT_SHIFT", GLFW_KEY_LEFT_SHIFT) \
+ X("KEY_LEFT_CONTROL", GLFW_KEY_LEFT_CONTROL) \
+ X("KEY_LEFT_ALT", GLFW_KEY_LEFT_ALT) \
+ X("KEY_LEFT_SUPER", GLFW_KEY_LEFT_SUPER) \
+ X("KEY_RIGHT_SHIFT", GLFW_KEY_RIGHT_SHIFT) \
+ X("KEY_RIGHT_CONTROL", GLFW_KEY_RIGHT_CONTROL) \
+ X("KEY_RIGHT_ALT", GLFW_KEY_RIGHT_ALT) \
+ X("KEY_RIGHT_SUPER", GLFW_KEY_RIGHT_SUPER) \
+ X("KEY_MENU", GLFW_KEY_MENU) \
+ X("KEY_LAST", GLFW_KEY_LAST) \
+ X("MOD_SHIFT", GLFW_MOD_SHIFT) \
+ X("MOD_CONTROL", GLFW_MOD_CONTROL) \
+ X("MOD_ALT", GLFW_MOD_ALT) \
+ X("MOD_SUPER", GLFW_MOD_SUPER) \
+ X("MOD_CAPS_LOCK", GLFW_MOD_CAPS_LOCK) \
+ X("MOD_NUM_LOCK", GLFW_MOD_NUM_LOCK) \
+ X("MOUSE_BUTTON_1", GLFW_MOUSE_BUTTON_1) \
+ X("MOUSE_BUTTON_2", GLFW_MOUSE_BUTTON_2) \
+ X("MOUSE_BUTTON_3", GLFW_MOUSE_BUTTON_3) \
+ X("MOUSE_BUTTON_4", GLFW_MOUSE_BUTTON_4) \
+ X("MOUSE_BUTTON_5", GLFW_MOUSE_BUTTON_5) \
+ X("MOUSE_BUTTON_6", GLFW_MOUSE_BUTTON_6) \
+ X("MOUSE_BUTTON_7", GLFW_MOUSE_BUTTON_7) \
+ X("MOUSE_BUTTON_8", GLFW_MOUSE_BUTTON_8) \
+ X("MOUSE_BUTTON_LAST", GLFW_MOUSE_BUTTON_LAST) \
+ X("MOUSE_BUTTON_LEFT", GLFW_MOUSE_BUTTON_LEFT) \
+ X("MOUSE_BUTTON_RIGHT", GLFW_MOUSE_BUTTON_RIGHT) \
+ X("MOUSE_BUTTON_MIDDLE", GLFW_MOUSE_BUTTON_MIDDLE) \
+ X("ARROW_CURSOR", GLFW_ARROW_CURSOR) \
+ X("IBEAM_CURSOR", GLFW_IBEAM_CURSOR) \
+ X("CROSSHAIR_CURSOR", GLFW_CROSSHAIR_CURSOR) \
+ X("HAND_CURSOR", GLFW_HAND_CURSOR) \
+ X("HRESIZE_CURSOR", GLFW_HRESIZE_CURSOR) \
+ X("VRESIZE_CURSOR", GLFW_VRESIZE_CURSOR) \
+ X("TRUE", GLFW_TRUE) \
+ X("FALSE", GLFW_FALSE) \
+ X("JOYSTICK_HAT_BUTTONS", GLFW_JOYSTICK_HAT_BUTTONS) \
+ X("COCOA_CHDIR_RESOURCES", GLFW_COCOA_CHDIR_RESOURCES) \
+ X("COCOA_MENUBAR", GLFW_COCOA_MENUBAR) \
+ X("NO_ERROR", GLFW_NO_ERROR) \
+ X("NOT_INITIALIZED", GLFW_NOT_INITIALIZED) \
+ X("NO_CURRENT_CONTEXT", GLFW_NO_CURRENT_CONTEXT) \
+ X("INVALID_ENUM", GLFW_INVALID_ENUM) \
+ X("INVALID_VALUE", GLFW_INVALID_VALUE) \
+ X("OUT_OF_MEMORY", GLFW_OUT_OF_MEMORY) \
+ X("API_UNAVAILABLE", GLFW_API_UNAVAILABLE) \
+ X("VERSION_UNAVAILABLE", GLFW_VERSION_UNAVAILABLE) \
+ X("PLATFORM_ERROR", GLFW_PLATFORM_ERROR) \
+ X("FORMAT_UNAVAILABLE", GLFW_FORMAT_UNAVAILABLE) \
+ X("NO_WINDOW_CONTEXT", GLFW_NO_WINDOW_CONTEXT) \
+
+
+#endif
diff --git a/src/glfw/window.c b/src/glfw/window.c
new file mode 100644
index 0000000..1aafeb4
--- /dev/null
+++ b/src/glfw/window.c
@@ -0,0 +1,588 @@
+#include <lua.h>
+#include <lauxlib.h>
+#include <GLFW/glfw3.h>
+#include "setup.h"
+
+
+struct window_data_t {
+ GLFWwindow * window;
+ struct h_glfw_window_data_t data;
+};
+GLFWwindow ** create_window(lua_State *L)
+{
+ /* allocate userdata memory */
+ struct window_data_t *d = lua_newuserdata(L, sizeof(struct window_data_t));
+ GLFWwindow ** window = &(d->window);
+
+ /* set metatable */
+ int self = lua_gettop(L);
+ luaL_getmetatable(L, glfw_window_tname);
+ lua_setmetatable(L, -2);
+
+ /* configure window data struct */
+ d->data.L = L;
+ lua_pushvalue(L, self);
+ d->data.self_ref = luaL_ref(L, LUA_REGISTRYINDEX);
+
+ d->data.key_cb_ref = LUA_NOREF;
+ d->data.char_cb_ref = LUA_NOREF;
+ d->data.char_mods_cb_ref = LUA_NOREF;
+ d->data.mouse_button_cb_ref = LUA_NOREF;
+ d->data.cursor_pos_cb_ref = LUA_NOREF;
+ d->data.cursor_enter_cb_ref = LUA_NOREF;
+ d->data.scroll_cb_ref = LUA_NOREF;
+ d->data.drop_cb_ref = LUA_NOREF;
+ d->data.pos_cb_ref = LUA_NOREF;
+ d->data.size_cb_ref = LUA_NOREF;
+ d->data.close_cb_ref = LUA_NOREF;
+ d->data.refresh_cb_ref = LUA_NOREF;
+ d->data.focus_cb_ref = LUA_NOREF;
+ d->data.iconify_cb_ref = LUA_NOREF;
+ d->data.maximize_cb_ref = LUA_NOREF;
+ d->data.framebuffer_size_cb_ref = LUA_NOREF;
+ d->data.content_scale_cb_ref = LUA_NOREF;
+
+ glfwSetWindowUserPointer(*window, &(d->data));
+
+ return window;
+}
+
+
+int glfwDefaultWindowHints_bind(lua_State *L)
+{
+ glfwDefaultWindowHints();
+ return 0;
+}
+
+
+int glfwWindowHint_bind(lua_State *L)
+{
+ int hint = luaL_checkinteger(L, 1);
+ int value = luaL_checkinteger(L, 2);
+ glfwWindowHint(hint, value);
+ return 0;
+}
+
+
+int glfwWindowHintString_bind(lua_State *L)
+{
+ int hint = luaL_checkinteger(L, 1);
+ const char * value = luaL_checkstring(L, 2);
+ glfwWindowHintString(hint, value);
+ return 0;
+}
+
+
+int glfwCreateWindow_bind(lua_State *L)
+{
+ int width = luaL_checkinteger(L, 1);
+ int height = luaL_checkinteger(L, 2);
+ const char * title = luaL_checkstring(L, 3);
+ GLFWmonitor ** monitor = luaL_checkudata(L, 4, glfw_monitor_tname);
+ GLFWwindow ** share = luaL_checkudata(L, 5, glfw_window_tname);
+
+ GLFWwindow ** window = create_window(L);
+ *window = glfwCreateWindow(width, height, title, *monitor, *share);
+ return 1;
+}
+
+
+int glfwDestroyWindow_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ glfwDestroyWindow(*window);
+ return 0;
+}
+
+
+int glfwWindowShouldClose_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int bind_result = glfwWindowShouldClose(*window);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glfwSetWindowShouldClose_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int value = luaL_checkinteger(L, 2);
+ glfwSetWindowShouldClose(*window, value);
+ return 0;
+}
+
+
+int glfwSetWindowTitle_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ const char * title = luaL_checkstring(L, 2);
+ glfwSetWindowTitle(*window, title);
+ return 0;
+}
+
+
+int glfwSetWindowIcon_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int count = luaL_checkinteger(L, 2);
+ const GLFWimage * images = lua_touserdata(L, 3);
+ glfwSetWindowIcon(*window, count, images);
+ return 0;
+}
+
+
+int glfwGetWindowPos_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int xpos, ypos;
+ glfwGetWindowPos(*window, &xpos, &ypos);
+ lua_pushinteger(L, xpos);
+ lua_pushinteger(L, ypos);
+ return 2;
+}
+
+
+int glfwSetWindowPos_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int xpos = luaL_checkinteger(L, 2);
+ int ypos = luaL_checkinteger(L, 3);
+ glfwSetWindowPos(*window, xpos, ypos);
+ return 0;
+}
+
+
+int glfwGetWindowSize_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int width, height;
+ glfwGetWindowSize(*window, &width, &height);
+ lua_pushinteger(L, width);
+ lua_pushinteger(L, height);
+ return 2;
+}
+
+
+int glfwSetWindowSizeLimits_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int minwidth = luaL_checkinteger(L, 2);
+ int minheight = luaL_checkinteger(L, 3);
+ int maxwidth = luaL_checkinteger(L, 4);
+ int maxheight = luaL_checkinteger(L, 5);
+ glfwSetWindowSizeLimits(*window, minwidth, minheight, maxwidth, maxheight);
+ return 0;
+}
+
+
+int glfwSetWindowAspectRatio_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int numer = luaL_checkinteger(L, 2);
+ int denom = luaL_checkinteger(L, 3);
+ glfwSetWindowAspectRatio(*window, numer, denom);
+ return 0;
+}
+
+
+int glfwSetWindowSize_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int width = luaL_checkinteger(L, 2);
+ int height = luaL_checkinteger(L, 3);
+ glfwSetWindowSize(*window, width, height);
+ return 0;
+}
+
+
+int glfwGetFramebufferSize_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int width, height;
+ glfwGetFramebufferSize(*window, &width, &height);
+ lua_pushinteger(L, width);
+ lua_pushinteger(L, height);
+ return 2;
+}
+
+
+int glfwGetWindowFrameSize_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int left;
+ int top;
+ int right;
+ int bottom;
+ glfwGetWindowFrameSize(*window, &left, &top, &right, &bottom);
+ lua_pushnumber(L, left);
+ lua_pushnumber(L, top);
+ lua_pushnumber(L, right);
+ lua_pushnumber(L, bottom);
+ return 4;
+}
+
+
+int glfwGetWindowContentScale_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ float xscale;
+ float yscale;
+ glfwGetWindowContentScale(*window, &xscale, &yscale);
+ lua_pushnumber(L, xscale);
+ lua_pushnumber(L, yscale);
+ return 0;
+}
+
+
+int glfwGetWindowOpacity_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ float bind_result = glfwGetWindowOpacity(*window);
+ lua_pushnumber(L, bind_result);
+ return 1;
+}
+
+
+int glfwSetWindowOpacity_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ float opacity = luaL_checknumber(L, 2);
+ glfwSetWindowOpacity(*window, opacity);
+ return 0;
+}
+
+
+int glfwIconifyWindow_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ glfwIconifyWindow(*window);
+ return 0;
+}
+
+
+int glfwRestoreWindow_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ glfwRestoreWindow(*window);
+ return 0;
+}
+
+
+int glfwMaximizeWindow_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ glfwMaximizeWindow(*window);
+ return 0;
+}
+
+
+int glfwShowWindow_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ glfwShowWindow(*window);
+ return 0;
+}
+
+
+int glfwHideWindow_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ glfwHideWindow(*window);
+ return 0;
+}
+
+
+int glfwFocusWindow_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ glfwFocusWindow(*window);
+ return 0;
+}
+
+
+int glfwRequestWindowAttention_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ glfwRequestWindowAttention(*window);
+ return 0;
+}
+
+
+int glfwGetWindowMonitor_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ GLFWmonitor **monitor = create_monitor(L);
+ *monitor = glfwGetWindowMonitor(*window);
+ return 1;
+}
+
+
+int glfwSetWindowMonitor_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ GLFWmonitor ** monitor = luaL_checkudata(L, 2, glfw_monitor_tname);
+ int xpos = luaL_checkinteger(L, 3);
+ int ypos = luaL_checkinteger(L, 4);
+ int width = luaL_checkinteger(L, 5);
+ int height = luaL_checkinteger(L, 6);
+ int refreshRate = luaL_checkinteger(L, 7);
+ glfwSetWindowMonitor(*window, *monitor, xpos, ypos, width, height, refreshRate);
+ return 0;
+}
+
+
+int glfwGetWindowAttrib_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int attrib = luaL_checkinteger(L, 2);
+ int bind_result = glfwGetWindowAttrib(*window, attrib);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glfwSetWindowAttrib_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int attrib = luaL_checkinteger(L, 2);
+ int value = luaL_checkinteger(L, 3);
+ glfwSetWindowAttrib(*window, attrib, value);
+ return 0;
+}
+
+
+/* helpers for creating callback setter binds */
+static GLFWwindow ** check_callback_args(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ int type = lua_type(L, 2);
+ if (type == LUA_TNIL || type == LUA_TFUNCTION) {
+ return window;
+ }
+ else {
+ luaL_typerror(L, 2, "nil or function");
+ }
+}
+
+#define SET_CALLBACK(L, win, setter, cb, key) \
+do { \
+ /* get window data */ \
+ struct h_glfw_window_data_t *data = glfwGetWindowUserPointer(win); \
+ \
+ /* push old callback */ \
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->key); \
+ \
+ /* set new callback */ \
+ if (lua_isnil(L, 2)) { \
+ /* new "callback" is nil, unset */ \
+ setter(win, NULL); \
+ data->key = LUA_NOREF; \
+ } \
+ else { \
+ /* new callback is function */ \
+ setter(win, cb); \
+ lua_pushvalue(L, 2); \
+ data->key = luaL_ref(L, LUA_REGISTRYINDEX); \
+ } \
+} while(0)
+
+#define RETRIEVE_CALLBACK(win, key) \
+struct h_glfw_window_data_t *data = glfwGetWindowUserPointer(win); \
+if (data->key == LUA_NOREF) { return; } \
+lua_State *L = data->L; \
+lua_rawgeti(L, LUA_REGISTRYINDEX, data->key);
+
+
+static void h_pos_cb(GLFWwindow *window, int xpos, int ypos)
+{
+ RETRIEVE_CALLBACK(window, pos_cb_ref);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_pushinteger(L, xpos);
+ lua_pushinteger(L, ypos);
+ lua_call(L, 3, 0);
+}
+int glfwSetWindowPosCallback_bind(lua_State *L)
+{
+ GLFWwindow ** window = check_callback_args(L);
+ SET_CALLBACK(L, *window, glfwSetWindowPosCallback, h_pos_cb, pos_cb_ref);
+ return 1;
+}
+
+
+static void h_size_cb(GLFWwindow *window, int width, int height)
+{
+ RETRIEVE_CALLBACK(window, size_cb_ref);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_pushinteger(L, width);
+ lua_pushinteger(L, height);
+ lua_call(L, 3, 0);
+}
+int glfwSetWindowSizeCallback_bind(lua_State *L)
+{
+ GLFWwindow ** window = check_callback_args(L);
+ SET_CALLBACK(L, *window, glfwSetWindowSizeCallback, h_size_cb, size_cb_ref);
+ return 1;
+}
+
+
+static void h_close_cb(GLFWwindow *window)
+{
+ RETRIEVE_CALLBACK(window, close_cb_ref);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_call(L, 1, 0);
+}
+int glfwSetWindowCloseCallback_bind(lua_State *L)
+{
+ GLFWwindow ** window = check_callback_args(L);
+ SET_CALLBACK(L, *window, glfwSetWindowCloseCallback, h_close_cb, close_cb_ref);
+ return 1;
+}
+
+
+static void h_refresh_cb(GLFWwindow *window)
+{
+ RETRIEVE_CALLBACK(window, refresh_cb_ref);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_call(L, 1, 0);
+}
+int glfwSetWindowRefreshCallback_bind(lua_State *L)
+{
+ GLFWwindow ** window = check_callback_args(L);
+ SET_CALLBACK(L, *window, glfwSetWindowRefreshCallback, h_refresh_cb, refresh_cb_ref);
+ return 1;
+}
+
+
+static void h_focus_cb(GLFWwindow *window, int focused)
+{
+ RETRIEVE_CALLBACK(window, focus_cb_ref);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_pushinteger(L, focused);
+ lua_call(L, 2, 0);
+}
+int glfwSetWindowFocusCallback_bind(lua_State *L)
+{
+ GLFWwindow ** window = check_callback_args(L);
+ SET_CALLBACK(
+ L, *window,
+ glfwSetWindowFocusCallback,
+ h_focus_cb, focus_cb_ref
+ );
+ return 1;
+}
+
+
+static void h_iconify_cb(GLFWwindow *window, int iconified)
+{
+ RETRIEVE_CALLBACK(window, iconify_cb_ref);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_pushinteger(L, iconified);
+ lua_call(L, 2, 0);
+}
+int glfwSetWindowIconifyCallback_bind(lua_State *L)
+{
+ GLFWwindow ** window = check_callback_args(L);
+ SET_CALLBACK(
+ L, *window,
+ glfwSetWindowIconifyCallback,
+ h_iconify_cb, iconify_cb_ref
+ );
+ return 1;
+}
+
+
+static void h_maximize_cb(GLFWwindow *window, int maximized)
+{
+ RETRIEVE_CALLBACK(window, maximize_cb_ref);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_pushinteger(L, maximized);
+ lua_call(L, 2, 0);
+}
+int glfwSetWindowMaximizeCallback_bind(lua_State *L)
+{
+ GLFWwindow ** window = check_callback_args(L);
+ SET_CALLBACK(
+ L, *window,
+ glfwSetWindowMaximizeCallback,
+ h_maximize_cb, maximize_cb_ref
+ );
+ return 1;
+}
+
+
+static void h_framebuffer_size_cb(GLFWwindow *window, int width, int height)
+{
+ RETRIEVE_CALLBACK(window, framebuffer_size_cb_ref);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_pushinteger(L, width);
+ lua_pushinteger(L, height);
+ lua_call(L, 3, 0);
+}
+int glfwSetFramebufferSizeCallback_bind(lua_State *L)
+{
+ GLFWwindow ** window = check_callback_args(L);
+ SET_CALLBACK(
+ L, *window,
+ glfwSetFramebufferSizeCallback,
+ h_framebuffer_size_cb, framebuffer_size_cb_ref
+ );
+ return 1;
+}
+
+
+static void h_content_scale_cb(GLFWwindow *window, float xscale, float yscale)
+{
+ RETRIEVE_CALLBACK(window, content_scale_cb_ref);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, data->self_ref);
+ lua_pushnumber(L, xscale);
+ lua_pushnumber(L, yscale);
+ lua_call(L, 3, 0);
+}
+int glfwSetWindowContentScaleCallback_bind(lua_State *L)
+{
+ GLFWwindow ** window = check_callback_args(L);
+ SET_CALLBACK(
+ L, *window,
+ glfwSetWindowContentScaleCallback,
+ h_content_scale_cb, content_scale_cb_ref
+ );
+ return 1;
+}
+
+
+int glfwPollEvents_bind(lua_State *L)
+{
+ glfwPollEvents();
+ return 0;
+}
+
+
+int glfwWaitEvents_bind(lua_State *L)
+{
+ glfwWaitEvents();
+ return 0;
+}
+
+
+int glfwWaitEventsTimeout_bind(lua_State *L)
+{
+ double timeout = luaL_checknumber(L, 1);
+ glfwWaitEventsTimeout(timeout);
+ return 0;
+}
+
+
+int glfwPostEmptyEvent_bind(lua_State *L)
+{
+ glfwPostEmptyEvent();
+ return 0;
+}
+
+
+int glfwSwapBuffers_bind(lua_State *L)
+{
+ GLFWwindow ** window = luaL_checkudata(L, 1, glfw_window_tname);
+ glfwSwapBuffers(*window);
+ return 0;
+}
diff --git a/src/audio/CMakeLists.txt b/src/miniaudio/CMakeLists.txt
index c4b333c..c4b333c 100644
--- a/src/audio/CMakeLists.txt
+++ b/src/miniaudio/CMakeLists.txt
diff --git a/src/audio/audio.h b/src/miniaudio/audio.h
index 0ea02d0..0ea02d0 100644
--- a/src/audio/audio.h
+++ b/src/miniaudio/audio.h
diff --git a/src/audio/bind b/src/miniaudio/bind
index 3a9befe..3a9befe 100644
--- a/src/audio/bind
+++ b/src/miniaudio/bind
diff --git a/src/audio/bind.bind b/src/miniaudio/bind.bind
index 41fddd6..41fddd6 100644
--- a/src/audio/bind.bind
+++ b/src/miniaudio/bind.bind
diff --git a/src/audio/engine.c b/src/miniaudio/engine.c
index ec43728..ec43728 100644
--- a/src/audio/engine.c
+++ b/src/miniaudio/engine.c
diff --git a/src/audio/impl.c b/src/miniaudio/impl.c
index 5e8969a..5e8969a 100644
--- a/src/audio/impl.c
+++ b/src/miniaudio/impl.c
diff --git a/src/audio/setup.c b/src/miniaudio/setup.c
index 774bf39..774bf39 100644
--- a/src/audio/setup.c
+++ b/src/miniaudio/setup.c
diff --git a/src/audio/sound.c b/src/miniaudio/sound.c
index 334a08a..334a08a 100644
--- a/src/audio/sound.c
+++ b/src/miniaudio/sound.c
diff --git a/src/audio/sound_group.c b/src/miniaudio/sound_group.c
index c52b3be..c52b3be 100644
--- a/src/audio/sound_group.c
+++ b/src/miniaudio/sound_group.c
diff --git a/src/modules.h b/src/modules.h
index bfe1de5..29ab6b1 100644
--- a/src/modules.h
+++ b/src/modules.h
@@ -6,6 +6,7 @@
#define HONEY_MODULES \
X(audio) \
X(gl) \
+ X(glfw) \
X(glm) \
X(image) \
X(import) \
diff --git a/src/gl/CMakeLists.txt b/src/opengl/CMakeLists.txt
index 4328596..4328596 100644
--- a/src/gl/CMakeLists.txt
+++ b/src/opengl/CMakeLists.txt
diff --git a/src/opengl/bind.h b/src/opengl/bind.h
new file mode 100644
index 0000000..7b0f265
--- /dev/null
+++ b/src/opengl/bind.h
@@ -0,0 +1,1818 @@
+#ifndef HONEY_GL_H
+#define HONEY_GL_H
+
+#include <lua.h>
+
+#define GL_FUNCTIONS \
+ X("ActiveShaderProgram", glActiveShaderProgram_bind) \
+ X("ActiveTexture", glActiveTexture_bind) \
+ X("AttachShader", glAttachShader_bind) \
+ X("BeginConditionalRender", glBeginConditionalRender_bind) \
+ X("BeginQuery", glBeginQuery_bind) \
+ X("BeginQuery", glBeginQuery_bind) \
+ X("BeginTransformFeedback", glBeginTransformFeedback_bind) \
+ X("BindAttribLocation", glBindAttribLocation_bind) \
+ X("BindBuffer", glBindBuffer_bind) \
+ X("BindBufferBase", glBindBufferBase_bind) \
+ X("BindBufferRange", glBindBufferRange_bind) \
+ X("BindFragDataLocation", glBindFragDataLocation_bind) \
+ X("BindFragDataLocationIndexed", glBindFragDataLocationIndexed_bind) \
+ X("BindFramebuffer", glBindFramebuffer_bind) \
+ X("BindImageTexture", glBindImageTexture_bind) \
+ X("BindProgramPipeline", glBindProgramPipeline_bind) \
+ X("BindRenderbuffer", glBindRenderbuffer_bind) \
+ X("BindSampler", glBindSampler_bind) \
+ X("BindTexture", glBindTexture_bind) \
+ X("BindTextureUnit", glBindTextureUnit_bind) \
+ X("BindTransformFeedback", glBindTransformFeedback_bind) \
+ X("BindVertexArray", glBindVertexArray_bind) \
+ X("BindVertexBuffer", glBindVertexBuffer_bind) \
+ X("BlendColor", glBlendColor_bind) \
+ X("BlendEquation", glBlendEquation_bind) \
+ X("BlendEquationi", glBlendEquationi_bind) \
+ X("BlendEquationSeparate", glBlendEquationSeparate_bind) \
+ X("BlendEquationSeparatei", glBlendEquationSeparatei_bind) \
+ X("BlendFunc", glBlendFunc_bind) \
+ X("BlendFunci", glBlendFunci_bind) \
+ X("BlendFuncSeparate", glBlendFuncSeparate_bind) \
+ X("BlendFuncSeparatei", glBlendFuncSeparatei_bind) \
+ X("BlitFramebuffer", glBlitFramebuffer_bind) \
+ X("BlitNamedFramebuffer", glBlitNamedFramebuffer_bind) \
+ X("BufferData", glBufferData_bind) \
+ X("BufferStorage", glBufferStorage_bind) \
+ X("BufferSubData", glBufferSubData_bind) \
+ X("CheckFramebufferStatus", glCheckFramebufferStatus_bind) \
+ X("CheckNamedFramebufferStatus", glCheckNamedFramebufferStatus_bind) \
+ X("ClampColor", glClampColor_bind) \
+ X("Clear", glClear_bind) \
+ X("ClearBufferiv", glClearBufferiv_bind) \
+ X("ClearBufferuiv", glClearBufferuiv_bind) \
+ X("ClearBufferfv", glClearBufferfv_bind) \
+ X("ClearBufferfi", glClearBufferfi_bind) \
+ X("ClearStencil", glClearStencil_bind) \
+ X("ClientWaitSync", glClientWaitSync_bind) \
+ X("ColorMask", glColorMask_bind) \
+ X("ColorMaski", glColorMaski_bind) \
+ X("CompileShader", glCompileShader_bind) \
+ X("CompressedTexImage1D", glCompressedTexImage1D_bind) \
+ X("CompressedTexImage2D", glCompressedTexImage2D_bind) \
+ X("CompressedTexImage3D", glCompressedTexImage3D_bind) \
+ X("CompressedTexSubImage1D", glCompressedTexSubImage1D_bind) \
+ X("CompressedTexSubImage2D", glCompressedTexSubImage2D_bind) \
+ X("CompressedTexSubImage3D", glCompressedTexSubImage3D_bind) \
+ X("CopyBufferSubData", glCopyBufferSubData_bind) \
+ X("CopyBufferSubData", glCopyBufferSubData_bind) \
+ X("CopyTexImage1D", glCopyTexImage1D_bind) \
+ X("CopyTexImage2D", glCopyTexImage2D_bind) \
+ X("CopyTexSubImage1D", glCopyTexSubImage1D_bind) \
+ X("CopyTexSubImage2D", glCopyTexSubImage2D_bind) \
+ X("CopyTexSubImage3D", glCopyTexSubImage3D_bind) \
+ X("CreateProgram", glCreateProgram_bind) \
+ X("CreateShader", glCreateShader_bind) \
+ X("CreateShaderProgramv", glCreateShaderProgramv_bind) \
+ X("CullFace", glCullFace_bind) \
+ X("DeleteBuffers", glDeleteBuffers_bind) \
+ X("DeleteFramebuffers", glDeleteFramebuffers_bind) \
+ X("DeleteProgram", glDeleteProgram_bind) \
+ X("DeleteProgramPipelines", glDeleteProgramPipelines_bind) \
+ X("DeleteQueries", glDeleteQueries_bind) \
+ X("DeleteRenderbuffers", glDeleteRenderbuffers_bind) \
+ X("DeleteSamplers", glDeleteSamplers_bind) \
+ X("DeleteShader", glDeleteShader_bind) \
+ X("DeleteSync", glDeleteSync_bind) \
+ X("DeleteTextures", glDeleteTextures_bind) \
+ X("DeleteTransformFeedbacks", glDeleteTransformFeedbacks_bind) \
+ X("DeleteVertexArrays", glDeleteVertexArrays_bind) \
+ X("DepthFunc", glDepthFunc_bind) \
+ X("DepthMask", glDepthMask_bind) \
+ X("DepthRange", glDepthRange_bind) \
+ X("DepthRangef", glDepthRangef_bind) \
+ X("DepthRangeArrayv", glDepthRangeArrayv_bind) \
+ X("DepthRangeIndexed", glDepthRangeIndexed_bind) \
+ X("DetachShader", glDetachShader_bind) \
+ X("Disable", glDisable_bind) \
+ X("Disablei", glDisablei_bind) \
+ X("DisableVertexAttribArray", glDisableVertexAttribArray_bind) \
+ X("DrawArrays", glDrawArrays_bind) \
+ X("DrawArraysIndirect", glDrawArraysIndirect_bind) \
+ X("DrawArraysInstanced", glDrawArraysInstanced_bind) \
+ X("DrawBuffer", glDrawBuffer_bind) \
+ X("DrawBuffers", glDrawBuffers_bind) \
+ X("DrawElements", glDrawElements_bind) \
+ X("DrawElementsBaseVertex", glDrawElementsBaseVertex_bind) \
+ X("DrawElementsIndirect", glDrawElementsIndirect_bind) \
+ X("DrawElementsInstanced", glDrawElementsInstanced_bind) \
+ X("DrawRangeElements", glDrawRangeElements_bind) \
+ X("DrawRangeElementsBaseVertex", glDrawRangeElementsBaseVertex_bind) \
+ X("DrawTransformFeedback", glDrawTransformFeedback_bind) \
+ X("DrawTransformFeedbackStream", glDrawTransformFeedbackStream_bind) \
+ X("Enable", glEnable_bind) \
+ X("Enablei", glEnablei_bind) \
+ X("EnableVertexAttribArray", glEnableVertexAttribArray_bind) \
+ X("EndConditionalRender", glEndConditionalRender_bind) \
+ X("EndQuery", glEndQuery_bind) \
+ X("EndQueryIndexed", glEndQueryIndexed_bind) \
+ X("EndTransformFeedback", glEndTransformFeedback_bind) \
+ X("FenceSync", glFenceSync_bind) \
+ X("Finish", glFinish_bind) \
+ X("Flush", glFlush_bind) \
+ X("FlushMappedBufferRange", glFlushMappedBufferRange_bind) \
+ X("FramebufferRenderbuffer", glFramebufferRenderbuffer_bind) \
+ X("FramebufferTexture", glFramebufferTexture_bind) \
+ X("FramebufferTexture1D", glFramebufferTexture1D_bind) \
+ X("FramebufferTexture2D", glFramebufferTexture2D_bind) \
+ X("FramebufferTexture3D", glFramebufferTexture3D_bind) \
+ X("FramebufferTextureLayer", glFramebufferTextureLayer_bind) \
+ X("FrontFace", glFrontFace_bind) \
+ X("GenBuffers", glGenBuffers_bind) \
+ X("GenerateMipmap", glGenerateMipmap_bind) \
+ X("GenFramebuffers", glGenFramebuffers_bind) \
+ X("GenProgramPipelines", glGenProgramPipelines_bind) \
+ X("GenQueries", glGenQueries_bind) \
+ X("GenRenderbuffers", glGenRenderbuffers_bind) \
+ X("GenSamplers", glGenSamplers_bind) \
+ X("GenTextures", glGenTextures_bind) \
+ X("GenTransformFeedbacks", glGenTransformFeedbacks_bind) \
+ X("GenVertexArrays", glGenVertexArrays_bind) \
+ X("GetBooleanv", glGetBooleanv_bind) \
+ X("GetDoublev", glGetDoublev_bind) \
+ X("GetFloatv", glGetFloatv_bind) \
+ X("GetIntegerv", glGetIntegerv_bind) \
+ X("GetInteger64v", glGetInteger64v_bind) \
+ X("GetBooleani_v", glGetBooleani_v_bind) \
+ X("GetIntegeri_v", glGetIntegeri_v_bind) \
+ X("GetFloati_v", glGetFloati_v_bind) \
+ X("GetDoublei_v", glGetDoublei_v_bind) \
+ X("GetInteger64i_v", glGetInteger64i_v_bind) \
+ X("GetActiveAttrib", glGetActiveAttrib_bind) \
+ X("GetActiveSubroutineName", glGetActiveSubroutineName_bind) \
+ X("GetActiveSubroutineUniformiv", glGetActiveSubroutineUniformiv_bind) \
+ X("GetActiveSubroutineUniformName", glGetActiveSubroutineUniformName_bind) \
+ X("GetActiveUniform", glGetActiveUniform_bind) \
+ X("GetActiveUniformBlockiv", glGetActiveUniformBlockiv_bind) \
+ X("GetActiveUniformBlockName", glGetActiveUniformBlockName_bind) \
+ X("GetActiveUniformName", glGetActiveUniformName_bind) \
+ X("GetActiveUniformsiv", glGetActiveUniformsiv_bind) \
+ X("GetAttachedShaders", glGetAttachedShaders_bind) \
+ X("GetAttribLocation", glGetAttribLocation_bind) \
+ X("GetBufferParameteriv", glGetBufferParameteriv_bind) \
+ X("GetBufferParameteri64v", glGetBufferParameteri64v_bind) \
+ X("GetBufferPointerv", glGetBufferPointerv_bind) \
+ X("GetBufferSubData", glGetBufferSubData_bind) \
+ X("GetCompressedTexImage", glGetCompressedTexImage_bind) \
+ X("GetError", glGetError_bind) \
+ X("GetFragDataIndex", glGetFragDataIndex_bind) \
+ X("GetFragDataLocation", glGetFragDataLocation_bind) \
+ X("GetFramebufferAttachmentParameteriv", glGetFramebufferAttachmentParameteriv_bind) \
+ X("GetMultisamplefv", glGetMultisamplefv_bind) \
+ X("GetUniformfv", glGetUniformfv_bind) \
+ X("GetUniformiv", glGetUniformiv_bind) \
+ X("GetUniformuiv", glGetUniformuiv_bind) \
+ X("GetUniformdv", glGetUniformdv_bind) \
+ X("GetProgramiv", glGetProgramiv_bind) \
+ X("GetProgramBinary", glGetProgramBinary_bind) \
+ X("GetProgramInfoLog", glGetProgramInfoLog_bind) \
+ X("GetProgramPipelineiv", glGetProgramPipelineiv_bind) \
+ X("GetProgramPipelineInfoLog", glGetProgramPipelineInfoLog_bind) \
+ X("GetProgramPipelineiv", glGetProgramPipelineiv_bind) \
+ X("GetProgramStageiv", glGetProgramStageiv_bind) \
+ X("GetQueryIndexediv", glGetQueryIndexediv_bind) \
+ X("GetQueryiv", glGetQueryiv_bind) \
+ X("GetRenderbufferParameteriv", glGetRenderbufferParameteriv_bind) \
+ X("GetSamplerParameterfv", glGetSamplerParameterfv_bind) \
+ X("GetSamplerParameteriv", glGetSamplerParameteriv_bind) \
+ X("GetSamplerParameterIiv", glGetSamplerParameterIiv_bind) \
+ X("GetSamplerParameterIuiv", glGetSamplerParameterIuiv_bind) \
+ X("GetShaderiv", glGetShaderiv_bind) \
+ X("GetShaderInfoLog", glGetShaderInfoLog_bind) \
+ X("GetShaderiv", glGetShaderiv_bind) \
+ X("GetShaderPrecisionFormat", glGetShaderPrecisionFormat_bind) \
+ X("GetShaderSource", glGetShaderSource_bind) \
+ X("GetString", glGetString_bind) \
+ X("GetStringi", glGetStringi_bind) \
+ X("GetSubroutineIndex", glGetSubroutineIndex_bind) \
+ X("GetSubroutineUniformLocation", glGetSubroutineUniformLocation_bind) \
+ X("GetSynciv", glGetSynciv_bind) \
+ X("GetTexImage", glGetTexImage_bind) \
+ X("GetTexLevelParameterfv", glGetTexLevelParameterfv_bind) \
+ X("GetTexLevelParameteriv", glGetTexLevelParameteriv_bind) \
+ X("GetTexParameterfv", glGetTexParameterfv_bind) \
+ X("GetTexParameteriv", glGetTexParameteriv_bind) \
+ X("GetTexParameterIiv", glGetTexParameterIiv_bind) \
+ X("GetTexParameterIuiv", glGetTexParameterIuiv_bind) \
+ X("GetTransformFeedbackVarying", glGetTransformFeedbackVarying_bind) \
+ X("GetUniformBlockIndex", glGetUniformBlockIndex_bind) \
+ X("GetUniformIndices", glGetUniformIndices_bind) \
+ X("GetUniformLocation", glGetUniformLocation_bind) \
+ X("GetUniformSubroutineuiv", glGetUniformSubroutineuiv_bind) \
+ X("GetVertexAttribdv", glGetVertexAttribdv_bind) \
+ X("GetVertexAttribfv", glGetVertexAttribfv_bind) \
+ X("GetVertexAttribiv", glGetVertexAttribiv_bind) \
+ X("GetVertexAttribIiv", glGetVertexAttribIiv_bind) \
+ X("GetVertexAttribIuiv", glGetVertexAttribIuiv_bind) \
+ X("GetVertexAttribLdv", glGetVertexAttribLdv_bind) \
+ X("GetVertexAttribPointerv", glGetVertexAttribPointerv_bind) \
+ X("Hint", glHint_bind) \
+ X("IsBuffer", glIsBuffer_bind) \
+ X("IsEnabled", glIsEnabled_bind) \
+ X("IsEnabledi", glIsEnabledi_bind) \
+ X("IsFramebuffer", glIsFramebuffer_bind) \
+ X("IsProgram", glIsProgram_bind) \
+ X("IsProgramPipeline", glIsProgramPipeline_bind) \
+ X("IsQuery", glIsQuery_bind) \
+ X("IsRenderbuffer", glIsRenderbuffer_bind) \
+ X("IsSampler", glIsSampler_bind) \
+ X("IsShader", glIsShader_bind) \
+ X("IsSync", glIsSync_bind) \
+ X("IsTexture", glIsTexture_bind) \
+ X("IsTransformFeedback", glIsTransformFeedback_bind) \
+ X("IsVertexArray", glIsVertexArray_bind) \
+ X("LineWidth", glLineWidth_bind) \
+ X("LinkProgram", glLinkProgram_bind) \
+ X("LogicOp", glLogicOp_bind) \
+ X("MapBuffer", glMapBuffer_bind) \
+ X("MapBufferRange", glMapBufferRange_bind) \
+ X("MinSampleShading", glMinSampleShading_bind) \
+ X("MultiDrawArrays", glMultiDrawArrays_bind) \
+ X("MultiDrawElements", glMultiDrawElements_bind) \
+ X("MultiDrawElementsBaseVertex", glMultiDrawElementsBaseVertex_bind) \
+ X("PatchParameteri", glPatchParameteri_bind) \
+ X("PatchParameterfv", glPatchParameterfv_bind) \
+ X("PauseTransformFeedback", glPauseTransformFeedback_bind) \
+ X("PixelStoref", glPixelStoref_bind) \
+ X("PixelStorei", glPixelStorei_bind) \
+ X("PointParameterf", glPointParameterf_bind) \
+ X("PointParameteri", glPointParameteri_bind) \
+ X("PointParameterfv", glPointParameterfv_bind) \
+ X("PointParameteriv", glPointParameteriv_bind) \
+ X("PointSize", glPointSize_bind) \
+ X("PolygonMode", glPolygonMode_bind) \
+ X("PolygonOffset", glPolygonOffset_bind) \
+ X("PrimitiveRestartIndex", glPrimitiveRestartIndex_bind) \
+ X("ProgramBinary", glProgramBinary_bind) \
+ X("ProgramParameteri", glProgramParameteri_bind) \
+ X("ProgramUniform1f", glProgramUniform1f_bind) \
+ X("ProgramUniform2f", glProgramUniform2f_bind) \
+ X("ProgramUniform3f", glProgramUniform3f_bind) \
+ X("ProgramUniform4f", glProgramUniform4f_bind) \
+ X("ProgramUniform1i", glProgramUniform1i_bind) \
+ X("ProgramUniform2i", glProgramUniform2i_bind) \
+ X("ProgramUniform3i", glProgramUniform3i_bind) \
+ X("ProgramUniform4i", glProgramUniform4i_bind) \
+ X("ProgramUniform1ui", glProgramUniform1ui_bind) \
+ X("ProgramUniform2ui", glProgramUniform2ui_bind) \
+ X("ProgramUniform3ui", glProgramUniform3ui_bind) \
+ X("ProgramUniform4ui", glProgramUniform4ui_bind) \
+ X("ProgramUniform1fv", glProgramUniform1fv_bind) \
+ X("ProgramUniform2fv", glProgramUniform2fv_bind) \
+ X("ProgramUniform3fv", glProgramUniform3fv_bind) \
+ X("ProgramUniform4fv", glProgramUniform4fv_bind) \
+ X("ProgramUniform1iv", glProgramUniform1iv_bind) \
+ X("ProgramUniform2iv", glProgramUniform2iv_bind) \
+ X("ProgramUniform3iv", glProgramUniform3iv_bind) \
+ X("ProgramUniform4iv", glProgramUniform4iv_bind) \
+ X("ProgramUniform1uiv", glProgramUniform1uiv_bind) \
+ X("ProgramUniform2uiv", glProgramUniform2uiv_bind) \
+ X("ProgramUniform3uiv", glProgramUniform3uiv_bind) \
+ X("ProgramUniform4uiv", glProgramUniform4uiv_bind) \
+ X("ProgramUniformMatrix2fv", glProgramUniformMatrix2fv_bind) \
+ X("ProgramUniformMatrix3fv", glProgramUniformMatrix3fv_bind) \
+ X("ProgramUniformMatrix4fv", glProgramUniformMatrix4fv_bind) \
+ X("ProgramUniformMatrix2x3fv", glProgramUniformMatrix2x3fv_bind) \
+ X("ProgramUniformMatrix3x2fv", glProgramUniformMatrix3x2fv_bind) \
+ X("ProgramUniformMatrix2x4fv", glProgramUniformMatrix2x4fv_bind) \
+ X("ProgramUniformMatrix4x2fv", glProgramUniformMatrix4x2fv_bind) \
+ X("ProgramUniformMatrix3x4fv", glProgramUniformMatrix3x4fv_bind) \
+ X("ProgramUniformMatrix4x3fv", glProgramUniformMatrix4x3fv_bind) \
+ X("ProvokingVertex", glProvokingVertex_bind) \
+ X("QueryCounter", glQueryCounter_bind) \
+ X("ReadBuffer", glReadBuffer_bind) \
+ X("ReadPixels", glReadPixels_bind) \
+ X("ReleaseShaderCompiler", glReleaseShaderCompiler_bind) \
+ X("RenderbufferStorage", glRenderbufferStorage_bind) \
+ X("RenderbufferStorageMultisample", glRenderbufferStorageMultisample_bind) \
+ X("ResumeTransformFeedback", glResumeTransformFeedback_bind) \
+ X("SampleCoverage", glSampleCoverage_bind) \
+ X("SampleMaski", glSampleMaski_bind) \
+ X("SamplerParameterf", glSamplerParameterf_bind) \
+ X("SamplerParameteri", glSamplerParameteri_bind) \
+ X("SamplerParameterfv", glSamplerParameterfv_bind) \
+ X("SamplerParameteriv", glSamplerParameteriv_bind) \
+ X("SamplerParameterIiv", glSamplerParameterIiv_bind) \
+ X("SamplerParameterIuiv", glSamplerParameterIuiv_bind) \
+ X("Scissor", glScissor_bind) \
+ X("ScissorArrayv", glScissorArrayv_bind) \
+ X("ScissorIndexed", glScissorIndexed_bind) \
+ X("ScissorIndexedv", glScissorIndexedv_bind) \
+ X("ShaderBinary", glShaderBinary_bind) \
+ X("ShaderSource", glShaderSource_bind) \
+ X("StencilFunc", glStencilFunc_bind) \
+ X("StencilFuncSeparate", glStencilFuncSeparate_bind) \
+ X("StencilMask", glStencilMask_bind) \
+ X("StencilMaskSeparate", glStencilMaskSeparate_bind) \
+ X("StencilOp", glStencilOp_bind) \
+ X("StencilOpSeparate", glStencilOpSeparate_bind) \
+ X("TexBuffer", glTexBuffer_bind) \
+ X("TexImage1D", glTexImage1D_bind) \
+ X("TexImage2D", glTexImage2D_bind) \
+ X("TexImage2DMultisample", glTexImage2DMultisample_bind) \
+ X("TexImage3D", glTexImage3D_bind) \
+ X("TexImage3DMultisample", glTexImage3DMultisample_bind) \
+ X("TexParameterf", glTexParameterf_bind) \
+ X("TexParameteri", glTexParameteri_bind) \
+ X("TexParameterfv", glTexParameterfv_bind) \
+ X("TexParameteriv", glTexParameteriv_bind) \
+ X("TexParameterIiv", glTexParameterIiv_bind) \
+ X("TexParameterIuiv", glTexParameterIuiv_bind) \
+ X("TexSubImage1D", glTexSubImage1D_bind) \
+ X("TexSubImage2D", glTexSubImage2D_bind) \
+ X("TexSubImage3D", glTexSubImage3D_bind) \
+ X("TransformFeedbackVaryings", glTransformFeedbackVaryings_bind) \
+ X("Uniform1f", glUniform1f_bind) \
+ X("Uniform2f", glUniform2f_bind) \
+ X("Uniform3f", glUniform3f_bind) \
+ X("Uniform4f", glUniform4f_bind) \
+ X("Uniform1i", glUniform1i_bind) \
+ X("Uniform2i", glUniform2i_bind) \
+ X("Uniform3i", glUniform3i_bind) \
+ X("Uniform4i", glUniform4i_bind) \
+ X("Uniform1ui", glUniform1ui_bind) \
+ X("Uniform2ui", glUniform2ui_bind) \
+ X("Uniform3ui", glUniform3ui_bind) \
+ X("Uniform4ui", glUniform4ui_bind) \
+ X("Uniform1fv", glUniform1fv_bind) \
+ X("Uniform2fv", glUniform2fv_bind) \
+ X("Uniform3fv", glUniform3fv_bind) \
+ X("Uniform4fv", glUniform4fv_bind) \
+ X("Uniform1iv", glUniform1iv_bind) \
+ X("Uniform2iv", glUniform2iv_bind) \
+ X("Uniform3iv", glUniform3iv_bind) \
+ X("Uniform4iv", glUniform4iv_bind) \
+ X("Uniform1uiv", glUniform1uiv_bind) \
+ X("Uniform2uiv", glUniform2uiv_bind) \
+ X("Uniform3uiv", glUniform3uiv_bind) \
+ X("Uniform4uiv", glUniform4uiv_bind) \
+ X("UniformMatrix2fv", glUniformMatrix2fv_bind) \
+ X("UniformMatrix3fv", glUniformMatrix3fv_bind) \
+ X("UniformMatrix4fv", glUniformMatrix4fv_bind) \
+ X("UniformMatrix2x3fv", glUniformMatrix2x3fv_bind) \
+ X("UniformMatrix3x2fv", glUniformMatrix3x2fv_bind) \
+ X("UniformMatrix2x4fv", glUniformMatrix2x4fv_bind) \
+ X("UniformMatrix4x2fv", glUniformMatrix4x2fv_bind) \
+ X("UniformMatrix3x4fv", glUniformMatrix3x4fv_bind) \
+ X("UniformMatrix4x3fv", glUniformMatrix4x3fv_bind) \
+ X("UniformSubroutinesuiv", glUniformSubroutinesuiv_bind) \
+ X("UnmapBuffer", glUnmapBuffer_bind) \
+ X("UseProgram", glUseProgram_bind) \
+ X("UseProgramStages", glUseProgramStages_bind) \
+ X("ValidateProgram", glValidateProgram_bind) \
+ X("ValidateProgramPipeline", glValidateProgramPipeline_bind) \
+ X("VertexAttrib1f", glVertexAttrib1f_bind) \
+ X("VertexAttrib1s", glVertexAttrib1s_bind) \
+ X("VertexAttrib1d", glVertexAttrib1d_bind) \
+ X("VertexAttribI1i", glVertexAttribI1i_bind) \
+ X("VertexAttribI1ui", glVertexAttribI1ui_bind) \
+ X("VertexAttrib2f", glVertexAttrib2f_bind) \
+ X("VertexAttrib2s", glVertexAttrib2s_bind) \
+ X("VertexAttrib2d", glVertexAttrib2d_bind) \
+ X("VertexAttribI2i", glVertexAttribI2i_bind) \
+ X("VertexAttribI2ui", glVertexAttribI2ui_bind) \
+ X("VertexAttrib3f", glVertexAttrib3f_bind) \
+ X("VertexAttrib3s", glVertexAttrib3s_bind) \
+ X("VertexAttrib3d", glVertexAttrib3d_bind) \
+ X("VertexAttribI3i", glVertexAttribI3i_bind) \
+ X("VertexAttribI3ui", glVertexAttribI3ui_bind) \
+ X("VertexAttrib4f", glVertexAttrib4f_bind) \
+ X("VertexAttrib4s", glVertexAttrib4s_bind) \
+ X("VertexAttrib4d", glVertexAttrib4d_bind) \
+ X("VertexAttrib4Nub", glVertexAttrib4Nub_bind) \
+ X("VertexAttribI4i", glVertexAttribI4i_bind) \
+ X("VertexAttribI4ui", glVertexAttribI4ui_bind) \
+ X("VertexAttribL1d", glVertexAttribL1d_bind) \
+ X("VertexAttribL2d", glVertexAttribL2d_bind) \
+ X("VertexAttribL3d", glVertexAttribL3d_bind) \
+ X("VertexAttribL4d", glVertexAttribL4d_bind) \
+ X("VertexAttrib1fv", glVertexAttrib1fv_bind) \
+ X("VertexAttrib1sv", glVertexAttrib1sv_bind) \
+ X("VertexAttrib1dv", glVertexAttrib1dv_bind) \
+ X("VertexAttribI1iv", glVertexAttribI1iv_bind) \
+ X("VertexAttribI1uiv", glVertexAttribI1uiv_bind) \
+ X("VertexAttrib2fv", glVertexAttrib2fv_bind) \
+ X("VertexAttrib2sv", glVertexAttrib2sv_bind) \
+ X("VertexAttrib2dv", glVertexAttrib2dv_bind) \
+ X("VertexAttribI2iv", glVertexAttribI2iv_bind) \
+ X("VertexAttribI2uiv", glVertexAttribI2uiv_bind) \
+ X("VertexAttrib3fv", glVertexAttrib3fv_bind) \
+ X("VertexAttrib3sv", glVertexAttrib3sv_bind) \
+ X("VertexAttrib3dv", glVertexAttrib3dv_bind) \
+ X("VertexAttribI3iv", glVertexAttribI3iv_bind) \
+ X("VertexAttribI3uiv", glVertexAttribI3uiv_bind) \
+ X("VertexAttrib4fv", glVertexAttrib4fv_bind) \
+ X("VertexAttrib4sv", glVertexAttrib4sv_bind) \
+ X("VertexAttrib4dv", glVertexAttrib4dv_bind) \
+ X("VertexAttrib4iv", glVertexAttrib4iv_bind) \
+ X("VertexAttrib4bv", glVertexAttrib4bv_bind) \
+ X("VertexAttrib4ubv", glVertexAttrib4ubv_bind) \
+ X("VertexAttrib4usv", glVertexAttrib4usv_bind) \
+ X("VertexAttrib4uiv", glVertexAttrib4uiv_bind) \
+ X("VertexAttrib4Nbv", glVertexAttrib4Nbv_bind) \
+ X("VertexAttrib4Nsv", glVertexAttrib4Nsv_bind) \
+ X("VertexAttrib4Niv", glVertexAttrib4Niv_bind) \
+ X("VertexAttrib4Nubv", glVertexAttrib4Nubv_bind) \
+ X("VertexAttrib4Nusv", glVertexAttrib4Nusv_bind) \
+ X("VertexAttrib4Nuiv", glVertexAttrib4Nuiv_bind) \
+ X("VertexAttribI4bv", glVertexAttribI4bv_bind) \
+ X("VertexAttribI4ubv", glVertexAttribI4ubv_bind) \
+ X("VertexAttribI4sv", glVertexAttribI4sv_bind) \
+ X("VertexAttribI4usv", glVertexAttribI4usv_bind) \
+ X("VertexAttribI4iv", glVertexAttribI4iv_bind) \
+ X("VertexAttribI4uiv", glVertexAttribI4uiv_bind) \
+ X("VertexAttribL1dv", glVertexAttribL1dv_bind) \
+ X("VertexAttribL2dv", glVertexAttribL2dv_bind) \
+ X("VertexAttribL3dv", glVertexAttribL3dv_bind) \
+ X("VertexAttribL4dv", glVertexAttribL4dv_bind) \
+ X("VertexAttribP1ui", glVertexAttribP1ui_bind) \
+ X("VertexAttribP2ui", glVertexAttribP2ui_bind) \
+ X("VertexAttribP3ui", glVertexAttribP3ui_bind) \
+ X("VertexAttribP4ui", glVertexAttribP4ui_bind) \
+ X("VertexAttribPointer", glVertexAttribPointer_bind) \
+ X("VertexAttribIPointer", glVertexAttribIPointer_bind) \
+ X("Viewport", glViewport_bind) \
+ X("ViewportArrayv", glViewportArrayv_bind) \
+ X("ViewportIndexedf", glViewportIndexedf_bind) \
+ X("ViewportIndexedfv", glViewportIndexedfv_bind) \
+ X("WaitSync", glWaitSync_bind) \
+
+
+#define GL_ENUM \
+ X("DEPTH_BUFFER_BIT", GL_DEPTH_BUFFER_BIT) \
+ X("STENCIL_BUFFER_BIT", GL_STENCIL_BUFFER_BIT) \
+ X("COLOR_BUFFER_BIT", GL_COLOR_BUFFER_BIT) \
+ X("FALSE", GL_FALSE) \
+ X("TRUE", GL_TRUE) \
+ X("POINTS", GL_POINTS) \
+ X("LINES", GL_LINES) \
+ X("LINE_LOOP", GL_LINE_LOOP) \
+ X("LINE_STRIP", GL_LINE_STRIP) \
+ X("TRIANGLES", GL_TRIANGLES) \
+ X("TRIANGLE_STRIP", GL_TRIANGLE_STRIP) \
+ X("TRIANGLE_FAN", GL_TRIANGLE_FAN) \
+ X("QUADS", GL_QUADS) \
+ X("NEVER", GL_NEVER) \
+ X("LESS", GL_LESS) \
+ X("EQUAL", GL_EQUAL) \
+ X("LEQUAL", GL_LEQUAL) \
+ X("GREATER", GL_GREATER) \
+ X("NOTEQUAL", GL_NOTEQUAL) \
+ X("GEQUAL", GL_GEQUAL) \
+ X("ALWAYS", GL_ALWAYS) \
+ X("ZERO", GL_ZERO) \
+ X("ONE", GL_ONE) \
+ X("SRC_COLOR", GL_SRC_COLOR) \
+ X("ONE_MINUS_SRC_COLOR", GL_ONE_MINUS_SRC_COLOR) \
+ X("SRC_ALPHA", GL_SRC_ALPHA) \
+ X("ONE_MINUS_SRC_ALPHA", GL_ONE_MINUS_SRC_ALPHA) \
+ X("DST_ALPHA", GL_DST_ALPHA) \
+ X("ONE_MINUS_DST_ALPHA", GL_ONE_MINUS_DST_ALPHA) \
+ X("DST_COLOR", GL_DST_COLOR) \
+ X("ONE_MINUS_DST_COLOR", GL_ONE_MINUS_DST_COLOR) \
+ X("SRC_ALPHA_SATURATE", GL_SRC_ALPHA_SATURATE) \
+ X("NONE", GL_NONE) \
+ X("FRONT_LEFT", GL_FRONT_LEFT) \
+ X("FRONT_RIGHT", GL_FRONT_RIGHT) \
+ X("BACK_LEFT", GL_BACK_LEFT) \
+ X("BACK_RIGHT", GL_BACK_RIGHT) \
+ X("FRONT", GL_FRONT) \
+ X("BACK", GL_BACK) \
+ X("LEFT", GL_LEFT) \
+ X("RIGHT", GL_RIGHT) \
+ X("FRONT_AND_BACK", GL_FRONT_AND_BACK) \
+ X("NO_ERROR", GL_NO_ERROR) \
+ X("INVALID_ENUM", GL_INVALID_ENUM) \
+ X("INVALID_VALUE", GL_INVALID_VALUE) \
+ X("INVALID_OPERATION", GL_INVALID_OPERATION) \
+ X("OUT_OF_MEMORY", GL_OUT_OF_MEMORY) \
+ X("CW", GL_CW) \
+ X("CCW", GL_CCW) \
+ X("POINT_SIZE", GL_POINT_SIZE) \
+ X("POINT_SIZE_RANGE", GL_POINT_SIZE_RANGE) \
+ X("POINT_SIZE_GRANULARITY", GL_POINT_SIZE_GRANULARITY) \
+ X("LINE_SMOOTH", GL_LINE_SMOOTH) \
+ X("LINE_WIDTH", GL_LINE_WIDTH) \
+ X("LINE_WIDTH_RANGE", GL_LINE_WIDTH_RANGE) \
+ X("LINE_WIDTH_GRANULARITY", GL_LINE_WIDTH_GRANULARITY) \
+ X("POLYGON_MODE", GL_POLYGON_MODE) \
+ X("POLYGON_SMOOTH", GL_POLYGON_SMOOTH) \
+ X("CULL_FACE", GL_CULL_FACE) \
+ X("CULL_FACE_MODE", GL_CULL_FACE_MODE) \
+ X("FRONT_FACE", GL_FRONT_FACE) \
+ X("DEPTH_RANGE", GL_DEPTH_RANGE) \
+ X("DEPTH_TEST", GL_DEPTH_TEST) \
+ X("DEPTH_WRITEMASK", GL_DEPTH_WRITEMASK) \
+ X("DEPTH_CLEAR_VALUE", GL_DEPTH_CLEAR_VALUE) \
+ X("DEPTH_FUNC", GL_DEPTH_FUNC) \
+ X("STENCIL_TEST", GL_STENCIL_TEST) \
+ X("STENCIL_CLEAR_VALUE", GL_STENCIL_CLEAR_VALUE) \
+ X("STENCIL_FUNC", GL_STENCIL_FUNC) \
+ X("STENCIL_VALUE_MASK", GL_STENCIL_VALUE_MASK) \
+ X("STENCIL_FAIL", GL_STENCIL_FAIL) \
+ X("STENCIL_PASS_DEPTH_FAIL", GL_STENCIL_PASS_DEPTH_FAIL) \
+ X("STENCIL_PASS_DEPTH_PASS", GL_STENCIL_PASS_DEPTH_PASS) \
+ X("STENCIL_REF", GL_STENCIL_REF) \
+ X("STENCIL_WRITEMASK", GL_STENCIL_WRITEMASK) \
+ X("VIEWPORT", GL_VIEWPORT) \
+ X("DITHER", GL_DITHER) \
+ X("BLEND_DST", GL_BLEND_DST) \
+ X("BLEND_SRC", GL_BLEND_SRC) \
+ X("BLEND", GL_BLEND) \
+ X("LOGIC_OP_MODE", GL_LOGIC_OP_MODE) \
+ X("DRAW_BUFFER", GL_DRAW_BUFFER) \
+ X("READ_BUFFER", GL_READ_BUFFER) \
+ X("SCISSOR_BOX", GL_SCISSOR_BOX) \
+ X("SCISSOR_TEST", GL_SCISSOR_TEST) \
+ X("COLOR_CLEAR_VALUE", GL_COLOR_CLEAR_VALUE) \
+ X("COLOR_WRITEMASK", GL_COLOR_WRITEMASK) \
+ X("DOUBLEBUFFER", GL_DOUBLEBUFFER) \
+ X("STEREO", GL_STEREO) \
+ X("LINE_SMOOTH_HINT", GL_LINE_SMOOTH_HINT) \
+ X("POLYGON_SMOOTH_HINT", GL_POLYGON_SMOOTH_HINT) \
+ X("UNPACK_SWAP_BYTES", GL_UNPACK_SWAP_BYTES) \
+ X("UNPACK_LSB_FIRST", GL_UNPACK_LSB_FIRST) \
+ X("UNPACK_ROW_LENGTH", GL_UNPACK_ROW_LENGTH) \
+ X("UNPACK_SKIP_ROWS", GL_UNPACK_SKIP_ROWS) \
+ X("UNPACK_SKIP_PIXELS", GL_UNPACK_SKIP_PIXELS) \
+ X("UNPACK_ALIGNMENT", GL_UNPACK_ALIGNMENT) \
+ X("PACK_SWAP_BYTES", GL_PACK_SWAP_BYTES) \
+ X("PACK_LSB_FIRST", GL_PACK_LSB_FIRST) \
+ X("PACK_ROW_LENGTH", GL_PACK_ROW_LENGTH) \
+ X("PACK_SKIP_ROWS", GL_PACK_SKIP_ROWS) \
+ X("PACK_SKIP_PIXELS", GL_PACK_SKIP_PIXELS) \
+ X("PACK_ALIGNMENT", GL_PACK_ALIGNMENT) \
+ X("MAX_TEXTURE_SIZE", GL_MAX_TEXTURE_SIZE) \
+ X("MAX_VIEWPORT_DIMS", GL_MAX_VIEWPORT_DIMS) \
+ X("SUBPIXEL_BITS", GL_SUBPIXEL_BITS) \
+ X("TEXTURE_1D", GL_TEXTURE_1D) \
+ X("TEXTURE_2D", GL_TEXTURE_2D) \
+ X("TEXTURE_WIDTH", GL_TEXTURE_WIDTH) \
+ X("TEXTURE_HEIGHT", GL_TEXTURE_HEIGHT) \
+ X("TEXTURE_BORDER_COLOR", GL_TEXTURE_BORDER_COLOR) \
+ X("DONT_CARE", GL_DONT_CARE) \
+ X("FASTEST", GL_FASTEST) \
+ X("NICEST", GL_NICEST) \
+ X("BYTE", GL_BYTE) \
+ X("UNSIGNED_BYTE", GL_UNSIGNED_BYTE) \
+ X("SHORT", GL_SHORT) \
+ X("UNSIGNED_SHORT", GL_UNSIGNED_SHORT) \
+ X("INT", GL_INT) \
+ X("UNSIGNED_INT", GL_UNSIGNED_INT) \
+ X("FLOAT", GL_FLOAT) \
+ X("STACK_OVERFLOW", GL_STACK_OVERFLOW) \
+ X("STACK_UNDERFLOW", GL_STACK_UNDERFLOW) \
+ X("CLEAR", GL_CLEAR) \
+ X("AND", GL_AND) \
+ X("AND_REVERSE", GL_AND_REVERSE) \
+ X("COPY", GL_COPY) \
+ X("AND_INVERTED", GL_AND_INVERTED) \
+ X("NOOP", GL_NOOP) \
+ X("XOR", GL_XOR) \
+ X("OR", GL_OR) \
+ X("NOR", GL_NOR) \
+ X("EQUIV", GL_EQUIV) \
+ X("INVERT", GL_INVERT) \
+ X("OR_REVERSE", GL_OR_REVERSE) \
+ X("COPY_INVERTED", GL_COPY_INVERTED) \
+ X("OR_INVERTED", GL_OR_INVERTED) \
+ X("NAND", GL_NAND) \
+ X("SET", GL_SET) \
+ X("TEXTURE", GL_TEXTURE) \
+ X("COLOR", GL_COLOR) \
+ X("DEPTH", GL_DEPTH) \
+ X("STENCIL", GL_STENCIL) \
+ X("STENCIL_INDEX", GL_STENCIL_INDEX) \
+ X("DEPTH_COMPONENT", GL_DEPTH_COMPONENT) \
+ X("RED", GL_RED) \
+ X("GREEN", GL_GREEN) \
+ X("BLUE", GL_BLUE) \
+ X("ALPHA", GL_ALPHA) \
+ X("RGB", GL_RGB) \
+ X("RGBA", GL_RGBA) \
+ X("POINT", GL_POINT) \
+ X("LINE", GL_LINE) \
+ X("FILL", GL_FILL) \
+ X("KEEP", GL_KEEP) \
+ X("REPLACE", GL_REPLACE) \
+ X("INCR", GL_INCR) \
+ X("DECR", GL_DECR) \
+ X("VENDOR", GL_VENDOR) \
+ X("RENDERER", GL_RENDERER) \
+ X("VERSION", GL_VERSION) \
+ X("EXTENSIONS", GL_EXTENSIONS) \
+ X("NEAREST", GL_NEAREST) \
+ X("LINEAR", GL_LINEAR) \
+ X("NEAREST_MIPMAP_NEAREST", GL_NEAREST_MIPMAP_NEAREST) \
+ X("LINEAR_MIPMAP_NEAREST", GL_LINEAR_MIPMAP_NEAREST) \
+ X("NEAREST_MIPMAP_LINEAR", GL_NEAREST_MIPMAP_LINEAR) \
+ X("LINEAR_MIPMAP_LINEAR", GL_LINEAR_MIPMAP_LINEAR) \
+ X("TEXTURE_MAG_FILTER", GL_TEXTURE_MAG_FILTER) \
+ X("TEXTURE_MIN_FILTER", GL_TEXTURE_MIN_FILTER) \
+ X("TEXTURE_WRAP_S", GL_TEXTURE_WRAP_S) \
+ X("TEXTURE_WRAP_T", GL_TEXTURE_WRAP_T) \
+ X("REPEAT", GL_REPEAT) \
+ X("CURRENT_BIT", GL_CURRENT_BIT) \
+ X("POINT_BIT", GL_POINT_BIT) \
+ X("LINE_BIT", GL_LINE_BIT) \
+ X("POLYGON_BIT", GL_POLYGON_BIT) \
+ X("POLYGON_STIPPLE_BIT", GL_POLYGON_STIPPLE_BIT) \
+ X("PIXEL_MODE_BIT", GL_PIXEL_MODE_BIT) \
+ X("LIGHTING_BIT", GL_LIGHTING_BIT) \
+ X("FOG_BIT", GL_FOG_BIT) \
+ X("ACCUM_BUFFER_BIT", GL_ACCUM_BUFFER_BIT) \
+ X("VIEWPORT_BIT", GL_VIEWPORT_BIT) \
+ X("TRANSFORM_BIT", GL_TRANSFORM_BIT) \
+ X("ENABLE_BIT", GL_ENABLE_BIT) \
+ X("HINT_BIT", GL_HINT_BIT) \
+ X("EVAL_BIT", GL_EVAL_BIT) \
+ X("LIST_BIT", GL_LIST_BIT) \
+ X("TEXTURE_BIT", GL_TEXTURE_BIT) \
+ X("SCISSOR_BIT", GL_SCISSOR_BIT) \
+ X("ALL_ATTRIB_BITS", GL_ALL_ATTRIB_BITS) \
+ X("QUAD_STRIP", GL_QUAD_STRIP) \
+ X("POLYGON", GL_POLYGON) \
+ X("ACCUM", GL_ACCUM) \
+ X("LOAD", GL_LOAD) \
+ X("RETURN", GL_RETURN) \
+ X("MULT", GL_MULT) \
+ X("ADD", GL_ADD) \
+ X("AUX0", GL_AUX0) \
+ X("AUX1", GL_AUX1) \
+ X("AUX2", GL_AUX2) \
+ X("AUX3", GL_AUX3) \
+ X("2D", GL_2D) \
+ X("3D", GL_3D) \
+ X("3D_COLOR", GL_3D_COLOR) \
+ X("3D_COLOR_TEXTURE", GL_3D_COLOR_TEXTURE) \
+ X("4D_COLOR_TEXTURE", GL_4D_COLOR_TEXTURE) \
+ X("PASS_THROUGH_TOKEN", GL_PASS_THROUGH_TOKEN) \
+ X("POINT_TOKEN", GL_POINT_TOKEN) \
+ X("LINE_TOKEN", GL_LINE_TOKEN) \
+ X("POLYGON_TOKEN", GL_POLYGON_TOKEN) \
+ X("BITMAP_TOKEN", GL_BITMAP_TOKEN) \
+ X("DRAW_PIXEL_TOKEN", GL_DRAW_PIXEL_TOKEN) \
+ X("COPY_PIXEL_TOKEN", GL_COPY_PIXEL_TOKEN) \
+ X("LINE_RESET_TOKEN", GL_LINE_RESET_TOKEN) \
+ X("EXP", GL_EXP) \
+ X("EXP2", GL_EXP2) \
+ X("COEFF", GL_COEFF) \
+ X("ORDER", GL_ORDER) \
+ X("DOMAIN", GL_DOMAIN) \
+ X("PIXEL_MAP_I_TO_I", GL_PIXEL_MAP_I_TO_I) \
+ X("PIXEL_MAP_S_TO_S", GL_PIXEL_MAP_S_TO_S) \
+ X("PIXEL_MAP_I_TO_R", GL_PIXEL_MAP_I_TO_R) \
+ X("PIXEL_MAP_I_TO_G", GL_PIXEL_MAP_I_TO_G) \
+ X("PIXEL_MAP_I_TO_B", GL_PIXEL_MAP_I_TO_B) \
+ X("PIXEL_MAP_I_TO_A", GL_PIXEL_MAP_I_TO_A) \
+ X("PIXEL_MAP_R_TO_R", GL_PIXEL_MAP_R_TO_R) \
+ X("PIXEL_MAP_G_TO_G", GL_PIXEL_MAP_G_TO_G) \
+ X("PIXEL_MAP_B_TO_B", GL_PIXEL_MAP_B_TO_B) \
+ X("PIXEL_MAP_A_TO_A", GL_PIXEL_MAP_A_TO_A) \
+ X("CURRENT_COLOR", GL_CURRENT_COLOR) \
+ X("CURRENT_INDEX", GL_CURRENT_INDEX) \
+ X("CURRENT_NORMAL", GL_CURRENT_NORMAL) \
+ X("CURRENT_TEXTURE_COORDS", GL_CURRENT_TEXTURE_COORDS) \
+ X("CURRENT_RASTER_COLOR", GL_CURRENT_RASTER_COLOR) \
+ X("CURRENT_RASTER_INDEX", GL_CURRENT_RASTER_INDEX) \
+ X("CURRENT_RASTER_TEXTURE_COORDS", GL_CURRENT_RASTER_TEXTURE_COORDS) \
+ X("CURRENT_RASTER_POSITION", GL_CURRENT_RASTER_POSITION) \
+ X("CURRENT_RASTER_POSITION_VALID", GL_CURRENT_RASTER_POSITION_VALID) \
+ X("CURRENT_RASTER_DISTANCE", GL_CURRENT_RASTER_DISTANCE) \
+ X("POINT_SMOOTH", GL_POINT_SMOOTH) \
+ X("LINE_STIPPLE", GL_LINE_STIPPLE) \
+ X("LINE_STIPPLE_PATTERN", GL_LINE_STIPPLE_PATTERN) \
+ X("LINE_STIPPLE_REPEAT", GL_LINE_STIPPLE_REPEAT) \
+ X("LIST_MODE", GL_LIST_MODE) \
+ X("MAX_LIST_NESTING", GL_MAX_LIST_NESTING) \
+ X("LIST_BASE", GL_LIST_BASE) \
+ X("LIST_INDEX", GL_LIST_INDEX) \
+ X("POLYGON_STIPPLE", GL_POLYGON_STIPPLE) \
+ X("EDGE_FLAG", GL_EDGE_FLAG) \
+ X("LIGHTING", GL_LIGHTING) \
+ X("LIGHT_MODEL_LOCAL_VIEWER", GL_LIGHT_MODEL_LOCAL_VIEWER) \
+ X("LIGHT_MODEL_TWO_SIDE", GL_LIGHT_MODEL_TWO_SIDE) \
+ X("LIGHT_MODEL_AMBIENT", GL_LIGHT_MODEL_AMBIENT) \
+ X("SHADE_MODEL", GL_SHADE_MODEL) \
+ X("COLOR_MATERIAL_FACE", GL_COLOR_MATERIAL_FACE) \
+ X("COLOR_MATERIAL_PARAMETER", GL_COLOR_MATERIAL_PARAMETER) \
+ X("COLOR_MATERIAL", GL_COLOR_MATERIAL) \
+ X("FOG", GL_FOG) \
+ X("FOG_INDEX", GL_FOG_INDEX) \
+ X("FOG_DENSITY", GL_FOG_DENSITY) \
+ X("FOG_START", GL_FOG_START) \
+ X("FOG_END", GL_FOG_END) \
+ X("FOG_MODE", GL_FOG_MODE) \
+ X("FOG_COLOR", GL_FOG_COLOR) \
+ X("ACCUM_CLEAR_VALUE", GL_ACCUM_CLEAR_VALUE) \
+ X("MATRIX_MODE", GL_MATRIX_MODE) \
+ X("NORMALIZE", GL_NORMALIZE) \
+ X("MODELVIEW_STACK_DEPTH", GL_MODELVIEW_STACK_DEPTH) \
+ X("PROJECTION_STACK_DEPTH", GL_PROJECTION_STACK_DEPTH) \
+ X("TEXTURE_STACK_DEPTH", GL_TEXTURE_STACK_DEPTH) \
+ X("MODELVIEW_MATRIX", GL_MODELVIEW_MATRIX) \
+ X("PROJECTION_MATRIX", GL_PROJECTION_MATRIX) \
+ X("TEXTURE_MATRIX", GL_TEXTURE_MATRIX) \
+ X("ATTRIB_STACK_DEPTH", GL_ATTRIB_STACK_DEPTH) \
+ X("ALPHA_TEST", GL_ALPHA_TEST) \
+ X("ALPHA_TEST_FUNC", GL_ALPHA_TEST_FUNC) \
+ X("ALPHA_TEST_REF", GL_ALPHA_TEST_REF) \
+ X("LOGIC_OP", GL_LOGIC_OP) \
+ X("AUX_BUFFERS", GL_AUX_BUFFERS) \
+ X("INDEX_CLEAR_VALUE", GL_INDEX_CLEAR_VALUE) \
+ X("INDEX_WRITEMASK", GL_INDEX_WRITEMASK) \
+ X("INDEX_MODE", GL_INDEX_MODE) \
+ X("RGBA_MODE", GL_RGBA_MODE) \
+ X("RENDER_MODE", GL_RENDER_MODE) \
+ X("PERSPECTIVE_CORRECTION_HINT", GL_PERSPECTIVE_CORRECTION_HINT) \
+ X("POINT_SMOOTH_HINT", GL_POINT_SMOOTH_HINT) \
+ X("FOG_HINT", GL_FOG_HINT) \
+ X("TEXTURE_GEN_S", GL_TEXTURE_GEN_S) \
+ X("TEXTURE_GEN_T", GL_TEXTURE_GEN_T) \
+ X("TEXTURE_GEN_R", GL_TEXTURE_GEN_R) \
+ X("TEXTURE_GEN_Q", GL_TEXTURE_GEN_Q) \
+ X("PIXEL_MAP_I_TO_I_SIZE", GL_PIXEL_MAP_I_TO_I_SIZE) \
+ X("PIXEL_MAP_S_TO_S_SIZE", GL_PIXEL_MAP_S_TO_S_SIZE) \
+ X("PIXEL_MAP_I_TO_R_SIZE", GL_PIXEL_MAP_I_TO_R_SIZE) \
+ X("PIXEL_MAP_I_TO_G_SIZE", GL_PIXEL_MAP_I_TO_G_SIZE) \
+ X("PIXEL_MAP_I_TO_B_SIZE", GL_PIXEL_MAP_I_TO_B_SIZE) \
+ X("PIXEL_MAP_I_TO_A_SIZE", GL_PIXEL_MAP_I_TO_A_SIZE) \
+ X("PIXEL_MAP_R_TO_R_SIZE", GL_PIXEL_MAP_R_TO_R_SIZE) \
+ X("PIXEL_MAP_G_TO_G_SIZE", GL_PIXEL_MAP_G_TO_G_SIZE) \
+ X("PIXEL_MAP_B_TO_B_SIZE", GL_PIXEL_MAP_B_TO_B_SIZE) \
+ X("PIXEL_MAP_A_TO_A_SIZE", GL_PIXEL_MAP_A_TO_A_SIZE) \
+ X("MAP_COLOR", GL_MAP_COLOR) \
+ X("MAP_STENCIL", GL_MAP_STENCIL) \
+ X("INDEX_SHIFT", GL_INDEX_SHIFT) \
+ X("INDEX_OFFSET", GL_INDEX_OFFSET) \
+ X("RED_SCALE", GL_RED_SCALE) \
+ X("RED_BIAS", GL_RED_BIAS) \
+ X("ZOOM_X", GL_ZOOM_X) \
+ X("ZOOM_Y", GL_ZOOM_Y) \
+ X("GREEN_SCALE", GL_GREEN_SCALE) \
+ X("GREEN_BIAS", GL_GREEN_BIAS) \
+ X("BLUE_SCALE", GL_BLUE_SCALE) \
+ X("BLUE_BIAS", GL_BLUE_BIAS) \
+ X("ALPHA_SCALE", GL_ALPHA_SCALE) \
+ X("ALPHA_BIAS", GL_ALPHA_BIAS) \
+ X("DEPTH_SCALE", GL_DEPTH_SCALE) \
+ X("DEPTH_BIAS", GL_DEPTH_BIAS) \
+ X("MAX_EVAL_ORDER", GL_MAX_EVAL_ORDER) \
+ X("MAX_LIGHTS", GL_MAX_LIGHTS) \
+ X("MAX_CLIP_PLANES", GL_MAX_CLIP_PLANES) \
+ X("MAX_PIXEL_MAP_TABLE", GL_MAX_PIXEL_MAP_TABLE) \
+ X("MAX_ATTRIB_STACK_DEPTH", GL_MAX_ATTRIB_STACK_DEPTH) \
+ X("MAX_MODELVIEW_STACK_DEPTH", GL_MAX_MODELVIEW_STACK_DEPTH) \
+ X("MAX_NAME_STACK_DEPTH", GL_MAX_NAME_STACK_DEPTH) \
+ X("MAX_PROJECTION_STACK_DEPTH", GL_MAX_PROJECTION_STACK_DEPTH) \
+ X("MAX_TEXTURE_STACK_DEPTH", GL_MAX_TEXTURE_STACK_DEPTH) \
+ X("INDEX_BITS", GL_INDEX_BITS) \
+ X("RED_BITS", GL_RED_BITS) \
+ X("GREEN_BITS", GL_GREEN_BITS) \
+ X("BLUE_BITS", GL_BLUE_BITS) \
+ X("ALPHA_BITS", GL_ALPHA_BITS) \
+ X("DEPTH_BITS", GL_DEPTH_BITS) \
+ X("STENCIL_BITS", GL_STENCIL_BITS) \
+ X("ACCUM_RED_BITS", GL_ACCUM_RED_BITS) \
+ X("ACCUM_GREEN_BITS", GL_ACCUM_GREEN_BITS) \
+ X("ACCUM_BLUE_BITS", GL_ACCUM_BLUE_BITS) \
+ X("ACCUM_ALPHA_BITS", GL_ACCUM_ALPHA_BITS) \
+ X("NAME_STACK_DEPTH", GL_NAME_STACK_DEPTH) \
+ X("AUTO_NORMAL", GL_AUTO_NORMAL) \
+ X("MAP1_COLOR_4", GL_MAP1_COLOR_4) \
+ X("MAP1_INDEX", GL_MAP1_INDEX) \
+ X("MAP1_NORMAL", GL_MAP1_NORMAL) \
+ X("MAP1_TEXTURE_COORD_1", GL_MAP1_TEXTURE_COORD_1) \
+ X("MAP1_TEXTURE_COORD_2", GL_MAP1_TEXTURE_COORD_2) \
+ X("MAP1_TEXTURE_COORD_3", GL_MAP1_TEXTURE_COORD_3) \
+ X("MAP1_TEXTURE_COORD_4", GL_MAP1_TEXTURE_COORD_4) \
+ X("MAP1_VERTEX_3", GL_MAP1_VERTEX_3) \
+ X("MAP1_VERTEX_4", GL_MAP1_VERTEX_4) \
+ X("MAP2_COLOR_4", GL_MAP2_COLOR_4) \
+ X("MAP2_INDEX", GL_MAP2_INDEX) \
+ X("MAP2_NORMAL", GL_MAP2_NORMAL) \
+ X("MAP2_TEXTURE_COORD_1", GL_MAP2_TEXTURE_COORD_1) \
+ X("MAP2_TEXTURE_COORD_2", GL_MAP2_TEXTURE_COORD_2) \
+ X("MAP2_TEXTURE_COORD_3", GL_MAP2_TEXTURE_COORD_3) \
+ X("MAP2_TEXTURE_COORD_4", GL_MAP2_TEXTURE_COORD_4) \
+ X("MAP2_VERTEX_3", GL_MAP2_VERTEX_3) \
+ X("MAP2_VERTEX_4", GL_MAP2_VERTEX_4) \
+ X("MAP1_GRID_DOMAIN", GL_MAP1_GRID_DOMAIN) \
+ X("MAP1_GRID_SEGMENTS", GL_MAP1_GRID_SEGMENTS) \
+ X("MAP2_GRID_DOMAIN", GL_MAP2_GRID_DOMAIN) \
+ X("MAP2_GRID_SEGMENTS", GL_MAP2_GRID_SEGMENTS) \
+ X("TEXTURE_COMPONENTS", GL_TEXTURE_COMPONENTS) \
+ X("TEXTURE_BORDER", GL_TEXTURE_BORDER) \
+ X("AMBIENT", GL_AMBIENT) \
+ X("DIFFUSE", GL_DIFFUSE) \
+ X("SPECULAR", GL_SPECULAR) \
+ X("POSITION", GL_POSITION) \
+ X("SPOT_DIRECTION", GL_SPOT_DIRECTION) \
+ X("SPOT_EXPONENT", GL_SPOT_EXPONENT) \
+ X("SPOT_CUTOFF", GL_SPOT_CUTOFF) \
+ X("CONSTANT_ATTENUATION", GL_CONSTANT_ATTENUATION) \
+ X("LINEAR_ATTENUATION", GL_LINEAR_ATTENUATION) \
+ X("QUADRATIC_ATTENUATION", GL_QUADRATIC_ATTENUATION) \
+ X("COMPILE", GL_COMPILE) \
+ X("COMPILE_AND_EXECUTE", GL_COMPILE_AND_EXECUTE) \
+ X("2_BYTES", GL_2_BYTES) \
+ X("3_BYTES", GL_3_BYTES) \
+ X("4_BYTES", GL_4_BYTES) \
+ X("EMISSION", GL_EMISSION) \
+ X("SHININESS", GL_SHININESS) \
+ X("AMBIENT_AND_DIFFUSE", GL_AMBIENT_AND_DIFFUSE) \
+ X("COLOR_INDEXES", GL_COLOR_INDEXES) \
+ X("MODELVIEW", GL_MODELVIEW) \
+ X("PROJECTION", GL_PROJECTION) \
+ X("COLOR_INDEX", GL_COLOR_INDEX) \
+ X("LUMINANCE", GL_LUMINANCE) \
+ X("LUMINANCE_ALPHA", GL_LUMINANCE_ALPHA) \
+ X("BITMAP", GL_BITMAP) \
+ X("RENDER", GL_RENDER) \
+ X("FEEDBACK", GL_FEEDBACK) \
+ X("SELECT", GL_SELECT) \
+ X("FLAT", GL_FLAT) \
+ X("SMOOTH", GL_SMOOTH) \
+ X("S", GL_S) \
+ X("T", GL_T) \
+ X("R", GL_R) \
+ X("Q", GL_Q) \
+ X("MODULATE", GL_MODULATE) \
+ X("DECAL", GL_DECAL) \
+ X("TEXTURE_ENV_MODE", GL_TEXTURE_ENV_MODE) \
+ X("TEXTURE_ENV_COLOR", GL_TEXTURE_ENV_COLOR) \
+ X("TEXTURE_ENV", GL_TEXTURE_ENV) \
+ X("EYE_LINEAR", GL_EYE_LINEAR) \
+ X("OBJECT_LINEAR", GL_OBJECT_LINEAR) \
+ X("SPHERE_MAP", GL_SPHERE_MAP) \
+ X("TEXTURE_GEN_MODE", GL_TEXTURE_GEN_MODE) \
+ X("OBJECT_PLANE", GL_OBJECT_PLANE) \
+ X("EYE_PLANE", GL_EYE_PLANE) \
+ X("CLAMP", GL_CLAMP) \
+ X("CLIP_PLANE0", GL_CLIP_PLANE0) \
+ X("CLIP_PLANE1", GL_CLIP_PLANE1) \
+ X("CLIP_PLANE2", GL_CLIP_PLANE2) \
+ X("CLIP_PLANE3", GL_CLIP_PLANE3) \
+ X("CLIP_PLANE4", GL_CLIP_PLANE4) \
+ X("CLIP_PLANE5", GL_CLIP_PLANE5) \
+ X("LIGHT0", GL_LIGHT0) \
+ X("LIGHT1", GL_LIGHT1) \
+ X("LIGHT2", GL_LIGHT2) \
+ X("LIGHT3", GL_LIGHT3) \
+ X("LIGHT4", GL_LIGHT4) \
+ X("LIGHT5", GL_LIGHT5) \
+ X("LIGHT6", GL_LIGHT6) \
+ X("LIGHT7", GL_LIGHT7) \
+ X("COLOR_LOGIC_OP", GL_COLOR_LOGIC_OP) \
+ X("POLYGON_OFFSET_UNITS", GL_POLYGON_OFFSET_UNITS) \
+ X("POLYGON_OFFSET_POINT", GL_POLYGON_OFFSET_POINT) \
+ X("POLYGON_OFFSET_LINE", GL_POLYGON_OFFSET_LINE) \
+ X("POLYGON_OFFSET_FILL", GL_POLYGON_OFFSET_FILL) \
+ X("POLYGON_OFFSET_FACTOR", GL_POLYGON_OFFSET_FACTOR) \
+ X("TEXTURE_BINDING_1D", GL_TEXTURE_BINDING_1D) \
+ X("TEXTURE_BINDING_2D", GL_TEXTURE_BINDING_2D) \
+ X("TEXTURE_INTERNAL_FORMAT", GL_TEXTURE_INTERNAL_FORMAT) \
+ X("TEXTURE_RED_SIZE", GL_TEXTURE_RED_SIZE) \
+ X("TEXTURE_GREEN_SIZE", GL_TEXTURE_GREEN_SIZE) \
+ X("TEXTURE_BLUE_SIZE", GL_TEXTURE_BLUE_SIZE) \
+ X("TEXTURE_ALPHA_SIZE", GL_TEXTURE_ALPHA_SIZE) \
+ X("DOUBLE", GL_DOUBLE) \
+ X("PROXY_TEXTURE_1D", GL_PROXY_TEXTURE_1D) \
+ X("PROXY_TEXTURE_2D", GL_PROXY_TEXTURE_2D) \
+ X("R3_G3_B2", GL_R3_G3_B2) \
+ X("RGB4", GL_RGB4) \
+ X("RGB5", GL_RGB5) \
+ X("RGB8", GL_RGB8) \
+ X("RGB10", GL_RGB10) \
+ X("RGB12", GL_RGB12) \
+ X("RGB16", GL_RGB16) \
+ X("RGBA2", GL_RGBA2) \
+ X("RGBA4", GL_RGBA4) \
+ X("RGB5_A1", GL_RGB5_A1) \
+ X("RGBA8", GL_RGBA8) \
+ X("RGB10_A2", GL_RGB10_A2) \
+ X("RGBA12", GL_RGBA12) \
+ X("RGBA16", GL_RGBA16) \
+ X("CLIENT_PIXEL_STORE_BIT", GL_CLIENT_PIXEL_STORE_BIT) \
+ X("CLIENT_VERTEX_ARRAY_BIT", GL_CLIENT_VERTEX_ARRAY_BIT) \
+ X("CLIENT_ALL_ATTRIB_BITS", GL_CLIENT_ALL_ATTRIB_BITS) \
+ X("VERTEX_ARRAY_POINTER", GL_VERTEX_ARRAY_POINTER) \
+ X("NORMAL_ARRAY_POINTER", GL_NORMAL_ARRAY_POINTER) \
+ X("COLOR_ARRAY_POINTER", GL_COLOR_ARRAY_POINTER) \
+ X("INDEX_ARRAY_POINTER", GL_INDEX_ARRAY_POINTER) \
+ X("TEXTURE_COORD_ARRAY_POINTER", GL_TEXTURE_COORD_ARRAY_POINTER) \
+ X("EDGE_FLAG_ARRAY_POINTER", GL_EDGE_FLAG_ARRAY_POINTER) \
+ X("FEEDBACK_BUFFER_POINTER", GL_FEEDBACK_BUFFER_POINTER) \
+ X("SELECTION_BUFFER_POINTER", GL_SELECTION_BUFFER_POINTER) \
+ X("CLIENT_ATTRIB_STACK_DEPTH", GL_CLIENT_ATTRIB_STACK_DEPTH) \
+ X("INDEX_LOGIC_OP", GL_INDEX_LOGIC_OP) \
+ X("MAX_CLIENT_ATTRIB_STACK_DEPTH", GL_MAX_CLIENT_ATTRIB_STACK_DEPTH) \
+ X("FEEDBACK_BUFFER_SIZE", GL_FEEDBACK_BUFFER_SIZE) \
+ X("FEEDBACK_BUFFER_TYPE", GL_FEEDBACK_BUFFER_TYPE) \
+ X("SELECTION_BUFFER_SIZE", GL_SELECTION_BUFFER_SIZE) \
+ X("VERTEX_ARRAY", GL_VERTEX_ARRAY) \
+ X("NORMAL_ARRAY", GL_NORMAL_ARRAY) \
+ X("COLOR_ARRAY", GL_COLOR_ARRAY) \
+ X("INDEX_ARRAY", GL_INDEX_ARRAY) \
+ X("TEXTURE_COORD_ARRAY", GL_TEXTURE_COORD_ARRAY) \
+ X("EDGE_FLAG_ARRAY", GL_EDGE_FLAG_ARRAY) \
+ X("VERTEX_ARRAY_SIZE", GL_VERTEX_ARRAY_SIZE) \
+ X("VERTEX_ARRAY_TYPE", GL_VERTEX_ARRAY_TYPE) \
+ X("VERTEX_ARRAY_STRIDE", GL_VERTEX_ARRAY_STRIDE) \
+ X("NORMAL_ARRAY_TYPE", GL_NORMAL_ARRAY_TYPE) \
+ X("NORMAL_ARRAY_STRIDE", GL_NORMAL_ARRAY_STRIDE) \
+ X("COLOR_ARRAY_SIZE", GL_COLOR_ARRAY_SIZE) \
+ X("COLOR_ARRAY_TYPE", GL_COLOR_ARRAY_TYPE) \
+ X("COLOR_ARRAY_STRIDE", GL_COLOR_ARRAY_STRIDE) \
+ X("INDEX_ARRAY_TYPE", GL_INDEX_ARRAY_TYPE) \
+ X("INDEX_ARRAY_STRIDE", GL_INDEX_ARRAY_STRIDE) \
+ X("TEXTURE_COORD_ARRAY_SIZE", GL_TEXTURE_COORD_ARRAY_SIZE) \
+ X("TEXTURE_COORD_ARRAY_TYPE", GL_TEXTURE_COORD_ARRAY_TYPE) \
+ X("TEXTURE_COORD_ARRAY_STRIDE", GL_TEXTURE_COORD_ARRAY_STRIDE) \
+ X("EDGE_FLAG_ARRAY_STRIDE", GL_EDGE_FLAG_ARRAY_STRIDE) \
+ X("TEXTURE_LUMINANCE_SIZE", GL_TEXTURE_LUMINANCE_SIZE) \
+ X("TEXTURE_INTENSITY_SIZE", GL_TEXTURE_INTENSITY_SIZE) \
+ X("TEXTURE_PRIORITY", GL_TEXTURE_PRIORITY) \
+ X("TEXTURE_RESIDENT", GL_TEXTURE_RESIDENT) \
+ X("ALPHA4", GL_ALPHA4) \
+ X("ALPHA8", GL_ALPHA8) \
+ X("ALPHA12", GL_ALPHA12) \
+ X("ALPHA16", GL_ALPHA16) \
+ X("LUMINANCE4", GL_LUMINANCE4) \
+ X("LUMINANCE8", GL_LUMINANCE8) \
+ X("LUMINANCE12", GL_LUMINANCE12) \
+ X("LUMINANCE16", GL_LUMINANCE16) \
+ X("LUMINANCE4_ALPHA4", GL_LUMINANCE4_ALPHA4) \
+ X("LUMINANCE6_ALPHA2", GL_LUMINANCE6_ALPHA2) \
+ X("LUMINANCE8_ALPHA8", GL_LUMINANCE8_ALPHA8) \
+ X("LUMINANCE12_ALPHA4", GL_LUMINANCE12_ALPHA4) \
+ X("LUMINANCE12_ALPHA12", GL_LUMINANCE12_ALPHA12) \
+ X("LUMINANCE16_ALPHA16", GL_LUMINANCE16_ALPHA16) \
+ X("INTENSITY", GL_INTENSITY) \
+ X("INTENSITY4", GL_INTENSITY4) \
+ X("INTENSITY8", GL_INTENSITY8) \
+ X("INTENSITY12", GL_INTENSITY12) \
+ X("INTENSITY16", GL_INTENSITY16) \
+ X("V2F", GL_V2F) \
+ X("V3F", GL_V3F) \
+ X("C4UB_V2F", GL_C4UB_V2F) \
+ X("C4UB_V3F", GL_C4UB_V3F) \
+ X("C3F_V3F", GL_C3F_V3F) \
+ X("N3F_V3F", GL_N3F_V3F) \
+ X("C4F_N3F_V3F", GL_C4F_N3F_V3F) \
+ X("T2F_V3F", GL_T2F_V3F) \
+ X("T4F_V4F", GL_T4F_V4F) \
+ X("T2F_C4UB_V3F", GL_T2F_C4UB_V3F) \
+ X("T2F_C3F_V3F", GL_T2F_C3F_V3F) \
+ X("T2F_N3F_V3F", GL_T2F_N3F_V3F) \
+ X("T2F_C4F_N3F_V3F", GL_T2F_C4F_N3F_V3F) \
+ X("T4F_C4F_N3F_V4F", GL_T4F_C4F_N3F_V4F) \
+ X("UNSIGNED_BYTE_3_3_2", GL_UNSIGNED_BYTE_3_3_2) \
+ X("UNSIGNED_SHORT_4_4_4_4", GL_UNSIGNED_SHORT_4_4_4_4) \
+ X("UNSIGNED_SHORT_5_5_5_1", GL_UNSIGNED_SHORT_5_5_5_1) \
+ X("UNSIGNED_INT_8_8_8_8", GL_UNSIGNED_INT_8_8_8_8) \
+ X("UNSIGNED_INT_10_10_10_2", GL_UNSIGNED_INT_10_10_10_2) \
+ X("TEXTURE_BINDING_3D", GL_TEXTURE_BINDING_3D) \
+ X("PACK_SKIP_IMAGES", GL_PACK_SKIP_IMAGES) \
+ X("PACK_IMAGE_HEIGHT", GL_PACK_IMAGE_HEIGHT) \
+ X("UNPACK_SKIP_IMAGES", GL_UNPACK_SKIP_IMAGES) \
+ X("UNPACK_IMAGE_HEIGHT", GL_UNPACK_IMAGE_HEIGHT) \
+ X("TEXTURE_3D", GL_TEXTURE_3D) \
+ X("PROXY_TEXTURE_3D", GL_PROXY_TEXTURE_3D) \
+ X("TEXTURE_DEPTH", GL_TEXTURE_DEPTH) \
+ X("TEXTURE_WRAP_R", GL_TEXTURE_WRAP_R) \
+ X("MAX_3D_TEXTURE_SIZE", GL_MAX_3D_TEXTURE_SIZE) \
+ X("UNSIGNED_BYTE_2_3_3_REV", GL_UNSIGNED_BYTE_2_3_3_REV) \
+ X("UNSIGNED_SHORT_5_6_5", GL_UNSIGNED_SHORT_5_6_5) \
+ X("UNSIGNED_SHORT_5_6_5_REV", GL_UNSIGNED_SHORT_5_6_5_REV) \
+ X("UNSIGNED_SHORT_4_4_4_4_REV", GL_UNSIGNED_SHORT_4_4_4_4_REV) \
+ X("UNSIGNED_SHORT_1_5_5_5_REV", GL_UNSIGNED_SHORT_1_5_5_5_REV) \
+ X("UNSIGNED_INT_8_8_8_8_REV", GL_UNSIGNED_INT_8_8_8_8_REV) \
+ X("UNSIGNED_INT_2_10_10_10_REV", GL_UNSIGNED_INT_2_10_10_10_REV) \
+ X("BGR", GL_BGR) \
+ X("BGRA", GL_BGRA) \
+ X("MAX_ELEMENTS_VERTICES", GL_MAX_ELEMENTS_VERTICES) \
+ X("MAX_ELEMENTS_INDICES", GL_MAX_ELEMENTS_INDICES) \
+ X("CLAMP_TO_EDGE", GL_CLAMP_TO_EDGE) \
+ X("TEXTURE_MIN_LOD", GL_TEXTURE_MIN_LOD) \
+ X("TEXTURE_MAX_LOD", GL_TEXTURE_MAX_LOD) \
+ X("TEXTURE_BASE_LEVEL", GL_TEXTURE_BASE_LEVEL) \
+ X("TEXTURE_MAX_LEVEL", GL_TEXTURE_MAX_LEVEL) \
+ X("SMOOTH_POINT_SIZE_RANGE", GL_SMOOTH_POINT_SIZE_RANGE) \
+ X("SMOOTH_POINT_SIZE_GRANULARITY", GL_SMOOTH_POINT_SIZE_GRANULARITY) \
+ X("SMOOTH_LINE_WIDTH_RANGE", GL_SMOOTH_LINE_WIDTH_RANGE) \
+ X("SMOOTH_LINE_WIDTH_GRANULARITY", GL_SMOOTH_LINE_WIDTH_GRANULARITY) \
+ X("ALIASED_LINE_WIDTH_RANGE", GL_ALIASED_LINE_WIDTH_RANGE) \
+ X("RESCALE_NORMAL", GL_RESCALE_NORMAL) \
+ X("LIGHT_MODEL_COLOR_CONTROL", GL_LIGHT_MODEL_COLOR_CONTROL) \
+ X("SINGLE_COLOR", GL_SINGLE_COLOR) \
+ X("SEPARATE_SPECULAR_COLOR", GL_SEPARATE_SPECULAR_COLOR) \
+ X("ALIASED_POINT_SIZE_RANGE", GL_ALIASED_POINT_SIZE_RANGE) \
+ X("TEXTURE0", GL_TEXTURE0) \
+ X("TEXTURE1", GL_TEXTURE1) \
+ X("TEXTURE2", GL_TEXTURE2) \
+ X("TEXTURE3", GL_TEXTURE3) \
+ X("TEXTURE4", GL_TEXTURE4) \
+ X("TEXTURE5", GL_TEXTURE5) \
+ X("TEXTURE6", GL_TEXTURE6) \
+ X("TEXTURE7", GL_TEXTURE7) \
+ X("TEXTURE8", GL_TEXTURE8) \
+ X("TEXTURE9", GL_TEXTURE9) \
+ X("TEXTURE10", GL_TEXTURE10) \
+ X("TEXTURE11", GL_TEXTURE11) \
+ X("TEXTURE12", GL_TEXTURE12) \
+ X("TEXTURE13", GL_TEXTURE13) \
+ X("TEXTURE14", GL_TEXTURE14) \
+ X("TEXTURE15", GL_TEXTURE15) \
+ X("TEXTURE16", GL_TEXTURE16) \
+ X("TEXTURE17", GL_TEXTURE17) \
+ X("TEXTURE18", GL_TEXTURE18) \
+ X("TEXTURE19", GL_TEXTURE19) \
+ X("TEXTURE20", GL_TEXTURE20) \
+ X("TEXTURE21", GL_TEXTURE21) \
+ X("TEXTURE22", GL_TEXTURE22) \
+ X("TEXTURE23", GL_TEXTURE23) \
+ X("TEXTURE24", GL_TEXTURE24) \
+ X("TEXTURE25", GL_TEXTURE25) \
+ X("TEXTURE26", GL_TEXTURE26) \
+ X("TEXTURE27", GL_TEXTURE27) \
+ X("TEXTURE28", GL_TEXTURE28) \
+ X("TEXTURE29", GL_TEXTURE29) \
+ X("TEXTURE30", GL_TEXTURE30) \
+ X("TEXTURE31", GL_TEXTURE31) \
+ X("ACTIVE_TEXTURE", GL_ACTIVE_TEXTURE) \
+ X("MULTISAMPLE", GL_MULTISAMPLE) \
+ X("SAMPLE_ALPHA_TO_COVERAGE", GL_SAMPLE_ALPHA_TO_COVERAGE) \
+ X("SAMPLE_ALPHA_TO_ONE", GL_SAMPLE_ALPHA_TO_ONE) \
+ X("SAMPLE_COVERAGE", GL_SAMPLE_COVERAGE) \
+ X("SAMPLE_BUFFERS", GL_SAMPLE_BUFFERS) \
+ X("SAMPLES", GL_SAMPLES) \
+ X("SAMPLE_COVERAGE_VALUE", GL_SAMPLE_COVERAGE_VALUE) \
+ X("SAMPLE_COVERAGE_INVERT", GL_SAMPLE_COVERAGE_INVERT) \
+ X("TEXTURE_CUBE_MAP", GL_TEXTURE_CUBE_MAP) \
+ X("TEXTURE_BINDING_CUBE_MAP", GL_TEXTURE_BINDING_CUBE_MAP) \
+ X("TEXTURE_CUBE_MAP_POSITIVE_X", GL_TEXTURE_CUBE_MAP_POSITIVE_X) \
+ X("TEXTURE_CUBE_MAP_NEGATIVE_X", GL_TEXTURE_CUBE_MAP_NEGATIVE_X) \
+ X("TEXTURE_CUBE_MAP_POSITIVE_Y", GL_TEXTURE_CUBE_MAP_POSITIVE_Y) \
+ X("TEXTURE_CUBE_MAP_NEGATIVE_Y", GL_TEXTURE_CUBE_MAP_NEGATIVE_Y) \
+ X("TEXTURE_CUBE_MAP_POSITIVE_Z", GL_TEXTURE_CUBE_MAP_POSITIVE_Z) \
+ X("TEXTURE_CUBE_MAP_NEGATIVE_Z", GL_TEXTURE_CUBE_MAP_NEGATIVE_Z) \
+ X("PROXY_TEXTURE_CUBE_MAP", GL_PROXY_TEXTURE_CUBE_MAP) \
+ X("MAX_CUBE_MAP_TEXTURE_SIZE", GL_MAX_CUBE_MAP_TEXTURE_SIZE) \
+ X("COMPRESSED_RGB", GL_COMPRESSED_RGB) \
+ X("COMPRESSED_RGBA", GL_COMPRESSED_RGBA) \
+ X("TEXTURE_COMPRESSION_HINT", GL_TEXTURE_COMPRESSION_HINT) \
+ X("TEXTURE_COMPRESSED_IMAGE_SIZE", GL_TEXTURE_COMPRESSED_IMAGE_SIZE) \
+ X("TEXTURE_COMPRESSED", GL_TEXTURE_COMPRESSED) \
+ X("NUM_COMPRESSED_TEXTURE_FORMATS", GL_NUM_COMPRESSED_TEXTURE_FORMATS) \
+ X("COMPRESSED_TEXTURE_FORMATS", GL_COMPRESSED_TEXTURE_FORMATS) \
+ X("CLAMP_TO_BORDER", GL_CLAMP_TO_BORDER) \
+ X("CLIENT_ACTIVE_TEXTURE", GL_CLIENT_ACTIVE_TEXTURE) \
+ X("MAX_TEXTURE_UNITS", GL_MAX_TEXTURE_UNITS) \
+ X("TRANSPOSE_MODELVIEW_MATRIX", GL_TRANSPOSE_MODELVIEW_MATRIX) \
+ X("TRANSPOSE_PROJECTION_MATRIX", GL_TRANSPOSE_PROJECTION_MATRIX) \
+ X("TRANSPOSE_TEXTURE_MATRIX", GL_TRANSPOSE_TEXTURE_MATRIX) \
+ X("TRANSPOSE_COLOR_MATRIX", GL_TRANSPOSE_COLOR_MATRIX) \
+ X("MULTISAMPLE_BIT", GL_MULTISAMPLE_BIT) \
+ X("NORMAL_MAP", GL_NORMAL_MAP) \
+ X("REFLECTION_MAP", GL_REFLECTION_MAP) \
+ X("COMPRESSED_ALPHA", GL_COMPRESSED_ALPHA) \
+ X("COMPRESSED_LUMINANCE", GL_COMPRESSED_LUMINANCE) \
+ X("COMPRESSED_LUMINANCE_ALPHA", GL_COMPRESSED_LUMINANCE_ALPHA) \
+ X("COMPRESSED_INTENSITY", GL_COMPRESSED_INTENSITY) \
+ X("COMBINE", GL_COMBINE) \
+ X("COMBINE_RGB", GL_COMBINE_RGB) \
+ X("COMBINE_ALPHA", GL_COMBINE_ALPHA) \
+ X("SOURCE0_RGB", GL_SOURCE0_RGB) \
+ X("SOURCE1_RGB", GL_SOURCE1_RGB) \
+ X("SOURCE2_RGB", GL_SOURCE2_RGB) \
+ X("SOURCE0_ALPHA", GL_SOURCE0_ALPHA) \
+ X("SOURCE1_ALPHA", GL_SOURCE1_ALPHA) \
+ X("SOURCE2_ALPHA", GL_SOURCE2_ALPHA) \
+ X("OPERAND0_RGB", GL_OPERAND0_RGB) \
+ X("OPERAND1_RGB", GL_OPERAND1_RGB) \
+ X("OPERAND2_RGB", GL_OPERAND2_RGB) \
+ X("OPERAND0_ALPHA", GL_OPERAND0_ALPHA) \
+ X("OPERAND1_ALPHA", GL_OPERAND1_ALPHA) \
+ X("OPERAND2_ALPHA", GL_OPERAND2_ALPHA) \
+ X("RGB_SCALE", GL_RGB_SCALE) \
+ X("ADD_SIGNED", GL_ADD_SIGNED) \
+ X("INTERPOLATE", GL_INTERPOLATE) \
+ X("SUBTRACT", GL_SUBTRACT) \
+ X("CONSTANT", GL_CONSTANT) \
+ X("PRIMARY_COLOR", GL_PRIMARY_COLOR) \
+ X("PREVIOUS", GL_PREVIOUS) \
+ X("DOT3_RGB", GL_DOT3_RGB) \
+ X("DOT3_RGBA", GL_DOT3_RGBA) \
+ X("BLEND_DST_RGB", GL_BLEND_DST_RGB) \
+ X("BLEND_SRC_RGB", GL_BLEND_SRC_RGB) \
+ X("BLEND_DST_ALPHA", GL_BLEND_DST_ALPHA) \
+ X("BLEND_SRC_ALPHA", GL_BLEND_SRC_ALPHA) \
+ X("POINT_FADE_THRESHOLD_SIZE", GL_POINT_FADE_THRESHOLD_SIZE) \
+ X("DEPTH_COMPONENT16", GL_DEPTH_COMPONENT16) \
+ X("DEPTH_COMPONENT24", GL_DEPTH_COMPONENT24) \
+ X("DEPTH_COMPONENT32", GL_DEPTH_COMPONENT32) \
+ X("MIRRORED_REPEAT", GL_MIRRORED_REPEAT) \
+ X("MAX_TEXTURE_LOD_BIAS", GL_MAX_TEXTURE_LOD_BIAS) \
+ X("TEXTURE_LOD_BIAS", GL_TEXTURE_LOD_BIAS) \
+ X("INCR_WRAP", GL_INCR_WRAP) \
+ X("DECR_WRAP", GL_DECR_WRAP) \
+ X("TEXTURE_DEPTH_SIZE", GL_TEXTURE_DEPTH_SIZE) \
+ X("TEXTURE_COMPARE_MODE", GL_TEXTURE_COMPARE_MODE) \
+ X("TEXTURE_COMPARE_FUNC", GL_TEXTURE_COMPARE_FUNC) \
+ X("POINT_SIZE_MIN", GL_POINT_SIZE_MIN) \
+ X("POINT_SIZE_MAX", GL_POINT_SIZE_MAX) \
+ X("POINT_DISTANCE_ATTENUATION", GL_POINT_DISTANCE_ATTENUATION) \
+ X("GENERATE_MIPMAP", GL_GENERATE_MIPMAP) \
+ X("GENERATE_MIPMAP_HINT", GL_GENERATE_MIPMAP_HINT) \
+ X("FOG_COORDINATE_SOURCE", GL_FOG_COORDINATE_SOURCE) \
+ X("FOG_COORDINATE", GL_FOG_COORDINATE) \
+ X("FRAGMENT_DEPTH", GL_FRAGMENT_DEPTH) \
+ X("CURRENT_FOG_COORDINATE", GL_CURRENT_FOG_COORDINATE) \
+ X("FOG_COORDINATE_ARRAY_TYPE", GL_FOG_COORDINATE_ARRAY_TYPE) \
+ X("FOG_COORDINATE_ARRAY_STRIDE", GL_FOG_COORDINATE_ARRAY_STRIDE) \
+ X("FOG_COORDINATE_ARRAY_POINTER", GL_FOG_COORDINATE_ARRAY_POINTER) \
+ X("FOG_COORDINATE_ARRAY", GL_FOG_COORDINATE_ARRAY) \
+ X("COLOR_SUM", GL_COLOR_SUM) \
+ X("CURRENT_SECONDARY_COLOR", GL_CURRENT_SECONDARY_COLOR) \
+ X("SECONDARY_COLOR_ARRAY_SIZE", GL_SECONDARY_COLOR_ARRAY_SIZE) \
+ X("SECONDARY_COLOR_ARRAY_TYPE", GL_SECONDARY_COLOR_ARRAY_TYPE) \
+ X("SECONDARY_COLOR_ARRAY_STRIDE", GL_SECONDARY_COLOR_ARRAY_STRIDE) \
+ X("SECONDARY_COLOR_ARRAY_POINTER", GL_SECONDARY_COLOR_ARRAY_POINTER) \
+ X("SECONDARY_COLOR_ARRAY", GL_SECONDARY_COLOR_ARRAY) \
+ X("TEXTURE_FILTER_CONTROL", GL_TEXTURE_FILTER_CONTROL) \
+ X("DEPTH_TEXTURE_MODE", GL_DEPTH_TEXTURE_MODE) \
+ X("COMPARE_R_TO_TEXTURE", GL_COMPARE_R_TO_TEXTURE) \
+ X("BLEND_COLOR", GL_BLEND_COLOR) \
+ X("BLEND_EQUATION", GL_BLEND_EQUATION) \
+ X("CONSTANT_COLOR", GL_CONSTANT_COLOR) \
+ X("ONE_MINUS_CONSTANT_COLOR", GL_ONE_MINUS_CONSTANT_COLOR) \
+ X("CONSTANT_ALPHA", GL_CONSTANT_ALPHA) \
+ X("ONE_MINUS_CONSTANT_ALPHA", GL_ONE_MINUS_CONSTANT_ALPHA) \
+ X("FUNC_ADD", GL_FUNC_ADD) \
+ X("FUNC_REVERSE_SUBTRACT", GL_FUNC_REVERSE_SUBTRACT) \
+ X("FUNC_SUBTRACT", GL_FUNC_SUBTRACT) \
+ X("MIN", GL_MIN) \
+ X("MAX", GL_MAX) \
+ X("BUFFER_SIZE", GL_BUFFER_SIZE) \
+ X("BUFFER_USAGE", GL_BUFFER_USAGE) \
+ X("QUERY_COUNTER_BITS", GL_QUERY_COUNTER_BITS) \
+ X("CURRENT_QUERY", GL_CURRENT_QUERY) \
+ X("QUERY_RESULT", GL_QUERY_RESULT) \
+ X("QUERY_RESULT_AVAILABLE", GL_QUERY_RESULT_AVAILABLE) \
+ X("ARRAY_BUFFER", GL_ARRAY_BUFFER) \
+ X("ELEMENT_ARRAY_BUFFER", GL_ELEMENT_ARRAY_BUFFER) \
+ X("ARRAY_BUFFER_BINDING", GL_ARRAY_BUFFER_BINDING) \
+ X("ELEMENT_ARRAY_BUFFER_BINDING", GL_ELEMENT_ARRAY_BUFFER_BINDING) \
+ X("VERTEX_ATTRIB_ARRAY_BUFFER_BINDING", GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING) \
+ X("READ_ONLY", GL_READ_ONLY) \
+ X("WRITE_ONLY", GL_WRITE_ONLY) \
+ X("READ_WRITE", GL_READ_WRITE) \
+ X("BUFFER_ACCESS", GL_BUFFER_ACCESS) \
+ X("BUFFER_MAPPED", GL_BUFFER_MAPPED) \
+ X("BUFFER_MAP_POINTER", GL_BUFFER_MAP_POINTER) \
+ X("STREAM_DRAW", GL_STREAM_DRAW) \
+ X("STREAM_READ", GL_STREAM_READ) \
+ X("STREAM_COPY", GL_STREAM_COPY) \
+ X("STATIC_DRAW", GL_STATIC_DRAW) \
+ X("STATIC_READ", GL_STATIC_READ) \
+ X("STATIC_COPY", GL_STATIC_COPY) \
+ X("DYNAMIC_DRAW", GL_DYNAMIC_DRAW) \
+ X("DYNAMIC_READ", GL_DYNAMIC_READ) \
+ X("DYNAMIC_COPY", GL_DYNAMIC_COPY) \
+ X("SAMPLES_PASSED", GL_SAMPLES_PASSED) \
+ X("SRC1_ALPHA", GL_SRC1_ALPHA) \
+ X("VERTEX_ARRAY_BUFFER_BINDING", GL_VERTEX_ARRAY_BUFFER_BINDING) \
+ X("NORMAL_ARRAY_BUFFER_BINDING", GL_NORMAL_ARRAY_BUFFER_BINDING) \
+ X("COLOR_ARRAY_BUFFER_BINDING", GL_COLOR_ARRAY_BUFFER_BINDING) \
+ X("INDEX_ARRAY_BUFFER_BINDING", GL_INDEX_ARRAY_BUFFER_BINDING) \
+ X("TEXTURE_COORD_ARRAY_BUFFER_BINDING", GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING) \
+ X("EDGE_FLAG_ARRAY_BUFFER_BINDING", GL_EDGE_FLAG_ARRAY_BUFFER_BINDING) \
+ X("SECONDARY_COLOR_ARRAY_BUFFER_BINDING", GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING) \
+ X("FOG_COORDINATE_ARRAY_BUFFER_BINDING", GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING) \
+ X("WEIGHT_ARRAY_BUFFER_BINDING", GL_WEIGHT_ARRAY_BUFFER_BINDING) \
+ X("FOG_COORD_SRC", GL_FOG_COORD_SRC) \
+ X("FOG_COORD", GL_FOG_COORD) \
+ X("CURRENT_FOG_COORD", GL_CURRENT_FOG_COORD) \
+ X("FOG_COORD_ARRAY_TYPE", GL_FOG_COORD_ARRAY_TYPE) \
+ X("FOG_COORD_ARRAY_STRIDE", GL_FOG_COORD_ARRAY_STRIDE) \
+ X("FOG_COORD_ARRAY_POINTER", GL_FOG_COORD_ARRAY_POINTER) \
+ X("FOG_COORD_ARRAY", GL_FOG_COORD_ARRAY) \
+ X("FOG_COORD_ARRAY_BUFFER_BINDING", GL_FOG_COORD_ARRAY_BUFFER_BINDING) \
+ X("SRC0_RGB", GL_SRC0_RGB) \
+ X("SRC1_RGB", GL_SRC1_RGB) \
+ X("SRC2_RGB", GL_SRC2_RGB) \
+ X("SRC0_ALPHA", GL_SRC0_ALPHA) \
+ X("SRC2_ALPHA", GL_SRC2_ALPHA) \
+ X("BLEND_EQUATION_RGB", GL_BLEND_EQUATION_RGB) \
+ X("VERTEX_ATTRIB_ARRAY_ENABLED", GL_VERTEX_ATTRIB_ARRAY_ENABLED) \
+ X("VERTEX_ATTRIB_ARRAY_SIZE", GL_VERTEX_ATTRIB_ARRAY_SIZE) \
+ X("VERTEX_ATTRIB_ARRAY_STRIDE", GL_VERTEX_ATTRIB_ARRAY_STRIDE) \
+ X("VERTEX_ATTRIB_ARRAY_TYPE", GL_VERTEX_ATTRIB_ARRAY_TYPE) \
+ X("CURRENT_VERTEX_ATTRIB", GL_CURRENT_VERTEX_ATTRIB) \
+ X("VERTEX_PROGRAM_POINT_SIZE", GL_VERTEX_PROGRAM_POINT_SIZE) \
+ X("VERTEX_ATTRIB_ARRAY_POINTER", GL_VERTEX_ATTRIB_ARRAY_POINTER) \
+ X("STENCIL_BACK_FUNC", GL_STENCIL_BACK_FUNC) \
+ X("STENCIL_BACK_FAIL", GL_STENCIL_BACK_FAIL) \
+ X("STENCIL_BACK_PASS_DEPTH_FAIL", GL_STENCIL_BACK_PASS_DEPTH_FAIL) \
+ X("STENCIL_BACK_PASS_DEPTH_PASS", GL_STENCIL_BACK_PASS_DEPTH_PASS) \
+ X("MAX_DRAW_BUFFERS", GL_MAX_DRAW_BUFFERS) \
+ X("DRAW_BUFFER0", GL_DRAW_BUFFER0) \
+ X("DRAW_BUFFER1", GL_DRAW_BUFFER1) \
+ X("DRAW_BUFFER2", GL_DRAW_BUFFER2) \
+ X("DRAW_BUFFER3", GL_DRAW_BUFFER3) \
+ X("DRAW_BUFFER4", GL_DRAW_BUFFER4) \
+ X("DRAW_BUFFER5", GL_DRAW_BUFFER5) \
+ X("DRAW_BUFFER6", GL_DRAW_BUFFER6) \
+ X("DRAW_BUFFER7", GL_DRAW_BUFFER7) \
+ X("DRAW_BUFFER8", GL_DRAW_BUFFER8) \
+ X("DRAW_BUFFER9", GL_DRAW_BUFFER9) \
+ X("DRAW_BUFFER10", GL_DRAW_BUFFER10) \
+ X("DRAW_BUFFER11", GL_DRAW_BUFFER11) \
+ X("DRAW_BUFFER12", GL_DRAW_BUFFER12) \
+ X("DRAW_BUFFER13", GL_DRAW_BUFFER13) \
+ X("DRAW_BUFFER14", GL_DRAW_BUFFER14) \
+ X("DRAW_BUFFER15", GL_DRAW_BUFFER15) \
+ X("BLEND_EQUATION_ALPHA", GL_BLEND_EQUATION_ALPHA) \
+ X("MAX_VERTEX_ATTRIBS", GL_MAX_VERTEX_ATTRIBS) \
+ X("VERTEX_ATTRIB_ARRAY_NORMALIZED", GL_VERTEX_ATTRIB_ARRAY_NORMALIZED) \
+ X("MAX_TEXTURE_IMAGE_UNITS", GL_MAX_TEXTURE_IMAGE_UNITS) \
+ X("FRAGMENT_SHADER", GL_FRAGMENT_SHADER) \
+ X("VERTEX_SHADER", GL_VERTEX_SHADER) \
+ X("MAX_FRAGMENT_UNIFORM_COMPONENTS", GL_MAX_FRAGMENT_UNIFORM_COMPONENTS) \
+ X("MAX_VERTEX_UNIFORM_COMPONENTS", GL_MAX_VERTEX_UNIFORM_COMPONENTS) \
+ X("MAX_VARYING_FLOATS", GL_MAX_VARYING_FLOATS) \
+ X("MAX_VERTEX_TEXTURE_IMAGE_UNITS", GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS) \
+ X("MAX_COMBINED_TEXTURE_IMAGE_UNITS", GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS) \
+ X("SHADER_TYPE", GL_SHADER_TYPE) \
+ X("FLOAT_VEC2", GL_FLOAT_VEC2) \
+ X("FLOAT_VEC3", GL_FLOAT_VEC3) \
+ X("FLOAT_VEC4", GL_FLOAT_VEC4) \
+ X("INT_VEC2", GL_INT_VEC2) \
+ X("INT_VEC3", GL_INT_VEC3) \
+ X("INT_VEC4", GL_INT_VEC4) \
+ X("BOOL", GL_BOOL) \
+ X("BOOL_VEC2", GL_BOOL_VEC2) \
+ X("BOOL_VEC3", GL_BOOL_VEC3) \
+ X("BOOL_VEC4", GL_BOOL_VEC4) \
+ X("FLOAT_MAT2", GL_FLOAT_MAT2) \
+ X("FLOAT_MAT3", GL_FLOAT_MAT3) \
+ X("FLOAT_MAT4", GL_FLOAT_MAT4) \
+ X("SAMPLER_1D", GL_SAMPLER_1D) \
+ X("SAMPLER_2D", GL_SAMPLER_2D) \
+ X("SAMPLER_3D", GL_SAMPLER_3D) \
+ X("SAMPLER_CUBE", GL_SAMPLER_CUBE) \
+ X("SAMPLER_1D_SHADOW", GL_SAMPLER_1D_SHADOW) \
+ X("SAMPLER_2D_SHADOW", GL_SAMPLER_2D_SHADOW) \
+ X("DELETE_STATUS", GL_DELETE_STATUS) \
+ X("COMPILE_STATUS", GL_COMPILE_STATUS) \
+ X("LINK_STATUS", GL_LINK_STATUS) \
+ X("VALIDATE_STATUS", GL_VALIDATE_STATUS) \
+ X("INFO_LOG_LENGTH", GL_INFO_LOG_LENGTH) \
+ X("ATTACHED_SHADERS", GL_ATTACHED_SHADERS) \
+ X("ACTIVE_UNIFORMS", GL_ACTIVE_UNIFORMS) \
+ X("ACTIVE_UNIFORM_MAX_LENGTH", GL_ACTIVE_UNIFORM_MAX_LENGTH) \
+ X("SHADER_SOURCE_LENGTH", GL_SHADER_SOURCE_LENGTH) \
+ X("ACTIVE_ATTRIBUTES", GL_ACTIVE_ATTRIBUTES) \
+ X("ACTIVE_ATTRIBUTE_MAX_LENGTH", GL_ACTIVE_ATTRIBUTE_MAX_LENGTH) \
+ X("FRAGMENT_SHADER_DERIVATIVE_HINT", GL_FRAGMENT_SHADER_DERIVATIVE_HINT) \
+ X("SHADING_LANGUAGE_VERSION", GL_SHADING_LANGUAGE_VERSION) \
+ X("CURRENT_PROGRAM", GL_CURRENT_PROGRAM) \
+ X("POINT_SPRITE_COORD_ORIGIN", GL_POINT_SPRITE_COORD_ORIGIN) \
+ X("LOWER_LEFT", GL_LOWER_LEFT) \
+ X("UPPER_LEFT", GL_UPPER_LEFT) \
+ X("STENCIL_BACK_REF", GL_STENCIL_BACK_REF) \
+ X("STENCIL_BACK_VALUE_MASK", GL_STENCIL_BACK_VALUE_MASK) \
+ X("STENCIL_BACK_WRITEMASK", GL_STENCIL_BACK_WRITEMASK) \
+ X("VERTEX_PROGRAM_TWO_SIDE", GL_VERTEX_PROGRAM_TWO_SIDE) \
+ X("POINT_SPRITE", GL_POINT_SPRITE) \
+ X("COORD_REPLACE", GL_COORD_REPLACE) \
+ X("MAX_TEXTURE_COORDS", GL_MAX_TEXTURE_COORDS) \
+ X("PIXEL_PACK_BUFFER", GL_PIXEL_PACK_BUFFER) \
+ X("PIXEL_UNPACK_BUFFER", GL_PIXEL_UNPACK_BUFFER) \
+ X("PIXEL_PACK_BUFFER_BINDING", GL_PIXEL_PACK_BUFFER_BINDING) \
+ X("PIXEL_UNPACK_BUFFER_BINDING", GL_PIXEL_UNPACK_BUFFER_BINDING) \
+ X("FLOAT_MAT2x3", GL_FLOAT_MAT2x3) \
+ X("FLOAT_MAT2x4", GL_FLOAT_MAT2x4) \
+ X("FLOAT_MAT3x2", GL_FLOAT_MAT3x2) \
+ X("FLOAT_MAT3x4", GL_FLOAT_MAT3x4) \
+ X("FLOAT_MAT4x2", GL_FLOAT_MAT4x2) \
+ X("FLOAT_MAT4x3", GL_FLOAT_MAT4x3) \
+ X("SRGB", GL_SRGB) \
+ X("SRGB8", GL_SRGB8) \
+ X("SRGB_ALPHA", GL_SRGB_ALPHA) \
+ X("SRGB8_ALPHA8", GL_SRGB8_ALPHA8) \
+ X("COMPRESSED_SRGB", GL_COMPRESSED_SRGB) \
+ X("COMPRESSED_SRGB_ALPHA", GL_COMPRESSED_SRGB_ALPHA) \
+ X("CURRENT_RASTER_SECONDARY_COLOR", GL_CURRENT_RASTER_SECONDARY_COLOR) \
+ X("SLUMINANCE_ALPHA", GL_SLUMINANCE_ALPHA) \
+ X("SLUMINANCE8_ALPHA8", GL_SLUMINANCE8_ALPHA8) \
+ X("SLUMINANCE", GL_SLUMINANCE) \
+ X("SLUMINANCE8", GL_SLUMINANCE8) \
+ X("COMPRESSED_SLUMINANCE", GL_COMPRESSED_SLUMINANCE) \
+ X("COMPRESSED_SLUMINANCE_ALPHA", GL_COMPRESSED_SLUMINANCE_ALPHA) \
+ X("COMPARE_REF_TO_TEXTURE", GL_COMPARE_REF_TO_TEXTURE) \
+ X("CLIP_DISTANCE0", GL_CLIP_DISTANCE0) \
+ X("CLIP_DISTANCE1", GL_CLIP_DISTANCE1) \
+ X("CLIP_DISTANCE2", GL_CLIP_DISTANCE2) \
+ X("CLIP_DISTANCE3", GL_CLIP_DISTANCE3) \
+ X("CLIP_DISTANCE4", GL_CLIP_DISTANCE4) \
+ X("CLIP_DISTANCE5", GL_CLIP_DISTANCE5) \
+ X("CLIP_DISTANCE6", GL_CLIP_DISTANCE6) \
+ X("CLIP_DISTANCE7", GL_CLIP_DISTANCE7) \
+ X("MAX_CLIP_DISTANCES", GL_MAX_CLIP_DISTANCES) \
+ X("MAJOR_VERSION", GL_MAJOR_VERSION) \
+ X("MINOR_VERSION", GL_MINOR_VERSION) \
+ X("NUM_EXTENSIONS", GL_NUM_EXTENSIONS) \
+ X("CONTEXT_FLAGS", GL_CONTEXT_FLAGS) \
+ X("COMPRESSED_RED", GL_COMPRESSED_RED) \
+ X("COMPRESSED_RG", GL_COMPRESSED_RG) \
+ X("CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT", GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT) \
+ X("RGBA32F", GL_RGBA32F) \
+ X("RGB32F", GL_RGB32F) \
+ X("RGBA16F", GL_RGBA16F) \
+ X("RGB16F", GL_RGB16F) \
+ X("VERTEX_ATTRIB_ARRAY_INTEGER", GL_VERTEX_ATTRIB_ARRAY_INTEGER) \
+ X("MAX_ARRAY_TEXTURE_LAYERS", GL_MAX_ARRAY_TEXTURE_LAYERS) \
+ X("MIN_PROGRAM_TEXEL_OFFSET", GL_MIN_PROGRAM_TEXEL_OFFSET) \
+ X("MAX_PROGRAM_TEXEL_OFFSET", GL_MAX_PROGRAM_TEXEL_OFFSET) \
+ X("CLAMP_READ_COLOR", GL_CLAMP_READ_COLOR) \
+ X("FIXED_ONLY", GL_FIXED_ONLY) \
+ X("MAX_VARYING_COMPONENTS", GL_MAX_VARYING_COMPONENTS) \
+ X("TEXTURE_1D_ARRAY", GL_TEXTURE_1D_ARRAY) \
+ X("PROXY_TEXTURE_1D_ARRAY", GL_PROXY_TEXTURE_1D_ARRAY) \
+ X("TEXTURE_2D_ARRAY", GL_TEXTURE_2D_ARRAY) \
+ X("PROXY_TEXTURE_2D_ARRAY", GL_PROXY_TEXTURE_2D_ARRAY) \
+ X("TEXTURE_BINDING_1D_ARRAY", GL_TEXTURE_BINDING_1D_ARRAY) \
+ X("TEXTURE_BINDING_2D_ARRAY", GL_TEXTURE_BINDING_2D_ARRAY) \
+ X("R11F_G11F_B10F", GL_R11F_G11F_B10F) \
+ X("UNSIGNED_INT_10F_11F_11F_REV", GL_UNSIGNED_INT_10F_11F_11F_REV) \
+ X("RGB9_E5", GL_RGB9_E5) \
+ X("UNSIGNED_INT_5_9_9_9_REV", GL_UNSIGNED_INT_5_9_9_9_REV) \
+ X("TEXTURE_SHARED_SIZE", GL_TEXTURE_SHARED_SIZE) \
+ X("TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH", GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH) \
+ X("TRANSFORM_FEEDBACK_BUFFER_MODE", GL_TRANSFORM_FEEDBACK_BUFFER_MODE) \
+ X("MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS", GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS) \
+ X("TRANSFORM_FEEDBACK_VARYINGS", GL_TRANSFORM_FEEDBACK_VARYINGS) \
+ X("TRANSFORM_FEEDBACK_BUFFER_START", GL_TRANSFORM_FEEDBACK_BUFFER_START) \
+ X("TRANSFORM_FEEDBACK_BUFFER_SIZE", GL_TRANSFORM_FEEDBACK_BUFFER_SIZE) \
+ X("PRIMITIVES_GENERATED", GL_PRIMITIVES_GENERATED) \
+ X("TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN", GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN) \
+ X("RASTERIZER_DISCARD", GL_RASTERIZER_DISCARD) \
+ X("MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS", GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS) \
+ X("MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS", GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS) \
+ X("INTERLEAVED_ATTRIBS", GL_INTERLEAVED_ATTRIBS) \
+ X("SEPARATE_ATTRIBS", GL_SEPARATE_ATTRIBS) \
+ X("TRANSFORM_FEEDBACK_BUFFER", GL_TRANSFORM_FEEDBACK_BUFFER) \
+ X("TRANSFORM_FEEDBACK_BUFFER_BINDING", GL_TRANSFORM_FEEDBACK_BUFFER_BINDING) \
+ X("RGBA32UI", GL_RGBA32UI) \
+ X("RGB32UI", GL_RGB32UI) \
+ X("RGBA16UI", GL_RGBA16UI) \
+ X("RGB16UI", GL_RGB16UI) \
+ X("RGBA8UI", GL_RGBA8UI) \
+ X("RGB8UI", GL_RGB8UI) \
+ X("RGBA32I", GL_RGBA32I) \
+ X("RGB32I", GL_RGB32I) \
+ X("RGBA16I", GL_RGBA16I) \
+ X("RGB16I", GL_RGB16I) \
+ X("RGBA8I", GL_RGBA8I) \
+ X("RGB8I", GL_RGB8I) \
+ X("RED_INTEGER", GL_RED_INTEGER) \
+ X("GREEN_INTEGER", GL_GREEN_INTEGER) \
+ X("BLUE_INTEGER", GL_BLUE_INTEGER) \
+ X("RGB_INTEGER", GL_RGB_INTEGER) \
+ X("RGBA_INTEGER", GL_RGBA_INTEGER) \
+ X("BGR_INTEGER", GL_BGR_INTEGER) \
+ X("BGRA_INTEGER", GL_BGRA_INTEGER) \
+ X("SAMPLER_1D_ARRAY", GL_SAMPLER_1D_ARRAY) \
+ X("SAMPLER_2D_ARRAY", GL_SAMPLER_2D_ARRAY) \
+ X("SAMPLER_1D_ARRAY_SHADOW", GL_SAMPLER_1D_ARRAY_SHADOW) \
+ X("SAMPLER_2D_ARRAY_SHADOW", GL_SAMPLER_2D_ARRAY_SHADOW) \
+ X("SAMPLER_CUBE_SHADOW", GL_SAMPLER_CUBE_SHADOW) \
+ X("UNSIGNED_INT_VEC2", GL_UNSIGNED_INT_VEC2) \
+ X("UNSIGNED_INT_VEC3", GL_UNSIGNED_INT_VEC3) \
+ X("UNSIGNED_INT_VEC4", GL_UNSIGNED_INT_VEC4) \
+ X("INT_SAMPLER_1D", GL_INT_SAMPLER_1D) \
+ X("INT_SAMPLER_2D", GL_INT_SAMPLER_2D) \
+ X("INT_SAMPLER_3D", GL_INT_SAMPLER_3D) \
+ X("INT_SAMPLER_CUBE", GL_INT_SAMPLER_CUBE) \
+ X("INT_SAMPLER_1D_ARRAY", GL_INT_SAMPLER_1D_ARRAY) \
+ X("INT_SAMPLER_2D_ARRAY", GL_INT_SAMPLER_2D_ARRAY) \
+ X("UNSIGNED_INT_SAMPLER_1D", GL_UNSIGNED_INT_SAMPLER_1D) \
+ X("UNSIGNED_INT_SAMPLER_2D", GL_UNSIGNED_INT_SAMPLER_2D) \
+ X("UNSIGNED_INT_SAMPLER_3D", GL_UNSIGNED_INT_SAMPLER_3D) \
+ X("UNSIGNED_INT_SAMPLER_CUBE", GL_UNSIGNED_INT_SAMPLER_CUBE) \
+ X("UNSIGNED_INT_SAMPLER_1D_ARRAY", GL_UNSIGNED_INT_SAMPLER_1D_ARRAY) \
+ X("UNSIGNED_INT_SAMPLER_2D_ARRAY", GL_UNSIGNED_INT_SAMPLER_2D_ARRAY) \
+ X("QUERY_WAIT", GL_QUERY_WAIT) \
+ X("QUERY_NO_WAIT", GL_QUERY_NO_WAIT) \
+ X("QUERY_BY_REGION_WAIT", GL_QUERY_BY_REGION_WAIT) \
+ X("QUERY_BY_REGION_NO_WAIT", GL_QUERY_BY_REGION_NO_WAIT) \
+ X("BUFFER_ACCESS_FLAGS", GL_BUFFER_ACCESS_FLAGS) \
+ X("BUFFER_MAP_LENGTH", GL_BUFFER_MAP_LENGTH) \
+ X("BUFFER_MAP_OFFSET", GL_BUFFER_MAP_OFFSET) \
+ X("DEPTH_COMPONENT32F", GL_DEPTH_COMPONENT32F) \
+ X("DEPTH32F_STENCIL8", GL_DEPTH32F_STENCIL8) \
+ X("FLOAT_32_UNSIGNED_INT_24_8_REV", GL_FLOAT_32_UNSIGNED_INT_24_8_REV) \
+ X("INVALID_FRAMEBUFFER_OPERATION", GL_INVALID_FRAMEBUFFER_OPERATION) \
+ X("FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING", GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING) \
+ X("FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE", GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE) \
+ X("FRAMEBUFFER_ATTACHMENT_RED_SIZE", GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE) \
+ X("FRAMEBUFFER_ATTACHMENT_GREEN_SIZE", GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE) \
+ X("FRAMEBUFFER_ATTACHMENT_BLUE_SIZE", GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE) \
+ X("FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE", GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE) \
+ X("FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE", GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE) \
+ X("FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE", GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE) \
+ X("FRAMEBUFFER_DEFAULT", GL_FRAMEBUFFER_DEFAULT) \
+ X("FRAMEBUFFER_UNDEFINED", GL_FRAMEBUFFER_UNDEFINED) \
+ X("DEPTH_STENCIL_ATTACHMENT", GL_DEPTH_STENCIL_ATTACHMENT) \
+ X("MAX_RENDERBUFFER_SIZE", GL_MAX_RENDERBUFFER_SIZE) \
+ X("DEPTH_STENCIL", GL_DEPTH_STENCIL) \
+ X("UNSIGNED_INT_24_8", GL_UNSIGNED_INT_24_8) \
+ X("DEPTH24_STENCIL8", GL_DEPTH24_STENCIL8) \
+ X("TEXTURE_STENCIL_SIZE", GL_TEXTURE_STENCIL_SIZE) \
+ X("TEXTURE_RED_TYPE", GL_TEXTURE_RED_TYPE) \
+ X("TEXTURE_GREEN_TYPE", GL_TEXTURE_GREEN_TYPE) \
+ X("TEXTURE_BLUE_TYPE", GL_TEXTURE_BLUE_TYPE) \
+ X("TEXTURE_ALPHA_TYPE", GL_TEXTURE_ALPHA_TYPE) \
+ X("TEXTURE_DEPTH_TYPE", GL_TEXTURE_DEPTH_TYPE) \
+ X("UNSIGNED_NORMALIZED", GL_UNSIGNED_NORMALIZED) \
+ X("FRAMEBUFFER_BINDING", GL_FRAMEBUFFER_BINDING) \
+ X("DRAW_FRAMEBUFFER_BINDING", GL_DRAW_FRAMEBUFFER_BINDING) \
+ X("RENDERBUFFER_BINDING", GL_RENDERBUFFER_BINDING) \
+ X("READ_FRAMEBUFFER", GL_READ_FRAMEBUFFER) \
+ X("DRAW_FRAMEBUFFER", GL_DRAW_FRAMEBUFFER) \
+ X("READ_FRAMEBUFFER_BINDING", GL_READ_FRAMEBUFFER_BINDING) \
+ X("RENDERBUFFER_SAMPLES", GL_RENDERBUFFER_SAMPLES) \
+ X("FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE", GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) \
+ X("FRAMEBUFFER_ATTACHMENT_OBJECT_NAME", GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) \
+ X("FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL", GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL) \
+ X("FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE", GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE) \
+ X("FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER", GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER) \
+ X("FRAMEBUFFER_COMPLETE", GL_FRAMEBUFFER_COMPLETE) \
+ X("FRAMEBUFFER_INCOMPLETE_ATTACHMENT", GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT) \
+ X("FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT", GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT) \
+ X("FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER", GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER) \
+ X("FRAMEBUFFER_INCOMPLETE_READ_BUFFER", GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER) \
+ X("FRAMEBUFFER_UNSUPPORTED", GL_FRAMEBUFFER_UNSUPPORTED) \
+ X("MAX_COLOR_ATTACHMENTS", GL_MAX_COLOR_ATTACHMENTS) \
+ X("COLOR_ATTACHMENT0", GL_COLOR_ATTACHMENT0) \
+ X("COLOR_ATTACHMENT1", GL_COLOR_ATTACHMENT1) \
+ X("COLOR_ATTACHMENT2", GL_COLOR_ATTACHMENT2) \
+ X("COLOR_ATTACHMENT3", GL_COLOR_ATTACHMENT3) \
+ X("COLOR_ATTACHMENT4", GL_COLOR_ATTACHMENT4) \
+ X("COLOR_ATTACHMENT5", GL_COLOR_ATTACHMENT5) \
+ X("COLOR_ATTACHMENT6", GL_COLOR_ATTACHMENT6) \
+ X("COLOR_ATTACHMENT7", GL_COLOR_ATTACHMENT7) \
+ X("COLOR_ATTACHMENT8", GL_COLOR_ATTACHMENT8) \
+ X("COLOR_ATTACHMENT9", GL_COLOR_ATTACHMENT9) \
+ X("COLOR_ATTACHMENT10", GL_COLOR_ATTACHMENT10) \
+ X("COLOR_ATTACHMENT11", GL_COLOR_ATTACHMENT11) \
+ X("COLOR_ATTACHMENT12", GL_COLOR_ATTACHMENT12) \
+ X("COLOR_ATTACHMENT13", GL_COLOR_ATTACHMENT13) \
+ X("COLOR_ATTACHMENT14", GL_COLOR_ATTACHMENT14) \
+ X("COLOR_ATTACHMENT15", GL_COLOR_ATTACHMENT15) \
+ X("COLOR_ATTACHMENT16", GL_COLOR_ATTACHMENT16) \
+ X("COLOR_ATTACHMENT17", GL_COLOR_ATTACHMENT17) \
+ X("COLOR_ATTACHMENT18", GL_COLOR_ATTACHMENT18) \
+ X("COLOR_ATTACHMENT19", GL_COLOR_ATTACHMENT19) \
+ X("COLOR_ATTACHMENT20", GL_COLOR_ATTACHMENT20) \
+ X("COLOR_ATTACHMENT21", GL_COLOR_ATTACHMENT21) \
+ X("COLOR_ATTACHMENT22", GL_COLOR_ATTACHMENT22) \
+ X("COLOR_ATTACHMENT23", GL_COLOR_ATTACHMENT23) \
+ X("COLOR_ATTACHMENT24", GL_COLOR_ATTACHMENT24) \
+ X("COLOR_ATTACHMENT25", GL_COLOR_ATTACHMENT25) \
+ X("COLOR_ATTACHMENT26", GL_COLOR_ATTACHMENT26) \
+ X("COLOR_ATTACHMENT27", GL_COLOR_ATTACHMENT27) \
+ X("COLOR_ATTACHMENT28", GL_COLOR_ATTACHMENT28) \
+ X("COLOR_ATTACHMENT29", GL_COLOR_ATTACHMENT29) \
+ X("COLOR_ATTACHMENT30", GL_COLOR_ATTACHMENT30) \
+ X("COLOR_ATTACHMENT31", GL_COLOR_ATTACHMENT31) \
+ X("DEPTH_ATTACHMENT", GL_DEPTH_ATTACHMENT) \
+ X("STENCIL_ATTACHMENT", GL_STENCIL_ATTACHMENT) \
+ X("FRAMEBUFFER", GL_FRAMEBUFFER) \
+ X("RENDERBUFFER", GL_RENDERBUFFER) \
+ X("RENDERBUFFER_WIDTH", GL_RENDERBUFFER_WIDTH) \
+ X("RENDERBUFFER_HEIGHT", GL_RENDERBUFFER_HEIGHT) \
+ X("RENDERBUFFER_INTERNAL_FORMAT", GL_RENDERBUFFER_INTERNAL_FORMAT) \
+ X("STENCIL_INDEX1", GL_STENCIL_INDEX1) \
+ X("STENCIL_INDEX4", GL_STENCIL_INDEX4) \
+ X("STENCIL_INDEX8", GL_STENCIL_INDEX8) \
+ X("STENCIL_INDEX16", GL_STENCIL_INDEX16) \
+ X("RENDERBUFFER_RED_SIZE", GL_RENDERBUFFER_RED_SIZE) \
+ X("RENDERBUFFER_GREEN_SIZE", GL_RENDERBUFFER_GREEN_SIZE) \
+ X("RENDERBUFFER_BLUE_SIZE", GL_RENDERBUFFER_BLUE_SIZE) \
+ X("RENDERBUFFER_ALPHA_SIZE", GL_RENDERBUFFER_ALPHA_SIZE) \
+ X("RENDERBUFFER_DEPTH_SIZE", GL_RENDERBUFFER_DEPTH_SIZE) \
+ X("RENDERBUFFER_STENCIL_SIZE", GL_RENDERBUFFER_STENCIL_SIZE) \
+ X("FRAMEBUFFER_INCOMPLETE_MULTISAMPLE", GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE) \
+ X("MAX_SAMPLES", GL_MAX_SAMPLES) \
+ X("INDEX", GL_INDEX) \
+ X("TEXTURE_LUMINANCE_TYPE", GL_TEXTURE_LUMINANCE_TYPE) \
+ X("TEXTURE_INTENSITY_TYPE", GL_TEXTURE_INTENSITY_TYPE) \
+ X("FRAMEBUFFER_SRGB", GL_FRAMEBUFFER_SRGB) \
+ X("HALF_FLOAT", GL_HALF_FLOAT) \
+ X("MAP_READ_BIT", GL_MAP_READ_BIT) \
+ X("MAP_WRITE_BIT", GL_MAP_WRITE_BIT) \
+ X("MAP_INVALIDATE_RANGE_BIT", GL_MAP_INVALIDATE_RANGE_BIT) \
+ X("MAP_INVALIDATE_BUFFER_BIT", GL_MAP_INVALIDATE_BUFFER_BIT) \
+ X("MAP_FLUSH_EXPLICIT_BIT", GL_MAP_FLUSH_EXPLICIT_BIT) \
+ X("MAP_UNSYNCHRONIZED_BIT", GL_MAP_UNSYNCHRONIZED_BIT) \
+ X("COMPRESSED_RED_RGTC1", GL_COMPRESSED_RED_RGTC1) \
+ X("COMPRESSED_SIGNED_RED_RGTC1", GL_COMPRESSED_SIGNED_RED_RGTC1) \
+ X("COMPRESSED_RG_RGTC2", GL_COMPRESSED_RG_RGTC2) \
+ X("COMPRESSED_SIGNED_RG_RGTC2", GL_COMPRESSED_SIGNED_RG_RGTC2) \
+ X("RG", GL_RG) \
+ X("RG_INTEGER", GL_RG_INTEGER) \
+ X("R8", GL_R8) \
+ X("R16", GL_R16) \
+ X("RG8", GL_RG8) \
+ X("RG16", GL_RG16) \
+ X("R16F", GL_R16F) \
+ X("R32F", GL_R32F) \
+ X("RG16F", GL_RG16F) \
+ X("RG32F", GL_RG32F) \
+ X("R8I", GL_R8I) \
+ X("R8UI", GL_R8UI) \
+ X("R16I", GL_R16I) \
+ X("R16UI", GL_R16UI) \
+ X("R32I", GL_R32I) \
+ X("R32UI", GL_R32UI) \
+ X("RG8I", GL_RG8I) \
+ X("RG8UI", GL_RG8UI) \
+ X("RG16I", GL_RG16I) \
+ X("RG16UI", GL_RG16UI) \
+ X("RG32I", GL_RG32I) \
+ X("RG32UI", GL_RG32UI) \
+ X("VERTEX_ARRAY_BINDING", GL_VERTEX_ARRAY_BINDING) \
+ X("CLAMP_VERTEX_COLOR", GL_CLAMP_VERTEX_COLOR) \
+ X("CLAMP_FRAGMENT_COLOR", GL_CLAMP_FRAGMENT_COLOR) \
+ X("ALPHA_INTEGER", GL_ALPHA_INTEGER) \
+ X("SAMPLER_2D_RECT", GL_SAMPLER_2D_RECT) \
+ X("SAMPLER_2D_RECT_SHADOW", GL_SAMPLER_2D_RECT_SHADOW) \
+ X("SAMPLER_BUFFER", GL_SAMPLER_BUFFER) \
+ X("INT_SAMPLER_2D_RECT", GL_INT_SAMPLER_2D_RECT) \
+ X("INT_SAMPLER_BUFFER", GL_INT_SAMPLER_BUFFER) \
+ X("UNSIGNED_INT_SAMPLER_2D_RECT", GL_UNSIGNED_INT_SAMPLER_2D_RECT) \
+ X("UNSIGNED_INT_SAMPLER_BUFFER", GL_UNSIGNED_INT_SAMPLER_BUFFER) \
+ X("TEXTURE_BUFFER", GL_TEXTURE_BUFFER) \
+ X("MAX_TEXTURE_BUFFER_SIZE", GL_MAX_TEXTURE_BUFFER_SIZE) \
+ X("TEXTURE_BINDING_BUFFER", GL_TEXTURE_BINDING_BUFFER) \
+ X("TEXTURE_BUFFER_DATA_STORE_BINDING", GL_TEXTURE_BUFFER_DATA_STORE_BINDING) \
+ X("TEXTURE_RECTANGLE", GL_TEXTURE_RECTANGLE) \
+ X("TEXTURE_BINDING_RECTANGLE", GL_TEXTURE_BINDING_RECTANGLE) \
+ X("PROXY_TEXTURE_RECTANGLE", GL_PROXY_TEXTURE_RECTANGLE) \
+ X("MAX_RECTANGLE_TEXTURE_SIZE", GL_MAX_RECTANGLE_TEXTURE_SIZE) \
+ X("R8_SNORM", GL_R8_SNORM) \
+ X("RG8_SNORM", GL_RG8_SNORM) \
+ X("RGB8_SNORM", GL_RGB8_SNORM) \
+ X("RGBA8_SNORM", GL_RGBA8_SNORM) \
+ X("R16_SNORM", GL_R16_SNORM) \
+ X("RG16_SNORM", GL_RG16_SNORM) \
+ X("RGB16_SNORM", GL_RGB16_SNORM) \
+ X("RGBA16_SNORM", GL_RGBA16_SNORM) \
+ X("SIGNED_NORMALIZED", GL_SIGNED_NORMALIZED) \
+ X("PRIMITIVE_RESTART", GL_PRIMITIVE_RESTART) \
+ X("PRIMITIVE_RESTART_INDEX", GL_PRIMITIVE_RESTART_INDEX) \
+ X("COPY_READ_BUFFER", GL_COPY_READ_BUFFER) \
+ X("COPY_WRITE_BUFFER", GL_COPY_WRITE_BUFFER) \
+ X("UNIFORM_BUFFER", GL_UNIFORM_BUFFER) \
+ X("UNIFORM_BUFFER_BINDING", GL_UNIFORM_BUFFER_BINDING) \
+ X("UNIFORM_BUFFER_START", GL_UNIFORM_BUFFER_START) \
+ X("UNIFORM_BUFFER_SIZE", GL_UNIFORM_BUFFER_SIZE) \
+ X("MAX_VERTEX_UNIFORM_BLOCKS", GL_MAX_VERTEX_UNIFORM_BLOCKS) \
+ X("MAX_GEOMETRY_UNIFORM_BLOCKS", GL_MAX_GEOMETRY_UNIFORM_BLOCKS) \
+ X("MAX_FRAGMENT_UNIFORM_BLOCKS", GL_MAX_FRAGMENT_UNIFORM_BLOCKS) \
+ X("MAX_COMBINED_UNIFORM_BLOCKS", GL_MAX_COMBINED_UNIFORM_BLOCKS) \
+ X("MAX_UNIFORM_BUFFER_BINDINGS", GL_MAX_UNIFORM_BUFFER_BINDINGS) \
+ X("MAX_UNIFORM_BLOCK_SIZE", GL_MAX_UNIFORM_BLOCK_SIZE) \
+ X("MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS", GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS) \
+ X("MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS", GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS) \
+ X("MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS", GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS) \
+ X("UNIFORM_BUFFER_OFFSET_ALIGNMENT", GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT) \
+ X("ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH", GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH) \
+ X("ACTIVE_UNIFORM_BLOCKS", GL_ACTIVE_UNIFORM_BLOCKS) \
+ X("UNIFORM_TYPE", GL_UNIFORM_TYPE) \
+ X("UNIFORM_SIZE", GL_UNIFORM_SIZE) \
+ X("UNIFORM_NAME_LENGTH", GL_UNIFORM_NAME_LENGTH) \
+ X("UNIFORM_BLOCK_INDEX", GL_UNIFORM_BLOCK_INDEX) \
+ X("UNIFORM_OFFSET", GL_UNIFORM_OFFSET) \
+ X("UNIFORM_ARRAY_STRIDE", GL_UNIFORM_ARRAY_STRIDE) \
+ X("UNIFORM_MATRIX_STRIDE", GL_UNIFORM_MATRIX_STRIDE) \
+ X("UNIFORM_IS_ROW_MAJOR", GL_UNIFORM_IS_ROW_MAJOR) \
+ X("UNIFORM_BLOCK_BINDING", GL_UNIFORM_BLOCK_BINDING) \
+ X("UNIFORM_BLOCK_DATA_SIZE", GL_UNIFORM_BLOCK_DATA_SIZE) \
+ X("UNIFORM_BLOCK_NAME_LENGTH", GL_UNIFORM_BLOCK_NAME_LENGTH) \
+ X("UNIFORM_BLOCK_ACTIVE_UNIFORMS", GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS) \
+ X("UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES", GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES) \
+ X("UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER", GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER) \
+ X("UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER", GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER) \
+ X("UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER", GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER) \
+ X("INVALID_INDEX", GL_INVALID_INDEX) \
+ X("CONTEXT_CORE_PROFILE_BIT", GL_CONTEXT_CORE_PROFILE_BIT) \
+ X("CONTEXT_COMPATIBILITY_PROFILE_BIT", GL_CONTEXT_COMPATIBILITY_PROFILE_BIT) \
+ X("LINES_ADJACENCY", GL_LINES_ADJACENCY) \
+ X("LINE_STRIP_ADJACENCY", GL_LINE_STRIP_ADJACENCY) \
+ X("TRIANGLES_ADJACENCY", GL_TRIANGLES_ADJACENCY) \
+ X("TRIANGLE_STRIP_ADJACENCY", GL_TRIANGLE_STRIP_ADJACENCY) \
+ X("PROGRAM_POINT_SIZE", GL_PROGRAM_POINT_SIZE) \
+ X("MAX_GEOMETRY_TEXTURE_IMAGE_UNITS", GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS) \
+ X("FRAMEBUFFER_ATTACHMENT_LAYERED", GL_FRAMEBUFFER_ATTACHMENT_LAYERED) \
+ X("FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS", GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS) \
+ X("GEOMETRY_SHADER", GL_GEOMETRY_SHADER) \
+ X("GEOMETRY_VERTICES_OUT", GL_GEOMETRY_VERTICES_OUT) \
+ X("GEOMETRY_INPUT_TYPE", GL_GEOMETRY_INPUT_TYPE) \
+ X("GEOMETRY_OUTPUT_TYPE", GL_GEOMETRY_OUTPUT_TYPE) \
+ X("MAX_GEOMETRY_UNIFORM_COMPONENTS", GL_MAX_GEOMETRY_UNIFORM_COMPONENTS) \
+ X("MAX_GEOMETRY_OUTPUT_VERTICES", GL_MAX_GEOMETRY_OUTPUT_VERTICES) \
+ X("MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS", GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS) \
+ X("MAX_VERTEX_OUTPUT_COMPONENTS", GL_MAX_VERTEX_OUTPUT_COMPONENTS) \
+ X("MAX_GEOMETRY_INPUT_COMPONENTS", GL_MAX_GEOMETRY_INPUT_COMPONENTS) \
+ X("MAX_GEOMETRY_OUTPUT_COMPONENTS", GL_MAX_GEOMETRY_OUTPUT_COMPONENTS) \
+ X("MAX_FRAGMENT_INPUT_COMPONENTS", GL_MAX_FRAGMENT_INPUT_COMPONENTS) \
+ X("CONTEXT_PROFILE_MASK", GL_CONTEXT_PROFILE_MASK) \
+ X("DEPTH_CLAMP", GL_DEPTH_CLAMP) \
+ X("QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION", GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION) \
+ X("FIRST_VERTEX_CONVENTION", GL_FIRST_VERTEX_CONVENTION) \
+ X("LAST_VERTEX_CONVENTION", GL_LAST_VERTEX_CONVENTION) \
+ X("PROVOKING_VERTEX", GL_PROVOKING_VERTEX) \
+ X("TEXTURE_CUBE_MAP_SEAMLESS", GL_TEXTURE_CUBE_MAP_SEAMLESS) \
+ X("MAX_SERVER_WAIT_TIMEOUT", GL_MAX_SERVER_WAIT_TIMEOUT) \
+ X("OBJECT_TYPE", GL_OBJECT_TYPE) \
+ X("SYNC_CONDITION", GL_SYNC_CONDITION) \
+ X("SYNC_STATUS", GL_SYNC_STATUS) \
+ X("SYNC_FLAGS", GL_SYNC_FLAGS) \
+ X("SYNC_FENCE", GL_SYNC_FENCE) \
+ X("SYNC_GPU_COMMANDS_COMPLETE", GL_SYNC_GPU_COMMANDS_COMPLETE) \
+ X("UNSIGNALED", GL_UNSIGNALED) \
+ X("SIGNALED", GL_SIGNALED) \
+ X("ALREADY_SIGNALED", GL_ALREADY_SIGNALED) \
+ X("TIMEOUT_EXPIRED", GL_TIMEOUT_EXPIRED) \
+ X("CONDITION_SATISFIED", GL_CONDITION_SATISFIED) \
+ X("WAIT_FAILED", GL_WAIT_FAILED) \
+ X("TIMEOUT_IGNORED", GL_TIMEOUT_IGNORED) \
+ X("SYNC_FLUSH_COMMANDS_BIT", GL_SYNC_FLUSH_COMMANDS_BIT) \
+ X("SAMPLE_POSITION", GL_SAMPLE_POSITION) \
+ X("SAMPLE_MASK", GL_SAMPLE_MASK) \
+ X("SAMPLE_MASK_VALUE", GL_SAMPLE_MASK_VALUE) \
+ X("MAX_SAMPLE_MASK_WORDS", GL_MAX_SAMPLE_MASK_WORDS) \
+ X("TEXTURE_2D_MULTISAMPLE", GL_TEXTURE_2D_MULTISAMPLE) \
+ X("PROXY_TEXTURE_2D_MULTISAMPLE", GL_PROXY_TEXTURE_2D_MULTISAMPLE) \
+ X("TEXTURE_2D_MULTISAMPLE_ARRAY", GL_TEXTURE_2D_MULTISAMPLE_ARRAY) \
+ X("PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY", GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY) \
+ X("TEXTURE_BINDING_2D_MULTISAMPLE", GL_TEXTURE_BINDING_2D_MULTISAMPLE) \
+ X("TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY", GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY) \
+ X("TEXTURE_SAMPLES", GL_TEXTURE_SAMPLES) \
+ X("TEXTURE_FIXED_SAMPLE_LOCATIONS", GL_TEXTURE_FIXED_SAMPLE_LOCATIONS) \
+ X("SAMPLER_2D_MULTISAMPLE", GL_SAMPLER_2D_MULTISAMPLE) \
+ X("INT_SAMPLER_2D_MULTISAMPLE", GL_INT_SAMPLER_2D_MULTISAMPLE) \
+ X("UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE", GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE) \
+ X("SAMPLER_2D_MULTISAMPLE_ARRAY", GL_SAMPLER_2D_MULTISAMPLE_ARRAY) \
+ X("INT_SAMPLER_2D_MULTISAMPLE_ARRAY", GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY) \
+ X("UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY", GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY) \
+ X("MAX_COLOR_TEXTURE_SAMPLES", GL_MAX_COLOR_TEXTURE_SAMPLES) \
+ X("MAX_DEPTH_TEXTURE_SAMPLES", GL_MAX_DEPTH_TEXTURE_SAMPLES) \
+ X("MAX_INTEGER_SAMPLES", GL_MAX_INTEGER_SAMPLES) \
+ X("VERTEX_ATTRIB_ARRAY_DIVISOR", GL_VERTEX_ATTRIB_ARRAY_DIVISOR) \
+ X("SRC1_COLOR", GL_SRC1_COLOR) \
+ X("ONE_MINUS_SRC1_COLOR", GL_ONE_MINUS_SRC1_COLOR) \
+ X("ONE_MINUS_SRC1_ALPHA", GL_ONE_MINUS_SRC1_ALPHA) \
+ X("MAX_DUAL_SOURCE_DRAW_BUFFERS", GL_MAX_DUAL_SOURCE_DRAW_BUFFERS) \
+ X("ANY_SAMPLES_PASSED", GL_ANY_SAMPLES_PASSED) \
+ X("SAMPLER_BINDING", GL_SAMPLER_BINDING) \
+ X("RGB10_A2UI", GL_RGB10_A2UI) \
+ X("TEXTURE_SWIZZLE_R", GL_TEXTURE_SWIZZLE_R) \
+ X("TEXTURE_SWIZZLE_G", GL_TEXTURE_SWIZZLE_G) \
+ X("TEXTURE_SWIZZLE_B", GL_TEXTURE_SWIZZLE_B) \
+ X("TEXTURE_SWIZZLE_A", GL_TEXTURE_SWIZZLE_A) \
+ X("TEXTURE_SWIZZLE_RGBA", GL_TEXTURE_SWIZZLE_RGBA) \
+ X("TIME_ELAPSED", GL_TIME_ELAPSED) \
+ X("TIMESTAMP", GL_TIMESTAMP) \
+ X("INT_2_10_10_10_REV", GL_INT_2_10_10_10_REV) \
+ X("SAMPLE_SHADING", GL_SAMPLE_SHADING) \
+ X("MIN_SAMPLE_SHADING_VALUE", GL_MIN_SAMPLE_SHADING_VALUE) \
+ X("MIN_PROGRAM_TEXTURE_GATHER_OFFSET", GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET) \
+ X("MAX_PROGRAM_TEXTURE_GATHER_OFFSET", GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET) \
+ X("TEXTURE_CUBE_MAP_ARRAY", GL_TEXTURE_CUBE_MAP_ARRAY) \
+ X("TEXTURE_BINDING_CUBE_MAP_ARRAY", GL_TEXTURE_BINDING_CUBE_MAP_ARRAY) \
+ X("PROXY_TEXTURE_CUBE_MAP_ARRAY", GL_PROXY_TEXTURE_CUBE_MAP_ARRAY) \
+ X("SAMPLER_CUBE_MAP_ARRAY", GL_SAMPLER_CUBE_MAP_ARRAY) \
+ X("SAMPLER_CUBE_MAP_ARRAY_SHADOW", GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW) \
+ X("INT_SAMPLER_CUBE_MAP_ARRAY", GL_INT_SAMPLER_CUBE_MAP_ARRAY) \
+ X("UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY", GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY) \
+ X("DRAW_INDIRECT_BUFFER", GL_DRAW_INDIRECT_BUFFER) \
+ X("DRAW_INDIRECT_BUFFER_BINDING", GL_DRAW_INDIRECT_BUFFER_BINDING) \
+ X("GEOMETRY_SHADER_INVOCATIONS", GL_GEOMETRY_SHADER_INVOCATIONS) \
+ X("MAX_GEOMETRY_SHADER_INVOCATIONS", GL_MAX_GEOMETRY_SHADER_INVOCATIONS) \
+ X("MIN_FRAGMENT_INTERPOLATION_OFFSET", GL_MIN_FRAGMENT_INTERPOLATION_OFFSET) \
+ X("MAX_FRAGMENT_INTERPOLATION_OFFSET", GL_MAX_FRAGMENT_INTERPOLATION_OFFSET) \
+ X("FRAGMENT_INTERPOLATION_OFFSET_BITS", GL_FRAGMENT_INTERPOLATION_OFFSET_BITS) \
+ X("MAX_VERTEX_STREAMS", GL_MAX_VERTEX_STREAMS) \
+ X("DOUBLE_VEC2", GL_DOUBLE_VEC2) \
+ X("DOUBLE_VEC3", GL_DOUBLE_VEC3) \
+ X("DOUBLE_VEC4", GL_DOUBLE_VEC4) \
+ X("DOUBLE_MAT2", GL_DOUBLE_MAT2) \
+ X("DOUBLE_MAT3", GL_DOUBLE_MAT3) \
+ X("DOUBLE_MAT4", GL_DOUBLE_MAT4) \
+ X("DOUBLE_MAT2x3", GL_DOUBLE_MAT2x3) \
+ X("DOUBLE_MAT2x4", GL_DOUBLE_MAT2x4) \
+ X("DOUBLE_MAT3x2", GL_DOUBLE_MAT3x2) \
+ X("DOUBLE_MAT3x4", GL_DOUBLE_MAT3x4) \
+ X("DOUBLE_MAT4x2", GL_DOUBLE_MAT4x2) \
+ X("DOUBLE_MAT4x3", GL_DOUBLE_MAT4x3) \
+ X("ACTIVE_SUBROUTINES", GL_ACTIVE_SUBROUTINES) \
+ X("ACTIVE_SUBROUTINE_UNIFORMS", GL_ACTIVE_SUBROUTINE_UNIFORMS) \
+ X("ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS", GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS) \
+ X("ACTIVE_SUBROUTINE_MAX_LENGTH", GL_ACTIVE_SUBROUTINE_MAX_LENGTH) \
+ X("ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH", GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH) \
+ X("MAX_SUBROUTINES", GL_MAX_SUBROUTINES) \
+ X("MAX_SUBROUTINE_UNIFORM_LOCATIONS", GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS) \
+ X("NUM_COMPATIBLE_SUBROUTINES", GL_NUM_COMPATIBLE_SUBROUTINES) \
+ X("COMPATIBLE_SUBROUTINES", GL_COMPATIBLE_SUBROUTINES) \
+ X("PATCHES", GL_PATCHES) \
+ X("PATCH_VERTICES", GL_PATCH_VERTICES) \
+ X("PATCH_DEFAULT_INNER_LEVEL", GL_PATCH_DEFAULT_INNER_LEVEL) \
+ X("PATCH_DEFAULT_OUTER_LEVEL", GL_PATCH_DEFAULT_OUTER_LEVEL) \
+ X("TESS_CONTROL_OUTPUT_VERTICES", GL_TESS_CONTROL_OUTPUT_VERTICES) \
+ X("TESS_GEN_MODE", GL_TESS_GEN_MODE) \
+ X("TESS_GEN_SPACING", GL_TESS_GEN_SPACING) \
+ X("TESS_GEN_VERTEX_ORDER", GL_TESS_GEN_VERTEX_ORDER) \
+ X("TESS_GEN_POINT_MODE", GL_TESS_GEN_POINT_MODE) \
+ X("ISOLINES", GL_ISOLINES) \
+ X("FRACTIONAL_ODD", GL_FRACTIONAL_ODD) \
+ X("FRACTIONAL_EVEN", GL_FRACTIONAL_EVEN) \
+ X("MAX_PATCH_VERTICES", GL_MAX_PATCH_VERTICES) \
+ X("MAX_TESS_GEN_LEVEL", GL_MAX_TESS_GEN_LEVEL) \
+ X("MAX_TESS_CONTROL_UNIFORM_COMPONENTS", GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS) \
+ X("MAX_TESS_EVALUATION_UNIFORM_COMPONENTS", GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS) \
+ X("MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS", GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS) \
+ X("MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS", GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS) \
+ X("MAX_TESS_CONTROL_OUTPUT_COMPONENTS", GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS) \
+ X("MAX_TESS_PATCH_COMPONENTS", GL_MAX_TESS_PATCH_COMPONENTS) \
+ X("MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS", GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS) \
+ X("MAX_TESS_EVALUATION_OUTPUT_COMPONENTS", GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS) \
+ X("MAX_TESS_CONTROL_UNIFORM_BLOCKS", GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS) \
+ X("MAX_TESS_EVALUATION_UNIFORM_BLOCKS", GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS) \
+ X("MAX_TESS_CONTROL_INPUT_COMPONENTS", GL_MAX_TESS_CONTROL_INPUT_COMPONENTS) \
+ X("MAX_TESS_EVALUATION_INPUT_COMPONENTS", GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS) \
+ X("MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS", GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS) \
+ X("MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS", GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS) \
+ X("UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER", GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER) \
+ X("UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER", GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER) \
+ X("TESS_EVALUATION_SHADER", GL_TESS_EVALUATION_SHADER) \
+ X("TESS_CONTROL_SHADER", GL_TESS_CONTROL_SHADER) \
+ X("TRANSFORM_FEEDBACK", GL_TRANSFORM_FEEDBACK) \
+ X("TRANSFORM_FEEDBACK_BUFFER_PAUSED", GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED) \
+ X("TRANSFORM_FEEDBACK_BUFFER_ACTIVE", GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE) \
+ X("TRANSFORM_FEEDBACK_BINDING", GL_TRANSFORM_FEEDBACK_BINDING) \
+ X("MAX_TRANSFORM_FEEDBACK_BUFFERS", GL_MAX_TRANSFORM_FEEDBACK_BUFFERS) \
+ X("FIXED", GL_FIXED) \
+ X("IMPLEMENTATION_COLOR_READ_TYPE", GL_IMPLEMENTATION_COLOR_READ_TYPE) \
+ X("IMPLEMENTATION_COLOR_READ_FORMAT", GL_IMPLEMENTATION_COLOR_READ_FORMAT) \
+ X("LOW_FLOAT", GL_LOW_FLOAT) \
+ X("MEDIUM_FLOAT", GL_MEDIUM_FLOAT) \
+ X("HIGH_FLOAT", GL_HIGH_FLOAT) \
+ X("LOW_INT", GL_LOW_INT) \
+ X("MEDIUM_INT", GL_MEDIUM_INT) \
+ X("HIGH_INT", GL_HIGH_INT) \
+ X("SHADER_COMPILER", GL_SHADER_COMPILER) \
+ X("SHADER_BINARY_FORMATS", GL_SHADER_BINARY_FORMATS) \
+ X("NUM_SHADER_BINARY_FORMATS", GL_NUM_SHADER_BINARY_FORMATS) \
+ X("MAX_VERTEX_UNIFORM_VECTORS", GL_MAX_VERTEX_UNIFORM_VECTORS) \
+ X("MAX_VARYING_VECTORS", GL_MAX_VARYING_VECTORS) \
+ X("MAX_FRAGMENT_UNIFORM_VECTORS", GL_MAX_FRAGMENT_UNIFORM_VECTORS) \
+ X("RGB565", GL_RGB565) \
+ X("PROGRAM_BINARY_RETRIEVABLE_HINT", GL_PROGRAM_BINARY_RETRIEVABLE_HINT) \
+ X("PROGRAM_BINARY_LENGTH", GL_PROGRAM_BINARY_LENGTH) \
+ X("NUM_PROGRAM_BINARY_FORMATS", GL_NUM_PROGRAM_BINARY_FORMATS) \
+ X("PROGRAM_BINARY_FORMATS", GL_PROGRAM_BINARY_FORMATS) \
+ X("VERTEX_SHADER_BIT", GL_VERTEX_SHADER_BIT) \
+ X("FRAGMENT_SHADER_BIT", GL_FRAGMENT_SHADER_BIT) \
+ X("GEOMETRY_SHADER_BIT", GL_GEOMETRY_SHADER_BIT) \
+ X("TESS_CONTROL_SHADER_BIT", GL_TESS_CONTROL_SHADER_BIT) \
+ X("TESS_EVALUATION_SHADER_BIT", GL_TESS_EVALUATION_SHADER_BIT) \
+ X("ALL_SHADER_BITS", GL_ALL_SHADER_BITS) \
+ X("PROGRAM_SEPARABLE", GL_PROGRAM_SEPARABLE) \
+ X("ACTIVE_PROGRAM", GL_ACTIVE_PROGRAM) \
+ X("PROGRAM_PIPELINE_BINDING", GL_PROGRAM_PIPELINE_BINDING) \
+ X("MAX_VIEWPORTS", GL_MAX_VIEWPORTS) \
+ X("VIEWPORT_SUBPIXEL_BITS", GL_VIEWPORT_SUBPIXEL_BITS) \
+ X("VIEWPORT_BOUNDS_RANGE", GL_VIEWPORT_BOUNDS_RANGE) \
+ X("LAYER_PROVOKING_VERTEX", GL_LAYER_PROVOKING_VERTEX) \
+ X("VIEWPORT_INDEX_PROVOKING_VERTEX", GL_VIEWPORT_INDEX_PROVOKING_VERTEX) \
+ X("UNDEFINED_VERTEX", GL_UNDEFINED_VERTEX) \
+ X("VERSION_1_0", GL_VERSION_1_0) \
+
+
+
+#define X(name, func) int func(lua_State *L);
+GL_FUNCTIONS
+#undef X
+
+#endif
diff --git a/src/opengl/bind/a b/src/opengl/bind/a
new file mode 100644
index 0000000..b414962
--- /dev/null
+++ b/src/opengl/bind/a
@@ -0,0 +1,3 @@
+void glActiveShaderProgram( GLuint pipeline, GLuint program);
+void glActiveTexture( GLenum texture);
+void glAttachShader( GLuint program, GLuint shader);
diff --git a/src/opengl/bind/a.bind b/src/opengl/bind/a.bind
new file mode 100644
index 0000000..41eef56
--- /dev/null
+++ b/src/opengl/bind/a.bind
@@ -0,0 +1,26 @@
+int glActiveShaderProgram_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ GLuint program = luaL_checkinteger(L, 2);
+ glActiveShaderProgram(pipeline, program);
+ return 0;
+}
+
+
+int glActiveTexture_bind(lua_State *L)
+{
+ GLenum texture = luaL_checkinteger(L, 1);
+ glActiveTexture(texture);
+ return 0;
+}
+
+
+int glAttachShader_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint shader = luaL_checkinteger(L, 2);
+ glAttachShader(program, shader);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/b b/src/opengl/bind/b
new file mode 100644
index 0000000..e95cea1
--- /dev/null
+++ b/src/opengl/bind/b
@@ -0,0 +1,35 @@
+void glBeginConditionalRender( GLuint id, GLenum mode);
+void glBeginQuery( GLenum target, GLuint id);
+void glBeginQuery( GLenum target, GLuint id);
+void glBeginTransformFeedback( GLenum primitiveMode);
+void glBindAttribLocation( GLuint program, GLuint index, const GLchar *name);
+void glBindBuffer( GLenum target, GLuint buffer);
+void glBindBufferBase( GLenum target, GLuint index, GLuint buffer);
+void glBindBufferRange( GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+void glBindFragDataLocation( GLuint program, GLuint colorNumber, const char * name);
+void glBindFragDataLocationIndexed( GLuint program, GLuint colorNumber, GLuint index, const char *name);
+void glBindFramebuffer( GLenum target, GLuint framebuffer);
+void glBindImageTexture( GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+void glBindProgramPipeline( GLuint pipeline);
+void glBindRenderbuffer( GLenum target, GLuint renderbuffer);
+void glBindSampler( GLuint unit, GLuint sampler);
+void glBindTexture( GLenum target, GLuint texture);
+void glBindTextureUnit( GLuint unit, GLuint texture);
+void glBindTransformFeedback( GLenum target, GLuint id);
+void glBindVertexArray( GLuint array);
+void glBindVertexBuffer( GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+void glBlendColor( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+void glBlendEquation( GLenum mode);
+
+void glBlendEquationi( GLuint buf, GLenum mode);
+void glBlendEquationSeparate( GLenum modeRGB, GLenum modeAlpha);
+void glBlendEquationSeparatei( GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+void glBlendFunc( GLenum sfactor, GLenum dfactor);
+void glBlendFunci( GLuint buf, GLenum sfactor, GLenum dfactor);
+void glBlendFuncSeparate( GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+void glBlendFuncSeparatei( GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+void glBlitFramebuffer( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+void glBlitNamedFramebuffer( GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+void glBufferData( GLenum target, GLsizeiptr size, const void * data, GLenum usage);
+void glBufferStorage( GLenum target, GLsizeiptr size, const void * data, GLbitfield flags);
+void glBufferSubData( GLenum target, GLintptr offset, GLsizeiptr size, const void * data);
diff --git a/src/opengl/bind/b.bind b/src/opengl/bind/b.bind
new file mode 100644
index 0000000..ee2cfa0
--- /dev/null
+++ b/src/opengl/bind/b.bind
@@ -0,0 +1,350 @@
+int glBeginConditionalRender_bind(lua_State *L)
+{
+ GLuint id = luaL_checkinteger(L, 1);
+ GLenum mode = luaL_checkinteger(L, 2);
+ glBeginConditionalRender(id, mode);
+ return 0;
+}
+
+
+int glBeginQuery_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint id = luaL_checkinteger(L, 2);
+ glBeginQuery(target, id);
+ return 0;
+}
+
+
+int glBeginQuery_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint id = luaL_checkinteger(L, 2);
+ glBeginQuery(target, id);
+ return 0;
+}
+
+
+int glBeginTransformFeedback_bind(lua_State *L)
+{
+ GLenum primitiveMode = luaL_checkinteger(L, 1);
+ glBeginTransformFeedback(primitiveMode);
+ return 0;
+}
+
+
+int glBindAttribLocation_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ const GLchar * name = luaL_checkstring(L, 3);
+ glBindAttribLocation(program, index, name);
+ return 0;
+}
+
+
+int glBindBuffer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint buffer = luaL_checkinteger(L, 2);
+ glBindBuffer(target, buffer);
+ return 0;
+}
+
+
+int glBindBufferBase_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLuint buffer = luaL_checkinteger(L, 3);
+ glBindBufferBase(target, index, buffer);
+ return 0;
+}
+
+
+int glBindBufferRange_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLuint buffer = luaL_checkinteger(L, 3);
+ GLintptr offset = luaL_checkinteger(L, 4);
+ GLsizeiptr size = luaL_checkinteger(L, 5);
+ glBindBufferRange(target, index, buffer, offset, size);
+ return 0;
+}
+
+
+int glBindFragDataLocation_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint colorNumber = luaL_checkinteger(L, 2);
+ const char * name = luaL_checkstring(L, 3);
+ glBindFragDataLocation(program, colorNumber, name);
+ return 0;
+}
+
+
+int glBindFragDataLocationIndexed_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint colorNumber = luaL_checkinteger(L, 2);
+ GLuint index = luaL_checkinteger(L, 3);
+ const char * name = luaL_checkstring(L, 4);
+ glBindFragDataLocationIndexed(program, colorNumber, index, name);
+ return 0;
+}
+
+
+int glBindFramebuffer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint framebuffer = luaL_checkinteger(L, 2);
+ glBindFramebuffer(target, framebuffer);
+ return 0;
+}
+
+
+int glBindImageTexture_bind(lua_State *L)
+{
+ GLuint unit = luaL_checkinteger(L, 1);
+ GLuint texture = luaL_checkinteger(L, 2);
+ GLint level = luaL_checkinteger(L, 3);
+ GLboolean layered = get: GLboolean
+ GLint layer = luaL_checkinteger(L, 5);
+ GLenum access = luaL_checkinteger(L, 6);
+ GLenum format = luaL_checkinteger(L, 7);
+ glBindImageTexture(unit, texture, level, layered, layer, access, format);
+ return 0;
+}
+
+
+int glBindProgramPipeline_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ glBindProgramPipeline(pipeline);
+ return 0;
+}
+
+
+int glBindRenderbuffer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint renderbuffer = luaL_checkinteger(L, 2);
+ glBindRenderbuffer(target, renderbuffer);
+ return 0;
+}
+
+
+int glBindSampler_bind(lua_State *L)
+{
+ GLuint unit = luaL_checkinteger(L, 1);
+ GLuint sampler = luaL_checkinteger(L, 2);
+ glBindSampler(unit, sampler);
+ return 0;
+}
+
+
+int glBindTexture_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint texture = luaL_checkinteger(L, 2);
+ glBindTexture(target, texture);
+ return 0;
+}
+
+
+int glBindTextureUnit_bind(lua_State *L)
+{
+ GLuint unit = luaL_checkinteger(L, 1);
+ GLuint texture = luaL_checkinteger(L, 2);
+ glBindTextureUnit(unit, texture);
+ return 0;
+}
+
+
+int glBindTransformFeedback_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint id = luaL_checkinteger(L, 2);
+ glBindTransformFeedback(target, id);
+ return 0;
+}
+
+
+int glBindVertexArray_bind(lua_State *L)
+{
+ GLuint array = luaL_checkinteger(L, 1);
+ glBindVertexArray(array);
+ return 0;
+}
+
+
+int glBindVertexBuffer_bind(lua_State *L)
+{
+ GLuint bindingindex = luaL_checkinteger(L, 1);
+ GLuint buffer = luaL_checkinteger(L, 2);
+ GLintptr offset = luaL_checkinteger(L, 3);
+ GLsizei stride = luaL_checkinteger(L, 4);
+ glBindVertexBuffer(bindingindex, buffer, offset, stride);
+ return 0;
+}
+
+
+int glBlendColor_bind(lua_State *L)
+{
+ GLfloat red = luaL_checknumber(L, 1);
+ GLfloat green = luaL_checknumber(L, 2);
+ GLfloat blue = luaL_checknumber(L, 3);
+ GLfloat alpha = luaL_checknumber(L, 4);
+ glBlendColor(red, green, blue, alpha);
+ return 0;
+}
+
+
+int glBlendEquation_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ glBlendEquation(mode);
+ return 0;
+}
+
+
+int glBlendEquationi_bind(lua_State *L)
+{
+ GLuint buf = luaL_checkinteger(L, 1);
+ GLenum mode = luaL_checkinteger(L, 2);
+ glBlendEquationi(buf, mode);
+ return 0;
+}
+
+
+int glBlendEquationSeparate_bind(lua_State *L)
+{
+ GLenum modeRGB = luaL_checkinteger(L, 1);
+ GLenum modeAlpha = luaL_checkinteger(L, 2);
+ glBlendEquationSeparate(modeRGB, modeAlpha);
+ return 0;
+}
+
+
+int glBlendEquationSeparatei_bind(lua_State *L)
+{
+ GLuint buf = luaL_checkinteger(L, 1);
+ GLenum modeRGB = luaL_checkinteger(L, 2);
+ GLenum modeAlpha = luaL_checkinteger(L, 3);
+ glBlendEquationSeparatei(buf, modeRGB, modeAlpha);
+ return 0;
+}
+
+
+int glBlendFunc_bind(lua_State *L)
+{
+ GLenum sfactor = luaL_checkinteger(L, 1);
+ GLenum dfactor = luaL_checkinteger(L, 2);
+ glBlendFunc(sfactor, dfactor);
+ return 0;
+}
+
+
+int glBlendFunci_bind(lua_State *L)
+{
+ GLuint buf = luaL_checkinteger(L, 1);
+ GLenum sfactor = luaL_checkinteger(L, 2);
+ GLenum dfactor = luaL_checkinteger(L, 3);
+ glBlendFunci(buf, sfactor, dfactor);
+ return 0;
+}
+
+
+int glBlendFuncSeparate_bind(lua_State *L)
+{
+ GLenum srcRGB = luaL_checkinteger(L, 1);
+ GLenum dstRGB = luaL_checkinteger(L, 2);
+ GLenum srcAlpha = luaL_checkinteger(L, 3);
+ GLenum dstAlpha = luaL_checkinteger(L, 4);
+ glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
+ return 0;
+}
+
+
+int glBlendFuncSeparatei_bind(lua_State *L)
+{
+ GLuint buf = luaL_checkinteger(L, 1);
+ GLenum srcRGB = luaL_checkinteger(L, 2);
+ GLenum dstRGB = luaL_checkinteger(L, 3);
+ GLenum srcAlpha = luaL_checkinteger(L, 4);
+ GLenum dstAlpha = luaL_checkinteger(L, 5);
+ glBlendFuncSeparatei(buf, srcRGB, dstRGB, srcAlpha, dstAlpha);
+ return 0;
+}
+
+
+int glBlitFramebuffer_bind(lua_State *L)
+{
+ GLint srcX0 = luaL_checkinteger(L, 1);
+ GLint srcY0 = luaL_checkinteger(L, 2);
+ GLint srcX1 = luaL_checkinteger(L, 3);
+ GLint srcY1 = luaL_checkinteger(L, 4);
+ GLint dstX0 = luaL_checkinteger(L, 5);
+ GLint dstY0 = luaL_checkinteger(L, 6);
+ GLint dstX1 = luaL_checkinteger(L, 7);
+ GLint dstY1 = luaL_checkinteger(L, 8);
+ GLbitfield mask = luaL_checkinteger(L, 9);
+ GLenum filter = luaL_checkinteger(L, 10);
+ glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+ return 0;
+}
+
+
+int glBlitNamedFramebuffer_bind(lua_State *L)
+{
+ GLuint readFramebuffer = luaL_checkinteger(L, 1);
+ GLuint drawFramebuffer = luaL_checkinteger(L, 2);
+ GLint srcX0 = luaL_checkinteger(L, 3);
+ GLint srcY0 = luaL_checkinteger(L, 4);
+ GLint srcX1 = luaL_checkinteger(L, 5);
+ GLint srcY1 = luaL_checkinteger(L, 6);
+ GLint dstX0 = luaL_checkinteger(L, 7);
+ GLint dstY0 = luaL_checkinteger(L, 8);
+ GLint dstX1 = luaL_checkinteger(L, 9);
+ GLint dstY1 = luaL_checkinteger(L, 10);
+ GLbitfield mask = luaL_checkinteger(L, 11);
+ GLenum filter = luaL_checkinteger(L, 12);
+ glBlitNamedFramebuffer(readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
+ return 0;
+}
+
+
+int glBufferData_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLsizeiptr size = luaL_checkinteger(L, 2);
+ const void * data = get: const void *
+ GLenum usage = luaL_checkinteger(L, 4);
+ glBufferData(target, size, data, usage);
+ return 0;
+}
+
+
+int glBufferStorage_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLsizeiptr size = luaL_checkinteger(L, 2);
+ const void * data = get: const void *
+ GLbitfield flags = luaL_checkinteger(L, 4);
+ glBufferStorage(target, size, data, flags);
+ return 0;
+}
+
+
+int glBufferSubData_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLintptr offset = luaL_checkinteger(L, 2);
+ GLsizeiptr size = luaL_checkinteger(L, 3);
+ const void * data = get: const void *
+ glBufferSubData(target, offset, size, data);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/c b/src/opengl/bind/c
new file mode 100644
index 0000000..a53aa8f
--- /dev/null
+++ b/src/opengl/bind/c
@@ -0,0 +1,31 @@
+GLenum glCheckFramebufferStatus( GLenum target);
+GLenum glCheckNamedFramebufferStatus( GLuint framebuffer, GLenum target);
+void glClampColor( GLenum target, GLenum clamp);
+void glClear( GLbitfield mask);
+void glClearBufferiv( GLenum buffer, GLint drawbuffer, const GLint * value);
+void glClearBufferuiv( GLenum buffer, GLint drawbuffer, const GLuint * value);
+void glClearBufferfv( GLenum buffer, GLint drawbuffer, const GLfloat * value);
+void glClearBufferfi( GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+void glClearStencil( GLint s);
+GLenum glClientWaitSync( GLsync sync, GLbitfield flags, GLuint64 timeout);
+void glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+void glColorMaski( GLuint buf, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+void glCompileShader( GLuint shader);
+void glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data);
+void glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data);
+void glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data);
+void glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data);
+void glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data);
+void glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data);
+void glCopyBufferSubData( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+void glCopyBufferSubData( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+void glCopyTexImage1D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+void glCopyTexImage2D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+void glCopyTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+void glCopyTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+void glCopyTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLuint glCreateProgram( void);
+GLuint glCreateShader( GLenum shaderType);
+GLuint glCreateShaderProgramv( GLenum type, GLsizei count, const char **strings);
+void glCullFace( GLenum mode);
+
diff --git a/src/opengl/bind/c.bind b/src/opengl/bind/c.bind
new file mode 100644
index 0000000..1cf6e80
--- /dev/null
+++ b/src/opengl/bind/c.bind
@@ -0,0 +1,354 @@
+int glCheckFramebufferStatus_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum bind_result = glCheckFramebufferStatus(target);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glCheckNamedFramebufferStatus_bind(lua_State *L)
+{
+ GLuint framebuffer = luaL_checkinteger(L, 1);
+ GLenum target = luaL_checkinteger(L, 2);
+ GLenum bind_result = glCheckNamedFramebufferStatus(framebuffer, target);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glClampColor_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum clamp = luaL_checkinteger(L, 2);
+ glClampColor(target, clamp);
+ return 0;
+}
+
+
+int glClear_bind(lua_State *L)
+{
+ GLbitfield mask = luaL_checkinteger(L, 1);
+ glClear(mask);
+ return 0;
+}
+
+
+int glClearBufferiv_bind(lua_State *L)
+{
+ GLenum buffer = luaL_checkinteger(L, 1);
+ GLint drawbuffer = luaL_checkinteger(L, 2);
+ const GLint * value = get: const GLint *
+ glClearBufferiv(buffer, drawbuffer, value);
+ return 0;
+}
+
+
+int glClearBufferuiv_bind(lua_State *L)
+{
+ GLenum buffer = luaL_checkinteger(L, 1);
+ GLint drawbuffer = luaL_checkinteger(L, 2);
+ const GLuint * value = get: const GLuint *
+ glClearBufferuiv(buffer, drawbuffer, value);
+ return 0;
+}
+
+
+int glClearBufferfv_bind(lua_State *L)
+{
+ GLenum buffer = luaL_checkinteger(L, 1);
+ GLint drawbuffer = luaL_checkinteger(L, 2);
+ const GLfloat * value = get: const GLfloat *
+ glClearBufferfv(buffer, drawbuffer, value);
+ return 0;
+}
+
+
+int glClearBufferfi_bind(lua_State *L)
+{
+ GLenum buffer = luaL_checkinteger(L, 1);
+ GLint drawbuffer = luaL_checkinteger(L, 2);
+ GLfloat depth = luaL_checknumber(L, 3);
+ GLint stencil = luaL_checkinteger(L, 4);
+ glClearBufferfi(buffer, drawbuffer, depth, stencil);
+ return 0;
+}
+
+
+int glClearStencil_bind(lua_State *L)
+{
+ GLint s = luaL_checkinteger(L, 1);
+ glClearStencil(s);
+ return 0;
+}
+
+
+int glClientWaitSync_bind(lua_State *L)
+{
+ GLsync sync = luaL_checkinteger(L, 1);
+ GLbitfield flags = luaL_checkinteger(L, 2);
+ GLuint64 timeout = luaL_checkinteger(L, 3);
+ GLenum bind_result = glClientWaitSync(sync, flags, timeout);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glColorMask_bind(lua_State *L)
+{
+ GLboolean red = get: GLboolean
+ GLboolean green = get: GLboolean
+ GLboolean blue = get: GLboolean
+ GLboolean alpha = get: GLboolean
+ glColorMask(red, green, blue, alpha);
+ return 0;
+}
+
+
+int glColorMaski_bind(lua_State *L)
+{
+ GLuint buf = luaL_checkinteger(L, 1);
+ GLboolean red = get: GLboolean
+ GLboolean green = get: GLboolean
+ GLboolean blue = get: GLboolean
+ GLboolean alpha = get: GLboolean
+ glColorMaski(buf, red, green, blue, alpha);
+ return 0;
+}
+
+
+int glCompileShader_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ glCompileShader(shader);
+ return 0;
+}
+
+
+int glCompressedTexImage1D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLint border = luaL_checkinteger(L, 5);
+ GLsizei imageSize = luaL_checkinteger(L, 6);
+ const void * data = get: const void *
+ glCompressedTexImage1D(target, level, internalformat, width, border, imageSize, data);
+ return 0;
+}
+
+
+int glCompressedTexImage2D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ GLint border = luaL_checkinteger(L, 6);
+ GLsizei imageSize = luaL_checkinteger(L, 7);
+ const void * data = get: const void *
+ glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
+ return 0;
+}
+
+
+int glCompressedTexImage3D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ GLsizei depth = luaL_checkinteger(L, 6);
+ GLint border = luaL_checkinteger(L, 7);
+ GLsizei imageSize = luaL_checkinteger(L, 8);
+ const void * data = get: const void *
+ glCompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);
+ return 0;
+}
+
+
+int glCompressedTexSubImage1D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLenum format = luaL_checkinteger(L, 5);
+ GLsizei imageSize = luaL_checkinteger(L, 6);
+ const void * data = get: const void *
+ glCompressedTexSubImage1D(target, level, xoffset, width, format, imageSize, data);
+ return 0;
+}
+
+
+int glCompressedTexSubImage2D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLint yoffset = luaL_checkinteger(L, 4);
+ GLsizei width = luaL_checkinteger(L, 5);
+ GLsizei height = luaL_checkinteger(L, 6);
+ GLenum format = luaL_checkinteger(L, 7);
+ GLsizei imageSize = luaL_checkinteger(L, 8);
+ const void * data = get: const void *
+ glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
+ return 0;
+}
+
+
+int glCompressedTexSubImage3D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLint yoffset = luaL_checkinteger(L, 4);
+ GLint zoffset = luaL_checkinteger(L, 5);
+ GLsizei width = luaL_checkinteger(L, 6);
+ GLsizei height = luaL_checkinteger(L, 7);
+ GLsizei depth = luaL_checkinteger(L, 8);
+ GLenum format = luaL_checkinteger(L, 9);
+ GLsizei imageSize = luaL_checkinteger(L, 10);
+ const void * data = get: const void *
+ glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
+ return 0;
+}
+
+
+int glCopyBufferSubData_bind(lua_State *L)
+{
+ GLenum readTarget = luaL_checkinteger(L, 1);
+ GLenum writeTarget = luaL_checkinteger(L, 2);
+ GLintptr readOffset = luaL_checkinteger(L, 3);
+ GLintptr writeOffset = luaL_checkinteger(L, 4);
+ GLsizeiptr size = luaL_checkinteger(L, 5);
+ glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
+ return 0;
+}
+
+
+int glCopyBufferSubData_bind(lua_State *L)
+{
+ GLenum readTarget = luaL_checkinteger(L, 1);
+ GLenum writeTarget = luaL_checkinteger(L, 2);
+ GLintptr readOffset = luaL_checkinteger(L, 3);
+ GLintptr writeOffset = luaL_checkinteger(L, 4);
+ GLsizeiptr size = luaL_checkinteger(L, 5);
+ glCopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
+ return 0;
+}
+
+
+int glCopyTexImage1D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLint x = luaL_checkinteger(L, 4);
+ GLint y = luaL_checkinteger(L, 5);
+ GLsizei width = luaL_checkinteger(L, 6);
+ GLint border = luaL_checkinteger(L, 7);
+ glCopyTexImage1D(target, level, internalformat, x, y, width, border);
+ return 0;
+}
+
+
+int glCopyTexImage2D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLint x = luaL_checkinteger(L, 4);
+ GLint y = luaL_checkinteger(L, 5);
+ GLsizei width = luaL_checkinteger(L, 6);
+ GLsizei height = luaL_checkinteger(L, 7);
+ GLint border = luaL_checkinteger(L, 8);
+ glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
+ return 0;
+}
+
+
+int glCopyTexSubImage1D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLint x = luaL_checkinteger(L, 4);
+ GLint y = luaL_checkinteger(L, 5);
+ GLsizei width = luaL_checkinteger(L, 6);
+ glCopyTexSubImage1D(target, level, xoffset, x, y, width);
+ return 0;
+}
+
+
+int glCopyTexSubImage2D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLint yoffset = luaL_checkinteger(L, 4);
+ GLint x = luaL_checkinteger(L, 5);
+ GLint y = luaL_checkinteger(L, 6);
+ GLsizei width = luaL_checkinteger(L, 7);
+ GLsizei height = luaL_checkinteger(L, 8);
+ glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
+ return 0;
+}
+
+
+int glCopyTexSubImage3D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLint yoffset = luaL_checkinteger(L, 4);
+ GLint zoffset = luaL_checkinteger(L, 5);
+ GLint x = luaL_checkinteger(L, 6);
+ GLint y = luaL_checkinteger(L, 7);
+ GLsizei width = luaL_checkinteger(L, 8);
+ GLsizei height = luaL_checkinteger(L, 9);
+ glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
+ return 0;
+}
+
+
+int glCreateProgram_bind(lua_State *L)
+{
+ void = get:
+ GLuint bind_result = glCreateProgram(void);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glCreateShader_bind(lua_State *L)
+{
+ GLenum shaderType = luaL_checkinteger(L, 1);
+ GLuint bind_result = glCreateShader(shaderType);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glCreateShaderProgramv_bind(lua_State *L)
+{
+ GLenum type = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const char ** strings = get: const char **
+ GLuint bind_result = glCreateShaderProgramv(type, count, strings);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glCullFace_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ glCullFace(mode);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/d b/src/opengl/bind/d
new file mode 100644
index 0000000..1437c2e
--- /dev/null
+++ b/src/opengl/bind/d
@@ -0,0 +1,36 @@
+void glDeleteBuffers( GLsizei n, const GLuint * buffers);
+void glDeleteFramebuffers( GLsizei n, GLuint *framebuffers);
+void glDeleteProgram( GLuint program);
+void glDeleteProgramPipelines( GLsizei n, const GLuint *pipelines);
+void glDeleteQueries( GLsizei n, const GLuint * ids);
+void glDeleteRenderbuffers( GLsizei n, GLuint *renderbuffers);
+void glDeleteSamplers( GLsizei n, const GLuint * samplers);
+void glDeleteShader( GLuint shader);
+void glDeleteSync( GLsync sync);
+void glDeleteTextures( GLsizei n, const GLuint * textures);
+void glDeleteTransformFeedbacks( GLsizei n, const GLuint *ids);
+void glDeleteVertexArrays( GLsizei n, const GLuint *arrays);
+void glDepthFunc( GLenum func);
+void glDepthMask( GLboolean flag);
+void glDepthRange( GLdouble nearVal, GLdouble farVal);
+void glDepthRangef( GLfloat nearVal, GLfloat farVal);
+void glDepthRangeArrayv( GLuint first, GLsizei count, const GLdouble *v);
+void glDepthRangeIndexed( GLuint index, GLdouble nearVal, GLdouble farVal);
+void glDetachShader( GLuint program, GLuint shader);
+void glDisable( GLenum cap);
+void glDisablei( GLenum cap, GLuint index);
+void glDisableVertexAttribArray( GLuint index);
+void glDrawArrays( GLenum mode, GLint first, GLsizei count);
+void glDrawArraysIndirect( GLenum mode, const void *indirect);
+void glDrawArraysInstanced( GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+void glDrawBuffer( GLenum buf);
+void glDrawBuffers( GLsizei n, const GLenum *bufs);
+void glDrawElements( GLenum mode, GLsizei count, GLenum type, const void * indices);
+void glDrawElementsBaseVertex( GLenum mode, GLsizei count, GLenum type, void *indices, GLint basevertex);
+void glDrawElementsIndirect( GLenum mode, GLenum type, const void *indirect);
+void glDrawElementsInstanced( GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount);
+void glDrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices);
+void glDrawRangeElementsBaseVertex( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, void *indices, GLint basevertex);
+void glDrawTransformFeedback( GLenum mode, GLuint id);
+void glDrawTransformFeedbackStream( GLenum mode, GLuint id, GLuint stream);
+
diff --git a/src/opengl/bind/d.bind b/src/opengl/bind/d.bind
new file mode 100644
index 0000000..b307029
--- /dev/null
+++ b/src/opengl/bind/d.bind
@@ -0,0 +1,331 @@
+int glDeleteBuffers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLuint * buffers = get: const GLuint *
+ glDeleteBuffers(n, buffers);
+ return 0;
+}
+
+
+int glDeleteFramebuffers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * framebuffers = get: GLuint *
+ glDeleteFramebuffers(n, framebuffers);
+ return 0;
+}
+
+
+int glDeleteProgram_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ glDeleteProgram(program);
+ return 0;
+}
+
+
+int glDeleteProgramPipelines_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLuint * pipelines = get: const GLuint *
+ glDeleteProgramPipelines(n, pipelines);
+ return 0;
+}
+
+
+int glDeleteQueries_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLuint * ids = get: const GLuint *
+ glDeleteQueries(n, ids);
+ return 0;
+}
+
+
+int glDeleteRenderbuffers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * renderbuffers = get: GLuint *
+ glDeleteRenderbuffers(n, renderbuffers);
+ return 0;
+}
+
+
+int glDeleteSamplers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLuint * samplers = get: const GLuint *
+ glDeleteSamplers(n, samplers);
+ return 0;
+}
+
+
+int glDeleteShader_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ glDeleteShader(shader);
+ return 0;
+}
+
+
+int glDeleteSync_bind(lua_State *L)
+{
+ GLsync sync = luaL_checkinteger(L, 1);
+ glDeleteSync(sync);
+ return 0;
+}
+
+
+int glDeleteTextures_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLuint * textures = get: const GLuint *
+ glDeleteTextures(n, textures);
+ return 0;
+}
+
+
+int glDeleteTransformFeedbacks_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLuint * ids = get: const GLuint *
+ glDeleteTransformFeedbacks(n, ids);
+ return 0;
+}
+
+
+int glDeleteVertexArrays_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLuint * arrays = get: const GLuint *
+ glDeleteVertexArrays(n, arrays);
+ return 0;
+}
+
+
+int glDepthFunc_bind(lua_State *L)
+{
+ GLenum func = luaL_checkinteger(L, 1);
+ glDepthFunc(func);
+ return 0;
+}
+
+
+int glDepthMask_bind(lua_State *L)
+{
+ GLboolean flag = get: GLboolean
+ glDepthMask(flag);
+ return 0;
+}
+
+
+int glDepthRange_bind(lua_State *L)
+{
+ GLdouble nearVal = luaL_checknumber(L, 1);
+ GLdouble farVal = luaL_checknumber(L, 2);
+ glDepthRange(nearVal, farVal);
+ return 0;
+}
+
+
+int glDepthRangef_bind(lua_State *L)
+{
+ GLfloat nearVal = luaL_checknumber(L, 1);
+ GLfloat farVal = luaL_checknumber(L, 2);
+ glDepthRangef(nearVal, farVal);
+ return 0;
+}
+
+
+int glDepthRangeArrayv_bind(lua_State *L)
+{
+ GLuint first = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLdouble * v = get: const GLdouble *
+ glDepthRangeArrayv(first, count, v);
+ return 0;
+}
+
+
+int glDepthRangeIndexed_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble nearVal = luaL_checknumber(L, 2);
+ GLdouble farVal = luaL_checknumber(L, 3);
+ glDepthRangeIndexed(index, nearVal, farVal);
+ return 0;
+}
+
+
+int glDetachShader_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint shader = luaL_checkinteger(L, 2);
+ glDetachShader(program, shader);
+ return 0;
+}
+
+
+int glDisable_bind(lua_State *L)
+{
+ GLenum cap = luaL_checkinteger(L, 1);
+ glDisable(cap);
+ return 0;
+}
+
+
+int glDisablei_bind(lua_State *L)
+{
+ GLenum cap = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ glDisablei(cap, index);
+ return 0;
+}
+
+
+int glDisableVertexAttribArray_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ glDisableVertexAttribArray(index);
+ return 0;
+}
+
+
+int glDrawArrays_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLint first = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ glDrawArrays(mode, first, count);
+ return 0;
+}
+
+
+int glDrawArraysIndirect_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ const void * indirect = get: const void *
+ glDrawArraysIndirect(mode, indirect);
+ return 0;
+}
+
+
+int glDrawArraysInstanced_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLint first = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLsizei instancecount = luaL_checkinteger(L, 4);
+ glDrawArraysInstanced(mode, first, count, instancecount);
+ return 0;
+}
+
+
+int glDrawBuffer_bind(lua_State *L)
+{
+ GLenum buf = luaL_checkinteger(L, 1);
+ glDrawBuffer(buf);
+ return 0;
+}
+
+
+int glDrawBuffers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ const GLenum * bufs = get: const GLenum *
+ glDrawBuffers(n, bufs);
+ return 0;
+}
+
+
+int glDrawElements_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLenum type = luaL_checkinteger(L, 3);
+ const void * indices = get: const void *
+ glDrawElements(mode, count, type, indices);
+ return 0;
+}
+
+
+int glDrawElementsBaseVertex_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLenum type = luaL_checkinteger(L, 3);
+ void * indices = get: void *
+ GLint basevertex = luaL_checkinteger(L, 5);
+ glDrawElementsBaseVertex(mode, count, type, indices, basevertex);
+ return 0;
+}
+
+
+int glDrawElementsIndirect_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLenum type = luaL_checkinteger(L, 2);
+ const void * indirect = get: const void *
+ glDrawElementsIndirect(mode, type, indirect);
+ return 0;
+}
+
+
+int glDrawElementsInstanced_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLenum type = luaL_checkinteger(L, 3);
+ const void * indices = get: const void *
+ GLsizei instancecount = luaL_checkinteger(L, 5);
+ glDrawElementsInstanced(mode, count, type, indices, instancecount);
+ return 0;
+}
+
+
+int glDrawRangeElements_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLuint start = luaL_checkinteger(L, 2);
+ GLuint end = luaL_checkinteger(L, 3);
+ GLsizei count = luaL_checkinteger(L, 4);
+ GLenum type = luaL_checkinteger(L, 5);
+ const void * indices = get: const void *
+ glDrawRangeElements(mode, start, end, count, type, indices);
+ return 0;
+}
+
+
+int glDrawRangeElementsBaseVertex_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLuint start = luaL_checkinteger(L, 2);
+ GLuint end = luaL_checkinteger(L, 3);
+ GLsizei count = luaL_checkinteger(L, 4);
+ GLenum type = luaL_checkinteger(L, 5);
+ void * indices = get: void *
+ GLint basevertex = luaL_checkinteger(L, 7);
+ glDrawRangeElementsBaseVertex(mode, start, end, count, type, indices, basevertex);
+ return 0;
+}
+
+
+int glDrawTransformFeedback_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLuint id = luaL_checkinteger(L, 2);
+ glDrawTransformFeedback(mode, id);
+ return 0;
+}
+
+
+int glDrawTransformFeedbackStream_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ GLuint id = luaL_checkinteger(L, 2);
+ GLuint stream = luaL_checkinteger(L, 3);
+ glDrawTransformFeedbackStream(mode, id, stream);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/e b/src/opengl/bind/e
new file mode 100644
index 0000000..4502836
--- /dev/null
+++ b/src/opengl/bind/e
@@ -0,0 +1,7 @@
+void glEnable( GLenum cap);
+void glEnablei( GLenum cap, GLuint index);
+void glEnableVertexAttribArray( GLuint index);
+void glEndConditionalRender( void);
+void glEndQuery( GLenum target);
+void glEndQueryIndexed( GLenum target, GLuint index);
+void glEndTransformFeedback();
diff --git a/src/opengl/bind/e.bind b/src/opengl/bind/e.bind
new file mode 100644
index 0000000..50332d5
--- /dev/null
+++ b/src/opengl/bind/e.bind
@@ -0,0 +1,57 @@
+int glEnable_bind(lua_State *L)
+{
+ GLenum cap = luaL_checkinteger(L, 1);
+ glEnable(cap);
+ return 0;
+}
+
+
+int glEnablei_bind(lua_State *L)
+{
+ GLenum cap = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ glEnablei(cap, index);
+ return 0;
+}
+
+
+int glEnableVertexAttribArray_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ glEnableVertexAttribArray(index);
+ return 0;
+}
+
+
+int glEndConditionalRender_bind(lua_State *L)
+{
+ void = get:
+ glEndConditionalRender(void);
+ return 0;
+}
+
+
+int glEndQuery_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ glEndQuery(target);
+ return 0;
+}
+
+
+int glEndQueryIndexed_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ glEndQueryIndexed(target, index);
+ return 0;
+}
+
+
+int glEndTransformFeedback_bind(lua_State *L)
+{
+ glEndTransformFeedback();
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/f b/src/opengl/bind/f
new file mode 100644
index 0000000..63b8140
--- /dev/null
+++ b/src/opengl/bind/f
@@ -0,0 +1,11 @@
+GLsync glFenceSync( GLenum condition, GLbitfield flags);
+void glFinish( void);
+void glFlush( void);
+void glFlushMappedBufferRange( GLenum target, GLintptr offset, GLsizeiptr length);
+void glFramebufferRenderbuffer( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+void glFramebufferTexture( GLenum target, GLenum attachment, GLuint texture, GLint level);
+void glFramebufferTexture1D( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+void glFramebufferTexture2D( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+void glFramebufferTexture3D( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint layer);
+void glFramebufferTextureLayer( GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+void glFrontFace( GLenum mode);
diff --git a/src/opengl/bind/f.bind b/src/opengl/bind/f.bind
new file mode 100644
index 0000000..de6a297
--- /dev/null
+++ b/src/opengl/bind/f.bind
@@ -0,0 +1,115 @@
+int glFenceSync_bind(lua_State *L)
+{
+ GLenum condition = luaL_checkinteger(L, 1);
+ GLbitfield flags = luaL_checkinteger(L, 2);
+ GLsync bind_result = glFenceSync(condition, flags);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glFinish_bind(lua_State *L)
+{
+ void = get:
+ glFinish(void);
+ return 0;
+}
+
+
+int glFlush_bind(lua_State *L)
+{
+ void = get:
+ glFlush(void);
+ return 0;
+}
+
+
+int glFlushMappedBufferRange_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLintptr offset = luaL_checkinteger(L, 2);
+ GLsizeiptr length = luaL_checkinteger(L, 3);
+ glFlushMappedBufferRange(target, offset, length);
+ return 0;
+}
+
+
+int glFramebufferRenderbuffer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum attachment = luaL_checkinteger(L, 2);
+ GLenum renderbuffertarget = luaL_checkinteger(L, 3);
+ GLuint renderbuffer = luaL_checkinteger(L, 4);
+ glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
+ return 0;
+}
+
+
+int glFramebufferTexture_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum attachment = luaL_checkinteger(L, 2);
+ GLuint texture = luaL_checkinteger(L, 3);
+ GLint level = luaL_checkinteger(L, 4);
+ glFramebufferTexture(target, attachment, texture, level);
+ return 0;
+}
+
+
+int glFramebufferTexture1D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum attachment = luaL_checkinteger(L, 2);
+ GLenum textarget = luaL_checkinteger(L, 3);
+ GLuint texture = luaL_checkinteger(L, 4);
+ GLint level = luaL_checkinteger(L, 5);
+ glFramebufferTexture1D(target, attachment, textarget, texture, level);
+ return 0;
+}
+
+
+int glFramebufferTexture2D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum attachment = luaL_checkinteger(L, 2);
+ GLenum textarget = luaL_checkinteger(L, 3);
+ GLuint texture = luaL_checkinteger(L, 4);
+ GLint level = luaL_checkinteger(L, 5);
+ glFramebufferTexture2D(target, attachment, textarget, texture, level);
+ return 0;
+}
+
+
+int glFramebufferTexture3D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum attachment = luaL_checkinteger(L, 2);
+ GLenum textarget = luaL_checkinteger(L, 3);
+ GLuint texture = luaL_checkinteger(L, 4);
+ GLint level = luaL_checkinteger(L, 5);
+ GLint layer = luaL_checkinteger(L, 6);
+ glFramebufferTexture3D(target, attachment, textarget, texture, level, layer);
+ return 0;
+}
+
+
+int glFramebufferTextureLayer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum attachment = luaL_checkinteger(L, 2);
+ GLuint texture = luaL_checkinteger(L, 3);
+ GLint level = luaL_checkinteger(L, 4);
+ GLint layer = luaL_checkinteger(L, 5);
+ glFramebufferTextureLayer(target, attachment, texture, level, layer);
+ return 0;
+}
+
+
+int glFrontFace_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ glFrontFace(mode);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/g b/src/opengl/bind/g
new file mode 100644
index 0000000..bc61f25
--- /dev/null
+++ b/src/opengl/bind/g
@@ -0,0 +1,88 @@
+void glGenBuffers( GLsizei n, GLuint * buffers);
+void glGenerateMipmap( GLenum target);
+void glGenFramebuffers( GLsizei n, GLuint *ids);
+void glGenProgramPipelines( GLsizei n, GLuint *pipelines);
+void glGenQueries( GLsizei n, GLuint * ids);
+void glGenRenderbuffers( GLsizei n, GLuint *renderbuffers);
+void glGenSamplers( GLsizei n, GLuint *samplers);
+void glGenTextures( GLsizei n, GLuint * textures);
+void glGenTransformFeedbacks( GLsizei n, GLuint *ids);
+void glGenVertexArrays( GLsizei n, GLuint *arrays);
+void glGetBooleanv( GLenum pname, GLboolean * data);
+void glGetDoublev( GLenum pname, GLdouble * data);
+void glGetFloatv( GLenum pname, GLfloat * data);
+void glGetIntegerv( GLenum pname, GLint * data);
+void glGetInteger64v( GLenum pname, GLint64 * data);
+void glGetBooleani_v( GLenum target, GLuint index, GLboolean * data);
+void glGetIntegeri_v( GLenum target, GLuint index, GLint * data);
+void glGetFloati_v( GLenum target, GLuint index, GLfloat * data);
+void glGetDoublei_v( GLenum target, GLuint index, GLdouble * data);
+void glGetInteger64i_v( GLenum target, GLuint index, GLint64 * data);
+void glGetActiveAttrib( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+void glGetActiveSubroutineName( GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+void glGetActiveSubroutineUniformiv( GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+void glGetActiveSubroutineUniformName( GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+void glGetActiveUniform( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+void glGetActiveUniformBlockiv( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+void glGetActiveUniformBlockName( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+void glGetActiveUniformName( GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+void glGetActiveUniformsiv( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+void glGetAttachedShaders( GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+GLint glGetAttribLocation( GLuint program, const GLchar *name);
+void glGetBufferParameteriv( GLenum target, GLenum value, GLint * data);
+void glGetBufferParameteri64v( GLenum target, GLenum value, GLint64 * data);
+void glGetBufferPointerv( GLenum target, GLenum pname, void ** params);
+void glGetBufferSubData( GLenum target, GLintptr offset, GLsizeiptr size, void * data);
+void glGetCompressedTexImage( GLenum target, GLint level, void * pixels);
+GLenum glGetError( void);
+GLint glGetFragDataIndex( GLuint program, const char * name);
+GLint glGetFragDataLocation( GLuint program, const char * name);
+void glGetFramebufferAttachmentParameteriv( GLenum target, GLenum attachment, GLenum pname, GLint *params);
+void glGetMultisamplefv( GLenum pname, GLuint index, GLfloat *val);
+void glGetUniformfv( GLuint program, GLint location, GLfloat *params);
+void glGetUniformiv( GLuint program, GLint location, GLint *params);
+void glGetUniformuiv( GLuint program, GLint location, GLuint *params);
+void glGetUniformdv( GLuint program, GLint location, GLdouble *params);
+void glGetProgramiv( GLuint program, GLenum pname, GLint *params);
+void glGetProgramBinary( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+void glGetProgramInfoLog( GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
+void glGetProgramPipelineiv( GLuint pipeline, GLenum pname, GLint *params);
+void glGetProgramPipelineInfoLog( GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+void glGetProgramPipelineiv( GLuint pipeline, GLenum pname, GLint *params);
+void glGetProgramStageiv( GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+void glGetQueryIndexediv( GLenum target, GLuint index, GLenum pname, GLint * params);
+void glGetQueryiv( GLenum target, GLenum pname, GLint * params);
+void glGetRenderbufferParameteriv( GLenum target, GLenum pname, GLint *params);
+void glGetSamplerParameterfv( GLuint sampler, GLenum pname, GLfloat * params);
+void glGetSamplerParameteriv( GLuint sampler, GLenum pname, GLint * params);
+void glGetSamplerParameterIiv( GLuint sampler, GLenum pname, GLint * params);
+void glGetSamplerParameterIuiv( GLuint sampler, GLenum pname, GLuint * params);
+void glGetShaderiv( GLuint shader, GLenum pname, GLint *params);
+void glGetShaderInfoLog( GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
+void glGetShaderiv( GLuint shader, GLenum pname, GLint *params);
+void glGetShaderPrecisionFormat( GLenum shaderType, GLenum precisionType, GLint *range, GLint *precision);
+void glGetShaderSource( GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+const GLubyte * glGetString(GLenum name);
+const GLubyte * glGetStringi(GLenum name, GLuint index);
+GLuint glGetSubroutineIndex( GLuint program, GLenum shadertype, const GLchar *name);
+GLint glGetSubroutineUniformLocation( GLuint program, GLenum shadertype, const GLchar *name);
+void glGetSynciv( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+void glGetTexImage( GLenum target, GLint level, GLenum format, GLenum type, void * pixels);
+void glGetTexLevelParameterfv( GLenum target, GLint level, GLenum pname, GLfloat * params);
+void glGetTexLevelParameteriv( GLenum target, GLint level, GLenum pname, GLint * params);
+void glGetTexParameterfv( GLenum target, GLenum pname, GLfloat * params);
+void glGetTexParameteriv( GLenum target, GLenum pname, GLint * params);
+void glGetTexParameterIiv( GLenum target, GLenum pname, GLint * params);
+void glGetTexParameterIuiv( GLenum target, GLenum pname, GLuint * params);
+void glGetTransformFeedbackVarying( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, char *name);
+GLuint glGetUniformBlockIndex( GLuint program, const GLchar *uniformBlockName);
+void glGetUniformIndices( GLuint program, GLsizei uniformCount, const GLchar **uniformNames, GLuint *uniformIndices);
+GLint glGetUniformLocation( GLuint program, const GLchar *name);
+void glGetUniformSubroutineuiv( GLenum shadertype, GLint location, GLuint *values);
+void glGetVertexAttribdv( GLuint index, GLenum pname, GLdouble *params);
+void glGetVertexAttribfv( GLuint index, GLenum pname, GLfloat *params);
+void glGetVertexAttribiv( GLuint index, GLenum pname, GLint *params);
+void glGetVertexAttribIiv( GLuint index, GLenum pname, GLint *params);
+void glGetVertexAttribIuiv( GLuint index, GLenum pname, GLuint *params);
+void glGetVertexAttribLdv( GLuint index, GLenum pname, GLdouble *params);
+void glGetVertexAttribPointerv( GLuint index, GLenum pname, void **pointer);
diff --git a/src/opengl/bind/g.bind b/src/opengl/bind/g.bind
new file mode 100644
index 0000000..2c608b8
--- /dev/null
+++ b/src/opengl/bind/g.bind
@@ -0,0 +1,910 @@
+int glGenBuffers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * buffers = get: GLuint *
+ glGenBuffers(n, buffers);
+ return 0;
+}
+
+
+int glGenerateMipmap_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ glGenerateMipmap(target);
+ return 0;
+}
+
+
+int glGenFramebuffers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * ids = get: GLuint *
+ glGenFramebuffers(n, ids);
+ return 0;
+}
+
+
+int glGenProgramPipelines_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * pipelines = get: GLuint *
+ glGenProgramPipelines(n, pipelines);
+ return 0;
+}
+
+
+int glGenQueries_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * ids = get: GLuint *
+ glGenQueries(n, ids);
+ return 0;
+}
+
+
+int glGenRenderbuffers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * renderbuffers = get: GLuint *
+ glGenRenderbuffers(n, renderbuffers);
+ return 0;
+}
+
+
+int glGenSamplers_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * samplers = get: GLuint *
+ glGenSamplers(n, samplers);
+ return 0;
+}
+
+
+int glGenTextures_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * textures = get: GLuint *
+ glGenTextures(n, textures);
+ return 0;
+}
+
+
+int glGenTransformFeedbacks_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * ids = get: GLuint *
+ glGenTransformFeedbacks(n, ids);
+ return 0;
+}
+
+
+int glGenVertexArrays_bind(lua_State *L)
+{
+ GLsizei n = luaL_checkinteger(L, 1);
+ GLuint * arrays = get: GLuint *
+ glGenVertexArrays(n, arrays);
+ return 0;
+}
+
+
+int glGetBooleanv_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLboolean * data = get: GLboolean *
+ glGetBooleanv(pname, data);
+ return 0;
+}
+
+
+int glGetDoublev_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLdouble * data = get: GLdouble *
+ glGetDoublev(pname, data);
+ return 0;
+}
+
+
+int glGetFloatv_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLfloat * data = get: GLfloat *
+ glGetFloatv(pname, data);
+ return 0;
+}
+
+
+int glGetIntegerv_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLint * data = get: GLint *
+ glGetIntegerv(pname, data);
+ return 0;
+}
+
+
+int glGetInteger64v_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLint64 * data = get: GLint64 *
+ glGetInteger64v(pname, data);
+ return 0;
+}
+
+
+int glGetBooleani_v_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLboolean * data = get: GLboolean *
+ glGetBooleani_v(target, index, data);
+ return 0;
+}
+
+
+int glGetIntegeri_v_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLint * data = get: GLint *
+ glGetIntegeri_v(target, index, data);
+ return 0;
+}
+
+
+int glGetFloati_v_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLfloat * data = get: GLfloat *
+ glGetFloati_v(target, index, data);
+ return 0;
+}
+
+
+int glGetDoublei_v_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLdouble * data = get: GLdouble *
+ glGetDoublei_v(target, index, data);
+ return 0;
+}
+
+
+int glGetInteger64i_v_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLint64 * data = get: GLint64 *
+ glGetInteger64i_v(target, index, data);
+ return 0;
+}
+
+
+int glGetActiveAttrib_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLsizei bufSize = luaL_checkinteger(L, 3);
+ GLsizei * length = get: GLsizei *
+ GLint * size = get: GLint *
+ GLenum * type = get: GLenum *
+ GLchar * name = luaL_checkstring(L, 7);
+ glGetActiveAttrib(program, index, bufSize, length, size, type, name);
+ return 0;
+}
+
+
+int glGetActiveSubroutineName_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum shadertype = luaL_checkinteger(L, 2);
+ GLuint index = luaL_checkinteger(L, 3);
+ GLsizei bufSize = luaL_checkinteger(L, 4);
+ GLsizei * length = get: GLsizei *
+ GLchar * name = luaL_checkstring(L, 6);
+ glGetActiveSubroutineName(program, shadertype, index, bufSize, length, name);
+ return 0;
+}
+
+
+int glGetActiveSubroutineUniformiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum shadertype = luaL_checkinteger(L, 2);
+ GLuint index = luaL_checkinteger(L, 3);
+ GLenum pname = luaL_checkinteger(L, 4);
+ GLint * values = get: GLint *
+ glGetActiveSubroutineUniformiv(program, shadertype, index, pname, values);
+ return 0;
+}
+
+
+int glGetActiveSubroutineUniformName_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum shadertype = luaL_checkinteger(L, 2);
+ GLuint index = luaL_checkinteger(L, 3);
+ GLsizei bufSize = luaL_checkinteger(L, 4);
+ GLsizei * length = get: GLsizei *
+ GLchar * name = luaL_checkstring(L, 6);
+ glGetActiveSubroutineUniformName(program, shadertype, index, bufSize, length, name);
+ return 0;
+}
+
+
+int glGetActiveUniform_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLsizei bufSize = luaL_checkinteger(L, 3);
+ GLsizei * length = get: GLsizei *
+ GLint * size = get: GLint *
+ GLenum * type = get: GLenum *
+ GLchar * name = luaL_checkstring(L, 7);
+ glGetActiveUniform(program, index, bufSize, length, size, type, name);
+ return 0;
+}
+
+
+int glGetActiveUniformBlockiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint uniformBlockIndex = luaL_checkinteger(L, 2);
+ GLenum pname = luaL_checkinteger(L, 3);
+ GLint * params = get: GLint *
+ glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
+ return 0;
+}
+
+
+int glGetActiveUniformBlockName_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint uniformBlockIndex = luaL_checkinteger(L, 2);
+ GLsizei bufSize = luaL_checkinteger(L, 3);
+ GLsizei * length = get: GLsizei *
+ GLchar * uniformBlockName = luaL_checkstring(L, 5);
+ glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName);
+ return 0;
+}
+
+
+int glGetActiveUniformName_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint uniformIndex = luaL_checkinteger(L, 2);
+ GLsizei bufSize = luaL_checkinteger(L, 3);
+ GLsizei * length = get: GLsizei *
+ GLchar * uniformName = luaL_checkstring(L, 5);
+ glGetActiveUniformName(program, uniformIndex, bufSize, length, uniformName);
+ return 0;
+}
+
+
+int glGetActiveUniformsiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLsizei uniformCount = luaL_checkinteger(L, 2);
+ const GLuint * uniformIndices = get: const GLuint *
+ GLenum pname = luaL_checkinteger(L, 4);
+ GLint * params = get: GLint *
+ glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
+ return 0;
+}
+
+
+int glGetAttachedShaders_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLsizei maxCount = luaL_checkinteger(L, 2);
+ GLsizei * count = get: GLsizei *
+ GLuint * shaders = get: GLuint *
+ glGetAttachedShaders(program, maxCount, count, shaders);
+ return 0;
+}
+
+
+int glGetAttribLocation_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ const GLchar * name = luaL_checkstring(L, 2);
+ GLint bind_result = glGetAttribLocation(program, name);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetBufferParameteriv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum value = luaL_checkinteger(L, 2);
+ GLint * data = get: GLint *
+ glGetBufferParameteriv(target, value, data);
+ return 0;
+}
+
+
+int glGetBufferParameteri64v_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum value = luaL_checkinteger(L, 2);
+ GLint64 * data = get: GLint64 *
+ glGetBufferParameteri64v(target, value, data);
+ return 0;
+}
+
+
+int glGetBufferPointerv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ void ** params = get: void **
+ glGetBufferPointerv(target, pname, params);
+ return 0;
+}
+
+
+int glGetBufferSubData_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLintptr offset = luaL_checkinteger(L, 2);
+ GLsizeiptr size = luaL_checkinteger(L, 3);
+ void * data = get: void *
+ glGetBufferSubData(target, offset, size, data);
+ return 0;
+}
+
+
+int glGetCompressedTexImage_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ void * pixels = get: void *
+ glGetCompressedTexImage(target, level, pixels);
+ return 0;
+}
+
+
+int glGetError_bind(lua_State *L)
+{
+ void = get:
+ GLenum bind_result = glGetError(void);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetFragDataIndex_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ const char * name = luaL_checkstring(L, 2);
+ GLint bind_result = glGetFragDataIndex(program, name);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetFragDataLocation_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ const char * name = luaL_checkstring(L, 2);
+ GLint bind_result = glGetFragDataLocation(program, name);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetFramebufferAttachmentParameteriv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum attachment = luaL_checkinteger(L, 2);
+ GLenum pname = luaL_checkinteger(L, 3);
+ GLint * params = get: GLint *
+ glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);
+ return 0;
+}
+
+
+int glGetMultisamplefv_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLfloat * val = get: GLfloat *
+ glGetMultisamplefv(pname, index, val);
+ return 0;
+}
+
+
+int glGetUniformfv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLfloat * params = get: GLfloat *
+ glGetUniformfv(program, location, params);
+ return 0;
+}
+
+
+int glGetUniformiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetUniformiv(program, location, params);
+ return 0;
+}
+
+
+int glGetUniformuiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLuint * params = get: GLuint *
+ glGetUniformuiv(program, location, params);
+ return 0;
+}
+
+
+int glGetUniformdv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLdouble * params = get: GLdouble *
+ glGetUniformdv(program, location, params);
+ return 0;
+}
+
+
+int glGetProgramiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetProgramiv(program, pname, params);
+ return 0;
+}
+
+
+int glGetProgramBinary_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLsizei bufSize = luaL_checkinteger(L, 2);
+ GLsizei * length = get: GLsizei *
+ GLenum * binaryFormat = get: GLenum *
+ void * binary = get: void *
+ glGetProgramBinary(program, bufSize, length, binaryFormat, binary);
+ return 0;
+}
+
+
+int glGetProgramInfoLog_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLsizei maxLength = luaL_checkinteger(L, 2);
+ GLsizei * length = get: GLsizei *
+ GLchar * infoLog = luaL_checkstring(L, 4);
+ glGetProgramInfoLog(program, maxLength, length, infoLog);
+ return 0;
+}
+
+
+int glGetProgramPipelineiv_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetProgramPipelineiv(pipeline, pname, params);
+ return 0;
+}
+
+
+int glGetProgramPipelineInfoLog_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ GLsizei bufSize = luaL_checkinteger(L, 2);
+ GLsizei * length = get: GLsizei *
+ GLchar * infoLog = luaL_checkstring(L, 4);
+ glGetProgramPipelineInfoLog(pipeline, bufSize, length, infoLog);
+ return 0;
+}
+
+
+int glGetProgramPipelineiv_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetProgramPipelineiv(pipeline, pname, params);
+ return 0;
+}
+
+
+int glGetProgramStageiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum shadertype = luaL_checkinteger(L, 2);
+ GLenum pname = luaL_checkinteger(L, 3);
+ GLint * values = get: GLint *
+ glGetProgramStageiv(program, shadertype, pname, values);
+ return 0;
+}
+
+
+int glGetQueryIndexediv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLenum pname = luaL_checkinteger(L, 3);
+ GLint * params = get: GLint *
+ glGetQueryIndexediv(target, index, pname, params);
+ return 0;
+}
+
+
+int glGetQueryiv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetQueryiv(target, pname, params);
+ return 0;
+}
+
+
+int glGetRenderbufferParameteriv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetRenderbufferParameteriv(target, pname, params);
+ return 0;
+}
+
+
+int glGetSamplerParameterfv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLfloat * params = get: GLfloat *
+ glGetSamplerParameterfv(sampler, pname, params);
+ return 0;
+}
+
+
+int glGetSamplerParameteriv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetSamplerParameteriv(sampler, pname, params);
+ return 0;
+}
+
+
+int glGetSamplerParameterIiv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetSamplerParameterIiv(sampler, pname, params);
+ return 0;
+}
+
+
+int glGetSamplerParameterIuiv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLuint * params = get: GLuint *
+ glGetSamplerParameterIuiv(sampler, pname, params);
+ return 0;
+}
+
+
+int glGetShaderiv_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetShaderiv(shader, pname, params);
+ return 0;
+}
+
+
+int glGetShaderInfoLog_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ GLsizei maxLength = luaL_checkinteger(L, 2);
+ GLsizei * length = get: GLsizei *
+ GLchar * infoLog = luaL_checkstring(L, 4);
+ glGetShaderInfoLog(shader, maxLength, length, infoLog);
+ return 0;
+}
+
+
+int glGetShaderiv_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetShaderiv(shader, pname, params);
+ return 0;
+}
+
+
+int glGetShaderPrecisionFormat_bind(lua_State *L)
+{
+ GLenum shaderType = luaL_checkinteger(L, 1);
+ GLenum precisionType = luaL_checkinteger(L, 2);
+ GLint * range = get: GLint *
+ GLint * precision = get: GLint *
+ glGetShaderPrecisionFormat(shaderType, precisionType, range, precision);
+ return 0;
+}
+
+
+int glGetShaderSource_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ GLsizei bufSize = luaL_checkinteger(L, 2);
+ GLsizei * length = get: GLsizei *
+ GLchar * source = luaL_checkstring(L, 4);
+ glGetShaderSource(shader, bufSize, length, source);
+ return 0;
+}
+
+
+int glGetString_bind(lua_State *L)
+{
+ GLenum name = luaL_checkinteger(L, 1);
+ const GLubyte * bind_result = glGetString(name);
+ /* push result */
+ return /* count */;
+}
+
+
+int glGetStringi_bind(lua_State *L)
+{
+ GLenum name = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ const GLubyte * bind_result = glGetStringi(name, index);
+ /* push result */
+ return /* count */;
+}
+
+
+int glGetSubroutineIndex_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum shadertype = luaL_checkinteger(L, 2);
+ const GLchar * name = luaL_checkstring(L, 3);
+ GLuint bind_result = glGetSubroutineIndex(program, shadertype, name);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetSubroutineUniformLocation_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum shadertype = luaL_checkinteger(L, 2);
+ const GLchar * name = luaL_checkstring(L, 3);
+ GLint bind_result = glGetSubroutineUniformLocation(program, shadertype, name);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetSynciv_bind(lua_State *L)
+{
+ GLsync sync = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLsizei bufSize = luaL_checkinteger(L, 3);
+ GLsizei * length = get: GLsizei *
+ GLint * values = get: GLint *
+ glGetSynciv(sync, pname, bufSize, length, values);
+ return 0;
+}
+
+
+int glGetTexImage_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum format = luaL_checkinteger(L, 3);
+ GLenum type = luaL_checkinteger(L, 4);
+ void * pixels = get: void *
+ glGetTexImage(target, level, format, type, pixels);
+ return 0;
+}
+
+
+int glGetTexLevelParameterfv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum pname = luaL_checkinteger(L, 3);
+ GLfloat * params = get: GLfloat *
+ glGetTexLevelParameterfv(target, level, pname, params);
+ return 0;
+}
+
+
+int glGetTexLevelParameteriv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLenum pname = luaL_checkinteger(L, 3);
+ GLint * params = get: GLint *
+ glGetTexLevelParameteriv(target, level, pname, params);
+ return 0;
+}
+
+
+int glGetTexParameterfv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLfloat * params = get: GLfloat *
+ glGetTexParameterfv(target, pname, params);
+ return 0;
+}
+
+
+int glGetTexParameteriv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetTexParameteriv(target, pname, params);
+ return 0;
+}
+
+
+int glGetTexParameterIiv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetTexParameterIiv(target, pname, params);
+ return 0;
+}
+
+
+int glGetTexParameterIuiv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLuint * params = get: GLuint *
+ glGetTexParameterIuiv(target, pname, params);
+ return 0;
+}
+
+
+int glGetTransformFeedbackVarying_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLsizei bufSize = luaL_checkinteger(L, 3);
+ GLsizei * length = get: GLsizei *
+ GLsizei * size = get: GLsizei *
+ GLenum * type = get: GLenum *
+ char * name = luaL_checkstring(L, 7);
+ glGetTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
+ return 0;
+}
+
+
+int glGetUniformBlockIndex_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ const GLchar * uniformBlockName = luaL_checkstring(L, 2);
+ GLuint bind_result = glGetUniformBlockIndex(program, uniformBlockName);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetUniformIndices_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLsizei uniformCount = luaL_checkinteger(L, 2);
+ const GLchar ** uniformNames = get: const GLchar **
+ GLuint * uniformIndices = get: GLuint *
+ glGetUniformIndices(program, uniformCount, uniformNames, uniformIndices);
+ return 0;
+}
+
+
+int glGetUniformLocation_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ const GLchar * name = luaL_checkstring(L, 2);
+ GLint bind_result = glGetUniformLocation(program, name);
+ lua_pushinteger(L, bind_result);
+ return 1;
+}
+
+
+int glGetUniformSubroutineuiv_bind(lua_State *L)
+{
+ GLenum shadertype = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLuint * values = get: GLuint *
+ glGetUniformSubroutineuiv(shadertype, location, values);
+ return 0;
+}
+
+
+int glGetVertexAttribdv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLdouble * params = get: GLdouble *
+ glGetVertexAttribdv(index, pname, params);
+ return 0;
+}
+
+
+int glGetVertexAttribfv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLfloat * params = get: GLfloat *
+ glGetVertexAttribfv(index, pname, params);
+ return 0;
+}
+
+
+int glGetVertexAttribiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetVertexAttribiv(index, pname, params);
+ return 0;
+}
+
+
+int glGetVertexAttribIiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint * params = get: GLint *
+ glGetVertexAttribIiv(index, pname, params);
+ return 0;
+}
+
+
+int glGetVertexAttribIuiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLuint * params = get: GLuint *
+ glGetVertexAttribIuiv(index, pname, params);
+ return 0;
+}
+
+
+int glGetVertexAttribLdv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLdouble * params = get: GLdouble *
+ glGetVertexAttribLdv(index, pname, params);
+ return 0;
+}
+
+
+int glGetVertexAttribPointerv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ void ** pointer = get: void **
+ glGetVertexAttribPointerv(index, pname, pointer);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/h b/src/opengl/bind/h
new file mode 100644
index 0000000..00590da
--- /dev/null
+++ b/src/opengl/bind/h
@@ -0,0 +1 @@
+void glHint( GLenum target, GLenum mode);
diff --git a/src/opengl/bind/h.bind b/src/opengl/bind/h.bind
new file mode 100644
index 0000000..7837656
--- /dev/null
+++ b/src/opengl/bind/h.bind
@@ -0,0 +1,9 @@
+int glHint_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum mode = luaL_checkinteger(L, 2);
+ glHint(target, mode);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/i b/src/opengl/bind/i
new file mode 100644
index 0000000..6cb0306
--- /dev/null
+++ b/src/opengl/bind/i
@@ -0,0 +1,14 @@
+GLboolean glIsBuffer( GLuint buffer);
+GLboolean glIsEnabled( GLenum cap);
+GLboolean glIsEnabledi( GLenum cap, GLuint index);
+GLboolean glIsFramebuffer( GLuint framebuffer);
+GLboolean glIsProgram( GLuint program);
+GLboolean glIsProgramPipeline( GLuint pipeline);
+GLboolean glIsQuery( GLuint id);
+GLboolean glIsRenderbuffer( GLuint renderbuffer);
+GLboolean glIsSampler( GLuint id);
+GLboolean glIsShader( GLuint shader);
+GLboolean glIsSync( GLsync sync);
+GLboolean glIsTexture( GLuint texture);
+GLboolean glIsTransformFeedback( GLuint id);
+GLboolean glIsVertexArray( GLuint array);
diff --git a/src/opengl/bind/i.bind b/src/opengl/bind/i.bind
new file mode 100644
index 0000000..044b72b
--- /dev/null
+++ b/src/opengl/bind/i.bind
@@ -0,0 +1,127 @@
+int glIsBuffer_bind(lua_State *L)
+{
+ GLuint buffer = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsBuffer(buffer);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsEnabled_bind(lua_State *L)
+{
+ GLenum cap = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsEnabled(cap);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsEnabledi_bind(lua_State *L)
+{
+ GLenum cap = luaL_checkinteger(L, 1);
+ GLuint index = luaL_checkinteger(L, 2);
+ GLboolean bind_result = glIsEnabledi(cap, index);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsFramebuffer_bind(lua_State *L)
+{
+ GLuint framebuffer = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsFramebuffer(framebuffer);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsProgram_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsProgram(program);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsProgramPipeline_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsProgramPipeline(pipeline);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsQuery_bind(lua_State *L)
+{
+ GLuint id = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsQuery(id);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsRenderbuffer_bind(lua_State *L)
+{
+ GLuint renderbuffer = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsRenderbuffer(renderbuffer);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsSampler_bind(lua_State *L)
+{
+ GLuint id = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsSampler(id);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsShader_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsShader(shader);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsSync_bind(lua_State *L)
+{
+ GLsync sync = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsSync(sync);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsTexture_bind(lua_State *L)
+{
+ GLuint texture = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsTexture(texture);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsTransformFeedback_bind(lua_State *L)
+{
+ GLuint id = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsTransformFeedback(id);
+ /* push result */
+ return /* count */;
+}
+
+
+int glIsVertexArray_bind(lua_State *L)
+{
+ GLuint array = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glIsVertexArray(array);
+ /* push result */
+ return /* count */;
+}
+
+
diff --git a/src/opengl/bind/l b/src/opengl/bind/l
new file mode 100644
index 0000000..eb6ec73
--- /dev/null
+++ b/src/opengl/bind/l
@@ -0,0 +1,4 @@
+void glLineWidth( GLfloat width);
+void glLinkProgram( GLuint program);
+void glLogicOp( GLenum opcode);
+
diff --git a/src/opengl/bind/l.bind b/src/opengl/bind/l.bind
new file mode 100644
index 0000000..1c8601b
--- /dev/null
+++ b/src/opengl/bind/l.bind
@@ -0,0 +1,24 @@
+int glLineWidth_bind(lua_State *L)
+{
+ GLfloat width = luaL_checknumber(L, 1);
+ glLineWidth(width);
+ return 0;
+}
+
+
+int glLinkProgram_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ glLinkProgram(program);
+ return 0;
+}
+
+
+int glLogicOp_bind(lua_State *L)
+{
+ GLenum opcode = luaL_checkinteger(L, 1);
+ glLogicOp(opcode);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/m b/src/opengl/bind/m
new file mode 100644
index 0000000..a346dd1
--- /dev/null
+++ b/src/opengl/bind/m
@@ -0,0 +1,7 @@
+void * glMapBuffer( GLenum target, GLenum access);
+void * glMapBufferRange( GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+void glMinSampleShading( GLfloat value);
+void glMultiDrawArrays( GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount);
+void glMultiDrawElements( GLenum mode, const GLsizei * count, GLenum type, const void * const * indices, GLsizei drawcount);
+void glMultiDrawElementsBaseVertex( GLenum mode, const GLsizei *count, GLenum type, const void * const *indices, GLsizei drawcount, const GLint *basevertex);
+
diff --git a/src/opengl/bind/m.bind b/src/opengl/bind/m.bind
new file mode 100644
index 0000000..e76b3df
--- /dev/null
+++ b/src/opengl/bind/m.bind
@@ -0,0 +1,66 @@
+int glMapBuffer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum access = luaL_checkinteger(L, 2);
+ void * bind_result = glMapBuffer(target, access);
+ /* push result */
+ return /* count */;
+}
+
+
+int glMapBufferRange_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLintptr offset = luaL_checkinteger(L, 2);
+ GLsizeiptr length = luaL_checkinteger(L, 3);
+ GLbitfield access = luaL_checkinteger(L, 4);
+ void * bind_result = glMapBufferRange(target, offset, length, access);
+ /* push result */
+ return /* count */;
+}
+
+
+int glMinSampleShading_bind(lua_State *L)
+{
+ GLfloat value = luaL_checknumber(L, 1);
+ glMinSampleShading(value);
+ return 0;
+}
+
+
+int glMultiDrawArrays_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ const GLint * first = get: const GLint *
+ const GLsizei * count = get: const GLsizei *
+ GLsizei drawcount = luaL_checkinteger(L, 4);
+ glMultiDrawArrays(mode, first, count, drawcount);
+ return 0;
+}
+
+
+int glMultiDrawElements_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ const GLsizei * count = get: const GLsizei *
+ GLenum type = luaL_checkinteger(L, 3);
+ const void * const * indices = get: const void * const *
+ GLsizei drawcount = luaL_checkinteger(L, 5);
+ glMultiDrawElements(mode, count, type, indices, drawcount);
+ return 0;
+}
+
+
+int glMultiDrawElementsBaseVertex_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ const GLsizei * count = get: const GLsizei *
+ GLenum type = luaL_checkinteger(L, 3);
+ const void * const * indices = get: const void * const *
+ GLsizei drawcount = luaL_checkinteger(L, 5);
+ const GLint * basevertex = get: const GLint *
+ glMultiDrawElementsBaseVertex(mode, count, type, indices, drawcount, basevertex);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/p b/src/opengl/bind/p
new file mode 100644
index 0000000..98ee850
--- /dev/null
+++ b/src/opengl/bind/p
@@ -0,0 +1,50 @@
+void glPatchParameteri( GLenum pname, GLint value);
+void glPatchParameterfv( GLenum pname, const GLfloat *values);
+void glPauseTransformFeedback( void);
+void glPixelStoref( GLenum pname, GLfloat param);
+void glPixelStorei( GLenum pname, GLint param);
+void glPointParameterf( GLenum pname, GLfloat param);
+void glPointParameteri( GLenum pname, GLint param);
+void glPointParameterfv( GLenum pname, const GLfloat * params);
+void glPointParameteriv( GLenum pname, const GLint * params);
+void glPointSize( GLfloat size);
+void glPolygonMode( GLenum face, GLenum mode);
+void glPolygonOffset( GLfloat factor, GLfloat units);
+void glPrimitiveRestartIndex( GLuint index);
+void glProgramBinary( GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+void glProgramParameteri( GLuint program, GLenum pname, GLint value);
+void glProgramUniform1f( GLuint program, GLint location, GLfloat v0);
+void glProgramUniform2f( GLuint program, GLint location, GLfloat v0, GLfloat v1);
+void glProgramUniform3f( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+void glProgramUniform4f( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+void glProgramUniform1i( GLuint program, GLint location, GLint v0);
+void glProgramUniform2i( GLuint program, GLint location, GLint v0, GLint v1);
+void glProgramUniform3i( GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+void glProgramUniform4i( GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+void glProgramUniform1ui( GLuint program, GLint location, GLuint v0);
+void glProgramUniform2ui( GLuint program, GLint location, GLuint v0, GLuint v1);
+void glProgramUniform3ui( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+void glProgramUniform4ui( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+void glProgramUniform1fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform2fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform3fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform4fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform1iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform2iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform3iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform4iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform1uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniform2uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniform3uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniform4uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniformMatrix2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix2x3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix3x2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix2x4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix4x2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix3x4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix4x3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProvokingVertex( GLenum provokeMode);
+
diff --git a/src/opengl/bind/p.bind b/src/opengl/bind/p.bind
new file mode 100644
index 0000000..55411f4
--- /dev/null
+++ b/src/opengl/bind/p.bind
@@ -0,0 +1,521 @@
+int glPatchParameteri_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLint value = luaL_checkinteger(L, 2);
+ glPatchParameteri(pname, value);
+ return 0;
+}
+
+
+int glPatchParameterfv_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ const GLfloat * values = get: const GLfloat *
+ glPatchParameterfv(pname, values);
+ return 0;
+}
+
+
+int glPauseTransformFeedback_bind(lua_State *L)
+{
+ void = get:
+ glPauseTransformFeedback(void);
+ return 0;
+}
+
+
+int glPixelStoref_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLfloat param = luaL_checknumber(L, 2);
+ glPixelStoref(pname, param);
+ return 0;
+}
+
+
+int glPixelStorei_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLint param = luaL_checkinteger(L, 2);
+ glPixelStorei(pname, param);
+ return 0;
+}
+
+
+int glPointParameterf_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLfloat param = luaL_checknumber(L, 2);
+ glPointParameterf(pname, param);
+ return 0;
+}
+
+
+int glPointParameteri_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ GLint param = luaL_checkinteger(L, 2);
+ glPointParameteri(pname, param);
+ return 0;
+}
+
+
+int glPointParameterfv_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ const GLfloat * params = get: const GLfloat *
+ glPointParameterfv(pname, params);
+ return 0;
+}
+
+
+int glPointParameteriv_bind(lua_State *L)
+{
+ GLenum pname = luaL_checkinteger(L, 1);
+ const GLint * params = get: const GLint *
+ glPointParameteriv(pname, params);
+ return 0;
+}
+
+
+int glPointSize_bind(lua_State *L)
+{
+ GLfloat size = luaL_checknumber(L, 1);
+ glPointSize(size);
+ return 0;
+}
+
+
+int glPolygonMode_bind(lua_State *L)
+{
+ GLenum face = luaL_checkinteger(L, 1);
+ GLenum mode = luaL_checkinteger(L, 2);
+ glPolygonMode(face, mode);
+ return 0;
+}
+
+
+int glPolygonOffset_bind(lua_State *L)
+{
+ GLfloat factor = luaL_checknumber(L, 1);
+ GLfloat units = luaL_checknumber(L, 2);
+ glPolygonOffset(factor, units);
+ return 0;
+}
+
+
+int glPrimitiveRestartIndex_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ glPrimitiveRestartIndex(index);
+ return 0;
+}
+
+
+int glProgramBinary_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum binaryFormat = luaL_checkinteger(L, 2);
+ const void * binary = get: const void *
+ GLsizei length = luaL_checkinteger(L, 4);
+ glProgramBinary(program, binaryFormat, binary, length);
+ return 0;
+}
+
+
+int glProgramParameteri_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint value = luaL_checkinteger(L, 3);
+ glProgramParameteri(program, pname, value);
+ return 0;
+}
+
+
+int glProgramUniform1f_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLfloat v0 = luaL_checknumber(L, 3);
+ glProgramUniform1f(program, location, v0);
+ return 0;
+}
+
+
+int glProgramUniform2f_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLfloat v0 = luaL_checknumber(L, 3);
+ GLfloat v1 = luaL_checknumber(L, 4);
+ glProgramUniform2f(program, location, v0, v1);
+ return 0;
+}
+
+
+int glProgramUniform3f_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLfloat v0 = luaL_checknumber(L, 3);
+ GLfloat v1 = luaL_checknumber(L, 4);
+ GLfloat v2 = luaL_checknumber(L, 5);
+ glProgramUniform3f(program, location, v0, v1, v2);
+ return 0;
+}
+
+
+int glProgramUniform4f_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLfloat v0 = luaL_checknumber(L, 3);
+ GLfloat v1 = luaL_checknumber(L, 4);
+ GLfloat v2 = luaL_checknumber(L, 5);
+ GLfloat v3 = luaL_checknumber(L, 6);
+ glProgramUniform4f(program, location, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glProgramUniform1i_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLint v0 = luaL_checkinteger(L, 3);
+ glProgramUniform1i(program, location, v0);
+ return 0;
+}
+
+
+int glProgramUniform2i_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLint v0 = luaL_checkinteger(L, 3);
+ GLint v1 = luaL_checkinteger(L, 4);
+ glProgramUniform2i(program, location, v0, v1);
+ return 0;
+}
+
+
+int glProgramUniform3i_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLint v0 = luaL_checkinteger(L, 3);
+ GLint v1 = luaL_checkinteger(L, 4);
+ GLint v2 = luaL_checkinteger(L, 5);
+ glProgramUniform3i(program, location, v0, v1, v2);
+ return 0;
+}
+
+
+int glProgramUniform4i_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLint v0 = luaL_checkinteger(L, 3);
+ GLint v1 = luaL_checkinteger(L, 4);
+ GLint v2 = luaL_checkinteger(L, 5);
+ GLint v3 = luaL_checkinteger(L, 6);
+ glProgramUniform4i(program, location, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glProgramUniform1ui_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLuint v0 = luaL_checkinteger(L, 3);
+ glProgramUniform1ui(program, location, v0);
+ return 0;
+}
+
+
+int glProgramUniform2ui_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLuint v0 = luaL_checkinteger(L, 3);
+ GLuint v1 = luaL_checkinteger(L, 4);
+ glProgramUniform2ui(program, location, v0, v1);
+ return 0;
+}
+
+
+int glProgramUniform3ui_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLuint v0 = luaL_checkinteger(L, 3);
+ GLuint v1 = luaL_checkinteger(L, 4);
+ GLuint v2 = luaL_checkinteger(L, 5);
+ glProgramUniform3ui(program, location, v0, v1, v2);
+ return 0;
+}
+
+
+int glProgramUniform4ui_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLuint v0 = luaL_checkinteger(L, 3);
+ GLuint v1 = luaL_checkinteger(L, 4);
+ GLuint v2 = luaL_checkinteger(L, 5);
+ GLuint v3 = luaL_checkinteger(L, 6);
+ glProgramUniform4ui(program, location, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glProgramUniform1fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniform1fv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform2fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniform2fv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform3fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniform3fv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform4fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniform4fv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform1iv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLint * value = get: const GLint *
+ glProgramUniform1iv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform2iv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLint * value = get: const GLint *
+ glProgramUniform2iv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform3iv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLint * value = get: const GLint *
+ glProgramUniform3iv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform4iv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLint * value = get: const GLint *
+ glProgramUniform4iv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform1uiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLuint * value = get: const GLuint *
+ glProgramUniform1uiv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform2uiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLuint * value = get: const GLuint *
+ glProgramUniform2uiv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform3uiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLuint * value = get: const GLuint *
+ glProgramUniform3uiv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniform4uiv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ const GLuint * value = get: const GLuint *
+ glProgramUniform4uiv(program, location, count, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix2fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix2fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix3fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix3fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix4fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix4fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix2x3fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix2x3fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix3x2fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix3x2fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix2x4fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix2x4fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix4x2fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix4x2fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix3x4fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix3x4fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProgramUniformMatrix4x3fv_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLint location = luaL_checkinteger(L, 2);
+ GLsizei count = luaL_checkinteger(L, 3);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glProgramUniformMatrix4x3fv(program, location, count, transpose, value);
+ return 0;
+}
+
+
+int glProvokingVertex_bind(lua_State *L)
+{
+ GLenum provokeMode = luaL_checkinteger(L, 1);
+ glProvokingVertex(provokeMode);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/q b/src/opengl/bind/q
new file mode 100644
index 0000000..840f97b
--- /dev/null
+++ b/src/opengl/bind/q
@@ -0,0 +1 @@
+void glQueryCounter( GLuint id, GLenum target);
diff --git a/src/opengl/bind/q.bind b/src/opengl/bind/q.bind
new file mode 100644
index 0000000..7209f1f
--- /dev/null
+++ b/src/opengl/bind/q.bind
@@ -0,0 +1,9 @@
+int glQueryCounter_bind(lua_State *L)
+{
+ GLuint id = luaL_checkinteger(L, 1);
+ GLenum target = luaL_checkinteger(L, 2);
+ glQueryCounter(id, target);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/r b/src/opengl/bind/r
new file mode 100644
index 0000000..f4e581c
--- /dev/null
+++ b/src/opengl/bind/r
@@ -0,0 +1,6 @@
+void glReadBuffer( GLenum mode);
+void glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * data);
+void glReleaseShaderCompiler( void);
+void glRenderbufferStorage( GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+void glRenderbufferStorageMultisample( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+void glResumeTransformFeedback( void);
diff --git a/src/opengl/bind/r.bind b/src/opengl/bind/r.bind
new file mode 100644
index 0000000..d070737
--- /dev/null
+++ b/src/opengl/bind/r.bind
@@ -0,0 +1,61 @@
+int glReadBuffer_bind(lua_State *L)
+{
+ GLenum mode = luaL_checkinteger(L, 1);
+ glReadBuffer(mode);
+ return 0;
+}
+
+
+int glReadPixels_bind(lua_State *L)
+{
+ GLint x = luaL_checkinteger(L, 1);
+ GLint y = luaL_checkinteger(L, 2);
+ GLsizei width = luaL_checkinteger(L, 3);
+ GLsizei height = luaL_checkinteger(L, 4);
+ GLenum format = luaL_checkinteger(L, 5);
+ GLenum type = luaL_checkinteger(L, 6);
+ void * data = get: void *
+ glReadPixels(x, y, width, height, format, type, data);
+ return 0;
+}
+
+
+int glReleaseShaderCompiler_bind(lua_State *L)
+{
+ void = get:
+ glReleaseShaderCompiler(void);
+ return 0;
+}
+
+
+int glRenderbufferStorage_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum internalformat = luaL_checkinteger(L, 2);
+ GLsizei width = luaL_checkinteger(L, 3);
+ GLsizei height = luaL_checkinteger(L, 4);
+ glRenderbufferStorage(target, internalformat, width, height);
+ return 0;
+}
+
+
+int glRenderbufferStorageMultisample_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLsizei samples = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ glRenderbufferStorageMultisample(target, samples, internalformat, width, height);
+ return 0;
+}
+
+
+int glResumeTransformFeedback_bind(lua_State *L)
+{
+ void = get:
+ glResumeTransformFeedback(void);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/s b/src/opengl/bind/s
new file mode 100644
index 0000000..cdddf6b
--- /dev/null
+++ b/src/opengl/bind/s
@@ -0,0 +1,21 @@
+void glSampleCoverage( GLfloat value, GLboolean invert);
+void glSampleMaski( GLuint maskNumber, GLbitfield mask);
+void glSamplerParameterf( GLuint sampler, GLenum pname, GLfloat param);
+void glSamplerParameteri( GLuint sampler, GLenum pname, GLint param);
+void glSamplerParameterfv( GLuint sampler, GLenum pname, const GLfloat * params);
+void glSamplerParameteriv( GLuint sampler, GLenum pname, const GLint * params);
+void glSamplerParameterIiv( GLuint sampler, GLenum pname, const GLint *params);
+void glSamplerParameterIuiv( GLuint sampler, GLenum pname, const GLuint *params);
+void glScissor( GLint x, GLint y, GLsizei width, GLsizei height);
+void glScissorArrayv( GLuint first, GLsizei count, const GLint *v);
+void glScissorIndexed( GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+void glScissorIndexedv( GLuint index, const GLint *v);
+void glShaderBinary( GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length);
+void glShaderSource( GLuint shader, GLsizei count, const GLchar **string, const GLint *length);
+void glStencilFunc( GLenum func, GLint ref, GLuint mask);
+void glStencilFuncSeparate( GLenum face, GLenum func, GLint ref, GLuint mask);
+void glStencilMask( GLuint mask);
+void glStencilMaskSeparate( GLenum face, GLuint mask);
+void glStencilOp( GLenum sfail, GLenum dpfail, GLenum dppass);
+void glStencilOpSeparate( GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+
diff --git a/src/opengl/bind/s.bind b/src/opengl/bind/s.bind
new file mode 100644
index 0000000..256ebe2
--- /dev/null
+++ b/src/opengl/bind/s.bind
@@ -0,0 +1,202 @@
+int glSampleCoverage_bind(lua_State *L)
+{
+ GLfloat value = luaL_checknumber(L, 1);
+ GLboolean invert = get: GLboolean
+ glSampleCoverage(value, invert);
+ return 0;
+}
+
+
+int glSampleMaski_bind(lua_State *L)
+{
+ GLuint maskNumber = luaL_checkinteger(L, 1);
+ GLbitfield mask = luaL_checkinteger(L, 2);
+ glSampleMaski(maskNumber, mask);
+ return 0;
+}
+
+
+int glSamplerParameterf_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLfloat param = luaL_checknumber(L, 3);
+ glSamplerParameterf(sampler, pname, param);
+ return 0;
+}
+
+
+int glSamplerParameteri_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint param = luaL_checkinteger(L, 3);
+ glSamplerParameteri(sampler, pname, param);
+ return 0;
+}
+
+
+int glSamplerParameterfv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLfloat * params = get: const GLfloat *
+ glSamplerParameterfv(sampler, pname, params);
+ return 0;
+}
+
+
+int glSamplerParameteriv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLint * params = get: const GLint *
+ glSamplerParameteriv(sampler, pname, params);
+ return 0;
+}
+
+
+int glSamplerParameterIiv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLint * params = get: const GLint *
+ glSamplerParameterIiv(sampler, pname, params);
+ return 0;
+}
+
+
+int glSamplerParameterIuiv_bind(lua_State *L)
+{
+ GLuint sampler = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLuint * params = get: const GLuint *
+ glSamplerParameterIuiv(sampler, pname, params);
+ return 0;
+}
+
+
+int glScissor_bind(lua_State *L)
+{
+ GLint x = luaL_checkinteger(L, 1);
+ GLint y = luaL_checkinteger(L, 2);
+ GLsizei width = luaL_checkinteger(L, 3);
+ GLsizei height = luaL_checkinteger(L, 4);
+ glScissor(x, y, width, height);
+ return 0;
+}
+
+
+int glScissorArrayv_bind(lua_State *L)
+{
+ GLuint first = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLint * v = get: const GLint *
+ glScissorArrayv(first, count, v);
+ return 0;
+}
+
+
+int glScissorIndexed_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLint left = luaL_checkinteger(L, 2);
+ GLint bottom = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ glScissorIndexed(index, left, bottom, width, height);
+ return 0;
+}
+
+
+int glScissorIndexedv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLint * v = get: const GLint *
+ glScissorIndexedv(index, v);
+ return 0;
+}
+
+
+int glShaderBinary_bind(lua_State *L)
+{
+ GLsizei count = luaL_checkinteger(L, 1);
+ const GLuint * shaders = get: const GLuint *
+ GLenum binaryFormat = luaL_checkinteger(L, 3);
+ const void * binary = get: const void *
+ GLsizei length = luaL_checkinteger(L, 5);
+ glShaderBinary(count, shaders, binaryFormat, binary, length);
+ return 0;
+}
+
+
+int glShaderSource_bind(lua_State *L)
+{
+ GLuint shader = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLchar ** string = get: const GLchar **
+ const GLint * length = get: const GLint *
+ glShaderSource(shader, count, string, length);
+ return 0;
+}
+
+
+int glStencilFunc_bind(lua_State *L)
+{
+ GLenum func = luaL_checkinteger(L, 1);
+ GLint ref = luaL_checkinteger(L, 2);
+ GLuint mask = luaL_checkinteger(L, 3);
+ glStencilFunc(func, ref, mask);
+ return 0;
+}
+
+
+int glStencilFuncSeparate_bind(lua_State *L)
+{
+ GLenum face = luaL_checkinteger(L, 1);
+ GLenum func = luaL_checkinteger(L, 2);
+ GLint ref = luaL_checkinteger(L, 3);
+ GLuint mask = luaL_checkinteger(L, 4);
+ glStencilFuncSeparate(face, func, ref, mask);
+ return 0;
+}
+
+
+int glStencilMask_bind(lua_State *L)
+{
+ GLuint mask = luaL_checkinteger(L, 1);
+ glStencilMask(mask);
+ return 0;
+}
+
+
+int glStencilMaskSeparate_bind(lua_State *L)
+{
+ GLenum face = luaL_checkinteger(L, 1);
+ GLuint mask = luaL_checkinteger(L, 2);
+ glStencilMaskSeparate(face, mask);
+ return 0;
+}
+
+
+int glStencilOp_bind(lua_State *L)
+{
+ GLenum sfail = luaL_checkinteger(L, 1);
+ GLenum dpfail = luaL_checkinteger(L, 2);
+ GLenum dppass = luaL_checkinteger(L, 3);
+ glStencilOp(sfail, dpfail, dppass);
+ return 0;
+}
+
+
+int glStencilOpSeparate_bind(lua_State *L)
+{
+ GLenum face = luaL_checkinteger(L, 1);
+ GLenum sfail = luaL_checkinteger(L, 2);
+ GLenum dpfail = luaL_checkinteger(L, 3);
+ GLenum dppass = luaL_checkinteger(L, 4);
+ glStencilOpSeparate(face, sfail, dpfail, dppass);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/sigs b/src/opengl/bind/sigs
new file mode 100644
index 0000000..60479df
--- /dev/null
+++ b/src/opengl/bind/sigs
@@ -0,0 +1,445 @@
+void glActiveShaderProgram( GLuint pipeline, GLuint program);
+void glActiveTexture( GLenum texture);
+void glAttachShader( GLuint program, GLuint shader);
+void glBeginConditionalRender( GLuint id, GLenum mode);
+void glBeginQuery( GLenum target, GLuint id);
+void glBeginQuery( GLenum target, GLuint id);
+void glBeginTransformFeedback( GLenum primitiveMode);
+void glBindAttribLocation( GLuint program, GLuint index, const GLchar *name);
+void glBindBuffer( GLenum target, GLuint buffer);
+void glBindBufferBase( GLenum target, GLuint index, GLuint buffer);
+void glBindBufferRange( GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);
+void glBindFragDataLocation( GLuint program, GLuint colorNumber, const char * name);
+void glBindFragDataLocationIndexed( GLuint program, GLuint colorNumber, GLuint index, const char *name);
+void glBindFramebuffer( GLenum target, GLuint framebuffer);
+void glBindImageTexture( GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format);
+void glBindProgramPipeline( GLuint pipeline);
+void glBindRenderbuffer( GLenum target, GLuint renderbuffer);
+void glBindSampler( GLuint unit, GLuint sampler);
+void glBindTexture( GLenum target, GLuint texture);
+void glBindTextureUnit( GLuint unit, GLuint texture);
+void glBindTransformFeedback( GLenum target, GLuint id);
+void glBindVertexArray( GLuint array);
+void glBindVertexBuffer( GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
+void glBlendColor( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
+void glBlendEquation( GLenum mode);
+
+void glBlendEquationi( GLuint buf, GLenum mode);
+void glBlendEquationSeparate( GLenum modeRGB, GLenum modeAlpha);
+void glBlendEquationSeparatei( GLuint buf, GLenum modeRGB, GLenum modeAlpha);
+void glBlendFunc( GLenum sfactor, GLenum dfactor);
+void glBlendFunci( GLuint buf, GLenum sfactor, GLenum dfactor);
+void glBlendFuncSeparate( GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+void glBlendFuncSeparatei( GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
+void glBlitFramebuffer( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+void glBlitNamedFramebuffer( GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+void glBufferData( GLenum target, GLsizeiptr size, const void * data, GLenum usage);
+void glBufferStorage( GLenum target, GLsizeiptr size, const void * data, GLbitfield flags);
+void glBufferSubData( GLenum target, GLintptr offset, GLsizeiptr size, const void * data);
+GLenum glCheckFramebufferStatus( GLenum target);
+GLenum glCheckNamedFramebufferStatus( GLuint framebuffer, GLenum target);
+void glClampColor( GLenum target, GLenum clamp);
+void glClear( GLbitfield mask);
+void glClearBufferiv( GLenum buffer, GLint drawbuffer, const GLint * value);
+void glClearBufferuiv( GLenum buffer, GLint drawbuffer, const GLuint * value);
+void glClearBufferfv( GLenum buffer, GLint drawbuffer, const GLfloat * value);
+void glClearBufferfi( GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil);
+void glClearStencil( GLint s);
+GLenum glClientWaitSync( GLsync sync, GLbitfield flags, GLuint64 timeout);
+void glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+void glColorMaski( GLuint buf, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+void glCompileShader( GLuint shader);
+void glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data);
+void glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data);
+void glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data);
+void glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data);
+void glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data);
+void glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data);
+void glCopyBufferSubData( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+void glCopyBufferSubData( GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
+void glCopyTexImage1D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+void glCopyTexImage2D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+void glCopyTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+void glCopyTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+void glCopyTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+GLuint glCreateProgram( void);
+GLuint glCreateShader( GLenum shaderType);
+GLuint glCreateShaderProgramv( GLenum type, GLsizei count, const char **strings);
+void glCullFace( GLenum mode);
+
+void glDeleteBuffers( GLsizei n, const GLuint * buffers);
+void glDeleteFramebuffers( GLsizei n, GLuint *framebuffers);
+void glDeleteProgram( GLuint program);
+void glDeleteProgramPipelines( GLsizei n, const GLuint *pipelines);
+void glDeleteQueries( GLsizei n, const GLuint * ids);
+void glDeleteRenderbuffers( GLsizei n, GLuint *renderbuffers);
+void glDeleteSamplers( GLsizei n, const GLuint * samplers);
+void glDeleteShader( GLuint shader);
+void glDeleteSync( GLsync sync);
+void glDeleteTextures( GLsizei n, const GLuint * textures);
+void glDeleteTransformFeedbacks( GLsizei n, const GLuint *ids);
+void glDeleteVertexArrays( GLsizei n, const GLuint *arrays);
+void glDepthFunc( GLenum func);
+void glDepthMask( GLboolean flag);
+void glDepthRange( GLdouble nearVal, GLdouble farVal);
+void glDepthRangef( GLfloat nearVal, GLfloat farVal);
+void glDepthRangeArrayv( GLuint first, GLsizei count, const GLdouble *v);
+void glDepthRangeIndexed( GLuint index, GLdouble nearVal, GLdouble farVal);
+void glDetachShader( GLuint program, GLuint shader);
+void glDisable( GLenum cap);
+void glDisablei( GLenum cap, GLuint index);
+void glDisableVertexAttribArray( GLuint index);
+void glDrawArrays( GLenum mode, GLint first, GLsizei count);
+void glDrawArraysIndirect( GLenum mode, const void *indirect);
+void glDrawArraysInstanced( GLenum mode, GLint first, GLsizei count, GLsizei instancecount);
+void glDrawBuffer( GLenum buf);
+void glDrawBuffers( GLsizei n, const GLenum *bufs);
+void glDrawElements( GLenum mode, GLsizei count, GLenum type, const void * indices);
+void glDrawElementsBaseVertex( GLenum mode, GLsizei count, GLenum type, void *indices, GLint basevertex);
+void glDrawElementsIndirect( GLenum mode, GLenum type, const void *indirect);
+void glDrawElementsInstanced( GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount);
+void glDrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices);
+void glDrawRangeElementsBaseVertex( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, void *indices, GLint basevertex);
+void glDrawTransformFeedback( GLenum mode, GLuint id);
+void glDrawTransformFeedbackStream( GLenum mode, GLuint id, GLuint stream);
+
+void glEnable( GLenum cap);
+void glEnablei( GLenum cap, GLuint index);
+void glEnableVertexAttribArray( GLuint index);
+void glEndConditionalRender( void);
+void glEndQuery( GLenum target);
+void glEndQueryIndexed( GLenum target, GLuint index);
+void glEndTransformFeedback();
+GLsync glFenceSync( GLenum condition, GLbitfield flags);
+void glFinish( void);
+void glFlush( void);
+void glFlushMappedBufferRange( GLenum target, GLintptr offset, GLsizeiptr length);
+void glFramebufferRenderbuffer( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
+void glFramebufferTexture( GLenum target, GLenum attachment, GLuint texture, GLint level);
+void glFramebufferTexture1D( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+void glFramebufferTexture2D( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
+void glFramebufferTexture3D( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint layer);
+void glFramebufferTextureLayer( GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);
+void glFrontFace( GLenum mode);
+void glGenBuffers( GLsizei n, GLuint * buffers);
+void glGenerateMipmap( GLenum target);
+void glGenFramebuffers( GLsizei n, GLuint *ids);
+void glGenProgramPipelines( GLsizei n, GLuint *pipelines);
+void glGenQueries( GLsizei n, GLuint * ids);
+void glGenRenderbuffers( GLsizei n, GLuint *renderbuffers);
+void glGenSamplers( GLsizei n, GLuint *samplers);
+void glGenTextures( GLsizei n, GLuint * textures);
+void glGenTransformFeedbacks( GLsizei n, GLuint *ids);
+void glGenVertexArrays( GLsizei n, GLuint *arrays);
+void glGetBooleanv( GLenum pname, GLboolean * data);
+void glGetDoublev( GLenum pname, GLdouble * data);
+void glGetFloatv( GLenum pname, GLfloat * data);
+void glGetIntegerv( GLenum pname, GLint * data);
+void glGetInteger64v( GLenum pname, GLint64 * data);
+void glGetBooleani_v( GLenum target, GLuint index, GLboolean * data);
+void glGetIntegeri_v( GLenum target, GLuint index, GLint * data);
+void glGetFloati_v( GLenum target, GLuint index, GLfloat * data);
+void glGetDoublei_v( GLenum target, GLuint index, GLdouble * data);
+void glGetInteger64i_v( GLenum target, GLuint index, GLint64 * data);
+void glGetActiveAttrib( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+void glGetActiveSubroutineName( GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+void glGetActiveSubroutineUniformiv( GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values);
+void glGetActiveSubroutineUniformName( GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name);
+void glGetActiveUniform( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+void glGetActiveUniformBlockiv( GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params);
+void glGetActiveUniformBlockName( GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName);
+void glGetActiveUniformName( GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName);
+void glGetActiveUniformsiv( GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params);
+void glGetAttachedShaders( GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders);
+GLint glGetAttribLocation( GLuint program, const GLchar *name);
+void glGetBufferParameteriv( GLenum target, GLenum value, GLint * data);
+void glGetBufferParameteri64v( GLenum target, GLenum value, GLint64 * data);
+void glGetBufferPointerv( GLenum target, GLenum pname, void ** params);
+void glGetBufferSubData( GLenum target, GLintptr offset, GLsizeiptr size, void * data);
+void glGetCompressedTexImage( GLenum target, GLint level, void * pixels);
+GLenum glGetError( void);
+GLint glGetFragDataIndex( GLuint program, const char * name);
+GLint glGetFragDataLocation( GLuint program, const char * name);
+void glGetFramebufferAttachmentParameteriv( GLenum target, GLenum attachment, GLenum pname, GLint *params);
+void glGetMultisamplefv( GLenum pname, GLuint index, GLfloat *val);
+void glGetUniformfv( GLuint program, GLint location, GLfloat *params);
+void glGetUniformiv( GLuint program, GLint location, GLint *params);
+void glGetUniformuiv( GLuint program, GLint location, GLuint *params);
+void glGetUniformdv( GLuint program, GLint location, GLdouble *params);
+void glGetProgramiv( GLuint program, GLenum pname, GLint *params);
+void glGetProgramBinary( GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary);
+void glGetProgramInfoLog( GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
+void glGetProgramPipelineiv( GLuint pipeline, GLenum pname, GLint *params);
+void glGetProgramPipelineInfoLog( GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+void glGetProgramPipelineiv( GLuint pipeline, GLenum pname, GLint *params);
+void glGetProgramStageiv( GLuint program, GLenum shadertype, GLenum pname, GLint *values);
+void glGetQueryIndexediv( GLenum target, GLuint index, GLenum pname, GLint * params);
+void glGetQueryiv( GLenum target, GLenum pname, GLint * params);
+void glGetRenderbufferParameteriv( GLenum target, GLenum pname, GLint *params);
+void glGetSamplerParameterfv( GLuint sampler, GLenum pname, GLfloat * params);
+void glGetSamplerParameteriv( GLuint sampler, GLenum pname, GLint * params);
+void glGetSamplerParameterIiv( GLuint sampler, GLenum pname, GLint * params);
+void glGetSamplerParameterIuiv( GLuint sampler, GLenum pname, GLuint * params);
+void glGetShaderiv( GLuint shader, GLenum pname, GLint *params);
+void glGetShaderInfoLog( GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog);
+void glGetShaderiv( GLuint shader, GLenum pname, GLint *params);
+void glGetShaderPrecisionFormat( GLenum shaderType, GLenum precisionType, GLint *range, GLint *precision);
+void glGetShaderSource( GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+const GLubyte * glGetString(GLenum name);
+const GLubyte * glGetStringi(GLenum name, GLuint index);
+GLuint glGetSubroutineIndex( GLuint program, GLenum shadertype, const GLchar *name);
+GLint glGetSubroutineUniformLocation( GLuint program, GLenum shadertype, const GLchar *name);
+void glGetSynciv( GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
+void glGetTexImage( GLenum target, GLint level, GLenum format, GLenum type, void * pixels);
+void glGetTexLevelParameterfv( GLenum target, GLint level, GLenum pname, GLfloat * params);
+void glGetTexLevelParameteriv( GLenum target, GLint level, GLenum pname, GLint * params);
+void glGetTexParameterfv( GLenum target, GLenum pname, GLfloat * params);
+void glGetTexParameteriv( GLenum target, GLenum pname, GLint * params);
+void glGetTexParameterIiv( GLenum target, GLenum pname, GLint * params);
+void glGetTexParameterIuiv( GLenum target, GLenum pname, GLuint * params);
+void glGetTransformFeedbackVarying( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, char *name);
+GLuint glGetUniformBlockIndex( GLuint program, const GLchar *uniformBlockName);
+void glGetUniformIndices( GLuint program, GLsizei uniformCount, const GLchar **uniformNames, GLuint *uniformIndices);
+GLint glGetUniformLocation( GLuint program, const GLchar *name);
+void glGetUniformSubroutineuiv( GLenum shadertype, GLint location, GLuint *values);
+void glGetVertexAttribdv( GLuint index, GLenum pname, GLdouble *params);
+void glGetVertexAttribfv( GLuint index, GLenum pname, GLfloat *params);
+void glGetVertexAttribiv( GLuint index, GLenum pname, GLint *params);
+void glGetVertexAttribIiv( GLuint index, GLenum pname, GLint *params);
+void glGetVertexAttribIuiv( GLuint index, GLenum pname, GLuint *params);
+void glGetVertexAttribLdv( GLuint index, GLenum pname, GLdouble *params);
+void glGetVertexAttribPointerv( GLuint index, GLenum pname, void **pointer);
+void glHint( GLenum target, GLenum mode);
+GLboolean glIsBuffer( GLuint buffer);
+GLboolean glIsEnabled( GLenum cap);
+GLboolean glIsEnabledi( GLenum cap, GLuint index);
+GLboolean glIsFramebuffer( GLuint framebuffer);
+GLboolean glIsProgram( GLuint program);
+GLboolean glIsProgramPipeline( GLuint pipeline);
+GLboolean glIsQuery( GLuint id);
+GLboolean glIsRenderbuffer( GLuint renderbuffer);
+GLboolean glIsSampler( GLuint id);
+GLboolean glIsShader( GLuint shader);
+GLboolean glIsSync( GLsync sync);
+GLboolean glIsTexture( GLuint texture);
+GLboolean glIsTransformFeedback( GLuint id);
+GLboolean glIsVertexArray( GLuint array);
+void glLineWidth( GLfloat width);
+void glLinkProgram( GLuint program);
+void glLogicOp( GLenum opcode);
+
+void * glMapBuffer( GLenum target, GLenum access);
+void * glMapBufferRange( GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+void glMinSampleShading( GLfloat value);
+void glMultiDrawArrays( GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount);
+void glMultiDrawElements( GLenum mode, const GLsizei * count, GLenum type, const void * const * indices, GLsizei drawcount);
+void glMultiDrawElementsBaseVertex( GLenum mode, const GLsizei *count, GLenum type, const void * const *indices, GLsizei drawcount, const GLint *basevertex);
+
+void glPatchParameteri( GLenum pname, GLint value);
+void glPatchParameterfv( GLenum pname, const GLfloat *values);
+void glPauseTransformFeedback( void);
+void glPixelStoref( GLenum pname, GLfloat param);
+void glPixelStorei( GLenum pname, GLint param);
+void glPointParameterf( GLenum pname, GLfloat param);
+void glPointParameteri( GLenum pname, GLint param);
+void glPointParameterfv( GLenum pname, const GLfloat * params);
+void glPointParameteriv( GLenum pname, const GLint * params);
+void glPointSize( GLfloat size);
+void glPolygonMode( GLenum face, GLenum mode);
+void glPolygonOffset( GLfloat factor, GLfloat units);
+void glPrimitiveRestartIndex( GLuint index);
+void glProgramBinary( GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
+void glProgramParameteri( GLuint program, GLenum pname, GLint value);
+void glProgramUniform1f( GLuint program, GLint location, GLfloat v0);
+void glProgramUniform2f( GLuint program, GLint location, GLfloat v0, GLfloat v1);
+void glProgramUniform3f( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+void glProgramUniform4f( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+void glProgramUniform1i( GLuint program, GLint location, GLint v0);
+void glProgramUniform2i( GLuint program, GLint location, GLint v0, GLint v1);
+void glProgramUniform3i( GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
+void glProgramUniform4i( GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+void glProgramUniform1ui( GLuint program, GLint location, GLuint v0);
+void glProgramUniform2ui( GLuint program, GLint location, GLuint v0, GLuint v1);
+void glProgramUniform3ui( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
+void glProgramUniform4ui( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+void glProgramUniform1fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform2fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform3fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform4fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
+void glProgramUniform1iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform2iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform3iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform4iv( GLuint program, GLint location, GLsizei count, const GLint *value);
+void glProgramUniform1uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniform2uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniform3uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniform4uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
+void glProgramUniformMatrix2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix2x3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix3x2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix2x4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix4x2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix3x4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProgramUniformMatrix4x3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glProvokingVertex( GLenum provokeMode);
+
+void glQueryCounter( GLuint id, GLenum target);
+void glReadBuffer( GLenum mode);
+void glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * data);
+void glReleaseShaderCompiler( void);
+void glRenderbufferStorage( GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
+void glRenderbufferStorageMultisample( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+void glResumeTransformFeedback( void);
+void glSampleCoverage( GLfloat value, GLboolean invert);
+void glSampleMaski( GLuint maskNumber, GLbitfield mask);
+void glSamplerParameterf( GLuint sampler, GLenum pname, GLfloat param);
+void glSamplerParameteri( GLuint sampler, GLenum pname, GLint param);
+void glSamplerParameterfv( GLuint sampler, GLenum pname, const GLfloat * params);
+void glSamplerParameteriv( GLuint sampler, GLenum pname, const GLint * params);
+void glSamplerParameterIiv( GLuint sampler, GLenum pname, const GLint *params);
+void glSamplerParameterIuiv( GLuint sampler, GLenum pname, const GLuint *params);
+void glScissor( GLint x, GLint y, GLsizei width, GLsizei height);
+void glScissorArrayv( GLuint first, GLsizei count, const GLint *v);
+void glScissorIndexed( GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height);
+void glScissorIndexedv( GLuint index, const GLint *v);
+void glShaderBinary( GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length);
+void glShaderSource( GLuint shader, GLsizei count, const GLchar **string, const GLint *length);
+void glStencilFunc( GLenum func, GLint ref, GLuint mask);
+void glStencilFuncSeparate( GLenum face, GLenum func, GLint ref, GLuint mask);
+void glStencilMask( GLuint mask);
+void glStencilMaskSeparate( GLenum face, GLuint mask);
+void glStencilOp( GLenum sfail, GLenum dpfail, GLenum dppass);
+void glStencilOpSeparate( GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+
+void glTexBuffer( GLenum target, GLenum internalformat, GLuint buffer);
+void glTexImage1D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * data);
+void glTexImage2D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * data);
+void glTexImage2DMultisample( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+void glTexImage3D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * data);
+void glTexImage3DMultisample( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+void glTexParameterf( GLenum target, GLenum pname, GLfloat param);
+void glTexParameteri( GLenum target, GLenum pname, GLint param);
+void glTexParameterfv( GLenum target, GLenum pname, const GLfloat * params);
+void glTexParameteriv( GLenum target, GLenum pname, const GLint * params);
+void glTexParameterIiv( GLenum target, GLenum pname, const GLint * params);
+void glTexParameterIuiv( GLenum target, GLenum pname, const GLuint * params);
+void glTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels);
+void glTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels);
+void glTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels);
+void glTransformFeedbackVaryings( GLuint program, GLsizei count, const char **varyings, GLenum bufferMode);
+void glUniform1f( GLint location, GLfloat v0);
+void glUniform2f( GLint location, GLfloat v0, GLfloat v1);
+void glUniform3f( GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+void glUniform4f( GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+void glUniform1i( GLint location, GLint v0);
+void glUniform2i( GLint location, GLint v0, GLint v1);
+void glUniform3i( GLint location, GLint v0, GLint v1, GLint v2);
+void glUniform4i( GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+void glUniform1ui( GLint location, GLuint v0);
+void glUniform2ui( GLint location, GLuint v0, GLuint v1);
+void glUniform3ui( GLint location, GLuint v0, GLuint v1, GLuint v2);
+void glUniform4ui( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+void glUniform1fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform2fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform3fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform4fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform1iv( GLint location, GLsizei count, const GLint *value);
+void glUniform2iv( GLint location, GLsizei count, const GLint *value);
+void glUniform3iv( GLint location, GLsizei count, const GLint *value);
+void glUniform4iv( GLint location, GLsizei count, const GLint *value);
+void glUniform1uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniform2uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniform3uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniform4uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniformMatrix2fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix2x3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix3x2fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix2x4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix4x2fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix3x4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix4x3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformSubroutinesuiv( GLenum shadertype, GLsizei count, const GLuint *indices);
+GLboolean glUnmapBuffer( GLenum target);
+void glUseProgram( GLuint program);
+void glUseProgramStages( GLuint pipeline, GLbitfield stages, GLuint program);
+void glValidateProgram( GLuint program);
+void glValidateProgramPipeline( GLuint pipeline);
+void glVertexAttrib1f( GLuint index, GLfloat v0);
+void glVertexAttrib1s( GLuint index, GLshort v0);
+void glVertexAttrib1d( GLuint index, GLdouble v0);
+void glVertexAttribI1i( GLuint index, GLint v0);
+void glVertexAttribI1ui( GLuint index, GLuint v0);
+void glVertexAttrib2f( GLuint index, GLfloat v0, GLfloat v1);
+void glVertexAttrib2s( GLuint index, GLshort v0, GLshort v1);
+void glVertexAttrib2d( GLuint index, GLdouble v0, GLdouble v1);
+void glVertexAttribI2i( GLuint index, GLint v0, GLint v1);
+void glVertexAttribI2ui( GLuint index, GLuint v0, GLuint v1);
+void glVertexAttrib3f( GLuint index, GLfloat v0, GLfloat v1, GLfloat v2);
+void glVertexAttrib3s( GLuint index, GLshort v0, GLshort v1, GLshort v2);
+void glVertexAttrib3d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2);
+void glVertexAttribI3i( GLuint index, GLint v0, GLint v1, GLint v2);
+void glVertexAttribI3ui( GLuint index, GLuint v0, GLuint v1, GLuint v2);
+void glVertexAttrib4f( GLuint index, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+void glVertexAttrib4s( GLuint index, GLshort v0, GLshort v1, GLshort v2, GLshort v3);
+void glVertexAttrib4d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+void glVertexAttrib4Nub( GLuint index, GLubyte v0, GLubyte v1, GLubyte v2, GLubyte v3);
+void glVertexAttribI4i( GLuint index, GLint v0, GLint v1, GLint v2, GLint v3);
+void glVertexAttribI4ui( GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+void glVertexAttribL1d( GLuint index, GLdouble v0);
+void glVertexAttribL2d( GLuint index, GLdouble v0, GLdouble v1);
+void glVertexAttribL3d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2);
+void glVertexAttribL4d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+void glVertexAttrib1fv( GLuint index, const GLfloat *v);
+void glVertexAttrib1sv( GLuint index, const GLshort *v);
+void glVertexAttrib1dv( GLuint index, const GLdouble *v);
+void glVertexAttribI1iv( GLuint index, const GLint *v);
+void glVertexAttribI1uiv( GLuint index, const GLuint *v);
+void glVertexAttrib2fv( GLuint index, const GLfloat *v);
+void glVertexAttrib2sv( GLuint index, const GLshort *v);
+void glVertexAttrib2dv( GLuint index, const GLdouble *v);
+void glVertexAttribI2iv( GLuint index, const GLint *v);
+void glVertexAttribI2uiv( GLuint index, const GLuint *v);
+void glVertexAttrib3fv( GLuint index, const GLfloat *v);
+void glVertexAttrib3sv( GLuint index, const GLshort *v);
+void glVertexAttrib3dv( GLuint index, const GLdouble *v);
+void glVertexAttribI3iv( GLuint index, const GLint *v);
+void glVertexAttribI3uiv( GLuint index, const GLuint *v);
+void glVertexAttrib4fv( GLuint index, const GLfloat *v);
+void glVertexAttrib4sv( GLuint index, const GLshort *v);
+void glVertexAttrib4dv( GLuint index, const GLdouble *v);
+void glVertexAttrib4iv( GLuint index, const GLint *v);
+void glVertexAttrib4bv( GLuint index, const GLbyte *v);
+void glVertexAttrib4ubv( GLuint index, const GLubyte *v);
+void glVertexAttrib4usv( GLuint index, const GLushort *v);
+void glVertexAttrib4uiv( GLuint index, const GLuint *v);
+void glVertexAttrib4Nbv( GLuint index, const GLbyte *v);
+void glVertexAttrib4Nsv( GLuint index, const GLshort *v);
+void glVertexAttrib4Niv( GLuint index, const GLint *v);
+void glVertexAttrib4Nubv( GLuint index, const GLubyte *v);
+void glVertexAttrib4Nusv( GLuint index, const GLushort *v);
+void glVertexAttrib4Nuiv( GLuint index, const GLuint *v);
+void glVertexAttribI4bv( GLuint index, const GLbyte *v);
+void glVertexAttribI4ubv( GLuint index, const GLubyte *v);
+void glVertexAttribI4sv( GLuint index, const GLshort *v);
+void glVertexAttribI4usv( GLuint index, const GLushort *v);
+void glVertexAttribI4iv( GLuint index, const GLint *v);
+void glVertexAttribI4uiv( GLuint index, const GLuint *v);
+void glVertexAttribL1dv( GLuint index, const GLdouble *v);
+void glVertexAttribL2dv( GLuint index, const GLdouble *v);
+void glVertexAttribL3dv( GLuint index, const GLdouble *v);
+void glVertexAttribL4dv( GLuint index, const GLdouble *v);
+void glVertexAttribP1ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribP2ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribP3ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribP4ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribPointer( GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer);
+void glVertexAttribIPointer( GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer);
+void glViewport( GLint x, GLint y, GLsizei width, GLsizei height);
+void glViewportArrayv( GLuint first, GLsizei count, const GLfloat *v);
+void glViewportIndexedf( GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+void glViewportIndexedfv( GLuint index, const GLfloat *v);
+void glWaitSync( GLsync sync, GLbitfield flags, GLuint64 timeout);
diff --git a/src/opengl/bind/t b/src/opengl/bind/t
new file mode 100644
index 0000000..d503c1e
--- /dev/null
+++ b/src/opengl/bind/t
@@ -0,0 +1,16 @@
+void glTexBuffer( GLenum target, GLenum internalformat, GLuint buffer);
+void glTexImage1D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * data);
+void glTexImage2D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * data);
+void glTexImage2DMultisample( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations);
+void glTexImage3D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * data);
+void glTexImage3DMultisample( GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations);
+void glTexParameterf( GLenum target, GLenum pname, GLfloat param);
+void glTexParameteri( GLenum target, GLenum pname, GLint param);
+void glTexParameterfv( GLenum target, GLenum pname, const GLfloat * params);
+void glTexParameteriv( GLenum target, GLenum pname, const GLint * params);
+void glTexParameterIiv( GLenum target, GLenum pname, const GLint * params);
+void glTexParameterIuiv( GLenum target, GLenum pname, const GLuint * params);
+void glTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels);
+void glTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels);
+void glTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels);
+void glTransformFeedbackVaryings( GLuint program, GLsizei count, const char **varyings, GLenum bufferMode);
diff --git a/src/opengl/bind/t.bind b/src/opengl/bind/t.bind
new file mode 100644
index 0000000..1a447e7
--- /dev/null
+++ b/src/opengl/bind/t.bind
@@ -0,0 +1,204 @@
+int glTexBuffer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum internalformat = luaL_checkinteger(L, 2);
+ GLuint buffer = luaL_checkinteger(L, 3);
+ glTexBuffer(target, internalformat, buffer);
+ return 0;
+}
+
+
+int glTexImage1D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLint border = luaL_checkinteger(L, 5);
+ GLenum format = luaL_checkinteger(L, 6);
+ GLenum type = luaL_checkinteger(L, 7);
+ const void * data = get: const void *
+ glTexImage1D(target, level, internalformat, width, border, format, type, data);
+ return 0;
+}
+
+
+int glTexImage2D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ GLint border = luaL_checkinteger(L, 6);
+ GLenum format = luaL_checkinteger(L, 7);
+ GLenum type = luaL_checkinteger(L, 8);
+ const void * data = get: const void *
+ glTexImage2D(target, level, internalformat, width, height, border, format, type, data);
+ return 0;
+}
+
+
+int glTexImage2DMultisample_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLsizei samples = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ GLboolean fixedsamplelocations = get: GLboolean
+ glTexImage2DMultisample(target, samples, internalformat, width, height, fixedsamplelocations);
+ return 0;
+}
+
+
+int glTexImage3D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ GLsizei depth = luaL_checkinteger(L, 6);
+ GLint border = luaL_checkinteger(L, 7);
+ GLenum format = luaL_checkinteger(L, 8);
+ GLenum type = luaL_checkinteger(L, 9);
+ const void * data = get: const void *
+ glTexImage3D(target, level, internalformat, width, height, depth, border, format, type, data);
+ return 0;
+}
+
+
+int glTexImage3DMultisample_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLsizei samples = luaL_checkinteger(L, 2);
+ GLenum internalformat = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLsizei height = luaL_checkinteger(L, 5);
+ GLsizei depth = luaL_checkinteger(L, 6);
+ GLboolean fixedsamplelocations = get: GLboolean
+ glTexImage3DMultisample(target, samples, internalformat, width, height, depth, fixedsamplelocations);
+ return 0;
+}
+
+
+int glTexParameterf_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLfloat param = luaL_checknumber(L, 3);
+ glTexParameterf(target, pname, param);
+ return 0;
+}
+
+
+int glTexParameteri_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ GLint param = luaL_checkinteger(L, 3);
+ glTexParameteri(target, pname, param);
+ return 0;
+}
+
+
+int glTexParameterfv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLfloat * params = get: const GLfloat *
+ glTexParameterfv(target, pname, params);
+ return 0;
+}
+
+
+int glTexParameteriv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLint * params = get: const GLint *
+ glTexParameteriv(target, pname, params);
+ return 0;
+}
+
+
+int glTexParameterIiv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLint * params = get: const GLint *
+ glTexParameterIiv(target, pname, params);
+ return 0;
+}
+
+
+int glTexParameterIuiv_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLenum pname = luaL_checkinteger(L, 2);
+ const GLuint * params = get: const GLuint *
+ glTexParameterIuiv(target, pname, params);
+ return 0;
+}
+
+
+int glTexSubImage1D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLsizei width = luaL_checkinteger(L, 4);
+ GLenum format = luaL_checkinteger(L, 5);
+ GLenum type = luaL_checkinteger(L, 6);
+ const void * pixels = get: const void *
+ glTexSubImage1D(target, level, xoffset, width, format, type, pixels);
+ return 0;
+}
+
+
+int glTexSubImage2D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLint yoffset = luaL_checkinteger(L, 4);
+ GLsizei width = luaL_checkinteger(L, 5);
+ GLsizei height = luaL_checkinteger(L, 6);
+ GLenum format = luaL_checkinteger(L, 7);
+ GLenum type = luaL_checkinteger(L, 8);
+ const void * pixels = get: const void *
+ glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
+ return 0;
+}
+
+
+int glTexSubImage3D_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLint level = luaL_checkinteger(L, 2);
+ GLint xoffset = luaL_checkinteger(L, 3);
+ GLint yoffset = luaL_checkinteger(L, 4);
+ GLint zoffset = luaL_checkinteger(L, 5);
+ GLsizei width = luaL_checkinteger(L, 6);
+ GLsizei height = luaL_checkinteger(L, 7);
+ GLsizei depth = luaL_checkinteger(L, 8);
+ GLenum format = luaL_checkinteger(L, 9);
+ GLenum type = luaL_checkinteger(L, 10);
+ const void * pixels = get: const void *
+ glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
+ return 0;
+}
+
+
+int glTransformFeedbackVaryings_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const char ** varyings = get: const char **
+ GLenum bufferMode = luaL_checkinteger(L, 4);
+ glTransformFeedbackVaryings(program, count, varyings, bufferMode);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/u b/src/opengl/bind/u
new file mode 100644
index 0000000..7cd3e42
--- /dev/null
+++ b/src/opengl/bind/u
@@ -0,0 +1,37 @@
+void glUniform1f( GLint location, GLfloat v0);
+void glUniform2f( GLint location, GLfloat v0, GLfloat v1);
+void glUniform3f( GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+void glUniform4f( GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+void glUniform1i( GLint location, GLint v0);
+void glUniform2i( GLint location, GLint v0, GLint v1);
+void glUniform3i( GLint location, GLint v0, GLint v1, GLint v2);
+void glUniform4i( GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+void glUniform1ui( GLint location, GLuint v0);
+void glUniform2ui( GLint location, GLuint v0, GLuint v1);
+void glUniform3ui( GLint location, GLuint v0, GLuint v1, GLuint v2);
+void glUniform4ui( GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+void glUniform1fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform2fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform3fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform4fv( GLint location, GLsizei count, const GLfloat *value);
+void glUniform1iv( GLint location, GLsizei count, const GLint *value);
+void glUniform2iv( GLint location, GLsizei count, const GLint *value);
+void glUniform3iv( GLint location, GLsizei count, const GLint *value);
+void glUniform4iv( GLint location, GLsizei count, const GLint *value);
+void glUniform1uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniform2uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniform3uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniform4uiv( GLint location, GLsizei count, const GLuint *value);
+void glUniformMatrix2fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix2x3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix3x2fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix2x4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix4x2fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix3x4fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformMatrix4x3fv( GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
+void glUniformSubroutinesuiv( GLenum shadertype, GLsizei count, const GLuint *indices);
+GLboolean glUnmapBuffer( GLenum target);
+void glUseProgram( GLuint program);
+void glUseProgramStages( GLuint pipeline, GLbitfield stages, GLuint program);
diff --git a/src/opengl/bind/u.bind b/src/opengl/bind/u.bind
new file mode 100644
index 0000000..07785a8
--- /dev/null
+++ b/src/opengl/bind/u.bind
@@ -0,0 +1,382 @@
+int glUniform1f_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ glUniform1f(location, v0);
+ return 0;
+}
+
+
+int glUniform2f_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ GLfloat v1 = luaL_checknumber(L, 3);
+ glUniform2f(location, v0, v1);
+ return 0;
+}
+
+
+int glUniform3f_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ GLfloat v1 = luaL_checknumber(L, 3);
+ GLfloat v2 = luaL_checknumber(L, 4);
+ glUniform3f(location, v0, v1, v2);
+ return 0;
+}
+
+
+int glUniform4f_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ GLfloat v1 = luaL_checknumber(L, 3);
+ GLfloat v2 = luaL_checknumber(L, 4);
+ GLfloat v3 = luaL_checknumber(L, 5);
+ glUniform4f(location, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glUniform1i_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ glUniform1i(location, v0);
+ return 0;
+}
+
+
+int glUniform2i_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ GLint v1 = luaL_checkinteger(L, 3);
+ glUniform2i(location, v0, v1);
+ return 0;
+}
+
+
+int glUniform3i_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ GLint v1 = luaL_checkinteger(L, 3);
+ GLint v2 = luaL_checkinteger(L, 4);
+ glUniform3i(location, v0, v1, v2);
+ return 0;
+}
+
+
+int glUniform4i_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ GLint v1 = luaL_checkinteger(L, 3);
+ GLint v2 = luaL_checkinteger(L, 4);
+ GLint v3 = luaL_checkinteger(L, 5);
+ glUniform4i(location, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glUniform1ui_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ glUniform1ui(location, v0);
+ return 0;
+}
+
+
+int glUniform2ui_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ GLuint v1 = luaL_checkinteger(L, 3);
+ glUniform2ui(location, v0, v1);
+ return 0;
+}
+
+
+int glUniform3ui_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ GLuint v1 = luaL_checkinteger(L, 3);
+ GLuint v2 = luaL_checkinteger(L, 4);
+ glUniform3ui(location, v0, v1, v2);
+ return 0;
+}
+
+
+int glUniform4ui_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ GLuint v1 = luaL_checkinteger(L, 3);
+ GLuint v2 = luaL_checkinteger(L, 4);
+ GLuint v3 = luaL_checkinteger(L, 5);
+ glUniform4ui(location, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glUniform1fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLfloat * value = get: const GLfloat *
+ glUniform1fv(location, count, value);
+ return 0;
+}
+
+
+int glUniform2fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLfloat * value = get: const GLfloat *
+ glUniform2fv(location, count, value);
+ return 0;
+}
+
+
+int glUniform3fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLfloat * value = get: const GLfloat *
+ glUniform3fv(location, count, value);
+ return 0;
+}
+
+
+int glUniform4fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLfloat * value = get: const GLfloat *
+ glUniform4fv(location, count, value);
+ return 0;
+}
+
+
+int glUniform1iv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLint * value = get: const GLint *
+ glUniform1iv(location, count, value);
+ return 0;
+}
+
+
+int glUniform2iv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLint * value = get: const GLint *
+ glUniform2iv(location, count, value);
+ return 0;
+}
+
+
+int glUniform3iv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLint * value = get: const GLint *
+ glUniform3iv(location, count, value);
+ return 0;
+}
+
+
+int glUniform4iv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLint * value = get: const GLint *
+ glUniform4iv(location, count, value);
+ return 0;
+}
+
+
+int glUniform1uiv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLuint * value = get: const GLuint *
+ glUniform1uiv(location, count, value);
+ return 0;
+}
+
+
+int glUniform2uiv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLuint * value = get: const GLuint *
+ glUniform2uiv(location, count, value);
+ return 0;
+}
+
+
+int glUniform3uiv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLuint * value = get: const GLuint *
+ glUniform3uiv(location, count, value);
+ return 0;
+}
+
+
+int glUniform4uiv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLuint * value = get: const GLuint *
+ glUniform4uiv(location, count, value);
+ return 0;
+}
+
+
+int glUniformMatrix2fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix2fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix3fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix3fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix4fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix4fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix2x3fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix2x3fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix3x2fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix3x2fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix2x4fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix2x4fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix4x2fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix4x2fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix3x4fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix3x4fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformMatrix4x3fv_bind(lua_State *L)
+{
+ GLint location = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ GLboolean transpose = get: GLboolean
+ const GLfloat * value = get: const GLfloat *
+ glUniformMatrix4x3fv(location, count, transpose, value);
+ return 0;
+}
+
+
+int glUniformSubroutinesuiv_bind(lua_State *L)
+{
+ GLenum shadertype = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLuint * indices = get: const GLuint *
+ glUniformSubroutinesuiv(shadertype, count, indices);
+ return 0;
+}
+
+
+int glUnmapBuffer_bind(lua_State *L)
+{
+ GLenum target = luaL_checkinteger(L, 1);
+ GLboolean bind_result = glUnmapBuffer(target);
+ /* push result */
+ return /* count */;
+}
+
+
+int glUseProgram_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ glUseProgram(program);
+ return 0;
+}
+
+
+int glUseProgramStages_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ GLbitfield stages = luaL_checkinteger(L, 2);
+ GLuint program = luaL_checkinteger(L, 3);
+ glUseProgramStages(pipeline, stages, program);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/v b/src/opengl/bind/v
new file mode 100644
index 0000000..d6bb3aa
--- /dev/null
+++ b/src/opengl/bind/v
@@ -0,0 +1,76 @@
+void glValidateProgram( GLuint program);
+void glValidateProgramPipeline( GLuint pipeline);
+void glVertexAttrib1f( GLuint index, GLfloat v0);
+void glVertexAttrib1s( GLuint index, GLshort v0);
+void glVertexAttrib1d( GLuint index, GLdouble v0);
+void glVertexAttribI1i( GLuint index, GLint v0);
+void glVertexAttribI1ui( GLuint index, GLuint v0);
+void glVertexAttrib2f( GLuint index, GLfloat v0, GLfloat v1);
+void glVertexAttrib2s( GLuint index, GLshort v0, GLshort v1);
+void glVertexAttrib2d( GLuint index, GLdouble v0, GLdouble v1);
+void glVertexAttribI2i( GLuint index, GLint v0, GLint v1);
+void glVertexAttribI2ui( GLuint index, GLuint v0, GLuint v1);
+void glVertexAttrib3f( GLuint index, GLfloat v0, GLfloat v1, GLfloat v2);
+void glVertexAttrib3s( GLuint index, GLshort v0, GLshort v1, GLshort v2);
+void glVertexAttrib3d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2);
+void glVertexAttribI3i( GLuint index, GLint v0, GLint v1, GLint v2);
+void glVertexAttribI3ui( GLuint index, GLuint v0, GLuint v1, GLuint v2);
+void glVertexAttrib4f( GLuint index, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+void glVertexAttrib4s( GLuint index, GLshort v0, GLshort v1, GLshort v2, GLshort v3);
+void glVertexAttrib4d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+void glVertexAttrib4Nub( GLuint index, GLubyte v0, GLubyte v1, GLubyte v2, GLubyte v3);
+void glVertexAttribI4i( GLuint index, GLint v0, GLint v1, GLint v2, GLint v3);
+void glVertexAttribI4ui( GLuint index, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+void glVertexAttribL1d( GLuint index, GLdouble v0);
+void glVertexAttribL2d( GLuint index, GLdouble v0, GLdouble v1);
+void glVertexAttribL3d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2);
+void glVertexAttribL4d( GLuint index, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3);
+void glVertexAttrib1fv( GLuint index, const GLfloat *v);
+void glVertexAttrib1sv( GLuint index, const GLshort *v);
+void glVertexAttrib1dv( GLuint index, const GLdouble *v);
+void glVertexAttribI1iv( GLuint index, const GLint *v);
+void glVertexAttribI1uiv( GLuint index, const GLuint *v);
+void glVertexAttrib2fv( GLuint index, const GLfloat *v);
+void glVertexAttrib2sv( GLuint index, const GLshort *v);
+void glVertexAttrib2dv( GLuint index, const GLdouble *v);
+void glVertexAttribI2iv( GLuint index, const GLint *v);
+void glVertexAttribI2uiv( GLuint index, const GLuint *v);
+void glVertexAttrib3fv( GLuint index, const GLfloat *v);
+void glVertexAttrib3sv( GLuint index, const GLshort *v);
+void glVertexAttrib3dv( GLuint index, const GLdouble *v);
+void glVertexAttribI3iv( GLuint index, const GLint *v);
+void glVertexAttribI3uiv( GLuint index, const GLuint *v);
+void glVertexAttrib4fv( GLuint index, const GLfloat *v);
+void glVertexAttrib4sv( GLuint index, const GLshort *v);
+void glVertexAttrib4dv( GLuint index, const GLdouble *v);
+void glVertexAttrib4iv( GLuint index, const GLint *v);
+void glVertexAttrib4bv( GLuint index, const GLbyte *v);
+void glVertexAttrib4ubv( GLuint index, const GLubyte *v);
+void glVertexAttrib4usv( GLuint index, const GLushort *v);
+void glVertexAttrib4uiv( GLuint index, const GLuint *v);
+void glVertexAttrib4Nbv( GLuint index, const GLbyte *v);
+void glVertexAttrib4Nsv( GLuint index, const GLshort *v);
+void glVertexAttrib4Niv( GLuint index, const GLint *v);
+void glVertexAttrib4Nubv( GLuint index, const GLubyte *v);
+void glVertexAttrib4Nusv( GLuint index, const GLushort *v);
+void glVertexAttrib4Nuiv( GLuint index, const GLuint *v);
+void glVertexAttribI4bv( GLuint index, const GLbyte *v);
+void glVertexAttribI4ubv( GLuint index, const GLubyte *v);
+void glVertexAttribI4sv( GLuint index, const GLshort *v);
+void glVertexAttribI4usv( GLuint index, const GLushort *v);
+void glVertexAttribI4iv( GLuint index, const GLint *v);
+void glVertexAttribI4uiv( GLuint index, const GLuint *v);
+void glVertexAttribL1dv( GLuint index, const GLdouble *v);
+void glVertexAttribL2dv( GLuint index, const GLdouble *v);
+void glVertexAttribL3dv( GLuint index, const GLdouble *v);
+void glVertexAttribL4dv( GLuint index, const GLdouble *v);
+void glVertexAttribP1ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribP2ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribP3ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribP4ui( GLuint index, GLenum type, GLboolean normalized, GLuint value);
+void glVertexAttribPointer( GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer);
+void glVertexAttribIPointer( GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer);
+void glViewport( GLint x, GLint y, GLsizei width, GLsizei height);
+void glViewportArrayv( GLuint first, GLsizei count, const GLfloat *v);
+void glViewportIndexedf( GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h);
+void glViewportIndexedfv( GLuint index, const GLfloat *v);
diff --git a/src/opengl/bind/v.bind b/src/opengl/bind/v.bind
new file mode 100644
index 0000000..ec35e3f
--- /dev/null
+++ b/src/opengl/bind/v.bind
@@ -0,0 +1,742 @@
+int glValidateProgram_bind(lua_State *L)
+{
+ GLuint program = luaL_checkinteger(L, 1);
+ glValidateProgram(program);
+ return 0;
+}
+
+
+int glValidateProgramPipeline_bind(lua_State *L)
+{
+ GLuint pipeline = luaL_checkinteger(L, 1);
+ glValidateProgramPipeline(pipeline);
+ return 0;
+}
+
+
+int glVertexAttrib1f_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ glVertexAttrib1f(index, v0);
+ return 0;
+}
+
+
+int glVertexAttrib1s_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLshort v0 = luaL_checkinteger(L, 2);
+ glVertexAttrib1s(index, v0);
+ return 0;
+}
+
+
+int glVertexAttrib1d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ glVertexAttrib1d(index, v0);
+ return 0;
+}
+
+
+int glVertexAttribI1i_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ glVertexAttribI1i(index, v0);
+ return 0;
+}
+
+
+int glVertexAttribI1ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ glVertexAttribI1ui(index, v0);
+ return 0;
+}
+
+
+int glVertexAttrib2f_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ GLfloat v1 = luaL_checknumber(L, 3);
+ glVertexAttrib2f(index, v0, v1);
+ return 0;
+}
+
+
+int glVertexAttrib2s_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLshort v0 = luaL_checkinteger(L, 2);
+ GLshort v1 = luaL_checkinteger(L, 3);
+ glVertexAttrib2s(index, v0, v1);
+ return 0;
+}
+
+
+int glVertexAttrib2d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ GLdouble v1 = luaL_checknumber(L, 3);
+ glVertexAttrib2d(index, v0, v1);
+ return 0;
+}
+
+
+int glVertexAttribI2i_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ GLint v1 = luaL_checkinteger(L, 3);
+ glVertexAttribI2i(index, v0, v1);
+ return 0;
+}
+
+
+int glVertexAttribI2ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ GLuint v1 = luaL_checkinteger(L, 3);
+ glVertexAttribI2ui(index, v0, v1);
+ return 0;
+}
+
+
+int glVertexAttrib3f_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ GLfloat v1 = luaL_checknumber(L, 3);
+ GLfloat v2 = luaL_checknumber(L, 4);
+ glVertexAttrib3f(index, v0, v1, v2);
+ return 0;
+}
+
+
+int glVertexAttrib3s_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLshort v0 = luaL_checkinteger(L, 2);
+ GLshort v1 = luaL_checkinteger(L, 3);
+ GLshort v2 = luaL_checkinteger(L, 4);
+ glVertexAttrib3s(index, v0, v1, v2);
+ return 0;
+}
+
+
+int glVertexAttrib3d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ GLdouble v1 = luaL_checknumber(L, 3);
+ GLdouble v2 = luaL_checknumber(L, 4);
+ glVertexAttrib3d(index, v0, v1, v2);
+ return 0;
+}
+
+
+int glVertexAttribI3i_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ GLint v1 = luaL_checkinteger(L, 3);
+ GLint v2 = luaL_checkinteger(L, 4);
+ glVertexAttribI3i(index, v0, v1, v2);
+ return 0;
+}
+
+
+int glVertexAttribI3ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ GLuint v1 = luaL_checkinteger(L, 3);
+ GLuint v2 = luaL_checkinteger(L, 4);
+ glVertexAttribI3ui(index, v0, v1, v2);
+ return 0;
+}
+
+
+int glVertexAttrib4f_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLfloat v0 = luaL_checknumber(L, 2);
+ GLfloat v1 = luaL_checknumber(L, 3);
+ GLfloat v2 = luaL_checknumber(L, 4);
+ GLfloat v3 = luaL_checknumber(L, 5);
+ glVertexAttrib4f(index, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glVertexAttrib4s_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLshort v0 = luaL_checkinteger(L, 2);
+ GLshort v1 = luaL_checkinteger(L, 3);
+ GLshort v2 = luaL_checkinteger(L, 4);
+ GLshort v3 = luaL_checkinteger(L, 5);
+ glVertexAttrib4s(index, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glVertexAttrib4d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ GLdouble v1 = luaL_checknumber(L, 3);
+ GLdouble v2 = luaL_checknumber(L, 4);
+ GLdouble v3 = luaL_checknumber(L, 5);
+ glVertexAttrib4d(index, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glVertexAttrib4Nub_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLubyte v0 = luaL_checkinteger(L, 2);
+ GLubyte v1 = luaL_checkinteger(L, 3);
+ GLubyte v2 = luaL_checkinteger(L, 4);
+ GLubyte v3 = luaL_checkinteger(L, 5);
+ glVertexAttrib4Nub(index, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glVertexAttribI4i_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLint v0 = luaL_checkinteger(L, 2);
+ GLint v1 = luaL_checkinteger(L, 3);
+ GLint v2 = luaL_checkinteger(L, 4);
+ GLint v3 = luaL_checkinteger(L, 5);
+ glVertexAttribI4i(index, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glVertexAttribI4ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLuint v0 = luaL_checkinteger(L, 2);
+ GLuint v1 = luaL_checkinteger(L, 3);
+ GLuint v2 = luaL_checkinteger(L, 4);
+ GLuint v3 = luaL_checkinteger(L, 5);
+ glVertexAttribI4ui(index, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glVertexAttribL1d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ glVertexAttribL1d(index, v0);
+ return 0;
+}
+
+
+int glVertexAttribL2d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ GLdouble v1 = luaL_checknumber(L, 3);
+ glVertexAttribL2d(index, v0, v1);
+ return 0;
+}
+
+
+int glVertexAttribL3d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ GLdouble v1 = luaL_checknumber(L, 3);
+ GLdouble v2 = luaL_checknumber(L, 4);
+ glVertexAttribL3d(index, v0, v1, v2);
+ return 0;
+}
+
+
+int glVertexAttribL4d_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLdouble v0 = luaL_checknumber(L, 2);
+ GLdouble v1 = luaL_checknumber(L, 3);
+ GLdouble v2 = luaL_checknumber(L, 4);
+ GLdouble v3 = luaL_checknumber(L, 5);
+ glVertexAttribL4d(index, v0, v1, v2, v3);
+ return 0;
+}
+
+
+int glVertexAttrib1fv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLfloat * v = get: const GLfloat *
+ glVertexAttrib1fv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib1sv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLshort * v = get: const GLshort *
+ glVertexAttrib1sv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib1dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttrib1dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI1iv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLint * v = get: const GLint *
+ glVertexAttribI1iv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI1uiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLuint * v = get: const GLuint *
+ glVertexAttribI1uiv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib2fv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLfloat * v = get: const GLfloat *
+ glVertexAttrib2fv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib2sv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLshort * v = get: const GLshort *
+ glVertexAttrib2sv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib2dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttrib2dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI2iv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLint * v = get: const GLint *
+ glVertexAttribI2iv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI2uiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLuint * v = get: const GLuint *
+ glVertexAttribI2uiv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib3fv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLfloat * v = get: const GLfloat *
+ glVertexAttrib3fv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib3sv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLshort * v = get: const GLshort *
+ glVertexAttrib3sv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib3dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttrib3dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI3iv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLint * v = get: const GLint *
+ glVertexAttribI3iv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI3uiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLuint * v = get: const GLuint *
+ glVertexAttribI3uiv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4fv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLfloat * v = get: const GLfloat *
+ glVertexAttrib4fv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4sv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLshort * v = get: const GLshort *
+ glVertexAttrib4sv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttrib4dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4iv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLint * v = get: const GLint *
+ glVertexAttrib4iv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4bv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLbyte * v = get: const GLbyte *
+ glVertexAttrib4bv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4ubv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLubyte * v = get: const GLubyte *
+ glVertexAttrib4ubv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4usv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLushort * v = get: const GLushort *
+ glVertexAttrib4usv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4uiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLuint * v = get: const GLuint *
+ glVertexAttrib4uiv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4Nbv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLbyte * v = get: const GLbyte *
+ glVertexAttrib4Nbv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4Nsv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLshort * v = get: const GLshort *
+ glVertexAttrib4Nsv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4Niv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLint * v = get: const GLint *
+ glVertexAttrib4Niv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4Nubv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLubyte * v = get: const GLubyte *
+ glVertexAttrib4Nubv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4Nusv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLushort * v = get: const GLushort *
+ glVertexAttrib4Nusv(index, v);
+ return 0;
+}
+
+
+int glVertexAttrib4Nuiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLuint * v = get: const GLuint *
+ glVertexAttrib4Nuiv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI4bv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLbyte * v = get: const GLbyte *
+ glVertexAttribI4bv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI4ubv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLubyte * v = get: const GLubyte *
+ glVertexAttribI4ubv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI4sv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLshort * v = get: const GLshort *
+ glVertexAttribI4sv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI4usv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLushort * v = get: const GLushort *
+ glVertexAttribI4usv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI4iv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLint * v = get: const GLint *
+ glVertexAttribI4iv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribI4uiv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLuint * v = get: const GLuint *
+ glVertexAttribI4uiv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribL1dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttribL1dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribL2dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttribL2dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribL3dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttribL3dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribL4dv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLdouble * v = get: const GLdouble *
+ glVertexAttribL4dv(index, v);
+ return 0;
+}
+
+
+int glVertexAttribP1ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum type = luaL_checkinteger(L, 2);
+ GLboolean normalized = get: GLboolean
+ GLuint value = luaL_checkinteger(L, 4);
+ glVertexAttribP1ui(index, type, normalized, value);
+ return 0;
+}
+
+
+int glVertexAttribP2ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum type = luaL_checkinteger(L, 2);
+ GLboolean normalized = get: GLboolean
+ GLuint value = luaL_checkinteger(L, 4);
+ glVertexAttribP2ui(index, type, normalized, value);
+ return 0;
+}
+
+
+int glVertexAttribP3ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum type = luaL_checkinteger(L, 2);
+ GLboolean normalized = get: GLboolean
+ GLuint value = luaL_checkinteger(L, 4);
+ glVertexAttribP3ui(index, type, normalized, value);
+ return 0;
+}
+
+
+int glVertexAttribP4ui_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLenum type = luaL_checkinteger(L, 2);
+ GLboolean normalized = get: GLboolean
+ GLuint value = luaL_checkinteger(L, 4);
+ glVertexAttribP4ui(index, type, normalized, value);
+ return 0;
+}
+
+
+int glVertexAttribPointer_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLint size = luaL_checkinteger(L, 2);
+ GLenum type = luaL_checkinteger(L, 3);
+ GLboolean normalized = get: GLboolean
+ GLsizei stride = luaL_checkinteger(L, 5);
+ const void * pointer = get: const void *
+ glVertexAttribPointer(index, size, type, normalized, stride, pointer);
+ return 0;
+}
+
+
+int glVertexAttribIPointer_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLint size = luaL_checkinteger(L, 2);
+ GLenum type = luaL_checkinteger(L, 3);
+ GLsizei stride = luaL_checkinteger(L, 4);
+ const void * pointer = get: const void *
+ glVertexAttribIPointer(index, size, type, stride, pointer);
+ return 0;
+}
+
+
+int glViewport_bind(lua_State *L)
+{
+ GLint x = luaL_checkinteger(L, 1);
+ GLint y = luaL_checkinteger(L, 2);
+ GLsizei width = luaL_checkinteger(L, 3);
+ GLsizei height = luaL_checkinteger(L, 4);
+ glViewport(x, y, width, height);
+ return 0;
+}
+
+
+int glViewportArrayv_bind(lua_State *L)
+{
+ GLuint first = luaL_checkinteger(L, 1);
+ GLsizei count = luaL_checkinteger(L, 2);
+ const GLfloat * v = get: const GLfloat *
+ glViewportArrayv(first, count, v);
+ return 0;
+}
+
+
+int glViewportIndexedf_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ GLfloat x = luaL_checknumber(L, 2);
+ GLfloat y = luaL_checknumber(L, 3);
+ GLfloat w = luaL_checknumber(L, 4);
+ GLfloat h = luaL_checknumber(L, 5);
+ glViewportIndexedf(index, x, y, w, h);
+ return 0;
+}
+
+
+int glViewportIndexedfv_bind(lua_State *L)
+{
+ GLuint index = luaL_checkinteger(L, 1);
+ const GLfloat * v = get: const GLfloat *
+ glViewportIndexedfv(index, v);
+ return 0;
+}
+
+
diff --git a/src/opengl/bind/w b/src/opengl/bind/w
new file mode 100644
index 0000000..1a75379
--- /dev/null
+++ b/src/opengl/bind/w
@@ -0,0 +1 @@
+void glWaitSync( GLsync sync, GLbitfield flags, GLuint64 timeout);
diff --git a/src/opengl/bind/w.bind b/src/opengl/bind/w.bind
new file mode 100644
index 0000000..6f5210c
--- /dev/null
+++ b/src/opengl/bind/w.bind
@@ -0,0 +1,10 @@
+int glWaitSync_bind(lua_State *L)
+{
+ GLsync sync = luaL_checkinteger(L, 1);
+ GLbitfield flags = luaL_checkinteger(L, 2);
+ GLuint64 timeout = luaL_checkinteger(L, 3);
+ glWaitSync(sync, flags, timeout);
+ return 0;
+}
+
+
diff --git a/src/gl/data.c b/src/opengl/data.c
index b7dc581..b7dc581 100644
--- a/src/gl/data.c
+++ b/src/opengl/data.c
diff --git a/src/gl/data.test.c b/src/opengl/data.test.c
index 143b0ce..143b0ce 100644
--- a/src/gl/data.test.c
+++ b/src/opengl/data.test.c
diff --git a/src/gl/drawing.c b/src/opengl/drawing.c
index eeb0496..eeb0496 100644
--- a/src/gl/drawing.c
+++ b/src/opengl/drawing.c
diff --git a/src/gl/gl.c b/src/opengl/gl.c
index b8da1ec..b8da1ec 100644
--- a/src/gl/gl.c
+++ b/src/opengl/gl.c
diff --git a/src/gl/gl.h b/src/opengl/gl.h
index 8aa1ef7..8aa1ef7 100644
--- a/src/gl/gl.h
+++ b/src/opengl/gl.h
diff --git a/src/gl/gl.test.c b/src/opengl/gl.test.c
index 488126f..488126f 100644
--- a/src/gl/gl.test.c
+++ b/src/opengl/gl.test.c
diff --git a/src/gl/glad/CMakeLists.txt b/src/opengl/glad/CMakeLists.txt
index de6a508..de6a508 100644
--- a/src/gl/glad/CMakeLists.txt
+++ b/src/opengl/glad/CMakeLists.txt
diff --git a/src/gl/glad/include/KHR/khrplatform.h b/src/opengl/glad/include/KHR/khrplatform.h
index 0164644..0164644 100644
--- a/src/gl/glad/include/KHR/khrplatform.h
+++ b/src/opengl/glad/include/KHR/khrplatform.h
diff --git a/src/gl/glad/include/glad/glad.h b/src/opengl/glad/include/glad/glad.h
index a5fe03e..a5fe03e 100644
--- a/src/gl/glad/include/glad/glad.h
+++ b/src/opengl/glad/include/glad/glad.h
diff --git a/src/gl/glad/src/glad.c b/src/opengl/glad/src/glad.c
index 2004507..2004507 100644
--- a/src/gl/glad/src/glad.c
+++ b/src/opengl/glad/src/glad.c
diff --git a/src/gl/notes.md b/src/opengl/notes.md
index 3ea0171..3ea0171 100644
--- a/src/gl/notes.md
+++ b/src/opengl/notes.md
diff --git a/src/opengl/setup.c b/src/opengl/setup.c
new file mode 100644
index 0000000..b169660
--- /dev/null
+++ b/src/opengl/setup.c
@@ -0,0 +1,23 @@
+#include <lua.h>
+#include <lauxlib.h>
+#include <glad/glad.h>
+#include "util/util.h"
+#include "bind.h"
+
+
+void setup_gl(lua_State *L, int honey_tbl)
+{
+ struct honey_tbl_t tbl[] = {
+ #define X(name, func) H_FUNC(name, func),
+ GL_FUNCTIONS
+ #undef X
+
+ #define X(name, value) H_INT(name, value),
+ GL_ENUM
+ #undef X
+
+ H_END
+ };
+ create_table(L, tbl);
+ lua_setfield(L, honey_tbl, "gl");
+}
diff --git a/src/gl/shader.c b/src/opengl/shader.c
index d78b1ef..d78b1ef 100644
--- a/src/gl/shader.c
+++ b/src/opengl/shader.c
diff --git a/src/gl/texture.c b/src/opengl/texture.c
index 13b23c0..13b23c0 100644
--- a/src/gl/texture.c
+++ b/src/opengl/texture.c
diff --git a/src/gl/window.c b/src/opengl/window.c
index 46bc2f5..46bc2f5 100644
--- a/src/gl/window.c
+++ b/src/opengl/window.c
diff --git a/src/gl/window.test.c b/src/opengl/window.test.c
index 505c876..505c876 100644
--- a/src/gl/window.test.c
+++ b/src/opengl/window.test.c